Remix
在 REMIX 中使用 ERC20 估算氣體時出錯
我正在嘗試在 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
參數呼叫函式並獲取您的代幣。