Solidity

在建構子中部署需要 ERC20 對象的合約

  • August 13, 2019

我正在開始一個 ICO 並基於 OpenZeppelin 簽訂契約。我正在嘗試使用 web3.js 部署契約,我的問題是在建構子中我需要傳遞我的令牌的 ERC20 對象。我不知道該怎麼做。我是否需要傳遞令牌或 ABI 的地址或究竟是什麼?我在任何地方都找不到有關此的任何資訊。

這是我的合約建構子:

function CrowdSale(uint256 _hivePerEther, address _wallet, ERC20 _token, uint256 _openingTime, uint256 _closingTime) public {

}

我的問題是如何在使用 web3.js 部署時載入我的令牌並將其傳遞給建構子

是的,使用地址。您的 CrowdSale 合約還需要知道 ERC20 代幣的外觀。因此,要麼將契約粘貼到同一個 CrowdSale.sol 文件中,要麼添加import '/path/to/ERC20.sol到同一個文件中

聲明一個ERC20介面,傳入一個地址,然後就可以使用該介面從該地址聲明一個ERC20代幣。像這樣的東西:

// Standard ERC20 Token Interface
interface ERC20Token {
   function totalSupply() external view returns (uint256 _totalSupply);
   function balanceOf(address _owner) external view returns (uint256 _balance);
   function transfer(address _to, uint256 _value) external returns (bool _success);
   function transferFrom(address _from, address _to, uint256 _value) external returns (bool _success);
   function approve(address _spender, uint256 _value) external returns (bool _success);
   function allowance(address _owner, address _spender) external view returns (uint256 _remaining);

   event Transfer(address indexed _from, address indexed _to, uint256 _value);
   event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract CrowdSale {

   ERC20Token token;

   constructor (uint256 _hivePerEther, address _wallet, address _token, uint256 _openingTime, uint256 _closingTime) public {
       token = ERC20Token(_token);
       ...
   }

   function getTokenBalance(address _addr) external view returns (uint256 _balance) {
        _balance = token.balanceOf(_addr);
   }
}

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