ERC-20
Source Code
Overview
Max Total Supply
2,000,000 WYV
Holders
439
Transfers
-
0
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
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
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]Contract Creation Code
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
Swarm Source
bzzr://993b0602a8a20d6ec31e355ba41211525d085bd607717cf30adcef404a7c0c08
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)