В настоящее время я занимаюсь краудсейлом для школы, в котором вымышленные участники могут купить токен. Во время первого раунда участники также получат второй токен, который будет действовать как токен управления.
Внутри моего конструктора краудсейла я развертываю два токена следующим образом:
function Crowdsale() public {
price = 1 ether;
wallet = msg.sender;
dollar = new StandardToken("Dollar", "HWD", 2, 2000000);
vote = new StandardToken("Vote", "HWV", 2, 500000);
StandardToken(dollar).transfer(wallet, 500000);
}
При развертывании контракта на Ropsten с инжектом Web3 через Remix все работает нормально. Я могу легко проверить это, вызвав эту функцию в краудсейл-контракте, который должен вернуть 1 500 000 (поскольку мы отправили 500 тысяч отправителю при создании)
function tokensAvailable() public view returns (uint256) {
return StandardToken(dollar).balanceOf(this);
}
call to Crowdsale.tokensAvailable
[call] from:0xba5116fea48692a505c5e2a898d4c803f0ca5d2a, to:Crowdsale.tokensAvailable(), data:60659...59a92, return:
{
"0": "uint256: 1500000"
}
Однако при развертывании через JavascriptVM я могу вызывать функции только для второго созданного токена, а не для первого. Методы для первого токена всегда возвращают Undefined.
Это потому, что Remix не может обрабатывать несколько токенов в памяти, или что здесь может быть? Я работал над этим проектом 2 недели назад и могу поклясться, что все работало правильно. (Хотя моя память могла меня здесь подвести).
Есть идеи?
Спасибо !
undefined
контракт на краудсейл? Ваш контракт Crowdsale работает с ним напрямую или вы получаете адрес токена и создаете к нему интерфейс через Remix с описанным выше процессом или что-то еще?
Уилджгрифф
dollar
иvote
? Если они имеют типStandardToken
, вам не нужно приводитьdollar
функциюtokensAvailable()
кStandardToken
первому. Например, вы можете заменить строкуtokensAvailable()
наreturn dollar.balanceOf(this)