Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 9 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0xa9b16b8c2399510706cd275ad9f86ef668067351at txn 0x1177ba6f401e491f02a6f53fd5acea506b5d0d84895d7c1dd30a411d628b110e
 Latest 9 txns

TxHash Age From To Value [TxFee]
0xe7ed7b45a7e21a308722fc75b4b897607fed436a3e0d950f69dbdff8011a49458 days 14 hrs ago0x0050fcd39a7a5a96e3ce4e5c11e4e2862ba0f42e  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.000920405
0x32d87ed9f8a99e77afd9aef1e402c69563e8245d1874b8a249ef234a53e7300a23 days 1 hr ago0x35f4d8747fc8c44670b0ff53affcf5e4cefc62d8  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.00294585
0xe3730c9d6b60bf3c99d3b97eb1f583e1e8b3236a5e4e0235dfbae835534409a923 days 1 hr ago0x35f4d8747fc8c44670b0ff53affcf5e4cefc62d8  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.000992085
0xdd879c3181a40c80d738320be2fd2f9d919412537d07d252db8ec974343ff0c123 days 1 hr ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.003967135
0x2fb74814660298f1de45b02e73e3ffefb0bc943b9a752c4547522f8f56d118de23 days 2 hrs ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.003967775
0xcf100f0c57964999e8a8a1e4059c418db12d036e4da2f90bb23cc83b055e01c323 days 2 hrs ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.005407575
0xf815be20775d2bd3f43fae5c3f05e928ae5493877533d773509bec1a704689b923 days 3 hrs ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.005556615
0xadd312fa26c1f97b990a467ef918863b97dff3dbffc2fa3236b5800a4e35dd2023 days 4 hrs ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN   0x6c8b12c650594a9fdb0b1f52084bbd0d9010aa090 Ether0.006409842
0x1177ba6f401e491f02a6f53fd5acea506b5d0d84895d7c1dd30a411d628b110e23 days 7 hrs ago0xa9b16b8c2399510706cd275ad9f86ef668067351  IN    Contract Creation0 Ether0.005742935
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: AZTECERC20Bridge
Compiler Text: v0.4.23+commit.124ca40d
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

library AZTECInterface {
    function validateJoinSplit(bytes32[6][], uint, uint, bytes32[4]) external pure returns (bool) {}
}

/**
 * @title ERC20 interface
 * @dev https://github.com/ethereum/EIPs/issues/20
 **/
contract ERC20Interface {
  function transfer(address to, uint256 value) external returns (bool);

  function transferFrom(address from, address to, uint256 value)
    external returns (bool);
}

/**
 * @title  AZTEC token, providing a confidential representation of an ERC20 token 
 * @author Zachary Williamson, AZTEC
 * Copyright AZTEC 2018. All rights reserved.
 * We will be releasing AZTEC as an open-source protocol that provides efficient transaction privacy for Ethereum.
 * This will include our bespoke AZTEC decentralized exchange, allowing for cross-asset transfers with full transaction privacy
 * and interopability with public decentralized exchanges.
 * Stay tuned for updates!
 **/
contract AZTECERC20Bridge {
    uint private constant groupModulusBoundary = 10944121435919637611123202872628637544274182200208017171849102093287904247808;
    uint private constant groupModulus = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
    uint public scalingFactor;
    mapping(bytes32 => address) public noteRegistry;
    bytes32[4] setupPubKey;
    bytes32 domainHash;
    ERC20Interface token;

    event Created(bytes32 domainHash, address contractAddress);
    event ConfidentialTransfer();

    /**
    * @dev contract constructor.
    * @param _setupPubKey the trusted setup public key (group element of group G2)
    * @param _token the address of the ERC20 token being attached to
    * @param _scalingFactor the mapping from note value -> ERC20 token value.
    * AZTEC notes have a range between 0 and 2^{25}-1 and ERC20 tokens range between 0 and 2^{255} - 1
    * so we don't want to directly map note value : token value
    **/
    constructor(bytes32[4] _setupPubKey, address _token, uint256 _scalingFactor) public {
        setupPubKey = _setupPubKey;
        token = ERC20Interface(_token);
        scalingFactor = _scalingFactor;
        // calculate the EIP712 domain hash, for hashing structured data
        bytes32 _domainHash;
        assembly {
            let m := mload(0x40)
            mstore(m, 0x8d4b25bfecb769291b71726cd5ec8a497664cc7292c02b1868a0534306741fd9)
            mstore(add(m, 0x20), 0x87a23625953c9fb02b3570c86f75403039bbe5de82b48ca671c10157d91a991a) // name = "AZTEC_MAINNET_DOMAIN"
            mstore(add(m, 0x40), 0x25130290f410620ec94e7cf11f1cdab5dea284e1039a83fa7b87f727031ff5f4) // version = "0.1.0"
            mstore(add(m, 0x60), 1) // chain id
            mstore(add(m, 0x80), 0x210db872dec2e06c375dd40a5a354307bb4ba52ba65bd84594554580ae6f0639)
            mstore(add(m, 0xa0), address) // verifying contract
            _domainHash := keccak256(m, 0xc0)
        }
        domainHash = _domainHash;
        emit Created(_domainHash, this);
    }

    /**
    * @dev Determine validity of an input note and remove from note registry
    * 1. validate that the note is signed by the note owner
    * 2. validate that the note exists in the note registry
    *
    * Note signature is EIP712 signature (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md) over the following struct
    * struct AZTEC_NOTE_SIGNATURE {
    *     bytes32[4] note;
    *     uint256 challenge;
    *     address sender;    
    * };
    * @param note AZTEC confidential note being destroyed
    * @param signature ECDSA signature from note owner
    * @param challenge AZTEC zero-knowledge proof challenge
    * @param domainHashT Temporary holding ```domainHash``` (to minimize # of sload ops)
    **/
    function validateInputNote(bytes32[6] note, bytes32[3] signature, uint challenge, bytes32 domainHashT) internal {
        bytes32 noteHash;
        bytes32 signatureMessage;
        assembly {
            let m := mload(0x40)
            mstore(m, mload(add(note, 0x40)))
            mstore(add(m, 0x20), mload(add(note, 0x60)))
            mstore(add(m, 0x40), mload(add(note, 0x80)))
            mstore(add(m, 0x60), mload(add(note, 0xa0)))
            noteHash := keccak256(m, 0x80)
            mstore(m, 0x1aba5d08f7cd777136d3fa7eb7baa742ab84001b34c9de5b17d922fc2ca75cce) // keccak256 hash of "AZTEC_NOTE_SIGNATURE(bytes32[4] note,uint256 challenge,address sender)"
            mstore(add(m, 0x20), noteHash)
            mstore(add(m, 0x40), challenge)
            mstore(add(m, 0x60), caller)
            mstore(add(m, 0x40), keccak256(m, 0x80))
            mstore(add(m, 0x20), domainHashT)
            mstore(m, 0x1901)
            signatureMessage := keccak256(add(m, 0x1e), 0x42)
        }
        address owner = ecrecover(signatureMessage, uint8(signature[0]), signature[1], signature[2]);
        require(noteRegistry[noteHash] == owner, "expected input note to exist in registry");
        noteRegistry[noteHash] = 0;
    }

    /**
    * @dev Validate an output note from an AZTEC confidential transaction
    * If the note does not already exist in ```noteRegistry```, create it
    * @param note AZTEC confidential note to be created
    * @param owner The address of the note owner
    **/
    function validateOutputNote(bytes32[6] note, address owner) internal {
        bytes32 noteHash; // Construct a keccak256 hash of the note coordinates.
        assembly {
            let m := mload(0x40)
            mstore(m, mload(add(note, 0x40)))
            mstore(add(m, 0x20), mload(add(note, 0x60)))
            mstore(add(m, 0x40), mload(add(note, 0x80)))
            mstore(add(m, 0x60), mload(add(note, 0xa0)))
            noteHash := keccak256(m, 0x80)
        }
        require(noteRegistry[noteHash] == 0, "expected output note to not exist in registry");
        noteRegistry[noteHash] = owner;
    }

    /**
    * @dev Perform a confidential transaction. Takes ```m``` input notes and ```notes.length - m``` output notes.
    * ```notes, m, challenge``` constitute an AZTEC zero-knowledge proof that states the following:
    * The sum of the values of the input notes is equal to a the sum of the values of the output notes + a public commitment value ```kPublic```
    * \sum_{i=0}^{m-1}k_i = \sum_{i=m}^{n-1}k_i + k_{public} (mod p)
    * notes[6][] contains value ```kPublic```  at notes[notes.length - 1][0].
    * If ```kPublic``` is negative, this represents ```(GROUP_MODULUS - kPublic) * SCALING_FACTOR``` ERC20 tokens being converted into confidential note form.
    * If ```kPublic``` is positive, this represents ```kPublic * SCALING_FACTOR``` worth of AZTEC notes being converted into ERC20 form
    * @param notes defines AZTEC input notes and output notes. notes[0,...,m-1] = input notes. notes[m,...,notes.length-1] = output notes
    * @param m where notes[0,..., m - 1] = input notes. notes[m,...,notes.length - 1] = output notes
    * @param challenge AZTEC zero-knowledge proof challenge variable
    * @param inputSignatures array of ECDSA signatures, one for each input note
    * @param outputOwners addresses of owners, one for each output note
    * Unnamed param is metadata: if AZTEC notes are assigned to stealth addresses, metadata should contain the ephemeral keys required for note owner to identify their note
    */
    function confidentialTransfer(bytes32[6][] notes, uint256 m, uint256 challenge, bytes32[3][] inputSignatures, address[] outputOwners, bytes) external {
        require(inputSignatures.length == m, "input signature length invalid");
        require(inputSignatures.length + outputOwners.length == notes.length, "array length mismatch");

        // validate AZTEC zero-knowledge proof
        require(AZTECInterface.validateJoinSplit(notes, m, challenge, setupPubKey), "proof not valid!");

        // extract variable kPublic from proof
        uint256 kPublic = uint(notes[notes.length - 1][0]);

        // iterate over the notes array and validate each input/output note
        for (uint256 i = 0; i < notes.length; i++) {

            // if i < m this is an input note
            if (i < m) {

                // call validateInputNote to check that the note exists and that we have a matching signature over the note.
                // pass domainHash in as a function parameter to prevent multiple sloads
                // this will remove the input notes from noteRegistry
                validateInputNote(notes[i], inputSignatures[i], challenge, domainHash);
            } else {
                
                // if i >= m this is an output note
                // validate that output notes, attached to the specified owners do not exist in noteRegistry.
                // if all checks pass, add notes into note registry
                validateOutputNote(notes[i], outputOwners[i - m]);
            }
        }

        if (kPublic > 0) {
            if (kPublic < groupModulusBoundary) {

                // if value < the group modulus boundary then this public value represents a conversion from confidential note form to public form
                // call token.transfer to send relevent tokens
                require(token.transfer(msg.sender, kPublic * scalingFactor), "token transfer to user failed!");
            } else {

                // if value > group modulus boundary, this represents a commitment of a public value into confidential note form.
                // only proceed if the required transferFrom call from msg.sender to this contract succeeds
                require(token.transferFrom(msg.sender, this, (groupModulus - kPublic) * scalingFactor), "token transfer from user failed!");
            }
        }

        // emit an event to mark this transaction. Can recover notes + metadata from input data
        emit ConfidentialTransfer();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"noteRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"notes","type":"bytes32[6][]"},{"name":"m","type":"uint256"},{"name":"challenge","type":"uint256"},{"name":"inputSignatures","type":"bytes32[3][]"},{"name":"outputOwners","type":"address[]"},{"name":"","type":"bytes"}],"name":"confidentialTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"scalingFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_setupPubKey","type":"bytes32[4]"},{"name":"_token","type":"address"},{"name":"_scalingFactor","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"domainHash","type":"bytes32"},{"indexed":false,"name":"contractAddress","type":"address"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[],"name":"ConfidentialTransfer","type":"event"}]

  Contract Creation Code Switch To Opcodes View
608060405234801561001057600080fd5b5060405160c080610fe6833981018060405281019080919082608001805190602001909291908051906020019092919050505060008360029060046100569291906101d2565b5082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000819055506040517f8d4b25bfecb769291b71726cd5ec8a497664cc7292c02b1868a0534306741fd981527f87a23625953c9fb02b3570c86f75403039bbe5de82b48ca671c10157d91a991a60208201527f25130290f410620ec94e7cf11f1cdab5dea284e1039a83fa7b87f727031ff5f46040820152600160608201527f210db872dec2e06c375dd40a5a354307bb4ba52ba65bd84594554580ae6f063960808201523060a082015260c0812091505080600681600019169055507f6e765c1505df7edb32788588e8f625dd368914ea995e3d429094152b826977a781306040518083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050505061023d565b8260048101928215610207579160200282015b828111156102065782518290600019169055916020019190600101906101e5565b5b5090506102149190610218565b5090565b61023a91905b8082111561023657600081600090555060010161021e565b5090565b90565b610d9a8061024c6000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a8cdfbb1461005c578063da98cb7b146100cd578063ed3437f814610164575b600080fd5b34801561006857600080fd5b5061008b600480360381019080803560001916906020019092919050505061018f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100d957600080fd5b5061016260048036038101908080359060200190820180359060200191909192939192939080359060200190929190803590602001909291908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293905050506101c2565b005b34801561017057600080fd5b5061017961093b565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080898888905014151561023f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e707574207369676e6174757265206c656e67746820696e76616c6964000081525060200191505060405180910390fd5b8b8b90508686905089899050011415156102c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6172726179206c656e677468206d69736d61746368000000000000000000000081525060200191505060405180910390fd5b73b729d78f799f62036a3b149e8d799bf109c214da63b5596a888d8d8d8d60026040518663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018581526020018481526020018360048015610348576020028201915b81546000191681526020019060010190808311610330575b50508281038252878782818152602001925060c002808284378201915050965050505050505060206040518083038186803b15801561038657600080fd5b505af415801561039a573d6000803e3d6000fd5b505050506040513d60208110156103b057600080fd5b81019080805190602001909291905050501515610435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f70726f6f66206e6f742076616c6964210000000000000000000000000000000081525060200191505060405180910390fd5b8b8b60018e8e905003818110151561044957fe5b905060c00201600060068110151561045d57fe5b602002013560001916600190049150600090505b8b8b90508110156105835789811015610507576105028c8c83818110151561049557fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505089898481811015156104ce57fe5b905060600201600380602002604051908101604052809291908260036020028082843782019150505050508b600654610941565b610576565b6105758c8c83818110151561051857fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505087878d8503818110151561055357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16610bef565b5b8080600101915050610471565b6000821115610901577f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f800000082101561073157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360005485026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505050506040513d60208110156106a757600080fd5b8101908080519060200190929190505050151561072c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e207472616e7366657220746f2075736572206661696c656421000081525060200191505060405180910390fd5b610900565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600054867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103026040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b505050506040513d602081101561087a57600080fd5b810190808051906020019092919050505015156108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f746f6b656e207472616e736665722066726f6d2075736572206661696c65642181525060200191505060405180910390fd5b5b5b7fc377ec77b2d4e164767d661c3543ed9afe3fd6656829a68e1edebd88ca8a3a6760405160405180910390a1505050505050505050505050565b60005481565b600080600060405160408801518152606088015160208201526080880151604082015260a088015160608201526080812093507f1aba5d08f7cd777136d3fa7eb7baa742ab84001b34c9de5b17d922fc2ca75cce815283602082015285604082015233606082015260808120604082015284602082015261190181526042601e8201209250506001828760006003811015156109d957fe5b6020020151600190048860016003811015156109f157fe5b6020020151896002600381101515610a0557fe5b6020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610a7b573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff1660016000856000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610b8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f657870656374656420696e707574206e6f746520746f20657869737420696e2081526020017f726567697374727900000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060016000856000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b600060405160408401518152606084015160208201526080840151604082015260a0840151606082015260808120915050600060016000836000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6578706563746564206f7574707574206e6f746520746f206e6f74206578697381526020017f7420696e2072656769737472790000000000000000000000000000000000000081525060400191505060405180910390fd5b8160016000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582057d9f6efc85be09d15cb25c2a0d415ef41455b3cb1417e5e361739d414e715ba002901cf7cc93bfbf7b2c5f04a3bc9cb8b72bbcf2defcabdceb09860c493bdf1588d08d554bf59102bbb961ba81107ec71785ef9ce6638e5332b6c1a58b87447d181204e5d81d86c561f9344ad5f122a625f259996b065b80cbbe74a9ad97b6d7cc202cb2a424885c9e412b94c40905b359e3043275cd29f5b557f008cd0a3e0c0dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359000000000000000000000000000000000000000000000000016345785d8a0000

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

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 01cf7cc93bfbf7b2c5f04a3bc9cb8b72bbcf2defcabdceb09860c493bdf1588d
Arg [1] : 08d554bf59102bbb961ba81107ec71785ef9ce6638e5332b6c1a58b87447d181
Arg [2] : 204e5d81d86c561f9344ad5f122a625f259996b065b80cbbe74a9ad97b6d7cc2
Arg [3] : 02cb2a424885c9e412b94c40905b359e3043275cd29f5b557f008cd0a3e0c0dc
Arg [4] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [5] : 000000000000000000000000000000000000000000000000016345785d8a0000


   Library Used
AZTECInterface : 0xb729d78f799f62036a3b149e8d799bf109c214da

   Swarm Source:
bzzr://57d9f6efc85be09d15cb25c2a0d415ef41455b3cb1417e5e361739d414e715ba

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.