无法从以太坊本地区块链上的合同中提取金额

Can't withdraw amount from contract on Ethereum local blockchain

我有一个问题困扰了我好几天。这一切都归结为:

我正在为我的本地区块链使用 Ganache (TestRPC) 及其默认测试帐户。 我使用第一个测试帐户连接到 Metamask(在 Chrome)。 (余额 100ETH)。

我正在根据 solidity 文档创建 WithdrawalContract: http://solidity.readthedocs.io/en/develop/common-patterns.html 使用 10ETH。 到现在为止一切都很好。合约创建成功,我的测试账户余额为90ETH,交易列表中合约显示为10ETH

现在我执行 withdraw() 应该会退还我 10ETH 的金额。

Metamask 显示交易成功。

但是我的测试账户没有收到这笔钱。账户余额仍为90ETH

我错过了什么?为什么提款对我不起作用?

PS:我使用 remix.ethereum.org 完成所有这些操作,使用同一个帐户创建和撤销合约。我也用 truffle 尝试过,但我得到了相同的结果。

你可以尝试使用 transfer() 看看

代码看起来像这样

msg.sender.transfer(web3.utils.toWei('10', 'ether'));

msg.sender => 在那个时间点与合约交互的地址,以及需要在该地址上调用 transfer() 时接收资金的地址(在这种情况下是你)

我看了你评论里的视频。这只是 Solidity 网站上的一个简单示例合约,写得不是很好。您必须更加注意代码。 withdraw() 使用 pendingWithdrawals 映射来确定允许调用者从合约中转出多少。只有 becomeRichest() 方法正在设置该映射。构造函数不是。

在不发送任何以太币的情况下部署合约。然后调用 becomeRichest(),这次发送以太币。然后使用withdraw(或者,改进代码)。