Не могу ли я определить экземпляр ERC20 внутри конструктора? - PullRequest
1 голос
/ 27 апреля 2020

Недавно я пытался чеканить Дая по протоколу соединения. Изначально функция выглядела следующим образом ...

IERC20 public underlying;
ICERC20 public cToken;
...

constructor(address _daiAddress, address _cdaiAddress) public payable {
        underlying = IERC20(_daiAddress);
        cToken = ICERC20(_cdaiAddress);
}

function mintCDai(uint _numberOfDaiToSupply) private { 
        require(underlying.approve(address(cToken), _numberOfDaiToSupply), "Failed to approve sending token");
        require(cToken.mint(_numberOfDaiToSupply) == 0, "Failed to mint cToken");
        ...
    }

Однако MetaMask все время говорил мне, что экземпляр будет продолжать работать. В конце концов, после изменения экземпляров токена, которые должны быть определены внутри функции, например,

IERC20 public underlying;
ICERC20 public cToken;
...
function mintCDai(uint _numberOfDaiToSupply) private {     
        underlying = IERC20(0x5592EC0cfb4dbc12D3aB100b257153436a1f0FEa);
        cToken = ICERC20(0x6D7F0754FFeb405d23C51CE938289d4835bE3b14);   
        require(underlying.approve(address(cToken), _numberOfDaiToSupply), "Failed to approve sending token");
        require(cToken.mint(_numberOfDaiToSupply) == 0, "Failed to mint cToken");
        ...
    }

Это позволило транзакции выполнить go до конца. Но разве я не смогу определить Er c в конструкторе, чтобы функции имели к нему доступ?

...