Remix

在 REMIX 中使用 ERC20 估算氣體時出錯

  • August 30, 2019

我正在嘗試在 Kovan 測試網上測試製作一些使用 DAI ERC20 代幣的智能合約(kovan 上的 DAI 合約是 0xc4375b7de8af5a38a93548eb8453a498222c4ff2)。我開發了這個非常簡單的契約,旨在:

  • getContractBalance() - DAI 的合約餘額
  • getSenderBalance () - DAI 的發送者余額
  • tranferTokenstoContract( uint _amount ) - 將 _amount DAI 代幣從 Sender 轉移到 Contract

這是我的程式碼:

pragma solidity ^0.5.3;

   // Import OpenZeppelin's ERC20 interface defenition
   import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/IERC20.sol";
   import "https://github.com/OpenZeppelin/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";

   contract Example {
       IERC20 public associatedToken;

   // @param _token is the address of DAI in Kovan -> 0xc4375b7de8af5a38a93548eb8453a498222c4ff2 
       constructor(IERC20 _token) public {
           associatedToken = _token;
       }

       function tranferTokenstoContract( uint256 _ammount) public returns (bool) {
           return associatedToken.transfer(address(this), _ammount);
       }

         function getContractBalance() public view returns (uint256) {
           return associatedToken.balanceOf(address(this));
       }

       function getSenderBalance() public view returns (uint256) {
           return associatedToken.balanceOf(address(msg.sender));
       }

   }

我正在使用帶有元遮罩的注入 Web3,其中有 82 個 DAI 令牌(Kovan 測試網)。每當我打電話getSenderBalance()時,它都能正常工作並按預期返回 82000000000000000000 。雖然當我打電話tranferTokenstoContract()並嘗試向合約發送一些代幣時,我收到“氣體估算錯誤”警告並且我的交易總是失敗。我正在使用 Remix,但我也在 MyEtherWallet 上嘗試過。兩者都不成功。我也試著用氣體四處走動,但我也沒有成功。

我這樣做對嗎?隨意嘗試一下。只需傳入0xc4375b7de8af5a38a93548eb8453a498222c4ff2 建構子,即 Kovan 網路上的 DAI 合約

我將不勝感激任何幫助。

當呼叫associatedToken.transfer(address(this), _ammount)這個交易的呼叫者是你的合約時,它會嘗試將合約的 82 DAI 轉移給自己。要轉移 DAI ,您應該是具有transfer()函式呼叫的交易的呼叫者。您應該將 DAI 的程式碼上傳到 Remix 並使用“地址”按鈕,然後transfer()在 DAI 的合約中呼叫函式,並將您的合約地址作為函式參數傳遞(此外,您可以使用etherscan呼叫 DAI 的函式)。

另一種選擇是使用approve()+transferFrom()功能:

  • 首先,您需要將您的 DAI 批准到您的契約中。因此,合約將能夠代表您使用代幣。
  • 之後,您的合約可以transferFrom()使用您的地址作為from參數呼叫函式並獲取您的代幣。

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