我遇到了一个阻碍我好几天的问题。这一切都归结为:
我使用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
,但我得到了相同的结果。
答案 0 :(得分:0)
你可以尝试使用transfer()并查看
代码看起来像这样
msg.sender.transfer(web3.utils.toWei('10','ether'));
msg.sender
=>在那个时间点与合同交互的地址,以及需要接收货币的地址,因为transfer()在该地址上被调用(在这种情况下是你的)
答案 1 :(得分:0)
我查看了您评论中的视频。这只是Solidity网站上的一个简单的示例合同,并没有写得很好。你必须密切关注代码。 withdraw()
使用pendingWithdrawals
映射来确定允许调用者转出合同的数量。只有becomeRichest()
方法正在设置该映射。构造函数不是。
在不发送任何以太的情况下部署合同。然后拨打becomeRichest()
,这次发送到以太网。然后使用withdraw
(或改进代码)。