ETH Price: $1,863.38 (-13.17%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Confidential Tra...68046862018-12-01 5:36:192623 days ago1543642579IN
0x6C8B12c6...D9010AA09
0 ETH0.00092045
Confidential Tra...67167782018-11-16 18:54:142638 days ago1542394454IN
0x6C8B12c6...D9010AA09
0 ETH0.002945855
Confidential Tra...67165872018-11-16 18:06:232638 days ago1542391583IN
0x6C8B12c6...D9010AA09
0 ETH0.000992085
Confidential Tra...67165622018-11-16 18:00:582638 days ago1542391258IN
0x6C8B12c6...D9010AA09
0 ETH0.003967135
Confidential Tra...67165532018-11-16 17:58:412638 days ago1542391121IN
0x6C8B12c6...D9010AA09
0 ETH0.003967775
Confidential Tra...67164882018-11-16 17:42:232638 days ago1542390143IN
0x6C8B12c6...D9010AA09
0 ETH0.005407575
Confidential Tra...67162312018-11-16 16:39:362638 days ago1542386376IN
0x6C8B12c6...D9010AA09
0 ETH0.005556615
Confidential Tra...67159062018-11-16 15:19:432638 days ago1542381583IN
0x6C8B12c6...D9010AA09
0 ETH0.006409846

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AZTECERC20Bridge

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-11-26
*/

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 Security Audit

Contract ABI

API
[{"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"}]

608060405234801561001057600080fd5b5060405160c080610fe6833981018060405281019080919082608001805190602001909291908051906020019092919050505060008360029060046100569291906101d2565b5082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000819055506040517f8d4b25bfecb769291b71726cd5ec8a497664cc7292c02b1868a0534306741fd981527f87a23625953c9fb02b3570c86f75403039bbe5de82b48ca671c10157d91a991a60208201527f25130290f410620ec94e7cf11f1cdab5dea284e1039a83fa7b87f727031ff5f46040820152600160608201527f210db872dec2e06c375dd40a5a354307bb4ba52ba65bd84594554580ae6f063960808201523060a082015260c0812091505080600681600019169055507f6e765c1505df7edb32788588e8f625dd368914ea995e3d429094152b826977a781306040518083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050505061023d565b8260048101928215610207579160200282015b828111156102065782518290600019169055916020019190600101906101e5565b5b5090506102149190610218565b5090565b61023a91905b8082111561023657600081600090555060010161021e565b5090565b90565b610d9a8061024c6000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a8cdfbb1461005c578063da98cb7b146100cd578063ed3437f814610164575b600080fd5b34801561006857600080fd5b5061008b600480360381019080803560001916906020019092919050505061018f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100d957600080fd5b5061016260048036038101908080359060200190820180359060200191909192939192939080359060200190929190803590602001909291908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293905050506101c2565b005b34801561017057600080fd5b5061017961093b565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080898888905014151561023f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e707574207369676e6174757265206c656e67746820696e76616c6964000081525060200191505060405180910390fd5b8b8b90508686905089899050011415156102c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6172726179206c656e677468206d69736d61746368000000000000000000000081525060200191505060405180910390fd5b73b729d78f799f62036a3b149e8d799bf109c214da63b5596a888d8d8d8d60026040518663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018581526020018481526020018360048015610348576020028201915b81546000191681526020019060010190808311610330575b50508281038252878782818152602001925060c002808284378201915050965050505050505060206040518083038186803b15801561038657600080fd5b505af415801561039a573d6000803e3d6000fd5b505050506040513d60208110156103b057600080fd5b81019080805190602001909291905050501515610435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f70726f6f66206e6f742076616c6964210000000000000000000000000000000081525060200191505060405180910390fd5b8b8b60018e8e905003818110151561044957fe5b905060c00201600060068110151561045d57fe5b602002013560001916600190049150600090505b8b8b90508110156105835789811015610507576105028c8c83818110151561049557fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505089898481811015156104ce57fe5b905060600201600380602002604051908101604052809291908260036020028082843782019150505050508b600654610941565b610576565b6105758c8c83818110151561051857fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505087878d8503818110151561055357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16610bef565b5b8080600101915050610471565b6000821115610901577f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f800000082101561073157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360005485026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505050506040513d60208110156106a757600080fd5b8101908080519060200190929190505050151561072c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e207472616e7366657220746f2075736572206661696c656421000081525060200191505060405180910390fd5b610900565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600054867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103026040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b505050506040513d602081101561087a57600080fd5b810190808051906020019092919050505015156108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f746f6b656e207472616e736665722066726f6d2075736572206661696c65642181525060200191505060405180910390fd5b5b5b7fc377ec77b2d4e164767d661c3543ed9afe3fd6656829a68e1edebd88ca8a3a6760405160405180910390a1505050505050505050505050565b60005481565b600080600060405160408801518152606088015160208201526080880151604082015260a088015160608201526080812093507f1aba5d08f7cd777136d3fa7eb7baa742ab84001b34c9de5b17d922fc2ca75cce815283602082015285604082015233606082015260808120604082015284602082015261190181526042601e8201209250506001828760006003811015156109d957fe5b6020020151600190048860016003811015156109f157fe5b6020020151896002600381101515610a0557fe5b6020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610a7b573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff1660016000856000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610b8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f657870656374656420696e707574206e6f746520746f20657869737420696e2081526020017f726567697374727900000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060016000856000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b600060405160408401518152606084015160208201526080840151604082015260a0840151606082015260808120915050600060016000836000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6578706563746564206f7574707574206e6f746520746f206e6f74206578697381526020017f7420696e2072656769737472790000000000000000000000000000000000000081525060400191505060405180910390fd5b8160016000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582057d9f6efc85be09d15cb25c2a0d415ef41455b3cb1417e5e361739d414e715ba002901cf7cc93bfbf7b2c5f04a3bc9cb8b72bbcf2defcabdceb09860c493bdf1588d08d554bf59102bbb961ba81107ec71785ef9ce6638e5332b6c1a58b87447d181204e5d81d86c561f9344ad5f122a625f259996b065b80cbbe74a9ad97b6d7cc202cb2a424885c9e412b94c40905b359e3043275cd29f5b557f008cd0a3e0c0dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359000000000000000000000000000000000000000000000000016345785d8a0000

Deployed Bytecode

0x608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632a8cdfbb1461005c578063da98cb7b146100cd578063ed3437f814610164575b600080fd5b34801561006857600080fd5b5061008b600480360381019080803560001916906020019092919050505061018f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100d957600080fd5b5061016260048036038101908080359060200190820180359060200191909192939192939080359060200190929190803590602001909291908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293905050506101c2565b005b34801561017057600080fd5b5061017961093b565b6040518082815260200191505060405180910390f35b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080898888905014151561023f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e707574207369676e6174757265206c656e67746820696e76616c6964000081525060200191505060405180910390fd5b8b8b90508686905089899050011415156102c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6172726179206c656e677468206d69736d61746368000000000000000000000081525060200191505060405180910390fd5b73b729d78f799f62036a3b149e8d799bf109c214da63b5596a888d8d8d8d60026040518663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180806020018581526020018481526020018360048015610348576020028201915b81546000191681526020019060010190808311610330575b50508281038252878782818152602001925060c002808284378201915050965050505050505060206040518083038186803b15801561038657600080fd5b505af415801561039a573d6000803e3d6000fd5b505050506040513d60208110156103b057600080fd5b81019080805190602001909291905050501515610435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f70726f6f66206e6f742076616c6964210000000000000000000000000000000081525060200191505060405180910390fd5b8b8b60018e8e905003818110151561044957fe5b905060c00201600060068110151561045d57fe5b602002013560001916600190049150600090505b8b8b90508110156105835789811015610507576105028c8c83818110151561049557fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505089898481811015156104ce57fe5b905060600201600380602002604051908101604052809291908260036020028082843782019150505050508b600654610941565b610576565b6105758c8c83818110151561051857fe5b905060c002016006806020026040519081016040528092919082600660200280828437820191505050505087878d8503818110151561055357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16610bef565b5b8080600101915050610471565b6000821115610901577f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f800000082101561073157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3360005485026040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505050506040513d60208110156106a757600080fd5b8101908080519060200190929190505050151561072c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746f6b656e207472616e7366657220746f2075736572206661696c656421000081525060200191505060405180910390fd5b610900565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600054867f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103026040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561085057600080fd5b505af1158015610864573d6000803e3d6000fd5b505050506040513d602081101561087a57600080fd5b810190808051906020019092919050505015156108ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f746f6b656e207472616e736665722066726f6d2075736572206661696c65642181525060200191505060405180910390fd5b5b5b7fc377ec77b2d4e164767d661c3543ed9afe3fd6656829a68e1edebd88ca8a3a6760405160405180910390a1505050505050505050505050565b60005481565b600080600060405160408801518152606088015160208201526080880151604082015260a088015160608201526080812093507f1aba5d08f7cd777136d3fa7eb7baa742ab84001b34c9de5b17d922fc2ca75cce815283602082015285604082015233606082015260808120604082015284602082015261190181526042601e8201209250506001828760006003811015156109d957fe5b6020020151600190048860016003811015156109f157fe5b6020020151896002600381101515610a0557fe5b6020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610a7b573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff1660016000856000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610b8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f657870656374656420696e707574206e6f746520746f20657869737420696e2081526020017f726567697374727900000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600060016000856000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b600060405160408401518152606084015160208201526080840151604082015260a0840151606082015260808120915050600060016000836000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f6578706563746564206f7574707574206e6f746520746f206e6f74206578697381526020017f7420696e2072656769737472790000000000000000000000000000000000000081525060400191505060405180910390fd5b8160016000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a7230582057d9f6efc85be09d15cb25c2a0d415ef41455b3cb1417e5e361739d414e715ba0029

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

01cf7cc93bfbf7b2c5f04a3bc9cb8b72bbcf2defcabdceb09860c493bdf1588d08d554bf59102bbb961ba81107ec71785ef9ce6638e5332b6c1a58b87447d181204e5d81d86c561f9344ad5f122a625f259996b065b80cbbe74a9ad97b6d7cc202cb2a424885c9e412b94c40905b359e3043275cd29f5b557f008cd0a3e0c0dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359000000000000000000000000000000000000000000000000016345785d8a0000

-----Decoded View---------------
Arg [0] : _setupPubKey (bytes32[4]): System.Byte[],System.Byte[],System.Byte[],System.Byte[]
Arg [1] : _token (address): 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359
Arg [2] : _scalingFactor (uint256): 100000000000000000

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


Libraries Used


Swarm Source

bzzr://57d9f6efc85be09d15cb25c2a0d415ef41455b3cb1417e5e361739d414e715ba

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.