ETH Price: $2,644.71 (-0.25%)

Contract

0x815a46107e5Ee2291A76274DC879cE947a3F0850
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve120562722021-03-17 12:49:451312 days ago1615985385IN
DCAssetBackend
0 ETH0.0035343154.00000145
Approve120562642021-03-17 12:48:151312 days ago1615985295IN
DCAssetBackend
0 ETH0.00353245154
Transfer From Tr...76554792019-04-28 10:56:502001 days ago1556449010IN
DCAssetBackend
0 ETH0.000183276
Mint36445792017-05-03 18:10:112726 days ago1493835011IN
DCAssetBackend
0 ETH0.0005961122.18199999
Mint36445732017-05-03 18:08:562726 days ago1493834936IN
DCAssetBackend
0 ETH0.0014268620
Mint36071822017-04-27 3:03:132732 days ago1493262193IN
DCAssetBackend
0 ETH0.0005556220.67512381
Mint36071822017-04-27 3:03:132732 days ago1493262193IN
DCAssetBackend
0 ETH0.0014750220.67512381
Mint34205952017-03-26 7:13:122764 days ago1490512392IN
DCAssetBackend
0 ETH0.0005381220
Mint34205902017-03-26 7:12:412764 days ago1490512361IN
DCAssetBackend
0 ETH0.0014281420
Mint31906112017-02-15 23:12:382802 days ago1487200358IN
DCAssetBackend
0 ETH0.0008062230
Mint31905992017-02-15 23:10:222802 days ago1487200222IN
DCAssetBackend
0 ETH0.0021402930
Mint26769062016-11-23 0:06:242887 days ago1479859584IN
DCAssetBackend
0 ETH0.000163762.29544967
Mint26754702016-11-22 18:12:242888 days ago1479838344IN
DCAssetBackend
0 ETH0.0009674636
Mint26753412016-11-22 17:39:302888 days ago1479836370IN
DCAssetBackend
0 ETH0.0025683436
Mint25955842016-11-09 13:58:192901 days ago1478699899IN
DCAssetBackend
0 ETH0.000061212.31115449
Mint25952682016-11-09 12:43:402901 days ago1478695420IN
DCAssetBackend
0 ETH0.000163362.31115449
Set Symbol25124442016-10-26 17:15:352915 days ago1477502135IN
DCAssetBackend
0 ETH0.00553193190.11378458
Set Symbol25122132016-10-26 16:24:592915 days ago1477499099IN
DCAssetBackend
0 ETH0.00507976174.57448061
Set Membership24327922016-10-13 13:39:452928 days ago1476365985IN
DCAssetBackend
0 ETH0.02505888840.00000001
Mint23850432016-10-05 14:58:472936 days ago1475679527IN
DCAssetBackend
0 ETH0.0022553791.14855862
Mint23846882016-10-05 13:32:152936 days ago1475674335IN
DCAssetBackend
0 ETH0.0062074991.14855862
Cancel23685712016-10-02 21:18:162938 days ago1475443096IN
DCAssetBackend
0 ETH0.001741793.08970382
Mint23655002016-10-02 8:59:132939 days ago1475398753IN
DCAssetBackend
0 ETH0.000619425
Mint23649212016-10-02 6:50:082939 days ago1475391008IN
DCAssetBackend
0 ETH0.00311825113.08283285
Mint23647612016-10-02 6:16:122939 days ago1475388972IN
DCAssetBackend
0 ETH0.002494690.46626628
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DCAssetBackend

Compiler Version
v0.3.6+commit.3fc68da

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2016-09-15
*/

contract Assertive {
  function assert(bool assertion) {
    if (!assertion) throw;
  }
}

contract TokenRecipient {
  function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData);
}

contract Owned is Assertive {
  address internal owner;
  event SetOwner(address indexed previousOwner, address indexed newOwner);
  function Owned () {
    owner = msg.sender;
  }
  modifier onlyOwner {
    assert(msg.sender == owner);
    _
  }
  function setOwner(address newOwner) onlyOwner {
    SetOwner(owner, newOwner);
    owner = newOwner;
  }
  function getOwner() returns (address out) {
    return owner;
  }
}

contract StateTransferrable is Owned {
  bool internal locked;
  event Locked(address indexed from);
  event PropertySet(address indexed from);
  modifier onlyIfUnlocked {
    assert(!locked);
    _
  }
  modifier setter {
    _
    PropertySet(msg.sender);
  }
  modifier onlyOwnerUnlocked {
    assert(!locked && msg.sender == owner);
    _
  }
  function lock() onlyOwner onlyIfUnlocked {
    locked = true;
    Locked(msg.sender);
  }
  function isLocked() returns (bool status) {
    return locked;
  }
}

contract TrustEvents {
  event AuthInit(address indexed from);
  event AuthComplete(address indexed from, address indexed with);
  event AuthPending(address indexed from);
  event Unauthorized(address indexed from);
  event InitCancel(address indexed from);
  event NothingToCancel(address indexed from);
  event SetMasterKey(address indexed from);
  event AuthCancel(address indexed from, address indexed with);
  event NameRegistered(address indexed from, bytes32 indexed name);
}

contract Trust is StateTransferrable, TrustEvents {
  mapping (address => bool) public masterKeys;
  mapping (address => bytes32) public nameRegistry;
  address[] public masterKeyIndex;
  mapping (address => bool) public masterKeyActive;
  mapping (address => bool) public trustedClients;
  mapping (bytes32 => address) public functionCalls;
  mapping (address => bytes32) public functionCalling;
  function activateMasterKey(address addr) internal {
    if (!masterKeyActive[addr]) {
      masterKeyActive[addr] = true;
      masterKeyIndex.push(addr);
    }
  }
  function setTrustedClient(address addr) onlyOwnerUnlocked setter {
    trustedClients[addr] = true;
  }
  function untrustClient(address addr) multisig(sha3(msg.data)) {
    trustedClients[addr] = false;
  }
  function trustClient(address addr) multisig(sha3(msg.data)) {
    trustedClients[addr] = true;
  }
  function setMasterKey(address addr) onlyOwnerUnlocked {
    assert(!masterKeys[addr]);
    activateMasterKey(addr);
    masterKeys[addr] = true;
    SetMasterKey(msg.sender);
  }
  modifier onlyMasterKey {
    assert(masterKeys[msg.sender]);
    _
  }
  function extractMasterKeyIndexLength() returns (uint256 length) {
    return masterKeyIndex.length;
  }
  function resetAction(bytes32 hash) internal {
    address addr = functionCalls[hash];
    functionCalls[hash] = 0x0;
    functionCalling[addr] = bytes32(0);
  }
  function authCancel(address from) external returns (uint8 status) {
    if (!masterKeys[from] || !trustedClients[msg.sender]) {
      Unauthorized(from);
      return 0;
    }
    bytes32 call = functionCalling[from];
    if (call == bytes32(0)) {
      NothingToCancel(from);
      return 1;
    } else {
      AuthCancel(from, from);
      functionCalling[from] = bytes32(0);
      functionCalls[call] = 0x0;
      return 2;
    }
  }
  function cancel() returns (uint8 code) {
    if (!masterKeys[msg.sender]) {
      Unauthorized(msg.sender);
      return 0;
    }
    bytes32 call = functionCalling[msg.sender];
    if (call == bytes32(0)) {
      NothingToCancel(msg.sender);
      return 1;
    } else {
      AuthCancel(msg.sender, msg.sender);
      bytes32 hash = functionCalling[msg.sender];
      functionCalling[msg.sender] = 0x0;
      functionCalls[hash] = 0;
      return 2;
    }
  }
  function authCall(address from, bytes32 hash) external returns (uint8 code) {
    if (!masterKeys[from] && !trustedClients[msg.sender]) {
      Unauthorized(from);
      return 0;
    }
    if (functionCalling[from] == 0) {
      if (functionCalls[hash] == 0x0) {
        functionCalls[hash] = from;
        functionCalling[from] = hash;
        AuthInit(from);
        return 1;
      } else { 
        AuthComplete(functionCalls[hash], from);
        resetAction(hash);
        return 2;
      }
    } else {
      AuthPending(from);
      return 3;
    }
  }
  modifier multisig (bytes32 hash) {
    if (!masterKeys[msg.sender]) {
      Unauthorized(msg.sender);
    } else if (functionCalling[msg.sender] == 0) {
      if (functionCalls[hash] == 0x0) {
        functionCalls[hash] = msg.sender;
        functionCalling[msg.sender] = hash;
        AuthInit(msg.sender);
      } else { 
        AuthComplete(functionCalls[hash], msg.sender);
        resetAction(hash);
        _
      }
    } else {
      AuthPending(msg.sender);
    }
  }
  function voteOutMasterKey(address addr) multisig(sha3(msg.data)) {
    assert(masterKeys[addr]);
    masterKeys[addr] = false;
  }
  function voteInMasterKey(address addr) multisig(sha3(msg.data)) {
    assert(!masterKeys[addr]);
    activateMasterKey(addr);
    masterKeys[addr] = true;
  }
  function identify(bytes32 name) onlyMasterKey {
    nameRegistry[msg.sender] = name;
    NameRegistered(msg.sender, name);
  }
  function nameFor(address addr) returns (bytes32 name) {
    return nameRegistry[addr];
  }
}


contract TrustClient is StateTransferrable, TrustEvents {
  address public trustAddress;
  function setTrust(address addr) setter onlyOwnerUnlocked {
    trustAddress = addr;
  }
  function nameFor(address addr) constant returns (bytes32 name) {
    return Trust(trustAddress).nameFor(addr);
  }
  function cancel() returns (uint8 status) {
    assert(trustAddress != address(0x0));
    uint8 code = Trust(trustAddress).authCancel(msg.sender);
    if (code == 0) Unauthorized(msg.sender);
    else if (code == 1) NothingToCancel(msg.sender);
    else if (code == 2) AuthCancel(msg.sender, msg.sender);
    return code;
  }
  modifier multisig (bytes32 hash) {
    assert(trustAddress != address(0x0));
    address current = Trust(trustAddress).functionCalls(hash);
    uint8 code = Trust(trustAddress).authCall(msg.sender, hash);
    if (code == 0) Unauthorized(msg.sender);
    else if (code == 1) AuthInit(msg.sender);
    else if (code == 2) {
      AuthComplete(current, msg.sender);
      _
    }
    else if (code == 3) {
      AuthPending(msg.sender);
    }
  }
}
contract Relay {
  function relayReceiveApproval(address _caller, address _spender, uint256 _amount, bytes _extraData) returns (bool success);
}
contract TokenBase is Owned {
    bytes32 public standard = 'Token 0.1';
    bytes32 public name;
    bytes32 public symbol;
    uint256 public totalSupply;
    bool public allowTransactions;

    event Approval(address indexed from, address indexed spender, uint256 amount);

    mapping (address => uint256) public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;

    event Transfer(address indexed from, address indexed to, uint256 value);

    function transfer(address _to, uint256 _value) returns (bool success);
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success);
    function approve(address _spender, uint256 _value) returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);

    function () {
        throw;
    }
}

contract Precision {
  uint8 public decimals;
}
contract Token is TokenBase, Precision {}
contract Util {
  function pow10(uint256 a, uint8 b) internal returns (uint256 result) {
    for (uint8 i = 0; i < b; i++) {
      a *= 10;
    }
    return a;
  }
  function div10(uint256 a, uint8 b) internal returns (uint256 result) {
    for (uint8 i = 0; i < b; i++) {
      a /= 10;
    }
    return a;
  }
  function max(uint256 a, uint256 b) internal returns (uint256 res) {
    if (a >= b) return a;
    return b;
  }
}

/**
 * @title DVIP Contract. DCAsset Membership Token contract.
 *
 * @author Ray Pulver, [email protected]
 */
contract DVIP is Token, StateTransferrable, TrustClient, Util {

  uint256 public totalSupply;

  mapping (address => bool) public frozenAccount;

  mapping (address => address[]) public allowanceIndex;
  mapping (address => mapping (address => bool)) public allowanceActive;
  address[] public accountIndex;
  mapping (address => bool) public accountActive;
  address public oversightAddress;
  uint256 public expiry;

  uint256 public treasuryBalance;

  bool public isActive;
  mapping (address => uint256) public exportFee;
  address[] public exportFeeIndex;
  mapping (address => bool) exportFeeActive;

  mapping (address => uint256) public importFee;
  address[] public importFeeIndex;
  mapping (address => bool) importFeeActive;

  event FrozenFunds(address target, bool frozen);
  event PrecisionSet(address indexed from, uint8 precision);
  event TransactionsShutDown(address indexed from);
  event FeeSetup(address indexed from, address indexed target, uint256 amount);


  /**
   * Constructor.
   *
   */
  function DVIP() {
    isActive = true;
    treasuryBalance = 0;
    totalSupply = 0;
    name = "DVIP";
    symbol = "DVIP";
    decimals = 6;
    allowTransactions = true;
    expiry = 1514764800; //1 jan 2018
  }


  /* ---------------  modifiers  --------------*/

  /**
   * Makes sure a method is only called by an overseer.
   */
  modifier onlyOverseer {
    assert(msg.sender == oversightAddress);
    _
  }

  /* ---------------  setter methods, only for the unlocked state --------------*/


  /**
   * Sets the oversight address (not the contract).
   *
   * @param addr The oversight contract address.
   */
  function setOversight(address addr) onlyOwnerUnlocked setter {
    oversightAddress = addr;
  }


  /**
   * Sets the total supply
   *
   * @param total Total supply of the asset.
   */
  function setTotalSupply(uint256 total) onlyOwnerUnlocked setter {
    totalSupply = total;
  }

  /**
   * Set the Token Standard the contract applies to.
   *
   * @param std the Standard.
   */
  function setStandard(bytes32 std) onlyOwnerUnlocked setter {
    standard = std;
  }

  /**
   * Sets the name of the contraxt
   *
   * @param _name the name.
   */
  function setName(bytes32 _name) onlyOwnerUnlocked setter {
    name = _name;
  }

  /**
   * Sets the symbol
   *
   * @param sym The Symbol
   */
  function setSymbol(bytes32 sym) onlyOwnerUnlocked setter {
    symbol = sym;
  }

  /**
   * Sets the precision
   *
   * @param precision Amount of decimals
   */
  function setPrecisionDirect(uint8 precision) onlyOwnerUnlocked {
    decimals = precision;
    PrecisionSet(msg.sender, precision);
  }

  /**
   * Sets the balance of a certain account.
   *
   * @param addr Address of the account
   * @param amount Amount of assets to set on the account
   */
  function setAccountBalance(address addr, uint256 amount) onlyOwnerUnlocked {
    balanceOf[addr] = amount;
    activateAccount(addr);
  }

  /**
   * Sets an allowance from a specific account to a specific account.
   *
   * @param from From-part of the allowance
   * @param to To-part of the allowance
   * @param amount Amount of the allowance
   */
  function setAccountAllowance(address from, address to, uint256 amount) onlyOwnerUnlocked {
    allowance[from][to] = amount;
    activateAllowanceRecord(from, to);
  }

  /**
   * Sets the treasure balance to a certain account.
   *
   * @param amount Amount of assets to pre-set in the treasury
   */
  function setTreasuryBalance(uint256 amount) onlyOwnerUnlocked {
    treasuryBalance = amount;
  }

  /**
   * Sets a certain account on frozen/unfrozen
   *
   * @param addr Account that will be frozen/unfrozen
   * @param frozen Boolean to freeze or unfreeze
   */
  function setAccountFrozenStatus(address addr, bool frozen) onlyOwnerUnlocked {
    activateAccount(addr);
    frozenAccount[addr] = frozen;
  }

  /**
   * Sets up a import fee for a certain address.
   *
   * @param addr Address that will require fee
   * @param fee Amount of fee
   */
  function setupImportFee(address addr, uint256 fee) onlyOwnerUnlocked {
    importFee[addr] = fee;
    activateImportFeeChargeRecord(addr);
    FeeSetup(msg.sender, addr, fee);
  }
 
  /**
   * Sets up a export fee for a certain address.
   *
   * @param addr Address that will require fee
   * @param fee Amount of fee
   */
  function setupExportFee(address addr, uint256 fee) onlyOwnerUnlocked {
    exportFee[addr] = fee;
    activateExportFeeChargeRecord(addr);
    FeeSetup(msg.sender, addr, fee);
  }

  /* ---------------  main token methods  --------------*/


  /**
   * @notice Transfer `_amount` from `msg.sender.address()` to `_to`.
   *
   * @param _to Address that will receive.
   * @param _amount Amount to be transferred.
   */
  function transfer(address _to, uint256 _amount) returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[msg.sender]);
    assert(balanceOf[msg.sender] >= _amount);
    assert(balanceOf[_to] + _amount >= balanceOf[_to]);
    activateAccount(msg.sender);
    activateAccount(_to);
    balanceOf[msg.sender] -= _amount;
    if (_to == address(this)) treasuryBalance += _amount;
    else balanceOf[_to] += _amount;
    Transfer(msg.sender, _to, _amount);
    return true;
  }

  /**
   * @notice Transfer `_amount` from `_from` to `_to`.
   *
   * @param _from Origin address
   * @param _to Address that will receive
   * @param _amount Amount to be transferred.
   * @return result of the method call
   */
  function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[msg.sender]);
    assert(!frozenAccount[_from]);
    assert(balanceOf[_from] >= _amount);
    assert(balanceOf[_to] + _amount >= balanceOf[_to]);
    assert(_amount <= allowance[_from][msg.sender]);
    balanceOf[_from] -= _amount;
    balanceOf[_to] += _amount;
    allowance[_from][msg.sender] -= _amount;
    activateAccount(_from);
    activateAccount(_to);
    activateAccount(msg.sender);
    Transfer(_from, _to, _amount);
    return true;
  }

  /**
   * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()`
   *
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @param _extraData Consequential contract to be executed by spender in same transcation.
   * @return result of the method call
   */
  function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[msg.sender]);
    allowance[msg.sender][_spender] = _amount;
    activateAccount(msg.sender);
    activateAccount(_spender);
    activateAllowanceRecord(msg.sender, _spender);
    TokenRecipient spender = TokenRecipient(_spender);
    spender.receiveApproval(msg.sender, _amount, this, _extraData);
    Approval(msg.sender, _spender, _amount);
    return true;
  }

  /**
   * @notice Approve spender `_spender` to transfer `_amount` from `msg.sender.address()`
   *
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @return result of the method call
   */
  function approve(address _spender, uint256 _amount) returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[msg.sender]);
    allowance[msg.sender][_spender] = _amount;
    activateAccount(msg.sender);
    activateAccount(_spender);
    activateAllowanceRecord(msg.sender, _spender);
    Approval(msg.sender, _spender, _amount);
    return true;
  }

  /* ---------------  multisig admin methods  --------------*/



  /**
   * @notice Sets the expiry time in milliseconds since 1970.
   *
   * @param ts milliseconds since 1970.
   *
   */
  function setExpiry(uint256 ts) multisig(sha3(msg.data)) {
    expiry = ts;
  }

  /**
   * @notice Mints `mintedAmount` new tokens to the hotwallet `hotWalletAddress`.
   *
   * @param mintedAmount Amount of new tokens to be minted.
   */
  function mint(uint256 mintedAmount) multisig(sha3(msg.data)) {
    treasuryBalance += mintedAmount;
    totalSupply += mintedAmount;
  }

  /**
   * @notice Destroys `destroyAmount` new tokens from the hotwallet `hotWalletAddress`
   *
   * @param destroyAmount Amount of new tokens to be minted.
   */
  function destroyTokens(uint256 destroyAmount) multisig(sha3(msg.data)) {
    assert(treasuryBalance >= destroyAmount);
    treasuryBalance -= destroyAmount;
    totalSupply -= destroyAmount;
  }

  /**
   * @notice Transfers `amount` from the treasury to `to`
   *
   * @param to Address to transfer to
   * @param amount Amount to transfer from treasury
   */
  function transferFromTreasury(address to, uint256 amount) multisig(sha3(msg.data)) {
    assert(treasuryBalance >= amount);
    treasuryBalance -= amount;
    balanceOf[to] += amount;
    activateAccount(to);
  }

  /* ---------------  fee setting administration methods  --------------*/

  /**
   * @notice Sets an import fee of `fee` on address `addr`
   *
   * @param addr Address for which the fee is valid
   * @param addr fee Fee
   *
   */
  function setImportFee(address addr, uint256 fee) multisig(sha3(msg.data)) {
    uint256 max = 1;
    max = pow10(1, decimals);
    assert(fee <= max);
    importFee[addr] = fee;
    activateImportFeeChargeRecord(addr);
  }

  /**
   * @notice Sets an export fee of `fee` on address `addr`
   *
   * @param addr Address for which the fee is valid
   * @param addr fee Fee
   *
   */
  function setExportFee(address addr, uint256 fee) multisig(sha3(msg.data)) {
    uint256 max = 1;
    max = pow10(1, decimals);
    assert(fee <= max);
    exportFee[addr] = fee;
    activateExportFeeChargeRecord(addr);
  }


  /* ---------------  multisig emergency methods --------------*/

  /**
   * @notice Sets allow transactions to `allow`
   *
   * @param allow Allow or disallow transactions
   */
  function voteAllowTransactions(bool allow) multisig(sha3(msg.data)) {
    assert(allow != allowTransactions);
    allowTransactions = allow;
  }

  /**
   * @notice Destructs the contract and sends remaining `this.balance` Ether to `beneficiary`
   *
   * @param beneficiary Beneficiary of remaining Ether on contract
   */
  function voteSuicide(address beneficiary) multisig(sha3(msg.data)) {
    selfdestruct(beneficiary);
  }

  /**
   * @notice Sets frozen to `freeze` for account `target`
   *
   * @param addr Address to be frozen/unfrozen
   * @param freeze Freeze/unfreeze account
   */
  function freezeAccount(address addr, bool freeze) multisig(sha3(msg.data)) {
    frozenAccount[addr] = freeze;
    activateAccount(addr);
  }

  /**
   * @notice Seizes `seizeAmount` of tokens from `address` and transfers it to hotwallet
   *
   * @param addr Adress to seize tokens from
   * @param amount Amount of tokens to seize
   */
  function seizeTokens(address addr, uint256 amount) multisig(sha3(msg.data)) {
    assert(balanceOf[addr] >= amount);
    assert(frozenAccount[addr]);
    activateAccount(addr);
    balanceOf[addr] -= amount;
    treasuryBalance += amount;
  }

  /* --------------- fee calculation method ---------------- */


  /**
   * @notice 'Returns the fee for a transfer from `from` to `to` on an amount `amount`.
   *
   * Fee's consist of a possible
   *    - import fee on transfers to an address
   *    - export fee on transfers from an address
   * DVIP ownership on an address
   *    - reduces fee on a transfer from this address to an import fee-ed address
   *    - reduces the fee on a transfer to this address from an export fee-ed address
   * DVIP discount does not work for addresses that have an import fee or export fee set up against them.
   *
   * DVIP discount goes up to 100%
   *
   * @param from From address
   * @param to To address
   * @param amount Amount for which fee needs to be calculated.
   *
   */
  function feeFor(address from, address to, uint256 amount) constant external returns (uint256 value) {
    uint256 fee = exportFee[from] + importFee[to];
    if (fee == 0) return 0;
    uint256 amountHeld;
    bool discounted = true;
    uint256 oneDVIPUnit;
    if (exportFee[from] == 0 && balanceOf[from] != 0 && now < expiry) {
      amountHeld = balanceOf[from];
    } else if (importFee[to] == 0 && balanceOf[to] != 0 && now < expiry) {
      amountHeld = balanceOf[to];
    } else discounted = false;
    if (discounted) {
      oneDVIPUnit = pow10(1, decimals);
      if (amountHeld > oneDVIPUnit) amountHeld = oneDVIPUnit;
      uint256 remaining = oneDVIPUnit - amountHeld;
      return div10(amount*fee*remaining, decimals*2);
    }
    return div10(amount*fee, decimals);
  }


  /* ---------------  overseer methods for emergency --------------*/

  /**
   * @notice Shuts down all transaction and approval options on the asset contract
   */
  function shutdownTransactions() onlyOverseer {
    allowTransactions = false;
    TransactionsShutDown(msg.sender);
  }

  /* ---------------  helper methods for siphoning --------------*/

  function extractAccountAllowanceRecordLength(address addr) constant returns (uint256 len) {
    return allowanceIndex[addr].length;
  }

  function extractAccountLength() constant returns (uint256 length) {
    return accountIndex.length;
  }

  /* ---------------  private methods --------------*/

  function activateAccount(address addr) internal {
    if (!accountActive[addr]) {
      accountActive[addr] = true;
      accountIndex.push(addr);
    }
  }

  function activateAllowanceRecord(address from, address to) internal {
    if (!allowanceActive[from][to]) {
      allowanceActive[from][to] = true;
      allowanceIndex[from].push(to);
    }
  }

  function activateExportFeeChargeRecord(address addr) internal {
    if (!exportFeeActive[addr]) {
      exportFeeActive[addr] = true;
      exportFeeIndex.push(addr);
    }
  }

  function activateImportFeeChargeRecord(address addr) internal {
    if (!importFeeActive[addr]) {
      importFeeActive[addr] = true;
      importFeeIndex.push(addr);
    }
  }
  function extractImportFeeChargeLength() returns (uint256 length) {
    return importFeeIndex.length;
  }

  function extractExportFeeChargeLength() returns (uint256 length) {
    return exportFeeIndex.length;
  }
}

/**
 * @title DCAssetBackend Contract
 *
 * @author Ray Pulver, [email protected]
 */
contract DCAssetBackend is Owned, Precision, StateTransferrable, TrustClient, Util {

  bytes32 public standard = 'Token 0.1';
  bytes32 public name;
  bytes32 public symbol;

  bool public allowTransactions;

  event Approval(address indexed from, address indexed spender, uint256 amount);

  mapping (address => uint256) public balanceOf;
  mapping (address => mapping (address => uint256)) public allowance;

  event Transfer(address indexed from, address indexed to, uint256 value);

  uint256 public totalSupply;

  address public hotWalletAddress;
  address public assetAddress;
  address public oversightAddress;
  address public membershipAddress;

  mapping (address => bool) public frozenAccount;

  mapping (address => address[]) public allowanceIndex;
  mapping (address => mapping (address => bool)) public allowanceActive;
  address[] public accountIndex;
  mapping (address => bool) public accountActive;

  bool public isActive;
  uint256 public treasuryBalance;

  mapping (address => uint256) public feeCharge;
  address[] public feeChargeIndex;
  mapping (address => bool) feeActive;

  event FrozenFunds(address target, bool frozen);
  event PrecisionSet(address indexed from, uint8 precision);
  event TransactionsShutDown(address indexed from);
  event FeeSetup(address indexed from, address indexed target, uint256 amount);


  /**
   * Constructor.
   *
   * @param tokenName Name of the Token
   * @param tokenSymbol The Token Symbol
   */
  function DCAssetBackend(bytes32 tokenSymbol, bytes32 tokenName) {
    isActive = true;
    name = tokenName;
    symbol = tokenSymbol;
    decimals = 6;
    allowTransactions = true;
  }

  /* ---------------  modifiers  --------------*/

  /**
   * Makes sure a method is only called by an overseer.
   */
  modifier onlyOverseer {
    assert(msg.sender == oversightAddress);
    _
  }

  /**
   * Make sure only the front end Asset can call the transfer methods
   */
   modifier onlyAsset {
    assert(msg.sender == assetAddress);
    _
   }

  /* ---------------  setter methods, only for the unlocked state --------------*/


  /**
   * Sets the hot wallet contract address
   *
   * @param addr Address of the Hotwallet
   */
  function setHotWallet(address addr) onlyOwnerUnlocked setter {
    hotWalletAddress = addr;
  }

  /**
    * Sets the token facade contract address
    *
    * @param addr Address of the front-end Asset
    */
  function setAsset(address addr) onlyOwnerUnlocked setter {
    assetAddress = addr;
  }

  /**
   * Sets the membership contract address
   *
   * @param addr Address of the membership contract
   */
  function setMembership(address addr) onlyOwnerUnlocked setter {
    membershipAddress = addr;
  }

  /**
   * Sets the oversight address (not the contract).
   *
   * @param addr The oversight contract address.
   */
  function setOversight(address addr) onlyOwnerUnlocked setter {
    oversightAddress = addr;
  }

  /**
   * Sets the total supply
   *
   * @param total Total supply of the asset.
   */
  function setTotalSupply(uint256 total) onlyOwnerUnlocked setter {
    totalSupply = total;
  }

  /**
   * Set the Token Standard the contract applies to.
   *
   * @param std the Standard.
   */
  function setStandard(bytes32 std) onlyOwnerUnlocked setter {
    standard = std;
  }

  /**
   * Sets the name of the contraxt
   *
   * @param _name the name.
   */
  function setName(bytes32 _name) onlyOwnerUnlocked setter {
    name = _name;
  }

  /**
   * Sets the symbol
   *
   * @param sym The Symbol
   */
  function setSymbol(bytes32 sym) onlyOwnerUnlocked setter {
    symbol = sym;
  }

  /**
   * Sets the precision
   *
   * @param precision Amount of decimals
   */
  function setPrecisionDirect(uint8 precision) onlyOwnerUnlocked {
    decimals = precision;
    PrecisionSet(msg.sender, precision);
  }

  /**
   * Sets the balance of a certain account.
   *
   * @param addr Address of the account
   * @param amount Amount of assets to set on the account
   */
  function setAccountBalance(address addr, uint256 amount) onlyOwnerUnlocked {
    balanceOf[addr] = amount;
    activateAccount(addr);
  }

  /**
   * Sets an allowance from a specific account to a specific account.
   *
   * @param from From-part of the allowance
   * @param to To-part of the allowance
   * @param amount Amount of the allowance
   */
  function setAccountAllowance(address from, address to, uint256 amount) onlyOwnerUnlocked {
    allowance[from][to] = amount;
    activateAllowanceRecord(from, to);
  }

  /**
   * Sets the treasure balance to a certain account.
   *
   * @param amount Amount of assets to pre-set in the treasury
   */
  function setTreasuryBalance(uint256 amount) onlyOwnerUnlocked {
    treasuryBalance = amount;
  }

  /**
   * Sets a certain account on frozen/unfrozen
   *
   * @param addr Account that will be frozen/unfrozen
   * @param frozen Boolean to freeze or unfreeze
   */
  function setAccountFrozenStatus(address addr, bool frozen) onlyOwnerUnlocked {
    activateAccount(addr);
    frozenAccount[addr] = frozen;
  }

  /* ---------------  main token methods  --------------*/


  /**
   * @notice Transfer `_amount` from `_caller` to `_to`.
   *
   * @param _caller Origin address
   * @param _to Address that will receive.
   * @param _amount Amount to be transferred.
   */
  function transfer(address _caller, address _to, uint256 _amount) onlyAsset returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[_caller]);
    assert(balanceOf[_caller] >= _amount);
    assert(balanceOf[_to] + _amount >= balanceOf[_to]);
    activateAccount(_caller);
    activateAccount(_to);
    balanceOf[_caller] -= _amount;
    if (_to == address(this)) treasuryBalance += _amount;
    else {
        uint256 fee = feeFor(_caller, _to, _amount);
        balanceOf[_to] += _amount - fee;
        treasuryBalance += fee;
    }
    Transfer(_caller, _to, _amount);
    return true;
  }

  /**
   * @notice Transfer `_amount` from `_from` to `_to`, invoked by `_caller`.
   *
   * @param _caller Invoker of the call (owner of the allowance)
   * @param _from Origin address
   * @param _to Address that will receive
   * @param _amount Amount to be transferred.
   * @return result of the method call
   */
  function transferFrom(address _caller, address _from, address _to, uint256 _amount) onlyAsset returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[_caller]);
    assert(!frozenAccount[_from]);
    assert(balanceOf[_from] >= _amount);
    assert(balanceOf[_to] + _amount >= balanceOf[_to]);
    assert(_amount <= allowance[_from][_caller]);
    balanceOf[_from] -= _amount;
    uint256 fee = feeFor(_from, _to, _amount);
    balanceOf[_to] += _amount - fee;
    treasuryBalance += fee;
    allowance[_from][_caller] -= _amount;
    activateAccount(_from);
    activateAccount(_to);
    activateAccount(_caller);
    Transfer(_from, _to, _amount);
    return true;
  }

  /**
   * @notice Approve Approves spender `_spender` to transfer `_amount` from `_caller`
   *
   * @param _caller Address that grants the allowance
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @param _extraData Consequential contract to be executed by spender in same transcation.
   * @return result of the method call
   */
  function approveAndCall(address _caller, address _spender, uint256 _amount, bytes _extraData) onlyAsset returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[_caller]);
    allowance[_caller][_spender] = _amount;
    activateAccount(_caller);
    activateAccount(_spender);
    activateAllowanceRecord(_caller, _spender);
    TokenRecipient spender = TokenRecipient(_spender);
    assert(Relay(assetAddress).relayReceiveApproval(_caller, _spender, _amount, _extraData));
    Approval(_caller, _spender, _amount);
    return true;
  }

  /**
   * @notice Approve Approves spender `_spender` to transfer `_amount` from `_caller`
   *
   * @param _caller Address that grants the allowance
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @return result of the method call
   */
  function approve(address _caller, address _spender, uint256 _amount) onlyAsset returns (bool success) {
    assert(allowTransactions);
    assert(!frozenAccount[_caller]);
    allowance[_caller][_spender] = _amount;
    activateAccount(_caller);
    activateAccount(_spender);
    activateAllowanceRecord(_caller, _spender);
    Approval(_caller, _spender, _amount);
    return true;
  }

  /* ---------------  multisig admin methods  --------------*/


  /**
   * @notice Mints `mintedAmount` new tokens to the hotwallet `hotWalletAddress`.
   *
   * @param mintedAmount Amount of new tokens to be minted.
   */
  function mint(uint256 mintedAmount) multisig(sha3(msg.data)) {
    activateAccount(hotWalletAddress);
    balanceOf[hotWalletAddress] += mintedAmount;
    totalSupply += mintedAmount;
  }

  /**
   * @notice Destroys `destroyAmount` new tokens from the hotwallet `hotWalletAddress`
   *
   * @param destroyAmount Amount of new tokens to be minted.
   */
  function destroyTokens(uint256 destroyAmount) multisig(sha3(msg.data)) {
    assert(balanceOf[hotWalletAddress] >= destroyAmount);
    activateAccount(hotWalletAddress);
    balanceOf[hotWalletAddress] -= destroyAmount;
    totalSupply -= destroyAmount;
  }

  /**
   * @notice Transfers `amount` from the treasury to `to`
   *
   * @param to Address to transfer to
   * @param amount Amount to transfer from treasury
   */
  function transferFromTreasury(address to, uint256 amount) multisig(sha3(msg.data)) {
    assert(treasuryBalance >= amount);
    treasuryBalance -= amount;
    balanceOf[to] += amount;
    activateAccount(to);
  }

  /* ---------------  multisig emergency methods --------------*/

  /**
   * @notice Sets allow transactions to `allow`
   *
   * @param allow Allow or disallow transactions
   */
  function voteAllowTransactions(bool allow) multisig(sha3(msg.data)) {
    if (allow == allowTransactions) throw;
    allowTransactions = allow;
  }

  /**
   * @notice Destructs the contract and sends remaining `this.balance` Ether to `beneficiary`
   *
   * @param beneficiary Beneficiary of remaining Ether on contract
   */
  function voteSuicide(address beneficiary) multisig(sha3(msg.data)) {
    selfdestruct(beneficiary);
  }

  /**
   * @notice Sets frozen to `freeze` for account `target`
   *
   * @param addr Address to be frozen/unfrozen
   * @param freeze Freeze/unfreeze account
   */
  function freezeAccount(address addr, bool freeze) multisig(sha3(msg.data)) {
    frozenAccount[addr] = freeze;
    activateAccount(addr);
  }

  /**
   * @notice Seizes `seizeAmount` of tokens from `address` and transfers it to hotwallet
   *
   * @param addr Adress to seize tokens from
   * @param amount Amount of tokens to seize
   */
  function seizeTokens(address addr, uint256 amount) multisig(sha3(msg.data)) {
    assert(balanceOf[addr] >= amount);
    assert(frozenAccount[addr]);
    activateAccount(addr);
    balanceOf[addr] -= amount;
    balanceOf[hotWalletAddress] += amount;
  }

  /* ---------------  overseer methods for emergency --------------*/

  /**
   * @notice Shuts down all transaction and approval options on the asset contract
   */
  function shutdownTransactions() onlyOverseer {
    allowTransactions = false;
    TransactionsShutDown(msg.sender);
  }

  /* ---------------  helper methods for siphoning --------------*/

  function extractAccountAllowanceRecordLength(address addr) returns (uint256 len) {
    return allowanceIndex[addr].length;
  }

  function extractAccountLength() returns (uint256 length) {
    return accountIndex.length;
  }


  /* ---------------  private methods --------------*/

  function activateAccount(address addr) internal {
    if (!accountActive[addr]) {
      accountActive[addr] = true;
      accountIndex.push(addr);
    }
  }

  function activateAllowanceRecord(address from, address to) internal {
    if (!allowanceActive[from][to]) {
      allowanceActive[from][to] = true;
      allowanceIndex[from].push(to);
    }
  }
  function feeFor(address a, address b, uint256 amount) returns (uint256 value) {
    if (membershipAddress == address(0x0)) return 0;
    return DVIP(membershipAddress).feeFor(a, b, amount);
  }
}


/**
 * @title DCAssetFacade, Facade for the underlying back-end dcasset token contract. Allow to be updated later.
 *
 * @author P.S.D. Reitsma, [email protected]
 *
 */
contract DCAsset is TokenBase, StateTransferrable, TrustClient, Relay {

   address public backendContract;

   /**
    * Constructor
    *
    *
    */
   function DCAsset(address _backendContract) {
     backendContract = _backendContract;
   }

   function standard() constant returns (bytes32 std) {
     return DCAssetBackend(backendContract).standard();
   }

   function name() constant returns (bytes32 nm) {
     return DCAssetBackend(backendContract).name();
   }

   function symbol() constant returns (bytes32 sym) {
     return DCAssetBackend(backendContract).symbol();
   }

   function decimals() constant returns (uint8 precision) {
     return DCAssetBackend(backendContract).decimals();
   }
  
   function allowance(address from, address to) constant returns (uint256 res) {
     return DCAssetBackend(backendContract).allowance(from, to);
   }


   /* ---------------  multisig admin methods  --------------*/


   /**
    * @notice Sets the backend contract to `_backendContract`. Can only be switched by multisig.
    *
    * @param _backendContract Address of the underlying token contract.
    */
   function setBackend(address _backendContract) multisig(sha3(msg.data)) {
     backendContract = _backendContract;
   }

   /* ---------------  main token methods  --------------*/

   /**
    * @notice Returns the balance of `_address`.
    *
    * @param _address The address of the balance.
    */
   function balanceOf(address _address) constant returns (uint256 balance) {
      return DCAssetBackend(backendContract).balanceOf(_address);
   }

   /**
    * @notice Returns the total supply of the token
    *
    */
   function totalSupply() constant returns (uint256 balance) {
      return DCAssetBackend(backendContract).totalSupply();
   }

  /**
   * @notice Transfer `_amount` to `_to`.
   *
   * @param _to Address that will receive.
   * @param _amount Amount to be transferred.
   */
   function transfer(address _to, uint256 _amount) returns (bool success)  {
      if (!DCAssetBackend(backendContract).transfer(msg.sender, _to, _amount)) throw;
      Transfer(msg.sender, _to, _amount);
      return true;
   }

  /**
   * @notice Approve Approves spender `_spender` to transfer `_amount`.
   *
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @param _extraData Consequential contract to be executed by spender in same transcation.
   * @return result of the method call
   */
   function approveAndCall(address _spender, uint256 _amount, bytes _extraData) returns (bool success) {
      if (!DCAssetBackend(backendContract).approveAndCall(msg.sender, _spender, _amount, _extraData)) throw;
      Approval(msg.sender, _spender, _amount);
      return true;
   }

  /**
   * @notice Approve Approves spender `_spender` to transfer `_amount`.
   *
   * @param _spender Address that receives the cheque
   * @param _amount Amount on the cheque
   * @return result of the method call
   */
   function approve(address _spender, uint256 _amount) returns (bool success) {
      if (!DCAssetBackend(backendContract).approve(msg.sender, _spender, _amount)) throw;
      Approval(msg.sender, _spender, _amount);
      return true;
   }

  /**
   * @notice Transfer `_amount` from `_from` to `_to`.
   *
   * @param _from Origin address
   * @param _to Address that will receive
   * @param _amount Amount to be transferred.
   * @return result of the method call
   */
  function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) {
      if (!DCAssetBackend(backendContract).transferFrom(msg.sender, _from, _to, _amount)) throw;
      Transfer(_from, _to, _amount);
      return true;
  }

  /**
   * @notice Returns fee for transferral of `_amount` from `_from` to `_to`.
   *
   * @param _from Origin address
   * @param _to Address that will receive
   * @param _amount Amount to be transferred.
   * @return height of the fee
   */
  function feeFor(address _from, address _to, uint256 _amount) returns (uint256 amount) {
      return DCAssetBackend(backendContract).feeFor(_from, _to, _amount);
  }

  /* ---------------  to be called by backend  --------------*/

  function relayReceiveApproval(address _caller, address _spender, uint256 _amount, bytes _extraData) returns (bool success) {
     assert(msg.sender == backendContract);
     TokenRecipient spender = TokenRecipient(_spender);
     spender.receiveApproval(_caller, _amount, this, _extraData);
     return true;
  }

}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"assertion","type":"bool"}],"name":"assert","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setOversight","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"nameFor","outputs":[{"name":"name","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[],"name":"assetAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"membershipAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"feeCharge","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"isActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"precision","type":"uint8"}],"name":"setPrecisionDirect","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"treasuryBalance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"accountIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"oversightAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"name":"setAccountBalance","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFromTreasury","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"sym","type":"bytes32"}],"name":"setSymbol","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"extractAccountLength","outputs":[{"name":"length","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"standard","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"}],"name":"setName","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"frozen","type":"bool"}],"name":"setAccountFrozenStatus","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"allow","type":"bool"}],"name":"voteAllowTransactions","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"destroyAmount","type":"uint256"}],"name":"destroyTokens","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"trustAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"extractAccountAllowanceRecordLength","outputs":[{"name":"len","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"setAccountAllowance","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"std","type":"bytes32"}],"name":"setStandard","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"shutdownTransactions","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"name":"seizeTokens","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"getOwner","outputs":[{"name":"out","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"bytes32"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"feeChargeIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setHotWallet","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"mintedAmount","type":"uint256"}],"name":"mint","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"setTreasuryBalance","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowanceActive","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"isLocked","outputs":[{"name":"status","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"allowTransactions","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"frozenAccount","outputs":[{"name":"","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"allowanceIndex","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"b","type":"address"},{"name":"amount","type":"uint256"}],"name":"feeFor","outputs":[{"name":"value","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAsset","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setTrust","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"},{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"freeze","type":"bool"}],"name":"freezeAccount","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"cancel","outputs":[{"name":"status","type":"uint8"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"voteSuicide","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"hotWalletAddress","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"total","type":"uint256"}],"name":"setTotalSupply","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"lock","outputs":[],"type":"function"},{"inputs":[{"name":"tokenSymbol","type":"bytes32"},{"name":"tokenName","type":"bytes32"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"target","type":"address"},{"indexed":false,"name":"frozen","type":"bool"}],"name":"FrozenFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"precision","type":"uint8"}],"name":"PrecisionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"TransactionsShutDown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FeeSetup","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"AuthInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"with","type":"address"}],"name":"AuthComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"AuthPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"Unauthorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"InitCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"NothingToCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"SetMasterKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"with","type":"address"}],"name":"AuthCancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"name","type":"bytes32"}],"name":"NameRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"}],"name":"PropertySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"SetOwner","type":"event"}]

606060408181527f546f6b656e20302e31000000000000000000000000000000000000000000000060025580612645833960a09052516080516000805460128054600160ff199182168117909255600394909455600494909455600160a060020a031916331760a060020a60ff021916740600000000000000000000000000000000000000001781556005805490921690921790556125a29081906100a390396000f3606060405236156102925760e060020a60003504630674763c811461029457806306fdde03146102a757806313af4035146102b057806315dacbea146102d257806318160ddd1461030257806318f3fae11461030b57806319350aea146103435780631ba46cfd146103bf5780631c8a1e20146103d15780631d086308146103e357806322f3e2d4146103fb5780632e3be78d14610407578063313ce5671461043e578063313dab201461045157806336f9825f1461045a5780634276016f146104a057806346ddb7db146104b257806348a490fb146104ec57806349e654401461054b5780634de162e41461058257806350944a8f1461058c578063523484a1146105c35780635a3b7e42146105de5780635ac801fe146105e75780635e03d3931461061e5780635f09952e1461065857806367fbd289146106b45780636d1669e1146107105780636d60e6b41461077e57806370a08231146107905780637ef95c6f146107a85780637eff1465146107cd578063811836331461080a57806383d852d91461084157806388b9e10e14610860578063893d20e8146108bf57806395d89b41146108d35780639c9330f7146108dc5780639fb755d714610922578063a0712d6814610959578063a33dd801146109b5578063a4e24847146109ec578063a4e2d63414610a14578063a5488a3714610a29578063b414d4b614610a35578063b7b9549414610a50578063beabacc814610a8c578063c5096a6914610ab9578063d0d552dd14610ae4578063dd57d5c514610b1b578063dd62ed3e14610b52578063e1f21c6714610b77578063e724529c14610ba2578063ea8a1af014610c01578063f2561a4314610c21578063f6b55a9314610c7d578063f7ea7a3d14610c8f578063f83d08ba14610cc6575b005b6102926004355b801515610d3e57610002565b610ce460035481565b610292600435600054610d4190600160a060020a03908116339091161461029b565b610cf6600435602435604435606435600a546000908190610de890600160a060020a03908116339091161461029b565b610ce460085481565b610292600435600054610fd69060a860020a900460ff1615801561033e5750600054600160a060020a0390811633909116145b61029b565b610ce4600435604080516001547f19350aea000000000000000000000000000000000000000000000000000000008252600160a060020a038481166004840152925160009391909116916319350aea916024808301926020929190829003018187876161da5a03f1156100025750506040515191506107c89050565b610d0a600a54600160a060020a031681565b610d0a600c54600160a060020a031681565b610ce460043560146020526000908152604090205481565b610cf660125460ff1681565b61029260043560005461100d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610d2760005460a060020a900460ff1681565b610ce460135481565b610d0a60043560108054829081101561000257506000527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720154600160a060020a031681565b610d0a600b54600160a060020a031681565b6102926004356024356000546110789060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006110a06000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b61029260043560005461127c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610ce46010545b90565b6102926004356000546112a69060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610cf660043560116020526000908152604090205460ff1681565b610ce460025481565b6102926004356000546112dd9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b6102926004356024356000546113079060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006113366000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006114f26000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b604080516020606435600481810135601f8101849004840285018401909552848452610cf694813594602480359560443595608494920191908190840183828082843750949650505050505050600a5460009081906116ac90600160a060020a03908116339091161461029b565b610d0a600154600160a060020a031681565b610ce460043560066020526000908152604090205481565b610ce4600435600160a060020a0381166000908152600e60205260409020545b919050565b6102926004356024356044356000546118e59060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560005461191c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600b5461194690600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006119866000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600054600160a060020a0316610589565b610ce460045481565b610d0a60043560158054829081101561000257506000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750154600160a060020a031681565b610292600435600054611b5d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560003660405180838380828437820191505092505050604051809103902060006000611b946000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600054611d249060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600f60209081526004356000908152604080822090925260243581522054610cf69060ff1681565b610cf660005460a860020a900460ff16610589565b610cf660055460ff1681565b610cf6600435600d6020526000908152604090205460ff1681565b610d0a600435602435600e6020526000828152604090208054829081101561000257506000908152602090200154600160a060020a0316905081565b610cf6600435602435604435600a546000908190611d2990600160a060020a03908116339091161461029b565b610ce46004356024356044355b600c54600090600160a060020a0316811415611ed857506000611ed1565b610292600435600054611f5a9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600054611f919060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600760209081526004356000908152604080822090925260243581522054610ce49081565b610cf6600435602435604435600a54600090611fc890600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006120416000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d27600154600090819061220590600160a060020a031682141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006122ea6000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600954600160a060020a031681565b6102926004356000546124449060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260005461246e9033600160a060020a0390811691161461029b565b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b50565b60008054604051600160a060020a03848116939216917fcbf985117192c8f614a58aaf97226bb80a754772f5f6edf06f87c675f2e6c66391a360008054600160a060020a0319168217905550565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505b50949350505050565b600554610df79060ff1661029b565b600160a060020a0386166000908152600d6020526040902054610e1d9060ff161561029b565b600160a060020a0385166000908152600d6020526040902054610e439060ff161561029b565b600160a060020a038516600090815260066020526040902054610e69908490101561029b565b600160a060020a038416600090815260066020526040902054610e9090808501101561029b565b600160a060020a038581166000908152600760209081526040808320938a1683529290522054610ec29084111561029b565b600160a060020a038516600090815260066020526040902080548490039055610eec858585610ac6565b600160a060020a0385811660009081526006602090815260408083208054868a030190556013805486019055898416835260078252808320938b16835292905220805485900390559050610fc4855b600160a060020a03811660009081526011602052604090205460ff161515610d3e5760406000908120600160a060020a0383169091526011602052805460ff191660019081179091556010805491820180825590919082818380158290116124dd576000838152602090206124dd9181019083015b808211156122015760008155600101610fb0565b610fcd84610f3b565b610d8f86610f3b565b600b8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000805474ff0000000000000000000000000000000000000000191660a060020a83021790556040805160ff831681529051600160a060020a033316917f38b3a18cd3eaacbcc12366dd307363bc43c2e1e76798ff8ba0576968b43af69c919081900360200190a250565b600160a060020a038216600090815260066020526040902081905561109c82610f3b565b5050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156111885760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff16600114156111bb5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a361124784601360005054101561029b565b8060ff16600314156112405760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b5050505050565b601380548590039055600160a060020a038516600090815260066020526040902080548501905561127785610f3b565b611240565b600481905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600c8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600381905560405133600160a060020a03169060008051602061254283398151915290600090a250565b61131082610f3b565b600160a060020a0382166000908152600d60205260409020805460ff1916821790555050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff81166000141561141e5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156114515760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a360055460ff16151584151514156114e157610002565b8060ff16600314156114db5760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b50505050565b6005805460ff1916851790556114db565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156115da5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff166001141561160d5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954600160a060020a0316600090815260066020526040902054611668908590101561029b565b60095461167d90600160a060020a0316610f3b565b600954600160a060020a03166000908152600660205260409020805485900390556008805485900390556114db565b6005546116bb9060ff1661029b565b600160a060020a0386166000908152600d60205260409020546116e19060ff161561029b565b600160a060020a03868116600090815260076020908152604080832093891683529290522084905561171286610f3b565b61171b85610f3b565b6117a786865b600160a060020a038281166000908152600f602090815260408083209385168352929052205460ff16151561109c5760406000818120805460ff19166001908117909155600160a060020a0385168252600e602052919020805491820180825590919082818380158290116124ff576000838152602090206124ff918101908301610fb0565b849050611891600a60009054906101000a9004600160a060020a0316600160a060020a031663c76a4bfb888888886040518560e060020a0281526004018085600160a060020a0316815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156118655780820380516001836020036101000a031916815260200191505b50955050505050506020604051808303816000876161da5a03f11561000257505060405151905061029b565b84600160a060020a031686600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040518082815260200191505060405180910390a360019150610ddf565b600160a060020a0383811660009081526007602090815260408083209386168352929052208190556119178383611721565b505050565b600281905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6005805460ff1916905560405133600160a060020a0316907fd0829c131e91d8572db14b792b2fdf06ff5804c4013287d2a0a729313602649290600090a2565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611a6e5760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff1660011415611aa15760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a038516600090815260066020526040902054611afa908590101561029b565b600160a060020a0385166000908152600d6020526040902054611b1f9060ff1661029b565b611b2885610f3b565b600160a060020a0385811660009081526006602052604080822080548890039055600954909216815220805485019055611240565b60098054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611c7c5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff1660011415611caf5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954611cf790600160a060020a0316610f3b565b600954600160a060020a0316600090815260066020526040902080548501905560088054850190556114db565b601355565b600554611d389060ff1661029b565b600160a060020a0385166000908152600d6020526040902054611d5e9060ff161561029b565b600160a060020a038516600090815260066020526040902054611d84908490101561029b565b600160a060020a038416600090815260066020526040902054611dab90808501101561029b565b611db485610f3b565b611dbd84610f3b565b600160a060020a038581166000908152600660205260409020805485900390553081169085161415611df6576013805484019055611e2c565b611e01858585610ac6565b600160a060020a03851660009081526006602052604090208054828603019055601380548201905590505b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b82600160a060020a031684600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35060015b9392505050565b60408051600c547fc5096a69000000000000000000000000000000000000000000000000000000008252600160a060020a038781166004840152868116602484015260448301869052925192169163c5096a699160648082019260209290919082900301816000876161da5a03f115610002575050604051519150611ed19050565b600a8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b60018054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600554611fd79060ff1661029b565b600160a060020a0384166000908152600d6020526040902054611ffd9060ff161561029b565b600160a060020a03848116600090815260076020908152604080832093871683529290522082905561202e84610f3b565b61203783610f3b565b611e828484611721565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156121295760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff166001141561215c5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a0385166000908152600d60205260409020805460ff19168517905561127785610f3b565b8060ff16600214156121fd5760405133600160a060020a03169081907fc0adb725fbf61748fcd7b4f3c3d67eaf2681ffca84f3364a24dd77c0beff719d90600090a35b8091505b5090565b604080516001547f39b35753000000000000000000000000000000000000000000000000000000008252600160a060020a03338116600484015292519216916339b357539160248082019260209290919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156122a55760405133600160a060020a03169060008051602061258283398151915290600090a26121fd565b8060ff16600114156121ba5760405133600160a060020a0316907f57d0354b1f38cfda21abb3883d48c4b90ca307d1dac24b26b641eb5c5376e2a890600090a26121fd565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156123d25760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156124055760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a383600160a060020a0316ff5b600881905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000546124859060a860020a900460ff161561029b565b6000805475ff000000000000000000000000000000000000000000191660a860020a17815560405133600160a060020a0316917f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15991a2565b5050506000928352506020909120018054600160a060020a0319169091179055565b5050506000928352506020909120018054600160a060020a0319169091179055505622ef83ef54b5df91230b2d65af3c2a65b4ba53b97a27ff5b6f2527562ff0b24c9006512524817fcbc215e2d4dec75e5f54a944fb1a7279a5a6fa33bdcfe09adb5fe5b825dd4cb0c7c390e25ef299231a7f2a51f2ad7bef79d4198f8263756e0f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d5

Deployed Bytecode

0x606060405236156102925760e060020a60003504630674763c811461029457806306fdde03146102a757806313af4035146102b057806315dacbea146102d257806318160ddd1461030257806318f3fae11461030b57806319350aea146103435780631ba46cfd146103bf5780631c8a1e20146103d15780631d086308146103e357806322f3e2d4146103fb5780632e3be78d14610407578063313ce5671461043e578063313dab201461045157806336f9825f1461045a5780634276016f146104a057806346ddb7db146104b257806348a490fb146104ec57806349e654401461054b5780634de162e41461058257806350944a8f1461058c578063523484a1146105c35780635a3b7e42146105de5780635ac801fe146105e75780635e03d3931461061e5780635f09952e1461065857806367fbd289146106b45780636d1669e1146107105780636d60e6b41461077e57806370a08231146107905780637ef95c6f146107a85780637eff1465146107cd578063811836331461080a57806383d852d91461084157806388b9e10e14610860578063893d20e8146108bf57806395d89b41146108d35780639c9330f7146108dc5780639fb755d714610922578063a0712d6814610959578063a33dd801146109b5578063a4e24847146109ec578063a4e2d63414610a14578063a5488a3714610a29578063b414d4b614610a35578063b7b9549414610a50578063beabacc814610a8c578063c5096a6914610ab9578063d0d552dd14610ae4578063dd57d5c514610b1b578063dd62ed3e14610b52578063e1f21c6714610b77578063e724529c14610ba2578063ea8a1af014610c01578063f2561a4314610c21578063f6b55a9314610c7d578063f7ea7a3d14610c8f578063f83d08ba14610cc6575b005b6102926004355b801515610d3e57610002565b610ce460035481565b610292600435600054610d4190600160a060020a03908116339091161461029b565b610cf6600435602435604435606435600a546000908190610de890600160a060020a03908116339091161461029b565b610ce460085481565b610292600435600054610fd69060a860020a900460ff1615801561033e5750600054600160a060020a0390811633909116145b61029b565b610ce4600435604080516001547f19350aea000000000000000000000000000000000000000000000000000000008252600160a060020a038481166004840152925160009391909116916319350aea916024808301926020929190829003018187876161da5a03f1156100025750506040515191506107c89050565b610d0a600a54600160a060020a031681565b610d0a600c54600160a060020a031681565b610ce460043560146020526000908152604090205481565b610cf660125460ff1681565b61029260043560005461100d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610d2760005460a060020a900460ff1681565b610ce460135481565b610d0a60043560108054829081101561000257506000527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720154600160a060020a031681565b610d0a600b54600160a060020a031681565b6102926004356024356000546110789060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006110a06000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b61029260043560005461127c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610ce46010545b90565b6102926004356000546112a69060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610cf660043560116020526000908152604090205460ff1681565b610ce460025481565b6102926004356000546112dd9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b6102926004356024356000546113079060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006113366000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006114f26000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b604080516020606435600481810135601f8101849004840285018401909552848452610cf694813594602480359560443595608494920191908190840183828082843750949650505050505050600a5460009081906116ac90600160a060020a03908116339091161461029b565b610d0a600154600160a060020a031681565b610ce460043560066020526000908152604090205481565b610ce4600435600160a060020a0381166000908152600e60205260409020545b919050565b6102926004356024356044356000546118e59060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560005461191c9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600b5461194690600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006119866000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600054600160a060020a0316610589565b610ce460045481565b610d0a60043560158054829081101561000257506000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750154600160a060020a031681565b610292600435600054611b5d9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260043560003660405180838380828437820191505092505050604051809103902060006000611b946000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610292600435600054611d249060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600f60209081526004356000908152604080822090925260243581522054610cf69060ff1681565b610cf660005460a860020a900460ff16610589565b610cf660055460ff1681565b610cf6600435600d6020526000908152604090205460ff1681565b610d0a600435602435600e6020526000828152604090208054829081101561000257506000908152602090200154600160a060020a0316905081565b610cf6600435602435604435600a546000908190611d2990600160a060020a03908116339091161461029b565b610ce46004356024356044355b600c54600090600160a060020a0316811415611ed857506000611ed1565b610292600435600054611f5a9060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b610292600435600054611f919060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b600760209081526004356000908152604080822090925260243581522054610ce49081565b610cf6600435602435604435600a54600090611fc890600160a060020a03908116339091161461029b565b610292600435602435600036604051808383808284378201915050925050506040518091039020600060006120416000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d27600154600090819061220590600160a060020a031682141561029b565b610292600435600036604051808383808284378201915050925050506040518091039020600060006122ea6000600160a060020a0316600160009054906101000a9004600160a060020a0316600160a060020a0316141561029b565b610d0a600954600160a060020a031681565b6102926004356000546124449060a860020a900460ff1615801561033e5750600054600160a060020a03908116339091161461029b565b61029260005461246e9033600160a060020a0390811691161461029b565b60408051918252519081900360200190f35b604080519115158252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b6040805160ff929092168252519081900360200190f35b50565b60008054604051600160a060020a03848116939216917fcbf985117192c8f614a58aaf97226bb80a754772f5f6edf06f87c675f2e6c66391a360008054600160a060020a0319168217905550565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505b50949350505050565b600554610df79060ff1661029b565b600160a060020a0386166000908152600d6020526040902054610e1d9060ff161561029b565b600160a060020a0385166000908152600d6020526040902054610e439060ff161561029b565b600160a060020a038516600090815260066020526040902054610e69908490101561029b565b600160a060020a038416600090815260066020526040902054610e9090808501101561029b565b600160a060020a038581166000908152600760209081526040808320938a1683529290522054610ec29084111561029b565b600160a060020a038516600090815260066020526040902080548490039055610eec858585610ac6565b600160a060020a0385811660009081526006602090815260408083208054868a030190556013805486019055898416835260078252808320938b16835292905220805485900390559050610fc4855b600160a060020a03811660009081526011602052604090205460ff161515610d3e5760406000908120600160a060020a0383169091526011602052805460ff191660019081179091556010805491820180825590919082818380158290116124dd576000838152602090206124dd9181019083015b808211156122015760008155600101610fb0565b610fcd84610f3b565b610d8f86610f3b565b600b8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000805474ff0000000000000000000000000000000000000000191660a060020a83021790556040805160ff831681529051600160a060020a033316917f38b3a18cd3eaacbcc12366dd307363bc43c2e1e76798ff8ba0576968b43af69c919081900360200190a250565b600160a060020a038216600090815260066020526040902081905561109c82610f3b565b5050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156111885760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff16600114156111bb5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a361124784601360005054101561029b565b8060ff16600314156112405760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b5050505050565b601380548590039055600160a060020a038516600090815260066020526040902080548501905561127785610f3b565b611240565b600481905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600c8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600381905560405133600160a060020a03169060008051602061254283398151915290600090a250565b61131082610f3b565b600160a060020a0382166000908152600d60205260409020805460ff1916821790555050565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff81166000141561141e5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156114515760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a360055460ff16151584151514156114e157610002565b8060ff16600314156114db5760405133600160a060020a0316907f54cecb216faa7733a7ffde5b4b179cc837f8f6e8979e8265b59e1b4bb417917d90600090a25b50505050565b6005805460ff1916851790556114db565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156115da5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff166001141561160d5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954600160a060020a0316600090815260066020526040902054611668908590101561029b565b60095461167d90600160a060020a0316610f3b565b600954600160a060020a03166000908152600660205260409020805485900390556008805485900390556114db565b6005546116bb9060ff1661029b565b600160a060020a0386166000908152600d60205260409020546116e19060ff161561029b565b600160a060020a03868116600090815260076020908152604080832093891683529290522084905561171286610f3b565b61171b85610f3b565b6117a786865b600160a060020a038281166000908152600f602090815260408083209385168352929052205460ff16151561109c5760406000818120805460ff19166001908117909155600160a060020a0385168252600e602052919020805491820180825590919082818380158290116124ff576000838152602090206124ff918101908301610fb0565b849050611891600a60009054906101000a9004600160a060020a0316600160a060020a031663c76a4bfb888888886040518560e060020a0281526004018085600160a060020a0316815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156118655780820380516001836020036101000a031916815260200191505b50955050505050506020604051808303816000876161da5a03f11561000257505060405151905061029b565b84600160a060020a031686600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925866040518082815260200191505060405180910390a360019150610ddf565b600160a060020a0383811660009081526007602090815260408083209386168352929052208190556119178383611721565b505050565b600281905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6005805460ff1916905560405133600160a060020a0316907fd0829c131e91d8572db14b792b2fdf06ff5804c4013287d2a0a729313602649290600090a2565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611a6e5760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff1660011415611aa15760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a038516600090815260066020526040902054611afa908590101561029b565b600160a060020a0385166000908152600d6020526040902054611b1f9060ff1661029b565b611b2885610f3b565b600160a060020a0385811660009081526006602052604080822080548890039055600954909216815220805485019055611240565b60098054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff811660001415611c7c5760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff1660011415611caf5760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600954611cf790600160a060020a0316610f3b565b600954600160a060020a0316600090815260066020526040902080548501905560088054850190556114db565b601355565b600554611d389060ff1661029b565b600160a060020a0385166000908152600d6020526040902054611d5e9060ff161561029b565b600160a060020a038516600090815260066020526040902054611d84908490101561029b565b600160a060020a038416600090815260066020526040902054611dab90808501101561029b565b611db485610f3b565b611dbd84610f3b565b600160a060020a038581166000908152600660205260409020805485900390553081169085161415611df6576013805484019055611e2c565b611e01858585610ac6565b600160a060020a03851660009081526006602052604090208054828603019055601380548201905590505b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b82600160a060020a031684600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a35060015b9392505050565b60408051600c547fc5096a69000000000000000000000000000000000000000000000000000000008252600160a060020a038781166004840152868116602484015260448301869052925192169163c5096a699160648082019260209290919082900301816000876161da5a03f115610002575050604051519150611ed19050565b600a8054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b60018054600160a060020a0319168217905560405133600160a060020a03169060008051602061254283398151915290600090a250565b600554611fd79060ff1661029b565b600160a060020a0384166000908152600d6020526040902054611ffd9060ff161561029b565b600160a060020a03848116600090815260076020908152604080832093871683529290522082905561202e84610f3b565b61203783610f3b565b611e828484611721565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156121295760405133600160a060020a03169060008051602061258283398151915290600090a2611240565b8060ff166001141561215c5760405133600160a060020a03169060008051602061252283398151915290600090a2611240565b8060ff16600214156111ff57604051600160a060020a03338116919084169060008051602061256283398151915290600090a3600160a060020a0385166000908152600d60205260409020805460ff19168517905561127785610f3b565b8060ff16600214156121fd5760405133600160a060020a03169081907fc0adb725fbf61748fcd7b4f3c3d67eaf2681ffca84f3364a24dd77c0beff719d90600090a35b8091505b5090565b604080516001547f39b35753000000000000000000000000000000000000000000000000000000008252600160a060020a03338116600484015292519216916339b357539160248082019260209290919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156122a55760405133600160a060020a03169060008051602061258283398151915290600090a26121fd565b8060ff16600114156121ba5760405133600160a060020a0316907f57d0354b1f38cfda21abb3883d48c4b90ca307d1dac24b26b641eb5c5376e2a890600090a26121fd565b6040805160015460e360020a630ec67005028252600482018690529151600160a060020a03929092169163763380289160248082019260209290919082900301816000876161da5a03f11561000257505060408051805160015460e160020a631b9e4c51028352600160a060020a033381166004850152602484018990529351919650909216925063373c98a291604480830192602092919082900301816000876161da5a03f1156100025750506040515191505060ff8116600014156123d25760405133600160a060020a03169060008051602061258283398151915290600090a26114db565b8060ff16600114156124055760405133600160a060020a03169060008051602061252283398151915290600090a26114db565b8060ff166002141561149a57604051600160a060020a03338116919084169060008051602061256283398151915290600090a383600160a060020a0316ff5b600881905560405133600160a060020a03169060008051602061254283398151915290600090a250565b6000546124859060a860020a900460ff161561029b565b6000805475ff000000000000000000000000000000000000000000191660a860020a17815560405133600160a060020a0316917f44427e3003a08f22cf803894075ac0297524e09e521fc1c15bc91741ce3dc15991a2565b5050506000928352506020909120018054600160a060020a0319169091179055565b5050506000928352506020909120018054600160a060020a0319169091179055505622ef83ef54b5df91230b2d65af3c2a65b4ba53b97a27ff5b6f2527562ff0b24c9006512524817fcbc215e2d4dec75e5f54a944fb1a7279a5a6fa33bdcfe09adb5fe5b825dd4cb0c7c390e25ef299231a7f2a51f2ad7bef79d4198f8263756e0f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d5

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

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenSymbol (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : tokenName (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.