ETH Price: $3,325.27 (-4.11%)

Contract

0x056017c55aE7AE32d12AeF7C679dF83A85ca75Ff
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer187642432023-12-11 16:45:59381 days ago1702313159IN
0x056017c5...A85ca75Ff
0 ETH0.0021730945.70889439
Approve183491462023-10-14 14:14:35439 days ago1697292875IN
0x056017c5...A85ca75Ff
0 ETH0.000263465.67027958
Approve183443402023-10-13 22:06:23439 days ago1697234783IN
0x056017c5...A85ca75Ff
0 ETH0.00026635.77445768
Approve183442942023-10-13 21:56:59439 days ago1697234219IN
0x056017c5...A85ca75Ff
0 ETH0.0005093810.96564561
Approve183421152023-10-13 14:37:59440 days ago1697207879IN
0x056017c5...A85ca75Ff
0 ETH0.0004700110.17854025
Approve177772112023-07-26 12:19:59519 days ago1690373999IN
0x056017c5...A85ca75Ff
0 ETH0.0010939423.54331622
Transfer177143172023-07-17 16:57:59528 days ago1689613079IN
0x056017c5...A85ca75Ff
0 ETH0.0008085222.94211118
Transfer177133712023-07-17 13:47:35528 days ago1689601655IN
0x056017c5...A85ca75Ff
0 ETH0.0012284823.48113791
Transfer172563992023-05-14 6:38:47592 days ago1684046327IN
0x056017c5...A85ca75Ff
0 ETH0.0010771935.38511457
Transfer167630582023-03-05 15:22:59662 days ago1678029779IN
0x056017c5...A85ca75Ff
0 ETH0.0014884128.44278334
Transfer156909042022-10-06 18:39:35812 days ago1665081575IN
0x056017c5...A85ca75Ff
0 ETH0.0010481520.02972279
Transfer154226802022-08-27 16:31:30852 days ago1661617890IN
0x056017c5...A85ca75Ff
0 ETH0.0004763310.01924407
Transfer153922142022-08-22 19:55:00856 days ago1661198100IN
0x056017c5...A85ca75Ff
0 ETH0.0012165823.24835519
Transfer153457512022-08-15 11:29:37864 days ago1660562977IN
0x056017c5...A85ca75Ff
0 ETH0.0011821222.58977953
Transfer153454522022-08-15 10:13:52864 days ago1660558432IN
0x056017c5...A85ca75Ff
0 ETH0.0003162310.39226844
Transfer145598872022-04-10 19:46:37990 days ago1649619997IN
0x056017c5...A85ca75Ff
0 ETH0.0012514226.32257574
Transfer145120872022-04-03 8:24:49998 days ago1648974289IN
0x056017c5...A85ca75Ff
0 ETH0.0023259744.4379661
Transfer143800182022-03-13 18:56:291018 days ago1647197789IN
0x056017c5...A85ca75Ff
0 ETH0.0018913936.13532111
Transfer143787262022-03-13 14:00:311019 days ago1647180031IN
0x056017c5...A85ca75Ff
0 ETH0.0018522235.38694621
Transfer143785632022-03-13 13:25:361019 days ago1647177936IN
0x056017c5...A85ca75Ff
0 ETH0.0013373225.55551759
Transfer143785552022-03-13 13:24:061019 days ago1647177846IN
0x056017c5...A85ca75Ff
0 ETH0.0008493327.9
Transfer143785542022-03-13 13:23:501019 days ago1647177830IN
0x056017c5...A85ca75Ff
0 ETH0.0008466227.8
Transfer143344632022-03-06 16:41:461026 days ago1646584906IN
0x056017c5...A85ca75Ff
0 ETH0.0016487831.50014746
Transfer143344542022-03-06 16:39:531026 days ago1646584793IN
0x056017c5...A85ca75Ff
0 ETH0.0016900232.28816836
Transfer143344502022-03-06 16:38:561026 days ago1646584736IN
0x056017c5...A85ca75Ff
0 ETH0.0012059739.6
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:
WyvernToken

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-01-07
*/

pragma solidity ^0.4.13;

library MerkleProof {
  /*
   * @dev Verifies a Merkle proof proving the existence of a leaf in a Merkle tree. Assumes that each pair of leaves
   * and each pair of pre-images is sorted.
   * @param _proof Merkle proof containing sibling hashes on the branch from the leaf to the root of the Merkle tree
   * @param _root Merkle root
   * @param _leaf Leaf of Merkle tree
   */
  function verifyProof(bytes _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) {
    // Check if proof length is a multiple of 32
    if (_proof.length % 32 != 0) return false;

    bytes32 proofElement;
    bytes32 computedHash = _leaf;

    for (uint256 i = 32; i <= _proof.length; i += 32) {
      assembly {
        // Load the current element of the proof
        proofElement := mload(add(_proof, i))
      }

      if (computedHash < proofElement) {
        // Hash(current computed hash + current element of the proof)
        computedHash = keccak256(computedHash, proofElement);
      } else {
        // Hash(current element of the proof + current computed hash)
        computedHash = keccak256(proofElement, computedHash);
      }
    }

    // Check if the computed hash (root) is equal to the provided root
    return computedHash == _root;
  }
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[msg.sender]);

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StandardToken is ERC20, BasicToken {

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


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public view returns (uint256) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

contract BurnableToken is StandardToken {

    event Burn(address indexed burner, uint256 value);

    /**
     * @dev Burns a specific amount of tokens.
     * @param _value The amount of token to be burned.
     */
    function burn(uint256 _value) public {
        require(_value > 0);
        require(_value <= balances[msg.sender]);
        // no need to require value <= totalSupply, since that would imply the
        // sender's balance is greater than the totalSupply, which *should* be an assertion failure

        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply = totalSupply.sub(_value);
        Burn(burner, _value);
    }
}

contract DelayedReleaseToken is StandardToken {

    /* Temporary administrator address, only used for the initial token release, must be initialized by token constructor. */
    address temporaryAdmin;

    /* Whether or not the delayed token release has occurred. */
    bool hasBeenReleased = false;

    /* Number of tokens to be released, must be initialized by token constructor. */
    uint numberOfDelayedTokens;

    /* Event for convenience. */
    event TokensReleased(address destination, uint numberOfTokens);

    /**
     * @dev Release the previously specified amount of tokens to the provided address
     * @param destination Address for which tokens will be released (minted) 
     */
    function releaseTokens(address destination) public {
        require((msg.sender == temporaryAdmin) && (!hasBeenReleased));
        hasBeenReleased = true;
        balances[destination] = numberOfDelayedTokens;
        Transfer(address(0), destination, numberOfDelayedTokens); 
        TokensReleased(destination, numberOfDelayedTokens);
    }

}

contract UTXORedeemableToken is StandardToken {

    /* Root hash of the UTXO Merkle tree, must be initialized by token constructor. */
    bytes32 public rootUTXOMerkleTreeHash;

    /* Redeemed UTXOs. */
    mapping(bytes32 => bool) redeemedUTXOs;

    /* Multiplier - tokens per Satoshi, must be initialized by token constructor. */
    uint public multiplier;

    /* Total tokens redeemed so far. */
    uint public totalRedeemed = 0;

    /* Maximum redeemable tokens, must be initialized by token constructor. */
    uint public maximumRedeemable;

    /* Redemption event, containing all relevant data for later analysis if desired. */
    event UTXORedeemed(bytes32 txid, uint8 outputIndex, uint satoshis, bytes proof, bytes pubKey, uint8 v, bytes32 r, bytes32 s, address indexed redeemer, uint numberOfTokens);

    /**
     * @dev Extract a bytes32 subarray from an arbitrary length bytes array.
     * @param data Bytes array from which to extract the subarray
     * @param pos Starting position from which to copy
     * @return Extracted length 32 byte array
     */
    function extract(bytes data, uint pos) private pure returns (bytes32 result) { 
        for (uint i = 0; i < 32; i++) {
            result ^= (bytes32(0xff00000000000000000000000000000000000000000000000000000000000000) & data[i + pos]) >> (i * 8);
        }
        return result;
    }
    
    /**
     * @dev Validate that a provided ECSDA signature was signed by the specified address
     * @param hash Hash of signed data
     * @param v v parameter of ECDSA signature
     * @param r r parameter of ECDSA signature
     * @param s s parameter of ECDSA signature
     * @param expected Address claiming to have created this signature
     * @return Whether or not the signature was valid
     */
    function validateSignature (bytes32 hash, uint8 v, bytes32 r, bytes32 s, address expected) public pure returns (bool) {
        return ecrecover(hash, v, r, s) == expected;
    }

    /**
     * @dev Validate that the hash of a provided address was signed by the ECDSA public key associated with the specified Ethereum address
     * @param addr Address signed
     * @param pubKey Uncompressed ECDSA public key claiming to have created this signature
     * @param v v parameter of ECDSA signature
     * @param r r parameter of ECDSA signature
     * @param s s parameter of ECDSA signature
     * @return Whether or not the signature was valid
     */
    function ecdsaVerify (address addr, bytes pubKey, uint8 v, bytes32 r, bytes32 s) public pure returns (bool) {
        return validateSignature(sha256(addr), v, r, s, pubKeyToEthereumAddress(pubKey));
    }

    /**
     * @dev Convert an uncompressed ECDSA public key into an Ethereum address
     * @param pubKey Uncompressed ECDSA public key to convert
     * @return Ethereum address generated from the ECDSA public key
     */
    function pubKeyToEthereumAddress (bytes pubKey) public pure returns (address) {
        return address(uint(keccak256(pubKey)) & 0x000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF);
    }

    /**
     * @dev Calculate the Bitcoin-style address associated with an ECDSA public key
     * @param pubKey ECDSA public key to convert
     * @param isCompressed Whether or not the Bitcoin address was generated from a compressed key
     * @return Raw Bitcoin address (no base58-check encoding)
     */
    function pubKeyToBitcoinAddress(bytes pubKey, bool isCompressed) public pure returns (bytes20) {
        /* Helpful references:
           - https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses 
           - https://github.com/cryptocoinjs/ecurve/blob/master/lib/point.js
        */

        /* x coordinate - first 32 bytes of public key */
        uint x = uint(extract(pubKey, 0));
        /* y coordinate - second 32 bytes of public key */
        uint y = uint(extract(pubKey, 32)); 
        uint8 startingByte;
        if (isCompressed) {
            /* Hash the compressed public key format. */
            startingByte = y % 2 == 0 ? 0x02 : 0x03;
            return ripemd160(sha256(startingByte, x));
        } else {
            /* Hash the uncompressed public key format. */
            startingByte = 0x04;
            return ripemd160(sha256(startingByte, x, y));
        }
    }

    /**
     * @dev Verify a Merkle proof using the UTXO Merkle tree
     * @param proof Generated Merkle tree proof
     * @param merkleLeafHash Hash asserted to be present in the Merkle tree
     * @return Whether or not the proof is valid
     */
    function verifyProof(bytes proof, bytes32 merkleLeafHash) public constant returns (bool) {
        return MerkleProof.verifyProof(proof, rootUTXOMerkleTreeHash, merkleLeafHash);
    }

    /**
     * @dev Convenience helper function to check if a UTXO can be redeemed
     * @param txid Transaction hash
     * @param originalAddress Raw Bitcoin address (no base58-check encoding)
     * @param outputIndex Output index of UTXO
     * @param satoshis Amount of UTXO in satoshis
     * @param proof Merkle tree proof
     * @return Whether or not the UTXO can be redeemed
     */
    function canRedeemUTXO(bytes32 txid, bytes20 originalAddress, uint8 outputIndex, uint satoshis, bytes proof) public constant returns (bool) {
        /* Calculate the hash of the Merkle leaf associated with this UTXO. */
        bytes32 merkleLeafHash = keccak256(txid, originalAddress, outputIndex, satoshis);
    
        /* Verify the proof. */
        return canRedeemUTXOHash(merkleLeafHash, proof);
    }
      
    /**
     * @dev Verify that a UTXO with the specified Merkle leaf hash can be redeemed
     * @param merkleLeafHash Merkle tree hash of the UTXO to be checked
     * @param proof Merkle tree proof
     * @return Whether or not the UTXO with the specified hash can be redeemed
     */
    function canRedeemUTXOHash(bytes32 merkleLeafHash, bytes proof) public constant returns (bool) {
        /* Check that the UTXO has not yet been redeemed and that it exists in the Merkle tree. */
        return((redeemedUTXOs[merkleLeafHash] == false) && verifyProof(proof, merkleLeafHash));
    }

    /**
     * @dev Redeem a UTXO, crediting a proportional amount of tokens (if valid) to the sending address
     * @param txid Transaction hash
     * @param outputIndex Output index of the UTXO
     * @param satoshis Amount of UTXO in satoshis
     * @param proof Merkle tree proof
     * @param pubKey Uncompressed ECDSA public key to which the UTXO was sent
     * @param isCompressed Whether the Bitcoin address was generated from a compressed public key
     * @param v v parameter of ECDSA signature
     * @param r r parameter of ECDSA signature
     * @param s s parameter of ECDSA signature
     * @return The number of tokens redeemed, if successful
     */
    function redeemUTXO (bytes32 txid, uint8 outputIndex, uint satoshis, bytes proof, bytes pubKey, bool isCompressed, uint8 v, bytes32 r, bytes32 s) public returns (uint tokensRedeemed) {

        /* Calculate original Bitcoin-style address associated with the provided public key. */
        bytes20 originalAddress = pubKeyToBitcoinAddress(pubKey, isCompressed);

        /* Calculate the UTXO Merkle leaf hash. */
        bytes32 merkleLeafHash = keccak256(txid, originalAddress, outputIndex, satoshis);

        /* Verify that the UTXO can be redeemed. */
        require(canRedeemUTXOHash(merkleLeafHash, proof));

        /* Claimant must sign the Ethereum address to which they wish to remit the redeemed tokens. */
        require(ecdsaVerify(msg.sender, pubKey, v, r, s));

        /* Mark the UTXO as redeemed. */
        redeemedUTXOs[merkleLeafHash] = true;

        /* Calculate the redeemed tokens. */
        tokensRedeemed = SafeMath.mul(satoshis, multiplier);

        /* Track total redeemed tokens. */
        totalRedeemed = SafeMath.add(totalRedeemed, tokensRedeemed);

        /* Sanity check. */
        require(totalRedeemed <= maximumRedeemable);

        /* Credit the redeemer. */ 
        balances[msg.sender] = SafeMath.add(balances[msg.sender], tokensRedeemed);

        /* Mark the transfer event. */
        Transfer(address(0), msg.sender, tokensRedeemed);

        /* Mark the UTXO redemption event. */
        UTXORedeemed(txid, outputIndex, satoshis, proof, pubKey, v, r, s, msg.sender, tokensRedeemed);
        
        /* Return the number of tokens redeemed. */
        return tokensRedeemed;

    }

}

contract WyvernToken is DelayedReleaseToken, UTXORedeemableToken, BurnableToken {

    uint constant public decimals     = 18;
    string constant public name       = "Project Wyvern Token";
    string constant public symbol     = "WYV";

    /* Amount of tokens per Wyvern. */
    uint constant public MULTIPLIER       = 1;

    /* Constant for conversion from satoshis to tokens. */
    uint constant public SATS_TO_TOKENS   = MULTIPLIER * (10 ** decimals) / (10 ** 8);

    /* Total mint amount, in tokens (will be reached when all UTXOs are redeemed). */
    uint constant public MINT_AMOUNT      = 2000000 * MULTIPLIER * (10 ** decimals);

    /**
      * @dev Initialize the Wyvern token
      * @param merkleRoot Merkle tree root of the UTXO set
      * @param totalUtxoAmount Total satoshis of the UTXO set
      */
    function WyvernToken (bytes32 merkleRoot, uint totalUtxoAmount) public {
        /* Total number of tokens that can be redeemed from UTXOs. */
        uint utxoTokens = SATS_TO_TOKENS * totalUtxoAmount;

        /* Configure DelayedReleaseToken. */
        temporaryAdmin = msg.sender;
        numberOfDelayedTokens = MINT_AMOUNT - utxoTokens;

        /* Configure UTXORedeemableToken. */
        rootUTXOMerkleTreeHash = merkleRoot;
        totalSupply = MINT_AMOUNT;
        maximumRedeemable = utxoTokens;
        multiplier = SATS_TO_TOKENS;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"MULTIPLIER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"txid","type":"bytes32"},{"name":"originalAddress","type":"bytes20"},{"name":"outputIndex","type":"uint8"},{"name":"satoshis","type":"uint256"},{"name":"proof","type":"bytes"}],"name":"canRedeemUTXO","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumRedeemable","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"merkleLeafHash","type":"bytes32"}],"name":"verifyProof","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"multiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"pubKey","type":"bytes"}],"name":"pubKeyToEthereumAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MINT_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"destination","type":"address"}],"name":"releaseTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"merkleLeafHash","type":"bytes32"},{"name":"proof","type":"bytes"}],"name":"canRedeemUTXOHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"expected","type":"address"}],"name":"validateSignature","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"txid","type":"bytes32"},{"name":"outputIndex","type":"uint8"},{"name":"satoshis","type":"uint256"},{"name":"proof","type":"bytes"},{"name":"pubKey","type":"bytes"},{"name":"isCompressed","type":"bool"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"redeemUTXO","outputs":[{"name":"tokensRedeemed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"},{"name":"pubKey","type":"bytes"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"ecdsaVerify","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"pubKey","type":"bytes"},{"name":"isCompressed","type":"bool"}],"name":"pubKeyToBitcoinAddress","outputs":[{"name":"","type":"bytes20"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"rootUTXOMerkleTreeHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRedeemed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SATS_TO_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"merkleRoot","type":"bytes32"},{"name":"totalUtxoAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"txid","type":"bytes32"},{"indexed":false,"name":"outputIndex","type":"uint8"},{"indexed":false,"name":"satoshis","type":"uint256"},{"indexed":false,"name":"proof","type":"bytes"},{"indexed":false,"name":"pubKey","type":"bytes"},{"indexed":false,"name":"v","type":"uint8"},{"indexed":false,"name":"r","type":"bytes32"},{"indexed":false,"name":"s","type":"bytes32"},{"indexed":true,"name":"redeemer","type":"address"},{"indexed":false,"name":"numberOfTokens","type":"uint256"}],"name":"UTXORedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"destination","type":"address"},{"indexed":false,"name":"numberOfTokens","type":"uint256"}],"name":"TokensReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"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"}]

60606040526003805460a060020a60ff02191690556000600855341561002457600080fd5b6040516040806116d9833981016040528080519190602001805160038054600160a060020a03191633600160a060020a03161790556402540be4009081026a01a784379d99db420000008181036004556005959095556000948555600955600755506116429182915061009790396000f3006060604052600436106101695763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663059f8b16811461016e57806306f847011461019357806306fdde031461021d57806308b4312b146102a7578063095ea7b3146102ba57806318160ddd146102dc5780631858cb5b146102ef5780631b3ed7221461034257806323b872dd14610355578063313ce5671461037d57806342966c68146103905780635418796c146103a85780635427789c14610415578063661884631461042857806370a082311461044a57806387b0be481461046957806395d89b4114610488578063a2d0f9421461049b578063a9059cbb146104f1578063af1d06e814610513578063cce2771e14610541578063ce267b55146105fb578063d73dd6231461066a578063dd62ed3e1461068c578063e073ef69146106b1578063e6997f6d14610728578063f35dad401461073b578063fa2dedec1461074e575b600080fd5b341561017957600080fd5b610181610761565b60405190815260200160405180910390f35b341561019e57600080fd5b6102096004803590602480356bffffffffffffffffffffffff19169160443560ff1691606435919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061076695505050505050565b604051901515815260200160405180910390f35b341561022857600080fd5b6102306107bf565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561026c578082015183820152602001610254565b50505050905090810190601f1680156102995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102b257600080fd5b6101816107f6565b34156102c557600080fd5b610209600160a060020a03600435166024356107fc565b34156102e757600080fd5b610181610868565b34156102fa57600080fd5b61020960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650509335935061086e92505050565b341561034d57600080fd5b61018161097c565b341561036057600080fd5b610209600160a060020a0360043581169060243516604435610982565b341561038857600080fd5b610181610af2565b341561039b57600080fd5b6103a6600435610af7565b005b34156103b357600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610bc095505050505050565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b610181610c2e565b341561043357600080fd5b610209600160a060020a0360043516602435610c3d565b341561045557600080fd5b610181600160a060020a0360043516610d39565b341561047457600080fd5b6103a6600160a060020a0360043516610d54565b341561049357600080fd5b610230610e59565b34156104a657600080fd5b610209600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610e9095505050505050565b34156104fc57600080fd5b610209600160a060020a0360043516602435610ebb565b341561051e57600080fd5b61020960043560ff60243516604435606435600160a060020a0360843516610fa4565b341561054c57600080fd5b61018160048035906024803560ff16916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505050823515159260ff60208201351692506040810135915060600135611032565b341561060657600080fd5b61020960048035600160a060020a03169060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505060ff85351694602081013594506040013592506112bc915050565b341561067557600080fd5b610209600160a060020a0360043516602435611331565b341561069757600080fd5b610181600160a060020a03600435811690602435166113d5565b34156106bc57600080fd5b61070660046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505050509135151591506114009050565b6040516bffffffffffffffffffffffff19909116815260200160405180910390f35b341561073357600080fd5b61018161152f565b341561074657600080fd5b610181611535565b341561075957600080fd5b61018161153b565b600181565b600080868686866040519384526bffffffffffffffffffffffff1992909216602084015260ff1660f860020a0260348301526035820152605501604051809103902090506107b48184610e90565b979650505050505050565b60408051908101604052601481527f50726f6a6563742057797665726e20546f6b656e000000000000000000000000602082015281565b60095481565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b600073cc3bf5a8e925f7b70238eda8dbe51b2a5ea8ae2c63101f13e284600554856000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152602481018390526044810182905260606004820190815290819060640185818151815260200191508051906020019080838360005b838110156109105780820151838201526020016108f8565b50505050905090810190601f16801561093d5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b151561095b57600080fd5b6102c65a03f4151561096c57600080fd5b5050506040518051949350505050565b60075481565b6000600160a060020a038316151561099957600080fd5b600160a060020a0384166000908152600160205260409020548211156109be57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156109f157600080fd5b600160a060020a038416600090815260016020526040902054610a1a908363ffffffff61154416565b600160a060020a038086166000908152600160205260408082209390935590851681522054610a4f908363ffffffff61155616565b600160a060020a03808516600090815260016020908152604080832094909455878316825260028152838220339093168252919091522054610a97908363ffffffff61154416565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206115f78339815191529085905190815260200160405180910390a35060019392505050565b601281565b6000808211610b0557600080fd5b600160a060020a033316600090815260016020526040902054821115610b2a57600080fd5b5033600160a060020a038116600090815260016020526040902054610b4f9083611544565b600160a060020a03821660009081526001602052604081209190915554610b7c908363ffffffff61154416565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b6000816040518082805190602001908083835b60208310610bf25780518252601f199092019160209182019101610bd3565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051908190039020600160a060020a031692915050565b6a01a784379d99db4200000081565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610c9a57600160a060020a033381166000908152600260209081526040808320938816835292905290812055610cd1565b610caa818463ffffffff61154416565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600160a060020a031660009081526001602052604090205490565b60035433600160a060020a039081169116148015610d8d575060035474010000000000000000000000000000000000000000900460ff16155b1515610d9857600080fd5b6003805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055600454600160a060020a038216600081815260016020526040808220849055919290916000805160206115f783398151915291905190815260200160405180910390a37fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df9317981600454604051600160a060020a03909216825260208201526040908101905180910390a150565b60408051908101604052600381527f5759560000000000000000000000000000000000000000000000000000000000602082015281565b60008281526006602052604081205460ff16158015610eb45750610eb4828461086e565b9392505050565b6000600160a060020a0383161515610ed257600080fd5b600160a060020a033316600090815260016020526040902054821115610ef757600080fd5b600160a060020a033316600090815260016020526040902054610f20908363ffffffff61154416565b600160a060020a033381166000908152600160205260408082209390935590851681522054610f55908363ffffffff61155616565b600160a060020a0380851660008181526001602052604090819020939093559133909116906000805160206115f78339815191529085905190815260200160405180910390a350600192915050565b600081600160a060020a03166001878787876040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561101557600080fd5b505060206040510351600160a060020a0316149695505050505050565b60008060006110418888611400565b91508b828c8c6040519384526bffffffffffffffffffffffff1992909216602084015260ff1660f860020a02603483015260358201526055016040518091039020905061108e818a610e90565b151561109957600080fd5b6110a633898888886112bc565b15156110b157600080fd5b6000818152600660205260409020805460ff191660011790556007546110d8908b90611565565b92506110e660085484611556565b60088190556009549011156110fa57600080fd5b600160a060020a03331660009081526001602052604090205461111d9084611556565b600160a060020a0333166000818152600160205260408082209390935590916000805160206115f78339815191529086905190815260200160405180910390a333600160a060020a03167f2475a9b35191bf17196c6ddaa1be205f8dccc85ac213ff80131ca6906c34423b8d8d8d8d8d8c8c8c8c60405189815260ff808a16602083015260408201899052851660a082015260c0810184905260e08101839052610100810182905261012060608201818152906080830190830189818151815260200191508051906020019080838360005b838110156112075780820151838201526020016111ef565b50505050905090810190601f1680156112345780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561126a578082015183820152602001611252565b50505050905090810190601f1680156112975780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a250509998505050505050505050565b6000611327600287600060405160200152604051600160a060020a03919091166c0100000000000000000000000002815260140160206040518083038160008661646e5a03f1151561130d57600080fd5b5050604051805190508585856113228a610bc0565b610fa4565b9695505050505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611369908363ffffffff61155616565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600080600080611411866000611590565b925061141e866020611590565b915084156114d5576002820615611436576003611439565b60025b905060036002828560006040516020015260405160ff9290921660f860020a028252600182015260210160206040518083038160008661646e5a03f1151561148057600080fd5b5050604051805190506000604051602001526040519081526020908101906040518083038160008661646e5a03f115156114b957600080fd5b5050604051516c01000000000000000000000000029350611526565b5060046003600282858560006040516020015260405160ff9390931660f860020a0283526001830191909152602182015260410160206040518083038160008661646e5a03f1151561148057600080fd5b50505092915050565b60055481565b60085481565b6402540be40081565b60008282111561155057fe5b50900390565b600082820183811015610eb457fe5b6000808315156115785760009150610d32565b5082820282848281151561158857fe5b0414610eb457fe5b6000805b6020811015610d32578060080284848301815181106115af57fe5b016020015160029190910a60f860020a918290049091027fff00000000000000000000000000000000000000000000000000000000000000160491909118906001016115945600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820993b0602a8a20d6ec31e355ba41211525d085bd607717cf30adcef404a7c0c080029bfdda2cdd0ddffbde454c05ba311161075f0baa7ee43681b8cd44669883ba4450000000000000000000000000000000000000000000000000000a92519f20ed2

Deployed Bytecode

0x6060604052600436106101695763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663059f8b16811461016e57806306f847011461019357806306fdde031461021d57806308b4312b146102a7578063095ea7b3146102ba57806318160ddd146102dc5780631858cb5b146102ef5780631b3ed7221461034257806323b872dd14610355578063313ce5671461037d57806342966c68146103905780635418796c146103a85780635427789c14610415578063661884631461042857806370a082311461044a57806387b0be481461046957806395d89b4114610488578063a2d0f9421461049b578063a9059cbb146104f1578063af1d06e814610513578063cce2771e14610541578063ce267b55146105fb578063d73dd6231461066a578063dd62ed3e1461068c578063e073ef69146106b1578063e6997f6d14610728578063f35dad401461073b578063fa2dedec1461074e575b600080fd5b341561017957600080fd5b610181610761565b60405190815260200160405180910390f35b341561019e57600080fd5b6102096004803590602480356bffffffffffffffffffffffff19169160443560ff1691606435919060a49060843590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061076695505050505050565b604051901515815260200160405180910390f35b341561022857600080fd5b6102306107bf565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561026c578082015183820152602001610254565b50505050905090810190601f1680156102995780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102b257600080fd5b6101816107f6565b34156102c557600080fd5b610209600160a060020a03600435166024356107fc565b34156102e757600080fd5b610181610868565b34156102fa57600080fd5b61020960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650509335935061086e92505050565b341561034d57600080fd5b61018161097c565b341561036057600080fd5b610209600160a060020a0360043581169060243516604435610982565b341561038857600080fd5b610181610af2565b341561039b57600080fd5b6103a6600435610af7565b005b34156103b357600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610bc095505050505050565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b610181610c2e565b341561043357600080fd5b610209600160a060020a0360043516602435610c3d565b341561045557600080fd5b610181600160a060020a0360043516610d39565b341561047457600080fd5b6103a6600160a060020a0360043516610d54565b341561049357600080fd5b610230610e59565b34156104a657600080fd5b610209600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610e9095505050505050565b34156104fc57600080fd5b610209600160a060020a0360043516602435610ebb565b341561051e57600080fd5b61020960043560ff60243516604435606435600160a060020a0360843516610fa4565b341561054c57600080fd5b61018160048035906024803560ff16916044359160849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505050823515159260ff60208201351692506040810135915060600135611032565b341561060657600080fd5b61020960048035600160a060020a03169060446024803590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505060ff85351694602081013594506040013592506112bc915050565b341561067557600080fd5b610209600160a060020a0360043516602435611331565b341561069757600080fd5b610181600160a060020a03600435811690602435166113d5565b34156106bc57600080fd5b61070660046024813581810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496505050509135151591506114009050565b6040516bffffffffffffffffffffffff19909116815260200160405180910390f35b341561073357600080fd5b61018161152f565b341561074657600080fd5b610181611535565b341561075957600080fd5b61018161153b565b600181565b600080868686866040519384526bffffffffffffffffffffffff1992909216602084015260ff1660f860020a0260348301526035820152605501604051809103902090506107b48184610e90565b979650505050505050565b60408051908101604052601481527f50726f6a6563742057797665726e20546f6b656e000000000000000000000000602082015281565b60095481565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b600073cc3bf5a8e925f7b70238eda8dbe51b2a5ea8ae2c63101f13e284600554856000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8616028152602481018390526044810182905260606004820190815290819060640185818151815260200191508051906020019080838360005b838110156109105780820151838201526020016108f8565b50505050905090810190601f16801561093d5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b151561095b57600080fd5b6102c65a03f4151561096c57600080fd5b5050506040518051949350505050565b60075481565b6000600160a060020a038316151561099957600080fd5b600160a060020a0384166000908152600160205260409020548211156109be57600080fd5b600160a060020a03808516600090815260026020908152604080832033909416835292905220548211156109f157600080fd5b600160a060020a038416600090815260016020526040902054610a1a908363ffffffff61154416565b600160a060020a038086166000908152600160205260408082209390935590851681522054610a4f908363ffffffff61155616565b600160a060020a03808516600090815260016020908152604080832094909455878316825260028152838220339093168252919091522054610a97908363ffffffff61154416565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206115f78339815191529085905190815260200160405180910390a35060019392505050565b601281565b6000808211610b0557600080fd5b600160a060020a033316600090815260016020526040902054821115610b2a57600080fd5b5033600160a060020a038116600090815260016020526040902054610b4f9083611544565b600160a060020a03821660009081526001602052604081209190915554610b7c908363ffffffff61154416565b600055600160a060020a0381167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58360405190815260200160405180910390a25050565b6000816040518082805190602001908083835b60208310610bf25780518252601f199092019160209182019101610bd3565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051908190039020600160a060020a031692915050565b6a01a784379d99db4200000081565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610c9a57600160a060020a033381166000908152600260209081526040808320938816835292905290812055610cd1565b610caa818463ffffffff61154416565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b600160a060020a031660009081526001602052604090205490565b60035433600160a060020a039081169116148015610d8d575060035474010000000000000000000000000000000000000000900460ff16155b1515610d9857600080fd5b6003805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055600454600160a060020a038216600081815260016020526040808220849055919290916000805160206115f783398151915291905190815260200160405180910390a37fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df9317981600454604051600160a060020a03909216825260208201526040908101905180910390a150565b60408051908101604052600381527f5759560000000000000000000000000000000000000000000000000000000000602082015281565b60008281526006602052604081205460ff16158015610eb45750610eb4828461086e565b9392505050565b6000600160a060020a0383161515610ed257600080fd5b600160a060020a033316600090815260016020526040902054821115610ef757600080fd5b600160a060020a033316600090815260016020526040902054610f20908363ffffffff61154416565b600160a060020a033381166000908152600160205260408082209390935590851681522054610f55908363ffffffff61155616565b600160a060020a0380851660008181526001602052604090819020939093559133909116906000805160206115f78339815191529085905190815260200160405180910390a350600192915050565b600081600160a060020a03166001878787876040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f1151561101557600080fd5b505060206040510351600160a060020a0316149695505050505050565b60008060006110418888611400565b91508b828c8c6040519384526bffffffffffffffffffffffff1992909216602084015260ff1660f860020a02603483015260358201526055016040518091039020905061108e818a610e90565b151561109957600080fd5b6110a633898888886112bc565b15156110b157600080fd5b6000818152600660205260409020805460ff191660011790556007546110d8908b90611565565b92506110e660085484611556565b60088190556009549011156110fa57600080fd5b600160a060020a03331660009081526001602052604090205461111d9084611556565b600160a060020a0333166000818152600160205260408082209390935590916000805160206115f78339815191529086905190815260200160405180910390a333600160a060020a03167f2475a9b35191bf17196c6ddaa1be205f8dccc85ac213ff80131ca6906c34423b8d8d8d8d8d8c8c8c8c60405189815260ff808a16602083015260408201899052851660a082015260c0810184905260e08101839052610100810182905261012060608201818152906080830190830189818151815260200191508051906020019080838360005b838110156112075780820151838201526020016111ef565b50505050905090810190601f1680156112345780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b8381101561126a578082015183820152602001611252565b50505050905090810190601f1680156112975780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a250509998505050505050505050565b6000611327600287600060405160200152604051600160a060020a03919091166c0100000000000000000000000002815260140160206040518083038160008661646e5a03f1151561130d57600080fd5b5050604051805190508585856113228a610bc0565b610fa4565b9695505050505050565b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611369908363ffffffff61155616565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600080600080611411866000611590565b925061141e866020611590565b915084156114d5576002820615611436576003611439565b60025b905060036002828560006040516020015260405160ff9290921660f860020a028252600182015260210160206040518083038160008661646e5a03f1151561148057600080fd5b5050604051805190506000604051602001526040519081526020908101906040518083038160008661646e5a03f115156114b957600080fd5b5050604051516c01000000000000000000000000029350611526565b5060046003600282858560006040516020015260405160ff9390931660f860020a0283526001830191909152602182015260410160206040518083038160008661646e5a03f1151561148057600080fd5b50505092915050565b60055481565b60085481565b6402540be40081565b60008282111561155057fe5b50900390565b600082820183811015610eb457fe5b6000808315156115785760009150610d32565b5082820282848281151561158857fe5b0414610eb457fe5b6000805b6020811015610d32578060080284848301815181106115af57fe5b016020015160029190910a60f860020a918290049091027fff00000000000000000000000000000000000000000000000000000000000000160491909118906001016115945600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820993b0602a8a20d6ec31e355ba41211525d085bd607717cf30adcef404a7c0c080029

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

bfdda2cdd0ddffbde454c05ba311161075f0baa7ee43681b8cd44669883ba4450000000000000000000000000000000000000000000000000000a92519f20ed2

-----Decoded View---------------
Arg [0] : merkleRoot (bytes32): 0xbfdda2cdd0ddffbde454c05ba311161075f0baa7ee43681b8cd44669883ba445
Arg [1] : totalUtxoAmount (uint256): 185976814178002

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : bfdda2cdd0ddffbde454c05ba311161075f0baa7ee43681b8cd44669883ba445
Arg [1] : 0000000000000000000000000000000000000000000000000000a92519f20ed2


Libraries Used


Swarm Source

bzzr://993b0602a8a20d6ec31e355ba41211525d085bd607717cf30adcef404a7c0c08

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.