Solidity
傳遞函式恢復
我剛開始學習solidity,並且在使用send()時遇到了address.transfer()Reverts。如果我使用 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); } }
從程式碼看來,意圖是從
msg.sender
.require(msg.sender.balance>=20000000000000000000,"Not enough token"); uint256 amount = 20000000000000000000; _address.transfer(amount);
那是不可能的。一個合約不能訪問另一個賬戶的餘額。它只能轉移自己的餘額。
這是因為契約中資金不足。似乎如果我使用 address.transfer(msg.value) 它會從 msg.sender 傳輸 eth,但是如果我使用 address.transfer(amount) 就像上面一樣,它會從合約本身傳輸 eth