关于openzeppelin中的MinterRole合同的问题

时间:2018-12-26 03:04:21

标签: ethereum solidity erc20 open-zeppelin

我正在使用openzeppelin创建ICO合同。我在这里担心MinterRole。开发令牌合约后,我使用“ addMinter”功能将销售合约添加为铸币机。

问题

销售结束后

  1. 我看不到删除合同地址的方法。我看到“ renounceMinter”将仅删除正在调用此方法的人员。 我了解即使我在那个时候(即在交易结束之后)删除(或不删除)合约地址作为铸造者,也将以这样的方式定义销售合约:即使我们将合同地址保留在铸币商列表中也安全吗?

  2. 为什么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);
  }
}

0 个答案:

没有答案