我正在使用openzeppelin创建ICO合同。我在这里担心MinterRole。开发令牌合约后,我使用“ addMinter”功能将销售合约添加为铸币机。
问题
销售结束后
我看不到删除合同地址的方法。我看到“ renounceMinter”将仅删除正在调用此方法的人员。 我了解即使我在那个时候(即在交易结束之后)删除(或不删除)合约地址作为铸造者,也将以这样的方式定义销售合约:即使我们将合同地址保留在铸币商列表中也安全吗?
为什么openzeppelin使用“ renounceMinter”功能设计了“ MinterRole”合同,该合同只能删除调用该合同的人,而“ addMinter”功能也可以为其他人做到这一点?
< / li>代码
样品人群
contract SampleCrowdsale is FinalizableCrowdsale, MintedCrowdsale
造币厂
contract MintedCrowdsale is Crowdsale {
constructor() internal {}
function _deliverTokens(
address beneficiary,
uint256 tokenAmount
)
internal
{
// Potentially dangerous assumption about the type of the token.
require(
ERC20Mintable(address(token())).mint(beneficiary, tokenAmount));
}
}
ERC20Mintable
contract ERC20Mintable is ERC20, MinterRole
MinterRole
pragma solidity ^0.4.24;
import "../Roles.sol";
contract MinterRole {
using Roles for Roles.Role;
event MinterAdded(address indexed account);
event MinterRemoved(address indexed account);
Roles.Role private minters;
constructor() internal {
_addMinter(msg.sender);
}
modifier onlyMinter() {
require(isMinter(msg.sender));
_;
}
function isMinter(address account) public view returns (bool) {
return minters.has(account);
}
function addMinter(address account) public onlyMinter {
_addMinter(account);
}
function renounceMinter() public {
_removeMinter(msg.sender);
}
function _addMinter(address account) internal {
minters.add(account);
emit MinterAdded(account);
}
function _removeMinter(address account) internal {
minters.remove(account);
emit MinterRemoved(account);
}
}