Можно ли развернуть контракт Token (T) и контракт CrowdSale (S) отдельно и по-прежнему иметь доступ к защищенным методам модификатора (T) из (S).
Код (Т)
contract Token {
function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) {
totalSupply = totalSupply.add(_amount);
balances[_to] = balances[_to].add(_amount);
Mint(_to, _amount);
return true;
}
Код (С)
contract SellToken {
TokenInstance instance;
function SellToken(address _address) {
instance = TokenInstance(_address);
}
function () payable {
uint256 weiAmount = msg.value;
// calculate token amount to be created
uint256 tokens = weiAmount.mul(rate);
// update state
weiRaised = weiRaised.add(weiAmount);
instance.mint(beneficiary, tokens);
}
}
По какой-то причине, когда я пытаюсь отправить эфир на (B), я получаю следующую ошибку
РЕДАКТИРОВАТЬ: я также попробовал метод использования абстрактного интерфейса, но, похоже, ему тоже не повезло (ссылка: Сообщение об обмене стеками )
Абстрактный интерфейс
contract TokenAbstractInterface {
function mint(address _to, uint256 _amount) returns (bool);
function finishMinting() returns (bool);
}
Модифицированный код (S)
contract SellToken {
TokenAbstractInterface instance;
function SellToken(address _address) {
instance = TokenAbstractInterface(_address);
}
function () payable {
uint256 weiAmount = msg.value;
// calculate token amount to be created
uint256 tokens = weiAmount.mul(rate);
// update state
weiRaised = weiRaised.add(weiAmount);
instance.mint(beneficiary, tokens);
}
}
Без полного кода трудно быть уверенным. Но функция mint
в Token как onlyOwner
модификатор.
function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool)
Обычно это означает, что только владелец токена может вызывать mint
функцию, если хотите.
Если вы хотите создать токен из SellToken, вы должны установить SellToken в качестве владельца контракта Token.
Сэм