我刚开始学习稳健性,在使用send()时,我一直被address.transfer()恢复所困。如果使用msg.value,工作正常,但当使用uint256时恢复为address.transfer()。
// 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);
}
}
发布于 2022-05-11 04:41:34
从代码中可以看出,它的目的是从msg.sender中传输以太。
require(msg.sender.balance>=20000000000000000000,"Not enough token");
uint256 amount = 20000000000000000000;
_address.transfer(amount);这不可能。合同不能访问另一个帐户的余额。它只能转移自己的余额。
发布于 2022-05-11 05:05:49
这是因为合同中缺乏资金。如果我使用address.transfer(msg.value),它将从msg.sender转移eth,但如果像上面那样使用address.transfer(金额),则从合同本身转移eth。
发布于 2022-05-11 08:22:35
这要归功于require(msg.sender.balance>=20000000000000000000,"Not enough token");
function send()将被恢复,如果msg.sender.balance !>= 20 ethers/matic
https://ethereum.stackexchange.com/questions/127938
复制相似问题