首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递函数恢复

传递函数恢复
EN

Ethereum用户
提问于 2022-05-10 13:08:28
回答 3查看 368关注 0票数 1

我刚开始学习稳健性,在使用send()时,我一直被address.transfer()恢复所困。如果使用msg.value,工作正常,但当使用uint256时恢复为address.transfer()。

代码语言:javascript
复制
 // SPDX-License-Identifier: MIT
    pragma solidity >=0.7.0 <0.9.0;
    
    contract test{
        address payable public owner;
    
        constructor(){
            owner=payable(msg.sender);
        }
    
        function getBalance(address _address) public view returns(uint256){
            return _address.balance;
        }
        function send(address payable _address) payable public {
            require(msg.sender.balance>=20000000000000000000,"Not enough token");
            uint256 amount = 20000000000000000000;
            _address.transfer(amount);
        }
    
    }
EN

回答 3

Ethereum用户

发布于 2022-05-11 04:41:34

从代码中可以看出,它的目的是从msg.sender中传输以太。

代码语言:javascript
复制
        require(msg.sender.balance>=20000000000000000000,"Not enough token");
        uint256 amount = 20000000000000000000;
        _address.transfer(amount);

这不可能。合同不能访问另一个帐户的余额。它只能转移自己的余额。

票数 0
EN

Ethereum用户

发布于 2022-05-11 05:05:49

这是因为合同中缺乏资金。如果我使用address.transfer(msg.value),它将从msg.sender转移eth,但如果像上面那样使用address.transfer(金额),则从合同本身转移eth。

票数 0
EN

Ethereum用户

发布于 2022-05-11 08:22:35

这要归功于require(msg.sender.balance>=20000000000000000000,"Not enough token");

function send()将被恢复,如果msg.sender.balance !>= 20 ethers/matic

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

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

复制
相关文章

相似问题

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