OpenZeppelin2のERC20Pausable解説

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()

# と、すればよい。