pragma solidity >=0.7.0 <0.9.0;
contract StructMapping {
mapping(address => uint) public balanceReceived;
function getBalance() public view returns(uint) {
return address(this).balance;
}
function sendMoney() public payable {
balanceReceived[msg.sender] += msg.value;
}
function withdrawAllMoney(address payable _to) public {
uint balanceToSend = balanceReceived[msg.sender];
balanceReceived[msg.sender] = 0;
_to.transfer(balanceToSend);
}
}要求:混合web ide,使用上述代码在混合中打开的稳固文件,两个元询问钱包。
复制步骤:
当我尝试执行第5步时,我从钱包b(位于另一台机器上)中元问询中的事务失败了,说没有足够的气体。如何从这个远程钱包发送,并让它与合同互动,我假设它只是发送它就像一个钱包地址和超时。
发布于 2022-01-16 09:43:22
当你把钱寄给一个聪明的合同,你将不得不调用一个应付款函数。这是不可能直接通过Metamask,因为Metamask只是发送一个事务没有任何数据,除非特别要求通过其API这样做。为了寄钱,你可以把你的货币兑换成钱包B,并调用合同的sendMoney()函数以及一些电子邮件。
如果您希望您的智能契约接受金钱而不通过特定函数调用,则可以定义如下的receive函数。
receive() external payable {
sendMoney();
}这告诉合同接受付款(那些作为正常交易发送如您所提到的)。这是一个安全的特点,坚固,以保障意外发送ETH给可能没有退出机制的smart合同。
https://ethereum.stackexchange.com/questions/119037
复制相似问题