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

时间:2018-01-23 22:50:52

标签: blockchain ethereum solidity contract ether

我遇到了一个阻碍我好几天的问题。这一切都归结为:

我使用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,但我得到了相同的结果。

2 个答案:

答案 0 :(得分:0)

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

代码看起来像这样

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

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

答案 1 :(得分:0)

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

在不发送任何以太的情况下部署合同。然后拨打becomeRichest(),这次发送到以太网。然后使用withdraw(或改进代码)。