假设我有一个令牌智能合约,其中包含一系列功能和修改器,以及另一个众包智能合约。在我的crowdsale智能合约中引用令牌智能合约允许我调用令牌功能。但是......我不能使用令牌智能合约中的修饰符。
contract Crowdsale is Token {
token private _token;
constructor (ERC20 token) public {
require(address(token) != address(0));
_token = token;
}
// this one works
function test(address account) public view returns (uint256) {
_token.functionFromToken(account);
}
// This does not work because of modifierInToken
function test2(address account) public modifierInToken {
}
}
这是正常的吗?如果是这样,有没有解决方法?
我目前的解决方法如下: - 在我的令牌智能合约中,我添加了一个“中间”功能。该函数在我的令牌中的修饰符中直接调用。 - 在我的众智智能合约中,我复制了修饰符,在其中调用了中间函数。
这样,每当我想要更新来自我原始智能合约的所有修改器时,我所要做的就是编辑“中间”功能。
这种方法的默认设置是需要将“中间函数”设置为公共,以便从任何其他智能合约中调用,因此请注意选择该方法。