ERC-20
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 NTTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | 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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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.