Solidity

傳遞函式恢復

  • May 11, 2022

我剛開始學習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

引用自:https://ethereum.stackexchange.com/questions/127938