ETH Price: $2,427.14 (-3.09%)

Token

NianLun Time Token (NTT)
 

Overview

Max Total Supply

33,614,211.8668 NTT

Holders

187

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
1,443.25 NTT

Value
$0.00
0xc271b6cf4a9c8e30c2f42e32e59902e9d0db5c1a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Proxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-02-28
*/

pragma solidity ^0.4.21;

contract LockRequestable {

    uint256 public lockRequestCount;

    function LockRequestable() public {
        lockRequestCount = 0;
    }

    function generateLockId() internal returns (bytes32 lockId) {
        return keccak256(block.blockhash(block.number - 1), address(this), ++lockRequestCount);
    }
}

contract CustodianUpgradeable is LockRequestable {

    struct CustodianChangeRequest {
        address proposedNew;
    }

    address public custodian;

    mapping(bytes32 => CustodianChangeRequest) public custodianChangeReqs;

    function CustodianUpgradeable(
        address _custodian
    )
    LockRequestable()
    public
    {
        custodian = _custodian;
    }

    modifier onlyCustodian {
        require(msg.sender == custodian);
        _;
    }

    function requestCustodianChange(address _proposedCustodian) public returns (bytes32 lockId) {
        require(_proposedCustodian != address(0));

        lockId = generateLockId();

        custodianChangeReqs[lockId] = CustodianChangeRequest({
            proposedNew : _proposedCustodian
            });

        emit CustodianChangeRequested(lockId, msg.sender, _proposedCustodian);
    }

    function confirmCustodianChange(bytes32 _lockId) public onlyCustodian {
        custodian = getCustodianChangeReq(_lockId);
        delete custodianChangeReqs[_lockId];
        emit CustodianChangeConfirmed(_lockId, custodian);
    }

    function getCustodianChangeReq(bytes32 _lockId) private view returns (address _proposedNew) {
        CustodianChangeRequest storage changeRequest = custodianChangeReqs[_lockId];
        require(changeRequest.proposedNew != 0);
        return changeRequest.proposedNew;
    }

    event CustodianChangeRequested(
        bytes32 _lockId,
        address _msgSender,
        address _proposedCustodian
    );

    event CustodianChangeConfirmed(bytes32 _lockId, address _newCustodian);
}

contract ERC20ImplUpgradeable is CustodianUpgradeable {

    struct ImplChangeRequest {
        address proposedNew;
    }

    ERC20Impl public erc20Impl;

    mapping(bytes32 => ImplChangeRequest) public implChangeReqs;

    function ERC20ImplUpgradeable(address _custodian) CustodianUpgradeable(_custodian) public {
        erc20Impl = ERC20Impl(0x0);
    }

    modifier onlyImpl {
        require(msg.sender == address(erc20Impl));
        _;
    }

    function requestImplChange(address _proposedImpl) public returns (bytes32 lockId) {
        require(_proposedImpl != address(0));
        lockId = generateLockId();
        implChangeReqs[lockId] = ImplChangeRequest({
            proposedNew : _proposedImpl
            });
        emit ImplChangeRequested(lockId, msg.sender, _proposedImpl);
    }

    function confirmImplChange(bytes32 _lockId) public onlyCustodian {
        erc20Impl = getImplChangeReq(_lockId);
        delete implChangeReqs[_lockId];
        emit ImplChangeConfirmed(_lockId, address(erc20Impl));
    }

    function getImplChangeReq(bytes32 _lockId) private view returns (ERC20Impl _proposedNew) {
        ImplChangeRequest storage changeRequest = implChangeReqs[_lockId];
        require(changeRequest.proposedNew != address(0));
        return ERC20Impl(changeRequest.proposedNew);
    }

    event ImplChangeRequested(
        bytes32 _lockId,
        address _msgSender,
        address _proposedImpl
    );

    event ImplChangeConfirmed(bytes32 _lockId, address _newImpl);
}


contract NianLunServiceUpgradeable is CustodianUpgradeable {

    struct NianLunServiceChangeRequest {
        address proposedNew;
    }

    NianLunService public nianLunService;

    mapping(bytes32 => NianLunServiceChangeRequest) public nianLunServiceChangeReqs;

    function NianLunServiceUpgradeable(address _custodian) CustodianUpgradeable(_custodian) public {
        nianLunService = NianLunService(0x0);
    }

    modifier onlyNianLunService {
        require(msg.sender == address(nianLunService));
        _;
    }

    function requestNianLunServiceChange(address _proposedNianLunService) public returns (bytes32 lockId) {
        require(_proposedNianLunService != address(0));
        lockId = generateLockId();
        nianLunServiceChangeReqs[lockId] = NianLunServiceChangeRequest({
            proposedNew : _proposedNianLunService
            });
        emit NianLunServiceChangeRequested(lockId, msg.sender, _proposedNianLunService);
    }

    function confirmNianLunServiceChange(bytes32 _lockId) public onlyCustodian {
        nianLunService = getNianLunServiceChangeReq(_lockId);
        delete nianLunServiceChangeReqs[_lockId];
        emit NianLunServiceChangeConfirmed(_lockId, address(nianLunService));
    }

    function getNianLunServiceChangeReq(bytes32 _lockId) private view returns (NianLunService _proposedNew) {
        NianLunServiceChangeRequest storage changeRequest = nianLunServiceChangeReqs[_lockId];
        require(changeRequest.proposedNew != address(0));
        return NianLunService(changeRequest.proposedNew);
    }

    event NianLunServiceChangeRequested(
        bytes32 _lockId,
        address _msgSender,
        address _proposedNianLunService
    );

    event NianLunServiceChangeConfirmed(bytes32 _lockId, address _newNianLunService);
}

contract ERC20Interface {
    // METHODS
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#totalsupply
    function totalSupply() public view returns (uint256);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#balanceof
    function balanceOf(address _owner) public view returns (uint256 balance);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer
    function transfer(address _to, uint256 _value) public returns (bool success);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transferfrom
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve
    function approve(address _spender, uint256 _value) public returns (bool success);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#allowance
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    // EVENTS
    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer-1
    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approval
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

contract ERC20Proxy is ERC20Interface, ERC20ImplUpgradeable, NianLunServiceUpgradeable {

    string public name;

    string public symbol;

    uint8 public decimals;

    function ERC20Proxy(
        string _name,
        string _symbol,
        uint8 _decimals,
        address _custodian
    )
    ERC20ImplUpgradeable(_custodian) NianLunServiceUpgradeable(_custodian)
    public
    {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
    }

    modifier onlyPermitted() {
        require(
            msg.sender == address(nianLunService) ||
            msg.sender == address(erc20Impl)
        );
        _;
    }

    function totalSupply() public view returns (uint256) {
        return erc20Impl.totalSupply();
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return erc20Impl.balanceOf(_owner);
    }

    function emitTransfer(address _from, address _to, uint256 _value) public onlyPermitted {
        emit Transfer(_from, _to, _value);
    }

    function transfer(address _to, uint256 _value) public returns (bool success) {
        return erc20Impl.transferWithSender(msg.sender, _to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        return erc20Impl.transferFromWithSender(msg.sender, _from, _to, _value);
    }

    function emitApproval(address _owner, address _spender, uint256 _value) public onlyImpl {
        emit Approval(_owner, _spender, _value);
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        return erc20Impl.approveWithSender(msg.sender, _spender, _value);
    }

    function increaseApproval(address _spender, uint256 _addedValue) public returns (bool success) {
        return erc20Impl.increaseApprovalWithSender(msg.sender, _spender, _addedValue);
    }

    function decreaseApproval(address _spender, uint256 _subtractedValue) public returns (bool success) {
        return erc20Impl.decreaseApprovalWithSender(msg.sender, _spender, _subtractedValue);
    }

    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return erc20Impl.allowance(_owner, _spender);
    }
}

contract ERC20Impl {

    ERC20Proxy public erc20Proxy;

    ERC20Store public erc20Store;

    function ERC20Impl(
        address _erc20Proxy,
        address _erc20Store
    )
    public
    {
        erc20Proxy = ERC20Proxy(_erc20Proxy);
        erc20Store = ERC20Store(_erc20Store);
    }

    modifier onlyProxy {
        require(msg.sender == address(erc20Proxy));
        _;
    }

    modifier onlyPayloadSize(uint size) {
        assert(msg.data.length == size + 4);
        _;
    }

    function approveWithSender(
        address _sender,
        address _spender,
        uint256 _value
    )
    public
    onlyProxy
    returns (bool success)
    {
        require(_spender != address(0));
        // disallow unspendable approvals
        erc20Store.setAllowance(_sender, _spender, _value);
        erc20Proxy.emitApproval(_sender, _spender, _value);
        return true;
    }

    function increaseApprovalWithSender(
        address _sender,
        address _spender,
        uint256 _addedValue
    )
    public
    onlyProxy
    returns (bool success)
    {
        require(_spender != address(0));
        // disallow unspendable approvals
        uint256 currentAllowance = erc20Store.allowed(_sender, _spender);
        uint256 newAllowance = currentAllowance + _addedValue;

        require(newAllowance >= currentAllowance);

        erc20Store.setAllowance(_sender, _spender, newAllowance);
        erc20Proxy.emitApproval(_sender, _spender, newAllowance);
        return true;
    }

    function decreaseApprovalWithSender(
        address _sender,
        address _spender,
        uint256 _subtractedValue
    )
    public
    onlyProxy
    returns (bool success)
    {
        require(_spender != address(0));
        // disallow unspendable approvals
        uint256 currentAllowance = erc20Store.allowed(_sender, _spender);
        uint256 newAllowance = currentAllowance - _subtractedValue;

        require(newAllowance <= currentAllowance);

        erc20Store.setAllowance(_sender, _spender, newAllowance);
        erc20Proxy.emitApproval(_sender, _spender, newAllowance);
        return true;
    }

    function transferFromWithSender(
        address _sender,
        address _from,
        address _to,
        uint256 _value
    )
    public
    onlyProxy onlyPayloadSize(4 * 32)
    returns (bool success)
    {
        require(_to != address(0));

        uint256 balanceOfFrom = erc20Store.balances(_from);
        require(_value <= balanceOfFrom);

        uint256 senderAllowance = erc20Store.allowed(_from, _sender);
        require(_value <= senderAllowance);

        erc20Store.setBalance(_from, balanceOfFrom - _value);
        erc20Store.addBalance(_to, _value);
        erc20Store.setAllowance(_from, _sender, senderAllowance - _value);
        erc20Proxy.emitTransfer(_from, _to, _value);

        return true;
    }

    function transferWithSender(
        address _sender,
        address _to,
        uint256 _value
    )
    public onlyProxy onlyPayloadSize(3 * 32)
    returns (bool success)
    {
        require(_to != address(0));

        uint256 balanceOfSender = erc20Store.balances(_sender);
        require(_value <= balanceOfSender);

        erc20Store.setBalance(_sender, balanceOfSender - _value);
        erc20Store.addBalance(_to, _value);

        erc20Proxy.emitTransfer(_sender, _to, _value);

        return true;
    }

    function totalSupply() public view returns (uint256) {
        return erc20Store.totalSupply();
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return erc20Store.balances(_owner);
    }

    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return erc20Store.allowed(_owner, _spender);
    }

}

contract ERC20Store is ERC20ImplUpgradeable, NianLunServiceUpgradeable {

    uint256 public totalSupply;
    uint256 public createDate;

    address public foundation;
    address public team;
    address public partner;
    address public transit;

    mapping(address => uint256) public balances;

    mapping(address => mapping(address => uint256)) public allowed;

    mapping(address => uint256) public availableMap;

    function ERC20Store(address _custodian, address _foundation, address _team, address _partner, address _transit)
    ERC20ImplUpgradeable(_custodian) NianLunServiceUpgradeable(_custodian)
    public
    {
        createDate = now;
        foundation = _foundation;
        partner = _partner;
        team = _team;
        transit = _transit;
        availableMap[foundation] = 15120000000000000;
        availableMap[partner] = 3360000000000000;
        availableMap[team] = 2520000000000000;
    }

    modifier onlyPermitted
    {
        require(
            msg.sender == address(nianLunService) ||
            msg.sender == address(erc20Impl)
        );
        _;
    }

    function setTotalSupply(uint256 _newTotalSupply)
    public onlyPermitted
    {
        totalSupply = _newTotalSupply;
    }

    function setAllowance(address _owner, address _spender, uint256 _value)
    public onlyImpl
    {
        allowed[_owner][_spender] = _value;
    }

    function setBalance(address _owner, uint256 _newBalance)
    public onlyPermitted
    {
        balances[_owner] = _newBalance;
    }

    function addBalance(address _owner, uint256 _balanceIncrease)
    public onlyPermitted
    {
        balances[_owner] = balances[_owner] + _balanceIncrease;
    }

    function reduceAvailable(address _owner, uint256 _value)
    public onlyNianLunService
    {
        availableMap[_owner] = availableMap[_owner] - _value;
    }

}

contract NianLunService is LockRequestable, CustodianUpgradeable {

    struct PendingService {
        address sender;
        uint256 value;
        bool isPrint;
    }

    ERC20Proxy public erc20Proxy;

    ERC20Store public erc20Store;

    mapping(address => bool) public primaryBank;

    mapping(bytes32 => PendingService) public pendingServiceMap;

    function NianLunService(address _erc20Proxy, address _erc20Store, address _custodian)
    CustodianUpgradeable(_custodian)
    public
    {
        erc20Proxy = ERC20Proxy(_erc20Proxy);
        erc20Store = ERC20Store(_erc20Store);
    }

    modifier onlyPrimary
    {
        require(primaryBank[address(msg.sender)]);
        _;
    }

    modifier onlyPayloadSize(uint size) {
        assert(msg.data.length == size + 4);
        _;
    }

    function addPrimary(address _newPrimary)
    public onlyCustodian
    {
        primaryBank[_newPrimary] = true;
        emit PrimaryChanged(_newPrimary, true);
    }

    function removePrimary(address _removePrimary)
    public onlyCustodian
    {
        delete primaryBank[_removePrimary];
        emit PrimaryChanged(_removePrimary, false);
    }

    function authTransfer(address _from, address _to, uint256 _value)
    public onlyPrimary onlyPayloadSize(3 * 32)
    returns (bool success)
    {
        require(_to != address(0));
        uint256 balanceOfFrom = erc20Store.balances(_from);
        require(_value <= balanceOfFrom);

        erc20Store.setBalance(_from, balanceOfFrom - _value);
        erc20Store.addBalance(_to, _value);

        erc20Proxy.emitTransfer(_from, _to, _value);
        return true;
    }

    function batchPublishService(address[] _senders, uint256[] _values, bool[] _isPrints)
    public onlyPrimary
    returns (bool success)
    {
        require(_senders.length == _values.length);
        require(_isPrints.length == _values.length);

        uint256 numPublish = _senders.length;
        for (uint256 i = 0; i < numPublish; i++) {
            publishService(_senders[i], _values[i], _isPrints[i]);
        }
        return true;
    }

    function publishService(address _sender, uint256 _value, bool _isPrint)
    public onlyPrimary onlyPayloadSize(3 * 32)
    {
        require(_sender != address(0));

        bytes32 lockId = generateLockId();

        pendingServiceMap[lockId] = PendingService({
            sender : _sender,
            value : _value,
            isPrint : _isPrint
            });

        if (_isPrint) {
            // print value to transit;
            erc20Store.setTotalSupply(erc20Store.totalSupply() + _value);
            erc20Proxy.emitTransfer(address(0), erc20Store.transit(), _value);
        } else {
            // transfer value from sender to transit
            uint256 balanceOfSender = erc20Store.balances(_sender);
            if (_value > balanceOfSender) {
                delete pendingServiceMap[lockId];
                emit ServicePublished(lockId, _sender, _value, false);
                return;
            }
            erc20Store.setBalance(_sender, balanceOfSender - _value);
            erc20Proxy.emitTransfer(_sender, erc20Store.transit(), _value);
        }
        erc20Store.addBalance(erc20Store.transit(), _value);
        emit ServicePublished(lockId, _sender, _value, true);
    }

    function batchConfirmService(bytes32[] _lockIds, uint256[] _values, address[] _tos)
    public onlyPrimary
    returns (bool result)
    {
        require(_lockIds.length == _values.length);
        require(_lockIds.length == _tos.length);

        uint256 numConfirms = _lockIds.length;
        for (uint256 i = 0; i < numConfirms; i++) {
            confirmService(_lockIds[i], _values[i], _tos[i]);
        }
        return true;
    }

    function confirmService(bytes32 _lockId, uint256 _value, address _to)
    public onlyPrimary
    {
        PendingService storage service = pendingServiceMap[_lockId];

        address _sender = service.sender;
        uint256 _availableValue = service.value;
        bool _isPrint = service.isPrint;

        if (_value > _availableValue) {
            emit ServiceConfirmed(_lockId, _sender, _to, _value, false);
            return;
        }

        uint256 _restValue = _availableValue - _value;

        if (_restValue == 0) {
            delete pendingServiceMap[_lockId];
        } else {
            service.value = _restValue;
        }

        if (_isPrint) {
            releaseFoundation(_value);
        }

        uint256 balanceOfTransit = erc20Store.balances(erc20Store.transit());
        erc20Store.setBalance(erc20Store.transit(), balanceOfTransit - _value);
        erc20Store.addBalance(_to, _value);
        erc20Proxy.emitTransfer(erc20Store.transit(), _to, _value);
        emit ServiceConfirmed(_lockId, _sender, _to, _value, true);
    }

    function releaseFoundation(uint256 _value)
    private
    {
        uint256 foundationAvailable = erc20Store.availableMap(erc20Store.foundation());
        if (foundationAvailable <= 0) {
            return;
        }
        if (foundationAvailable < _value) {
            _value = foundationAvailable;
        }
        erc20Store.addBalance(erc20Store.foundation(), _value);
        erc20Store.setTotalSupply(erc20Store.totalSupply() + _value);
        erc20Store.reduceAvailable(erc20Store.foundation(), _value);
        erc20Proxy.emitTransfer(address(0), erc20Store.foundation(), _value);
    }

    function batchCancelService(bytes32[] _lockIds)
    public onlyPrimary
    returns (bool result)
    {
        uint256 numCancels = _lockIds.length;
        for (uint256 i = 0; i < numCancels; i++) {
            cancelService(_lockIds[i]);
        }
        return true;
    }

    function cancelService(bytes32 _lockId)
    public onlyPrimary
    {
        PendingService storage service = pendingServiceMap[_lockId];
        address _sender = service.sender;
        uint256 _value = service.value;
        bool _isPrint = service.isPrint;

        delete pendingServiceMap[_lockId];

        if (_isPrint) {
            // burn
            erc20Store.setTotalSupply(erc20Store.totalSupply() - _value);
            erc20Proxy.emitTransfer(erc20Store.transit(), address(0), _value);
        } else {
            // send back
            erc20Store.addBalance(_sender, _value);
            erc20Proxy.emitTransfer(erc20Store.transit(), _sender, _value);
        }
        uint256 balanceOfTransit = erc20Store.balances(erc20Store.transit());
        erc20Store.setBalance(erc20Store.transit(), balanceOfTransit - _value);
        emit ServiceCanceled(_lockId, _sender, _value);
    }

    function queryService(bytes32 _lockId)
    public view
    returns (address _sender, uint256 _value, bool _isPrint)
    {
        PendingService storage service = pendingServiceMap[_lockId];
        _sender = service.sender;
        _value = service.value;
        _isPrint = service.isPrint;
    }

    function releaseTeam()
    public
    returns (bool success)
    {
        uint256 teamAvailable = erc20Store.availableMap(erc20Store.team());
        if (teamAvailable > 0 && now > erc20Store.createDate() + 3 * 1 years) {
            erc20Store.addBalance(erc20Store.team(), teamAvailable);
            erc20Store.setTotalSupply(erc20Store.totalSupply() + teamAvailable);
            erc20Store.reduceAvailable(erc20Store.team(), teamAvailable);
            erc20Proxy.emitTransfer(address(0), erc20Store.team(), teamAvailable);
            return true;
        }
        return false;
    }

    function releasePartner()
    public
    returns (bool success)
    {
        uint256 partnerAvailable = erc20Store.availableMap(erc20Store.partner());
        if (partnerAvailable > 0) {
            erc20Store.addBalance(erc20Store.partner(), partnerAvailable);
            erc20Store.setTotalSupply(erc20Store.totalSupply() + partnerAvailable);
            erc20Store.reduceAvailable(erc20Store.partner(), partnerAvailable);
            erc20Proxy.emitTransfer(address(0), erc20Store.partner(), partnerAvailable);
            return true;
        }
        return false;
    }

    event ServicePublished(bytes32 _lockId, address _sender, uint256 _value, bool _result);

    event ServiceConfirmed(bytes32 _lockId, address _sender, address _to, uint256 _value, bool _result);

    event ServiceCanceled(bytes32 _lockId, address _sender, uint256 _value);

    event PrimaryChanged(address _primary, bool opt);

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_proposedCustodian","type":"address"}],"name":"requestCustodianChange","outputs":[{"name":"lockId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"custodian","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockId","type":"bytes32"}],"name":"confirmCustodianChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"erc20Impl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockId","type":"bytes32"}],"name":"confirmNianLunServiceChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_proposedImpl","type":"address"}],"name":"requestImplChange","outputs":[{"name":"lockId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"emitApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockId","type":"bytes32"}],"name":"confirmImplChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"nianLunServiceChangeReqs","outputs":[{"name":"proposedNew","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nianLunService","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"implChangeReqs","outputs":[{"name":"proposedNew","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedNianLunService","type":"address"}],"name":"requestNianLunServiceChange","outputs":[{"name":"lockId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockRequestCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"custodianChangeReqs","outputs":[{"name":"proposedNew","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"},{"name":"_custodian","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_msgSender","type":"address"},{"indexed":false,"name":"_proposedNianLunService","type":"address"}],"name":"NianLunServiceChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_newNianLunService","type":"address"}],"name":"NianLunServiceChangeConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_msgSender","type":"address"},{"indexed":false,"name":"_proposedImpl","type":"address"}],"name":"ImplChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_newImpl","type":"address"}],"name":"ImplChangeConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_msgSender","type":"address"},{"indexed":false,"name":"_proposedCustodian","type":"address"}],"name":"CustodianChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_newCustodian","type":"address"}],"name":"CustodianChangeConfirmed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040523480156200001157600080fd5b50604051620012363803806200123683398101604090815281516020808401519284015160608501516000805560018054600160a060020a038316600160a060020a03199182161790915560038054821690556005805490911690559285018051909594909401939092916200008d91600791870190620000c2565b508251620000a3906008906020860190620000c2565b50506009805460ff191660ff9290921691909117905550620001679050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010557805160ff191683800117855562000135565b8280016001018555821562000135579182015b828111156200013557825182559160200191906001019062000118565b506200014392915062000147565b5090565b6200016491905b808211156200014357600081556001016200014e565b90565b6110bf80620001776000396000f3006080604052600436106101535763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610158578063095ea7b3146101e257806315b210821461021a57806318160ddd1461024d57806323b872dd1461026257806323de66511461028c578063313ce567146102b8578063375b74c3146102e35780633a8343ee146103145780633c389cc41461032c578063485b32e61461034157806348f9e246146103595780635687f2b81461037a57806366188463146103a457806370a08231146103c85780638181b029146103e95780638a6da0611461040157806393aa4e4e1461041957806395d89b411461042e578063a9059cbb14610443578063b508069b14610467578063bcc9534f1461047f578063cb81fecf146104a0578063cf6e4488146104b5578063d73dd623146104cd578063dd62ed3e146104f1575b600080fd5b34801561016457600080fd5b5061016d610518565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a757818101518382015260200161018f565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610206600160a060020a03600435166024356105a6565b604080519115158252519081900360200190f35b34801561022657600080fd5b5061023b600160a060020a0360043516610651565b60408051918252519081900360200190f35b34801561025957600080fd5b5061023b610704565b34801561026e57600080fd5b50610206600160a060020a0360043581169060243516604435610794565b34801561029857600080fd5b506102b6600160a060020a0360043581169060243516604435610848565b005b3480156102c457600080fd5b506102cd6108c6565b6040805160ff9092168252519081900360200190f35b3480156102ef57600080fd5b506102f86108cf565b60408051600160a060020a039092168252519081900360200190f35b34801561032057600080fd5b506102b66004356108de565b34801561033857600080fd5b506102f861097f565b34801561034d57600080fd5b506102b660043561098e565b34801561036557600080fd5b5061023b600160a060020a0360043516610a2f565b34801561038657600080fd5b506102b6600160a060020a0360043581169060243516604435610ae2565b3480156103b057600080fd5b50610206600160a060020a0360043516602435610b49565b3480156103d457600080fd5b5061023b600160a060020a0360043516610bc1565b3480156103f557600080fd5b506102b6600435610c5e565b34801561040d57600080fd5b506102f8600435610cff565b34801561042557600080fd5b506102f8610d1a565b34801561043a57600080fd5b5061016d610d29565b34801561044f57600080fd5b50610206600160a060020a0360043516602435610d84565b34801561047357600080fd5b506102f8600435610dfc565b34801561048b57600080fd5b5061023b600160a060020a0360043516610e17565b3480156104ac57600080fd5b5061023b610eca565b3480156104c157600080fd5b506102f8600435610ed0565b3480156104d957600080fd5b50610206600160a060020a0360043516602435610eeb565b3480156104fd57600080fd5b5061023b600160a060020a0360043581169060243516610f63565b6007805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b505050505081565b600354604080517f89064fd2000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03858116602483015260448201859052915160009392909216916389064fd29160648082019260209290919082900301818787803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b505050506040513d602081101561064857600080fd5b50519392505050565b6000600160a060020a038216151561066857600080fd5b610670610fd6565b6040805160208181018352600160a060020a0380871680845260008681526002845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507fd76fc900a7e1a6fcf11d54b7ba943918df6c53a3128140658c389b3da1e997ba919081900360600190a1919050565b600354604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916318160ddd91600480830192602092919082900301818787803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b505050506040513d602081101561078d57600080fd5b5051905090565b600354604080517f5d5e22cd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03868116602483015285811660448301526064820185905291516000939290921691635d5e22cd9160848082019260209290919082900301818787803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b505050506040513d602081101561083e57600080fd5b5051949350505050565b600554600160a060020a031633148061086b5750600354600160a060020a031633145b151561087657600080fd5b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60095460ff1681565b600154600160a060020a031681565b600154600160a060020a031633146108f557600080fd5b6108fe81611017565b60018054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526002602090815260409182902080549093169092559154825185815293169083015280517f9a99272c0f6b7a30ef9e76e684a7cd408bfd4f11a72f36a8e276253c920e442d9281900390910190a150565b600354600160a060020a031681565b600154600160a060020a031633146109a557600080fd5b6109ae8161104b565b60058054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526006602090815260409182902080549093169092559154825185815293169083015280517f5cb9700f54ca7395c2160c4c019579505a2e90ec04aeb238fe591a004abdef6f9281900390910190a150565b6000600160a060020a0382161515610a4657600080fd5b610a4e610fd6565b6040805160208181018352600160a060020a0380871680845260008681526004845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507f5df12834436b8dc248df3f7f1796a3e39f851d610be49cdcd92514fa821b9f97919081900360600190a1919050565b600354600160a060020a03163314610af957600080fd5b81600160a060020a031683600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600354604080517f61e1077d000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03858116602483015260448201859052915160009392909216916361e1077d9160648082019260209290919082900301818787803b15801561061e57600080fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915160009392909216916370a082319160248082019260209290919082900301818787803b158015610c2c57600080fd5b505af1158015610c40573d6000803e3d6000fd5b505050506040513d6020811015610c5657600080fd5b505192915050565b600154600160a060020a03163314610c7557600080fd5b610c7e8161106f565b60038054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526004602090815260409182902080549093169092559154825185815293169083015280517f9d55b0349a0a4c5b511f72228170bb91d45c9ac78dba8ab5b4175d3ed42f06b39281900390910190a150565b600660205260009081526040902054600160a060020a031681565b600554600160a060020a031681565b6008805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059e5780601f106105735761010080835404028352916020019161059e565b600354604080517fdfe0f0ca000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038581166024830152604482018590529151600093929092169163dfe0f0ca9160648082019260209290919082900301818787803b15801561061e57600080fd5b600460205260009081526040902054600160a060020a031681565b6000600160a060020a0382161515610e2e57600080fd5b610e36610fd6565b6040805160208181018352600160a060020a0380871680845260008681526006845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507fb3ab4b58eee08ac0b2b343f1cd8a0f0bea0ab7695c55f9b5e0d23185e0d79680919081900360600190a1919050565b60005481565b600260205260009081526040902054600160a060020a031681565b600354604080517f2e0179b5000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0385811660248301526044820185905291516000939290921691632e0179b59160648082019260209290919082900301818787803b15801561061e57600080fd5b600354604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015284811660248301529151600093929092169163dd62ed3e9160448082019260209290919082900301818787803b15801561061e57600080fd5b60008054600101908190556040805160001943014081526c010000000000000000000000003002602082015260348101929092525190819003605401902090565b60008181526002602052604081208054600160a060020a0316151561103b57600080fd5b54600160a060020a031692915050565b60008181526006602052604081208054600160a060020a0316151561103b57600080fd5b60008181526004602052604081208054600160a060020a0316151561103b57600080fd00a165627a7a7230582028e091ef07061bdf67ab693f3ad614183003f4825729cd7e6564f6e4e6a88e730029000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000080000000000000000000000006173eb0b52bf9723eaccd080519dfb3f49d47e5800000000000000000000000000000000000000000000000000000000000000124e69616e4c756e2054696d6520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e54540000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101535763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610158578063095ea7b3146101e257806315b210821461021a57806318160ddd1461024d57806323b872dd1461026257806323de66511461028c578063313ce567146102b8578063375b74c3146102e35780633a8343ee146103145780633c389cc41461032c578063485b32e61461034157806348f9e246146103595780635687f2b81461037a57806366188463146103a457806370a08231146103c85780638181b029146103e95780638a6da0611461040157806393aa4e4e1461041957806395d89b411461042e578063a9059cbb14610443578063b508069b14610467578063bcc9534f1461047f578063cb81fecf146104a0578063cf6e4488146104b5578063d73dd623146104cd578063dd62ed3e146104f1575b600080fd5b34801561016457600080fd5b5061016d610518565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a757818101518382015260200161018f565b50505050905090810190601f1680156101d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ee57600080fd5b50610206600160a060020a03600435166024356105a6565b604080519115158252519081900360200190f35b34801561022657600080fd5b5061023b600160a060020a0360043516610651565b60408051918252519081900360200190f35b34801561025957600080fd5b5061023b610704565b34801561026e57600080fd5b50610206600160a060020a0360043581169060243516604435610794565b34801561029857600080fd5b506102b6600160a060020a0360043581169060243516604435610848565b005b3480156102c457600080fd5b506102cd6108c6565b6040805160ff9092168252519081900360200190f35b3480156102ef57600080fd5b506102f86108cf565b60408051600160a060020a039092168252519081900360200190f35b34801561032057600080fd5b506102b66004356108de565b34801561033857600080fd5b506102f861097f565b34801561034d57600080fd5b506102b660043561098e565b34801561036557600080fd5b5061023b600160a060020a0360043516610a2f565b34801561038657600080fd5b506102b6600160a060020a0360043581169060243516604435610ae2565b3480156103b057600080fd5b50610206600160a060020a0360043516602435610b49565b3480156103d457600080fd5b5061023b600160a060020a0360043516610bc1565b3480156103f557600080fd5b506102b6600435610c5e565b34801561040d57600080fd5b506102f8600435610cff565b34801561042557600080fd5b506102f8610d1a565b34801561043a57600080fd5b5061016d610d29565b34801561044f57600080fd5b50610206600160a060020a0360043516602435610d84565b34801561047357600080fd5b506102f8600435610dfc565b34801561048b57600080fd5b5061023b600160a060020a0360043516610e17565b3480156104ac57600080fd5b5061023b610eca565b3480156104c157600080fd5b506102f8600435610ed0565b3480156104d957600080fd5b50610206600160a060020a0360043516602435610eeb565b3480156104fd57600080fd5b5061023b600160a060020a0360043581169060243516610f63565b6007805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b505050505081565b600354604080517f89064fd2000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03858116602483015260448201859052915160009392909216916389064fd29160648082019260209290919082900301818787803b15801561061e57600080fd5b505af1158015610632573d6000803e3d6000fd5b505050506040513d602081101561064857600080fd5b50519392505050565b6000600160a060020a038216151561066857600080fd5b610670610fd6565b6040805160208181018352600160a060020a0380871680845260008681526002845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507fd76fc900a7e1a6fcf11d54b7ba943918df6c53a3128140658c389b3da1e997ba919081900360600190a1919050565b600354604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916318160ddd91600480830192602092919082900301818787803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b505050506040513d602081101561078d57600080fd5b5051905090565b600354604080517f5d5e22cd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03868116602483015285811660448301526064820185905291516000939290921691635d5e22cd9160848082019260209290919082900301818787803b15801561081457600080fd5b505af1158015610828573d6000803e3d6000fd5b505050506040513d602081101561083e57600080fd5b5051949350505050565b600554600160a060020a031633148061086b5750600354600160a060020a031633145b151561087657600080fd5b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60095460ff1681565b600154600160a060020a031681565b600154600160a060020a031633146108f557600080fd5b6108fe81611017565b60018054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526002602090815260409182902080549093169092559154825185815293169083015280517f9a99272c0f6b7a30ef9e76e684a7cd408bfd4f11a72f36a8e276253c920e442d9281900390910190a150565b600354600160a060020a031681565b600154600160a060020a031633146109a557600080fd5b6109ae8161104b565b60058054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526006602090815260409182902080549093169092559154825185815293169083015280517f5cb9700f54ca7395c2160c4c019579505a2e90ec04aeb238fe591a004abdef6f9281900390910190a150565b6000600160a060020a0382161515610a4657600080fd5b610a4e610fd6565b6040805160208181018352600160a060020a0380871680845260008681526004845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507f5df12834436b8dc248df3f7f1796a3e39f851d610be49cdcd92514fa821b9f97919081900360600190a1919050565b600354600160a060020a03163314610af957600080fd5b81600160a060020a031683600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600354604080517f61e1077d000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03858116602483015260448201859052915160009392909216916361e1077d9160648082019260209290919082900301818787803b15801561061e57600080fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152915160009392909216916370a082319160248082019260209290919082900301818787803b158015610c2c57600080fd5b505af1158015610c40573d6000803e3d6000fd5b505050506040513d6020811015610c5657600080fd5b505192915050565b600154600160a060020a03163314610c7557600080fd5b610c7e8161106f565b60038054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821617825560008481526004602090815260409182902080549093169092559154825185815293169083015280517f9d55b0349a0a4c5b511f72228170bb91d45c9ac78dba8ab5b4175d3ed42f06b39281900390910190a150565b600660205260009081526040902054600160a060020a031681565b600554600160a060020a031681565b6008805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561059e5780601f106105735761010080835404028352916020019161059e565b600354604080517fdfe0f0ca000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a038581166024830152604482018590529151600093929092169163dfe0f0ca9160648082019260209290919082900301818787803b15801561061e57600080fd5b600460205260009081526040902054600160a060020a031681565b6000600160a060020a0382161515610e2e57600080fd5b610e36610fd6565b6040805160208181018352600160a060020a0380871680845260008681526006845285902093518454921673ffffffffffffffffffffffffffffffffffffffff1990921691909117909255825184815233918101919091528083019190915290519192507fb3ab4b58eee08ac0b2b343f1cd8a0f0bea0ab7695c55f9b5e0d23185e0d79680919081900360600190a1919050565b60005481565b600260205260009081526040902054600160a060020a031681565b600354604080517f2e0179b5000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0385811660248301526044820185905291516000939290921691632e0179b59160648082019260209290919082900301818787803b15801561061e57600080fd5b600354604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015284811660248301529151600093929092169163dd62ed3e9160448082019260209290919082900301818787803b15801561061e57600080fd5b60008054600101908190556040805160001943014081526c010000000000000000000000003002602082015260348101929092525190819003605401902090565b60008181526002602052604081208054600160a060020a0316151561103b57600080fd5b54600160a060020a031692915050565b60008181526006602052604081208054600160a060020a0316151561103b57600080fd5b60008181526004602052604081208054600160a060020a0316151561103b57600080fd00a165627a7a7230582028e091ef07061bdf67ab693f3ad614183003f4825729cd7e6564f6e4e6a88e730029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000080000000000000000000000006173eb0b52bf9723eaccd080519dfb3f49d47e5800000000000000000000000000000000000000000000000000000000000000124e69616e4c756e2054696d6520546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e54540000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): NianLun Time Token
Arg [1] : _symbol (string): NTT
Arg [2] : _decimals (uint8): 8
Arg [3] : _custodian (address): 0x6173Eb0B52bF9723EAcCD080519DFb3F49D47e58

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 0000000000000000000000006173eb0b52bf9723eaccd080519dfb3f49d47e58
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 4e69616e4c756e2054696d6520546f6b656e0000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4e54540000000000000000000000000000000000000000000000000000000000


Swarm Source

bzzr://28e091ef07061bdf67ab693f3ad614183003f4825729cd7e6564f6e4e6a88e73
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.