ERC-20
Overview
Max Total Supply
473.681499434613475024 ETH-T
Holders
739
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EtherToken
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-11-12 */ pragma solidity 0.4.25; /// @title provides subject to role checking logic contract IAccessPolicy { //////////////////////// // Public functions //////////////////////// /// @notice We don't make this function constant to allow for state-updating access controls such as rate limiting. /// @dev checks if subject belongs to requested role for particular object /// @param subject address to be checked against role, typically msg.sender /// @param role identifier of required role /// @param object contract instance context for role checking, typically contract requesting the check /// @param verb additional data, in current AccessControll implementation msg.sig /// @return if subject belongs to a role function allowed( address subject, bytes32 role, address object, bytes4 verb ) public returns (bool); } /// @title enables access control in implementing contract /// @dev see AccessControlled for implementation contract IAccessControlled { //////////////////////// // Events //////////////////////// /// @dev must log on access policy change event LogAccessPolicyChanged( address controller, IAccessPolicy oldPolicy, IAccessPolicy newPolicy ); //////////////////////// // Public functions //////////////////////// /// @dev allows to change access control mechanism for this contract /// this method must be itself access controlled, see AccessControlled implementation and notice below /// @notice it is a huge issue for Solidity that modifiers are not part of function signature /// then interfaces could be used for example to control access semantics /// @param newPolicy new access policy to controll this contract /// @param newAccessController address of ROLE_ACCESS_CONTROLLER of new policy that can set access to this contract function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController) public; function accessPolicy() public constant returns (IAccessPolicy); } contract StandardRoles { //////////////////////// // Constants //////////////////////// // @notice Soldity somehow doesn't evaluate this compile time // @dev role which has rights to change permissions and set new policy in contract, keccak256("AccessController") bytes32 internal constant ROLE_ACCESS_CONTROLLER = 0xac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da; } /// @title Granular code execution permissions /// @notice Intended to replace existing Ownable pattern with more granular permissions set to execute smart contract functions /// for each function where 'only' modifier is applied, IAccessPolicy implementation is called to evaluate if msg.sender belongs to required role for contract being called. /// Access evaluation specific belong to IAccessPolicy implementation, see RoleBasedAccessPolicy for details. /// @dev Should be inherited by a contract requiring such permissions controll. IAccessPolicy must be provided in constructor. Access policy may be replaced to a different one /// by msg.sender with ROLE_ACCESS_CONTROLLER role contract AccessControlled is IAccessControlled, StandardRoles { //////////////////////// // Mutable state //////////////////////// IAccessPolicy private _accessPolicy; //////////////////////// // Modifiers //////////////////////// /// @dev limits function execution only to senders assigned to required 'role' modifier only(bytes32 role) { require(_accessPolicy.allowed(msg.sender, role, this, msg.sig)); _; } //////////////////////// // Constructor //////////////////////// constructor(IAccessPolicy policy) internal { require(address(policy) != 0x0); _accessPolicy = policy; } //////////////////////// // Public functions //////////////////////// // // Implements IAccessControlled // function setAccessPolicy(IAccessPolicy newPolicy, address newAccessController) public only(ROLE_ACCESS_CONTROLLER) { // ROLE_ACCESS_CONTROLLER must be present // under the new policy. This provides some // protection against locking yourself out. require(newPolicy.allowed(newAccessController, ROLE_ACCESS_CONTROLLER, this, msg.sig)); // We can now safely set the new policy without foot shooting. IAccessPolicy oldPolicy = _accessPolicy; _accessPolicy = newPolicy; // Log event emit LogAccessPolicyChanged(msg.sender, oldPolicy, newPolicy); } function accessPolicy() public constant returns (IAccessPolicy) { return _accessPolicy; } } contract IsContract { //////////////////////// // Internal functions //////////////////////// function isContract(address addr) internal constant returns (bool) { uint256 size; // takes 700 gas assembly { size := extcodesize(addr) } return size > 0; } } /// @title standard access roles of the Platform /// @dev constants are kept in CODE not in STORAGE so they are comparatively cheap contract AccessRoles { //////////////////////// // Constants //////////////////////// // NOTE: All roles are set to the keccak256 hash of the // CamelCased role name, i.e. // ROLE_LOCKED_ACCOUNT_ADMIN = keccak256("LockedAccountAdmin") // May issue (generate) Neumarks bytes32 internal constant ROLE_NEUMARK_ISSUER = 0x921c3afa1f1fff707a785f953a1e197bd28c9c50e300424e015953cbf120c06c; // May burn Neumarks it owns bytes32 internal constant ROLE_NEUMARK_BURNER = 0x19ce331285f41739cd3362a3ec176edffe014311c0f8075834fdd19d6718e69f; // May create new snapshots on Neumark bytes32 internal constant ROLE_SNAPSHOT_CREATOR = 0x08c1785afc57f933523bc52583a72ce9e19b2241354e04dd86f41f887e3d8174; // May enable/disable transfers on Neumark bytes32 internal constant ROLE_TRANSFER_ADMIN = 0xb6527e944caca3d151b1f94e49ac5e223142694860743e66164720e034ec9b19; // may reclaim tokens/ether from contracts supporting IReclaimable interface bytes32 internal constant ROLE_RECLAIMER = 0x0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc5; // represents legally platform operator in case of forks and contracts with legal agreement attached. keccak256("PlatformOperatorRepresentative") bytes32 internal constant ROLE_PLATFORM_OPERATOR_REPRESENTATIVE = 0xb2b321377653f655206f71514ff9f150d0822d062a5abcf220d549e1da7999f0; // allows to deposit EUR-T and allow addresses to send and receive EUR-T. keccak256("EurtDepositManager") bytes32 internal constant ROLE_EURT_DEPOSIT_MANAGER = 0x7c8ecdcba80ce87848d16ad77ef57cc196c208fc95c5638e4a48c681a34d4fe7; // allows to register identities and change associated claims keccak256("IdentityManager") bytes32 internal constant ROLE_IDENTITY_MANAGER = 0x32964e6bc50f2aaab2094a1d311be8bda920fc4fb32b2fb054917bdb153a9e9e; // allows to replace controller on euro token and to destroy tokens without withdraw kecckak256("EurtLegalManager") bytes32 internal constant ROLE_EURT_LEGAL_MANAGER = 0x4eb6b5806954a48eb5659c9e3982d5e75bfb2913f55199877d877f157bcc5a9b; // allows to change known interfaces in universe kecckak256("UniverseManager") bytes32 internal constant ROLE_UNIVERSE_MANAGER = 0xe8d8f8f9ea4b19a5a4368dbdace17ad71a69aadeb6250e54c7b4c7b446301738; // allows to exchange gas for EUR-T keccak("GasExchange") bytes32 internal constant ROLE_GAS_EXCHANGE = 0x9fe43636e0675246c99e96d7abf9f858f518b9442c35166d87f0934abef8a969; // allows to set token exchange rates keccak("TokenRateOracle") bytes32 internal constant ROLE_TOKEN_RATE_ORACLE = 0xa80c3a0c8a5324136e4c806a778583a2a980f378bdd382921b8d28dcfe965585; } contract IBasicToken { //////////////////////// // Events //////////////////////// event Transfer( address indexed from, address indexed to, uint256 amount ); //////////////////////// // Public functions //////////////////////// /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public constant returns (uint256); /// @param owner The address that's balance is being requested /// @return The balance of `owner` at the current block function balanceOf(address owner) public constant returns (uint256 balance); /// @notice Send `amount` tokens to `to` from `msg.sender` /// @param to The address of the recipient /// @param amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address to, uint256 amount) public returns (bool success); } /// @title allows deriving contract to recover any token or ether that it has balance of /// @notice note that this opens your contracts to claims from various people saying they lost tokens and they want them back /// be ready to handle such claims /// @dev use with care! /// 1. ROLE_RECLAIMER is allowed to claim tokens, it's not returning tokens to original owner /// 2. in derived contract that holds any token by design you must override `reclaim` and block such possibility. /// see ICBMLockedAccount as an example contract Reclaimable is AccessControlled, AccessRoles { //////////////////////// // Constants //////////////////////// IBasicToken constant internal RECLAIM_ETHER = IBasicToken(0x0); //////////////////////// // Public functions //////////////////////// function reclaim(IBasicToken token) public only(ROLE_RECLAIMER) { address reclaimer = msg.sender; if(token == RECLAIM_ETHER) { reclaimer.transfer(address(this).balance); } else { uint256 balance = token.balanceOf(this); require(token.transfer(reclaimer, balance)); } } } contract ITokenMetadata { //////////////////////// // Public functions //////////////////////// function symbol() public constant returns (string); function name() public constant returns (string); function decimals() public constant returns (uint8); } /// @title adds token metadata to token contract /// @dev see Neumark for example implementation contract TokenMetadata is ITokenMetadata { //////////////////////// // Immutable state //////////////////////// // The Token's name: e.g. DigixDAO Tokens string private NAME; // An identifier: e.g. REP string private SYMBOL; // Number of decimals of the smallest unit uint8 private DECIMALS; // An arbitrary versioning scheme string private VERSION; //////////////////////// // Constructor //////////////////////// /// @notice Constructor to set metadata /// @param tokenName Name of the new token /// @param decimalUnits Number of decimals of the new token /// @param tokenSymbol Token Symbol for the new token /// @param version Token version ie. when cloning is used constructor( string tokenName, uint8 decimalUnits, string tokenSymbol, string version ) public { NAME = tokenName; // Set the name SYMBOL = tokenSymbol; // Set the symbol DECIMALS = decimalUnits; // Set the decimals VERSION = version; } //////////////////////// // Public functions //////////////////////// function name() public constant returns (string) { return NAME; } function symbol() public constant returns (string) { return SYMBOL; } function decimals() public constant returns (uint8) { return DECIMALS; } function version() public constant returns (string) { return VERSION; } } /// @title controls spending approvals /// @dev TokenAllowance observes this interface, Neumark contract implements it contract MTokenAllowanceController { //////////////////////// // Internal functions //////////////////////// /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param owner The address that calls `approve()` /// @param spender The spender in the `approve()` call /// @param amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function mOnApprove( address owner, address spender, uint256 amount ) internal returns (bool allow); /// @notice Allows to override allowance approved by the owner /// Primary role is to enable forced transfers, do not override if you do not like it /// Following behavior is expected in the observer /// approve() - should revert if mAllowanceOverride() > 0 /// allowance() - should return mAllowanceOverride() if set /// transferFrom() - should override allowance if mAllowanceOverride() > 0 /// @param owner An address giving allowance to spender /// @param spender An address getting a right to transfer allowance amount from the owner /// @return current allowance amount function mAllowanceOverride( address owner, address spender ) internal constant returns (uint256 allowance); } /// @title controls token transfers /// @dev BasicSnapshotToken observes this interface, Neumark contract implements it contract MTokenTransferController { //////////////////////// // Internal functions //////////////////////// /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param from The origin of the transfer /// @param to The destination of the transfer /// @param amount The amount of the transfer /// @return False if the controller does not authorize the transfer function mOnTransfer( address from, address to, uint256 amount ) internal returns (bool allow); } /// @title controls approvals and transfers /// @dev The token controller contract must implement these functions, see Neumark as example /// @dev please note that controller may be a separate contract that is called from mOnTransfer and mOnApprove functions contract MTokenController is MTokenTransferController, MTokenAllowanceController { } contract TrustlessTokenController is MTokenController { //////////////////////// // Internal functions //////////////////////// // // Implements MTokenController // function mOnTransfer( address /*from*/, address /*to*/, uint256 /*amount*/ ) internal returns (bool allow) { return true; } function mOnApprove( address /*owner*/, address /*spender*/, uint256 /*amount*/ ) internal returns (bool allow) { return true; } } contract IERC20Allowance { //////////////////////// // Events //////////////////////// event Approval( address indexed owner, address indexed spender, uint256 amount ); //////////////////////// // Public functions //////////////////////// /// @dev This function makes it easy to read the `allowed[]` map /// @param owner The address of the account that owns the token /// @param spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of owner that spender is allowed /// to spend function allowance(address owner, address spender) public constant returns (uint256 remaining); /// @notice `msg.sender` approves `spender` to spend `amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param spender The address of the account able to transfer the tokens /// @param amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address spender, uint256 amount) public returns (bool success); /// @notice Send `amount` tokens to `to` from `from` on the condition it /// is approved by `from` /// @param from The address holding the tokens being transferred /// @param to The address of the recipient /// @param amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address from, address to, uint256 amount) public returns (bool success); } contract IERC20Token is IBasicToken, IERC20Allowance { } contract IERC677Callback { //////////////////////// // Public functions //////////////////////// // NOTE: This call can be initiated by anyone. You need to make sure that // it is send by the token (`require(msg.sender == token)`) or make sure // amount is valid (`require(token.allowance(this) >= amount)`). function receiveApproval( address from, uint256 amount, address token, // IERC667Token bytes data ) public returns (bool success); } contract IERC677Allowance is IERC20Allowance { //////////////////////// // Public functions //////////////////////// /// @notice `msg.sender` approves `spender` to send `amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param spender The address of the contract able to transfer the tokens /// @param amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address spender, uint256 amount, bytes extraData) public returns (bool success); } contract IERC677Token is IERC20Token, IERC677Allowance { } contract Math { //////////////////////// // Internal functions //////////////////////// // absolute difference: |v1 - v2| function absDiff(uint256 v1, uint256 v2) internal pure returns(uint256) { return v1 > v2 ? v1 - v2 : v2 - v1; } // divide v by d, round up if remainder is 0.5 or more function divRound(uint256 v, uint256 d) internal pure returns(uint256) { return add(v, d/2) / d; } // computes decimal decimalFraction 'frac' of 'amount' with maximum precision (multiplication first) // both amount and decimalFraction must have 18 decimals precision, frac 10**18 represents a whole (100% of) amount // mind loss of precision as decimal fractions do not have finite binary expansion // do not use instead of division function decimalFraction(uint256 amount, uint256 frac) internal pure returns(uint256) { // it's like 1 ether is 100% proportion return proportion(amount, frac, 10**18); } // computes part/total of amount with maximum precision (multiplication first) // part and total must have the same units function proportion(uint256 amount, uint256 part, uint256 total) internal pure returns(uint256) { return divRound(mul(amount, part), total); } // // Open Zeppelin Math library below // function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } } /// @title internal token transfer function /// @dev see BasicSnapshotToken for implementation contract MTokenTransfer { //////////////////////// // Internal functions //////////////////////// /// @dev This is the actual transfer function in the token contract, it can /// only be called by other functions in this contract. /// @param from The address holding the tokens being transferred /// @param to The address of the recipient /// @param amount The amount of tokens to be transferred /// @dev reverts if transfer was not successful function mTransfer( address from, address to, uint256 amount ) internal; } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is MTokenTransfer, MTokenTransferController, IBasicToken, Math { //////////////////////// // Mutable state //////////////////////// mapping(address => uint256) internal _balances; uint256 internal _totalSupply; //////////////////////// // Public functions //////////////////////// /** * @dev transfer token for a specified address * @param to The address to transfer to. * @param amount The amount to be transferred. */ function transfer(address to, uint256 amount) public returns (bool) { mTransfer(msg.sender, to, amount); return true; } /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public constant returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public constant returns (uint256 balance) { return _balances[owner]; } //////////////////////// // Internal functions //////////////////////// // // Implements MTokenTransfer // function mTransfer(address from, address to, uint256 amount) internal { require(to != address(0)); require(mOnTransfer(from, to, amount)); _balances[from] = sub(_balances[from], amount); _balances[to] = add(_balances[to], amount); emit Transfer(from, to, amount); } } /// @title token spending approval and transfer /// @dev implements token approval and transfers and exposes relevant part of ERC20 and ERC677 approveAndCall /// may be mixed in with any basic token (implementing mTransfer) like BasicSnapshotToken or MintableSnapshotToken to add approval mechanism /// observes MTokenAllowanceController interface /// observes MTokenTransfer contract TokenAllowance is MTokenTransfer, MTokenAllowanceController, IERC20Allowance, IERC677Token { //////////////////////// // Mutable state //////////////////////// // `allowed` tracks rights to spends others tokens as per ERC20 // owner => spender => amount mapping (address => mapping (address => uint256)) private _allowed; //////////////////////// // Constructor //////////////////////// constructor() internal { } //////////////////////// // Public functions //////////////////////// // // Implements IERC20Token // /// @dev This function makes it easy to read the `allowed[]` map /// @param owner The address of the account that owns the token /// @param spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of _owner that _spender is allowed /// to spend function allowance(address owner, address spender) public constant returns (uint256 remaining) { uint256 override = mAllowanceOverride(owner, spender); if (override > 0) { return override; } return _allowed[owner][spender]; } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// where allowance per spender must be 0 to allow change of such allowance /// @param spender The address of the account able to transfer the tokens /// @param amount The amount of tokens to be approved for transfer /// @return True or reverts, False is never returned function approve(address spender, uint256 amount) public returns (bool success) { // Alerts the token controller of the approve function call require(mOnApprove(msg.sender, spender, amount)); // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender,0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((amount == 0 || _allowed[msg.sender][spender] == 0) && mAllowanceOverride(msg.sender, spender) == 0); _allowed[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param from The address holding the tokens being transferred /// @param to The address of the recipient /// @param amount The amount of tokens to be transferred /// @return True if the transfer was successful, reverts in any other case function transferFrom(address from, address to, uint256 amount) public returns (bool success) { uint256 allowed = mAllowanceOverride(from, msg.sender); if (allowed == 0) { // The standard ERC 20 transferFrom functionality allowed = _allowed[from][msg.sender]; // yes this will underflow but then we'll revert. will cost gas however so don't underflow _allowed[from][msg.sender] -= amount; } require(allowed >= amount); mTransfer(from, to, amount); return true; } // // Implements IERC677Token // /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param spender The address of the contract able to transfer the tokens /// @param amount The amount of tokens to be approved for transfer /// @return True or reverts, False is never returned function approveAndCall( address spender, uint256 amount, bytes extraData ) public returns (bool success) { require(approve(spender, amount)); success = IERC677Callback(spender).receiveApproval( msg.sender, amount, this, extraData ); require(success); return true; } //////////////////////// // Internal functions //////////////////////// // // Implements default MTokenAllowanceController // // no override in default implementation function mAllowanceOverride( address /*owner*/, address /*spender*/ ) internal constant returns (uint256) { return 0; } } /** * @title Standard ERC20 token * * @dev Implementation of the standard token. * @dev https://github.com/ethereum/EIPs/issues/20 */ contract StandardToken is IERC20Token, BasicToken, TokenAllowance { } /// @title uniquely identifies deployable (non-abstract) platform contract /// @notice cheap way of assigning implementations to knownInterfaces which represent system services /// unfortunatelly ERC165 does not include full public interface (ABI) and does not provide way to list implemented interfaces /// EIP820 still in the making /// @dev ids are generated as follows keccak256("neufund-platform:<contract name>") /// ids roughly correspond to ABIs contract IContractId { /// @param id defined as above /// @param version implementation version function contractId() public pure returns (bytes32 id, uint256 version); } /// @title current ERC223 fallback function /// @dev to be used in all future token contract /// @dev NEU and ICBMEtherToken (obsolete) are the only contracts that still uses IERC223LegacyCallback contract IERC223Callback { //////////////////////// // Public functions //////////////////////// function tokenFallback(address from, uint256 amount, bytes data) public; } contract IERC223Token is IERC20Token, ITokenMetadata { /// @dev Departure: We do not log data, it has no advantage over a standard /// log event. By sticking to the standard log event we /// stay compatible with constracts that expect and ERC20 token. // event Transfer( // address indexed from, // address indexed to, // uint256 amount, // bytes data); /// @dev Departure: We do not use the callback on regular transfer calls to /// stay compatible with constracts that expect and ERC20 token. // function transfer(address to, uint256 amount) // public // returns (bool); //////////////////////// // Public functions //////////////////////// function transfer(address to, uint256 amount, bytes data) public returns (bool); } contract IWithdrawableToken { //////////////////////// // Public functions //////////////////////// /// @notice withdraws from a token holding assets /// @dev amount of asset should be returned to msg.sender and corresponding balance burned function withdraw(uint256 amount) public; } contract EtherToken is IsContract, IContractId, AccessControlled, StandardToken, TrustlessTokenController, IWithdrawableToken, TokenMetadata, IERC223Token, Reclaimable { //////////////////////// // Constants //////////////////////// string private constant NAME = "Ether Token"; string private constant SYMBOL = "ETH-T"; uint8 private constant DECIMALS = 18; //////////////////////// // Events //////////////////////// event LogDeposit( address indexed to, uint256 amount ); event LogWithdrawal( address indexed from, uint256 amount ); event LogWithdrawAndSend( address indexed from, address indexed to, uint256 amount ); //////////////////////// // Constructor //////////////////////// constructor(IAccessPolicy accessPolicy) AccessControlled(accessPolicy) StandardToken() TokenMetadata(NAME, DECIMALS, SYMBOL, "") Reclaimable() public { } //////////////////////// // Public functions //////////////////////// /// deposit msg.value of Ether to msg.sender balance function deposit() public payable { depositPrivate(); emit Transfer(address(0), msg.sender, msg.value); } /// @notice convenience function to deposit and immediately transfer amount /// @param transferTo where to transfer after deposit /// @param amount total amount to transfer, must be <= balance after deposit /// @param data erc223 data /// @dev intended to deposit from simple account and invest in ETO function depositAndTransfer(address transferTo, uint256 amount, bytes data) public payable { depositPrivate(); transfer(transferTo, amount, data); } /// withdraws and sends 'amount' of ether to msg.sender function withdraw(uint256 amount) public { withdrawPrivate(amount); msg.sender.transfer(amount); } /// @notice convenience function to withdraw and transfer to external account /// @param sendTo address to which send total amount /// @param amount total amount to withdraw and send /// @dev function is payable and is meant to withdraw funds on accounts balance and token in single transaction /// @dev BEWARE that msg.sender of the funds is Ether Token contract and not simple account calling it. /// @dev when sent to smart conctract funds may be lost, so this is prevented below function withdrawAndSend(address sendTo, uint256 amount) public payable { // must send at least what is in msg.value to being another deposit function require(amount >= msg.value, "NF_ET_NO_DEPOSIT"); if (amount > msg.value) { uint256 withdrawRemainder = amount - msg.value; withdrawPrivate(withdrawRemainder); } emit LogWithdrawAndSend(msg.sender, sendTo, amount); sendTo.transfer(amount); } // // Implements IERC223Token // function transfer(address to, uint256 amount, bytes data) public returns (bool) { BasicToken.mTransfer(msg.sender, to, amount); // Notify the receiving contract. if (isContract(to)) { // in case of re-entry (1) transfer is done (2) msg.sender is different IERC223Callback(to).tokenFallback(msg.sender, amount, data); } return true; } // // Overrides Reclaimable // /// @notice allows EtherToken to reclaim tokens wrongly sent to its address /// @dev as EtherToken by design has balance of Ether (native Ethereum token) /// such reclamation is not allowed function reclaim(IBasicToken token) public { // forbid reclaiming ETH hold in this contract. require(token != RECLAIM_ETHER); Reclaimable.reclaim(token); } // // Implements IContractId // function contractId() public pure returns (bytes32 id, uint256 version) { return (0x75b86bc24f77738576716a36431588ae768d80d077231d1661c2bea674c6373a, 0); } //////////////////////// // Private functions //////////////////////// function depositPrivate() private { _balances[msg.sender] = add(_balances[msg.sender], msg.value); _totalSupply = add(_totalSupply, msg.value); emit LogDeposit(msg.sender, msg.value); } function withdrawPrivate(uint256 amount) private { require(_balances[msg.sender] >= amount); _balances[msg.sender] = sub(_balances[msg.sender], amount); _totalSupply = sub(_totalSupply, amount); emit LogWithdrawal(msg.sender, amount); emit Transfer(msg.sender, address(0), amount); } }
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":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","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":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPolicy","type":"address"},{"name":"newAccessController","type":"address"}],"name":"setAccessPolicy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sendTo","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawAndSend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contractId","outputs":[{"name":"id","type":"bytes32"},{"name":"version","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"transferTo","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"depositAndTransfer","outputs":[],"payable":true,"stateMutability":"payable","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"},{"name":"extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","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"},{"constant":true,"inputs":[],"name":"accessPolicy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"accessPolicy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LogWithdrawAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"},{"indexed":false,"name":"oldPolicy","type":"address"},{"indexed":false,"name":"newPolicy","type":"address"}],"name":"LogAccessPolicyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516020806200158b83398101604081815291518282018352600b82527f457468657220546f6b656e00000000000000000000000000000000000000000060208084019190915283518085018552600581527f4554482d5400000000000000000000000000000000000000000000000000000081830152845191820190945260008152909260129184600160a060020a0381161515620000b257600080fd5b60038054600160a060020a031916600160a060020a03929092169190911790558351620000e79060049060208701906200012e565b508151620000fd9060059060208501906200012e565b506006805460ff191660ff85161790558051620001229060079060208401906200012e565b505050505050620001d3565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200017157805160ff1916838001178555620001a1565b82800160010185558215620001a1579182015b82811115620001a157825182559160200191906001019062000184565b50620001af929150620001b3565b5090565b620001d091905b80821115620001af5760008155600101620001ba565b90565b6113a880620001e36000396000f3006080604052600436106101115763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610116578063095ea7b3146101a057806318160ddd146101d857806323b872dd146101ff5780632e1a7d4d14610229578063313ce5671461024357806354fd4d501461026e578063578756311461028357806364663ea6146102aa57806370a08231146102c15780638291286c146102e2578063926c196a1461031057806395d89b411461036c578063a9059cbb14610381578063be45fd62146103a5578063cae9ca511461040e578063d0e30db014610477578063dd62ed3e1461047f578063f5d60a51146104a6578063fc772c8b146104d7575b600080fd5b34801561012257600080fd5b5061012b6104f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016557818101518382015260200161014d565b50505050905090810190601f1680156101925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ac57600080fd5b506101c4600160a060020a036004351660243561058e565b604080519115158252519081900360200190f35b3480156101e457600080fd5b506101ed610659565b60408051918252519081900360200190f35b34801561020b57600080fd5b506101c4600160a060020a036004358116906024351660443561065f565b34801561023557600080fd5b506102416004356106c5565b005b34801561024f57600080fd5b506102586106ff565b6040805160ff9092168252519081900360200190f35b34801561027a57600080fd5b5061012b610708565b34801561028f57600080fd5b50610241600160a060020a0360043581169060243516610769565b610241600160a060020a03600435166024356109ca565b3480156102cd57600080fd5b506101ed600160a060020a0360043516610acc565b3480156102ee57600080fd5b506102f7610ae7565b6040805192835260208301919091528051918290030190f35b604080516020600460443581810135601f8101849004840285018401909552848452610241948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610b0e9650505050505050565b34801561037857600080fd5b5061012b610b21565b34801561038d57600080fd5b506101c4600160a060020a0360043516602435610b82565b3480156103b157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610b989650505050505050565b34801561041a57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610cbc9650505050505050565b610241610def565b34801561048b57600080fd5b506101ed600160a060020a0360043581169060243516610e31565b3480156104b257600080fd5b506104bb610e81565b60408051600160a060020a039092168252519081900360200190f35b3480156104e357600080fd5b50610241600160a060020a0360043516610e90565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b820191906000526020600020905b81548152906001019060200180831161056757829003601f168201915b5050505050905090565b600061059b338484610eb1565b15156105a657600080fd5b8115806105d45750336000908152600260209081526040808320600160a060020a0387168452909152902054155b80156105e757506105e53384610eba565b155b15156105f257600080fd5b336000818152600260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60015490565b60008061066c8533610eba565b90508015156106a25750600160a060020a0384166000908152600260209081526040808320338452909152902080548381039091555b828110156106af57600080fd5b6106ba858585610ec2565b506001949350505050565b6106ce81610f99565b604051339082156108fc029083906000818181858888f193505050501580156106fb573d6000803e3d6000fd5b5050565b60065460ff1690565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b600354604080517f9085b77f0000000000000000000000000000000000000000000000000000000081523360048201527fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da60248201819052306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166064840152925192939092600160a060020a0390911691639085b77f91608480830192602092919082900301818887803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b5051151561085e57600080fd5b604080517f9085b77f000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301527fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da6024830152306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166064840152925190871692639085b77f92608480820193602093909283900390910190829087803b15801561091857600080fd5b505af115801561092c573d6000803e3d6000fd5b505050506040513d602081101561094257600080fd5b5051151561094f57600080fd5b60038054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040805133815291909216602082018190528183019390935290519193507f7d475c32583df95fccc34a6e12df24c1fc9943092cc129b6512013aecba0f136919081900360600190a150505050565b600034821015610a3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e465f45545f4e4f5f4445504f53495400000000000000000000000000000000604482015290519081900360640190fd5b34821115610a505750348103610a5081610f99565b604080518381529051600160a060020a0385169133917f091fc40d7b9ba377824e29fcbd06fb23a78e65c0b32f9a52590aacfdef0766169181900360200190a3604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610ac6573d6000803e3d6000fd5b50505050565b600160a060020a031660009081526020819052604090205490565b7f75b86bc24f77738576716a36431588ae768d80d077231d1661c2bea674c6373a60009091565b610b16611060565b610ac6838383610b98565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b6000610b8f338484610ec2565b50600192915050565b6000610ba5338585610ec2565b610bae846110d2565b15610cb25783600160a060020a031663c0ee0b8a3385856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c4b578181015183820152602001610c33565b50505050905090810190601f168015610c785780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b505050505b5060019392505050565b6000610cc8848461058e565b1515610cd357600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015610d66578181015183820152602001610d4e565b50505050905090810190601f168015610d935780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610db557600080fd5b505af1158015610dc9573d6000803e3d6000fd5b505050506040513d6020811015610ddf57600080fd5b50519050801515610cb257600080fd5b610df7611060565b60408051348152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3565b600080610e3e8484610eba565b90506000811115610e5157809150610e7a565b600160a060020a0380851660009081526002602090815260408083209387168352929052205491505b5092915050565b600354600160a060020a031690565b600160a060020a0381161515610ea557600080fd5b610eae816110da565b50565b60019392505050565b600092915050565b600160a060020a0382161515610ed757600080fd5b610ee2838383610eb1565b1515610eed57600080fd5b600160a060020a038316600090815260208190526040902054610f109082611354565b600160a060020a038085166000908152602081905260408082209390935590841681522054610f3f9082611366565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b33600090815260208190526040902054811115610fb557600080fd5b33600090815260208190526040902054610fcf9082611354565b33600090815260208190526040902055600154610fec9082611354565b60015560408051828152905133917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a260408051828152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b3360009081526020819052604090205461107a9034611366565b336000908152602081905260409020556001546110979034611366565b60015560408051348152905133917f1b851e1031ef35a238e6c67d0c7991162390df915f70eaf9098dbf0b175a6198919081900360200190a2565b6000903b1190565b600354604080517f9085b77f0000000000000000000000000000000000000000000000000000000081523360048201527f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc560248201819052306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660648401529251929384939192600160a060020a0390911691639085b77f9160848082019260209290919082900301818887803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506040513d60208110156111c557600080fd5b505115156111d257600080fd5b339250600160a060020a038416151561122157604051600160a060020a03841690303180156108fc02916000818181858888f1935050505015801561121b573d6000803e3d6000fd5b50610ac6565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b15801561128257600080fd5b505af1158015611296573d6000803e3d6000fd5b505050506040513d60208110156112ac57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519294509086169163a9059cbb916044808201926020929091908290030181600087803b15801561131d57600080fd5b505af1158015611331573d6000803e3d6000fd5b505050506040513d602081101561134757600080fd5b50511515610ac657600080fd5b60008282111561136057fe5b50900390565b60008282018381101561137557fe5b93925050505600a165627a7a72305820e889544e82f390051869c873adec9956549aec5b32f9342c7019c17396bafe4b0029000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490
Deployed Bytecode
0x6080604052600436106101115763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610116578063095ea7b3146101a057806318160ddd146101d857806323b872dd146101ff5780632e1a7d4d14610229578063313ce5671461024357806354fd4d501461026e578063578756311461028357806364663ea6146102aa57806370a08231146102c15780638291286c146102e2578063926c196a1461031057806395d89b411461036c578063a9059cbb14610381578063be45fd62146103a5578063cae9ca511461040e578063d0e30db014610477578063dd62ed3e1461047f578063f5d60a51146104a6578063fc772c8b146104d7575b600080fd5b34801561012257600080fd5b5061012b6104f8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016557818101518382015260200161014d565b50505050905090810190601f1680156101925780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101ac57600080fd5b506101c4600160a060020a036004351660243561058e565b604080519115158252519081900360200190f35b3480156101e457600080fd5b506101ed610659565b60408051918252519081900360200190f35b34801561020b57600080fd5b506101c4600160a060020a036004358116906024351660443561065f565b34801561023557600080fd5b506102416004356106c5565b005b34801561024f57600080fd5b506102586106ff565b6040805160ff9092168252519081900360200190f35b34801561027a57600080fd5b5061012b610708565b34801561028f57600080fd5b50610241600160a060020a0360043581169060243516610769565b610241600160a060020a03600435166024356109ca565b3480156102cd57600080fd5b506101ed600160a060020a0360043516610acc565b3480156102ee57600080fd5b506102f7610ae7565b6040805192835260208301919091528051918290030190f35b604080516020600460443581810135601f8101849004840285018401909552848452610241948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610b0e9650505050505050565b34801561037857600080fd5b5061012b610b21565b34801561038d57600080fd5b506101c4600160a060020a0360043516602435610b82565b3480156103b157600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610b989650505050505050565b34801561041a57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c4948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610cbc9650505050505050565b610241610def565b34801561048b57600080fd5b506101ed600160a060020a0360043581169060243516610e31565b3480156104b257600080fd5b506104bb610e81565b60408051600160a060020a039092168252519081900360200190f35b3480156104e357600080fd5b50610241600160a060020a0360043516610e90565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b820191906000526020600020905b81548152906001019060200180831161056757829003601f168201915b5050505050905090565b600061059b338484610eb1565b15156105a657600080fd5b8115806105d45750336000908152600260209081526040808320600160a060020a0387168452909152902054155b80156105e757506105e53384610eba565b155b15156105f257600080fd5b336000818152600260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60015490565b60008061066c8533610eba565b90508015156106a25750600160a060020a0384166000908152600260209081526040808320338452909152902080548381039091555b828110156106af57600080fd5b6106ba858585610ec2565b506001949350505050565b6106ce81610f99565b604051339082156108fc029083906000818181858888f193505050501580156106fb573d6000803e3d6000fd5b5050565b60065460ff1690565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b600354604080517f9085b77f0000000000000000000000000000000000000000000000000000000081523360048201527fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da60248201819052306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166064840152925192939092600160a060020a0390911691639085b77f91608480830192602092919082900301818887803b15801561082757600080fd5b505af115801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b5051151561085e57600080fd5b604080517f9085b77f000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301527fac42f8beb17975ed062dcb80c63e6d203ef1c2c335ced149dc5664cc671cb7da6024830152306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166064840152925190871692639085b77f92608480820193602093909283900390910190829087803b15801561091857600080fd5b505af115801561092c573d6000803e3d6000fd5b505050506040513d602081101561094257600080fd5b5051151561094f57600080fd5b60038054600160a060020a0386811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040805133815291909216602082018190528183019390935290519193507f7d475c32583df95fccc34a6e12df24c1fc9943092cc129b6512013aecba0f136919081900360600190a150505050565b600034821015610a3b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e465f45545f4e4f5f4445504f53495400000000000000000000000000000000604482015290519081900360640190fd5b34821115610a505750348103610a5081610f99565b604080518381529051600160a060020a0385169133917f091fc40d7b9ba377824e29fcbd06fb23a78e65c0b32f9a52590aacfdef0766169181900360200190a3604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610ac6573d6000803e3d6000fd5b50505050565b600160a060020a031660009081526020819052604090205490565b7f75b86bc24f77738576716a36431588ae768d80d077231d1661c2bea674c6373a60009091565b610b16611060565b610ac6838383610b98565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105845780601f1061055957610100808354040283529160200191610584565b6000610b8f338484610ec2565b50600192915050565b6000610ba5338585610ec2565b610bae846110d2565b15610cb25783600160a060020a031663c0ee0b8a3385856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c4b578181015183820152602001610c33565b50505050905090810190601f168015610c785780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c9957600080fd5b505af1158015610cad573d6000803e3d6000fd5b505050505b5060019392505050565b6000610cc8848461058e565b1515610cd357600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015610d66578181015183820152602001610d4e565b50505050905090810190601f168015610d935780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610db557600080fd5b505af1158015610dc9573d6000803e3d6000fd5b505050506040513d6020811015610ddf57600080fd5b50519050801515610cb257600080fd5b610df7611060565b60408051348152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3565b600080610e3e8484610eba565b90506000811115610e5157809150610e7a565b600160a060020a0380851660009081526002602090815260408083209387168352929052205491505b5092915050565b600354600160a060020a031690565b600160a060020a0381161515610ea557600080fd5b610eae816110da565b50565b60019392505050565b600092915050565b600160a060020a0382161515610ed757600080fd5b610ee2838383610eb1565b1515610eed57600080fd5b600160a060020a038316600090815260208190526040902054610f109082611354565b600160a060020a038085166000908152602081905260408082209390935590841681522054610f3f9082611366565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b33600090815260208190526040902054811115610fb557600080fd5b33600090815260208190526040902054610fcf9082611354565b33600090815260208190526040902055600154610fec9082611354565b60015560408051828152905133917fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91919081900360200190a260408051828152905160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350565b3360009081526020819052604090205461107a9034611366565b336000908152602081905260409020556001546110979034611366565b60015560408051348152905133917f1b851e1031ef35a238e6c67d0c7991162390df915f70eaf9098dbf0b175a6198919081900360200190a2565b6000903b1190565b600354604080517f9085b77f0000000000000000000000000000000000000000000000000000000081523360048201527f0542bbd0c672578966dcc525b30aa16723bb042675554ac5b0362f86b6e97dc560248201819052306044830152600080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660648401529251929384939192600160a060020a0390911691639085b77f9160848082019260209290919082900301818887803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506040513d60208110156111c557600080fd5b505115156111d257600080fd5b339250600160a060020a038416151561122157604051600160a060020a03841690303180156108fc02916000818181858888f1935050505015801561121b573d6000803e3d6000fd5b50610ac6565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b15801561128257600080fd5b505af1158015611296573d6000803e3d6000fd5b505050506040513d60208110156112ac57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820184905291519294509086169163a9059cbb916044808201926020929091908290030181600087803b15801561131d57600080fd5b505af1158015611331573d6000803e3d6000fd5b505050506040513d602081101561134757600080fd5b50511515610ac657600080fd5b60008282111561136057fe5b50900390565b60008282018381101561137557fe5b93925050505600a165627a7a72305820e889544e82f390051869c873adec9956549aec5b32f9342c7019c17396bafe4b0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490
-----Decoded View---------------
Arg [0] : accessPolicy (address): 0xaE38c27E646959735ec70d77ED4eCc03A3EFf490
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ae38c27e646959735ec70d77ed4ecc03a3eff490
Swarm Source
bzzr://e889544e82f390051869c873adec9956549aec5b32f9342c7019c17396bafe4b
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.