首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个元钱包之间发送eth到已部署的合同

在两个元钱包之间发送eth到已部署的合同
EN

Ethereum用户
提问于 2022-01-15 23:27:50
回答 1查看 389关注 0票数 0
代码语言:javascript
复制
 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,使用上述代码在混合中打开的稳固文件,两个元询问钱包。

复制步骤:

  1. 保存文件并通过混合打开
  2. 注入web3 (连接元问题钱包A)
  3. 部署合同
  4. 使用混合交互功能从钱包A发送到已部署的合同
  5. 复制合同地址并从元问题钱包B发送

当我尝试执行第5步时,我从钱包b(位于另一台机器上)中元问询中的事务失败了,说没有足够的气体。如何从这个远程钱包发送,并让它与合同互动,我假设它只是发送它就像一个钱包地址和超时。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-16 09:43:22

当你把钱寄给一个聪明的合同,你将不得不调用一个应付款函数。这是不可能直接通过Metamask,因为Metamask只是发送一个事务没有任何数据,除非特别要求通过其API这样做。为了寄钱,你可以把你的货币兑换成钱包B,并调用合同的sendMoney()函数以及一些电子邮件。

如果您希望您的智能契约接受金钱而不通过特定函数调用,则可以定义如下的receive函数。

代码语言:javascript
复制
receive() external payable {
    sendMoney();
}

这告诉合同接受付款(那些作为正常交易发送如您所提到的)。这是一个安全的特点,坚固,以保障意外发送ETH给可能没有退出机制的smart合同。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/119037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档