OpenZeppelinのバージョン2系でERC20を実装するとき、ERC20Cappedを継承すると、一時的にトークンのやりとりができないようにする(停止する)ことができます。
pragma solidity ^0.4.25;
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol";
contract NeruneCoin is ERC20, ERC20Burnable, ERC20Detailed, ERC20Mintable, ERC20Pausable {
string private _name = "NeruneCoin";
string private _symbol = "NRNC";
uint8 private _decimals = 18;
address account = msg.sender;
uint value = 1000;
constructor()
ERC20Detailed( _name, _symbol, _decimals)
ERC20Mintable()
ERC20Burnable()
ERC20Pausable()
public {
_mint(account, value);
}
}
truffle(development)> c = NeruneCoin.at(NeruneCoin.address)
truffle(development)> c.transfer(web3.eth.accounts[1], 1000)
# OK.コントラクト配置直後は停止されていないので、問題なくtransferできる。
truffle(development)> c.pause()
# これで、NeruneCoinのやりとりが一時的に不可となる。
# なので、
truffle(development)> c.transfer(web3.eth.accounts[1], 1000)
# ERROR.
# 一時停止を解除するには、
truffle(development)> c.pause()
# と、すればよい。