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

Contract

0xA874B3b7a4A4F10a76e4aD56160b43439c0b6a4D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend ERC20122000522021-04-08 15:43:181400 days ago1617896598IN
0xA874B3b7...39c0b6a4D
0 ETH0.01331694156.08047134
Spend ERC20121064812021-03-25 6:25:111415 days ago1616653511IN
0xA874B3b7...39c0b6a4D
0 ETH0.00999525142.11324074
Spend ERC20121015122021-03-24 12:23:351415 days ago1616588615IN
0xA874B3b7...39c0b6a4D
0 ETH0.0145895171.04353578
Spend ERC20120895122021-03-22 15:49:251417 days ago1616428165IN
0xA874B3b7...39c0b6a4D
0 ETH0.01931221274.6763108
Spend ERC20120746202021-03-20 8:26:371420 days ago1616228797IN
0xA874B3b7...39c0b6a4D
0 ETH0.00768863109.33619905
Spend ERC20120684442021-03-19 9:46:321421 days ago1616147192IN
0xA874B3b7...39c0b6a4D
0 ETH0.0123728145.01476388
Spend ERC20120629102021-03-18 13:24:101421 days ago1616073850IN
0xA874B3b7...39c0b6a4D
0 ETH0.01887703221.24721045
Spend ERC20120564782021-03-17 13:35:171422 days ago1615988117IN
0xA874B3b7...39c0b6a4D
0 ETH0.02137522250.49187057
Spend ERC20120549742021-03-17 8:03:191423 days ago1615968199IN
0xA874B3b7...39c0b6a4D
0 ETH0.01390117162.92790416
Spend ERC20120411152021-03-15 4:52:531425 days ago1615783973IN
0xA874B3b7...39c0b6a4D
0 ETH0.01107775157.53129472
Spend ERC20120285112021-03-13 6:23:421427 days ago1615616622IN
0xA874B3b7...39c0b6a4D
0 ETH0.00885922126.00418054
Spend ERC20120163112021-03-11 8:54:511429 days ago1615452891IN
0xA874B3b7...39c0b6a4D
0 ETH0.01016843119.17853374
Spend ERC20119840982021-03-06 9:41:551434 days ago1615023715IN
0xA874B3b7...39c0b6a4D
0 ETH0.0055134978.39135527
Spend ERC20119706662021-03-04 8:16:031436 days ago1614845763IN
0xA874B3b7...39c0b6a4D
0 ETH0.0054367377.35270003
Spend ERC20119695412021-03-04 4:16:081436 days ago1614831368IN
0xA874B3b7...39c0b6a4D
0 ETH0.01037905147.64572357
Spend ERC20119637832021-03-03 6:48:051437 days ago1614754085IN
0xA874B3b7...39c0b6a4D
0 ETH0.0061173286.99143657
Spend ERC20119634762021-03-03 5:44:131437 days ago1614750253IN
0xA874B3b7...39c0b6a4D
0 ETH0.0059184384.16315755
Spend ERC20119588962021-03-02 12:48:151437 days ago1614689295IN
0xA874B3b7...39c0b6a4D
0 ETH0.0061255287.13777468
Spend ERC20119063882021-02-22 10:52:331446 days ago1613991153IN
0xA874B3b7...39c0b6a4D
0 ETH0.01403704199.61384491
Spend ERC20119057362021-02-22 8:24:231446 days ago1613982263IN
0xA874B3b7...39c0b6a4D
0 ETH0.0093318132.74828211
Spend ERC20119053312021-02-22 6:53:071446 days ago1613976787IN
0xA874B3b7...39c0b6a4D
0 ETH0.01255174147.13273217
Spend ERC20119052652021-02-22 6:36:301446 days ago1613975790IN
0xA874B3b7...39c0b6a4D
0 ETH0.01067685151.85622695
Spend ERC20118985422021-02-21 5:58:261447 days ago1613887106IN
0xA874B3b7...39c0b6a4D
0 ETH0.00959991112.54695647
Spend ERC20118860672021-02-19 7:51:461449 days ago1613721106IN
0xA874B3b7...39c0b6a4D
0 ETH0.01076179153.03809413
Spend ERC20118859912021-02-19 7:33:271449 days ago1613720007IN
0xA874B3b7...39c0b6a4D
0 ETH0.01324683155.25873136
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x228EaA0A...9Da789200
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
OwnbitMultiSig

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-09-29
*/

pragma solidity ^0.4.21;

// This is the ETH/ERC20 multisig contract for Ownbit.
//
// For 2-of-3 multisig, to authorize a spend, two signtures must be provided by 2 of the 3 owners.
// To generate the message to be signed, provide the destination address and
// spend amount (in wei) to the generateMessageToSignmethod.
// The signatures must be provided as the (v, r, s) hex-encoded coordinates.
// The S coordinate must be 0x00 or 0x01 corresponding to 0x1b and 0x1c, respectively.
// See the test file for example inputs.
//
// WARNING: The generated message is only valid until the next spend is executed.
//          after that, a new message will need to be calculated.
//
//
// INFO: This contract is ERC20 compatible.
// This contract can both receive ETH and ERC20 tokens.
// NFT is not supported
// Add support for DeFi (Compound)

interface Erc20 {
    function approve(address, uint256);

    function transfer(address, uint256);
}

interface CErc20 {
    function mint(uint256) external returns (uint256);

    function redeem(uint) external returns (uint);

    function redeemUnderlying(uint) external returns (uint);
}

interface CEth {
    function mint() external payable;

    function redeem(uint) external returns (uint);

    function redeemUnderlying(uint) external returns (uint);
}

contract OwnbitMultiSig {
    
    uint constant public MAX_OWNER_COUNT = 9;

  // The N addresses which control the funds in this contract.  The
  // owners of M of these addresses will need to both sign a message
  // allowing the funds in this contract to be spent.
  mapping(address => bool) private isOwner;
  address[] private owners;
  uint private required;

  // The contract nonce is not accessible to the contract so we
  // implement a nonce-like variable for replay protection.
  uint256 private spendNonce = 0;
  
  // An event sent when funds are received.
  event Funded(uint new_balance);
  
  // An event sent when a spend is triggered to the given address.
  event Spent(address to, uint transfer);
  
  // An event sent when a spend is triggered to the given address.
  event SpentErc20(address erc20contract, address to, uint transfer);

  modifier validRequirement(uint ownerCount, uint _required) {
        require (ownerCount <= MAX_OWNER_COUNT
            && _required <= ownerCount
            && _required > 0);
        _;
    }
  
    /// @dev Contract constructor sets initial owners and required number of confirmations.
    /// @param _owners List of initial owners.
    /// @param _required Number of required confirmations.
    constructor(address[] _owners, uint _required) public validRequirement(_owners.length, _required) {
        for (uint i=0; i<_owners.length; i++) {
            //onwer should be distinct, and non-zero
            if (isOwner[_owners[i]] || _owners[i] == 0) {
                revert();
            }
            isOwner[_owners[i]] = true;
        }
        owners = _owners;
        required = _required;
    }


    // The fallback function for this contract.
    function() public payable {
        emit Funded(address(this).balance);
    }
  
    /// @dev Returns list of owners.
    /// @return List of owner addresses.
    function getOwners() public constant returns (address[]) {
        return owners;
    }
    
    function getSpendNonce() public constant returns (uint256) {
        return spendNonce;
    }
    
    function getRequired() public constant returns (uint) {
        return required;
    }

  // Generates the message to sign given the output destination address and amount.
  // includes this contract's address and a nonce for replay protection.
  // One option to  independently verify: https://leventozturk.com/engineering/sha3/ and select keccak
  function generateMessageToSign(address erc20Contract, address destination, uint256 value) public constant returns (bytes32) {
    require(destination != address(this));
    //the sequence should match generateMultiSigV2 in JS
    bytes32 message = keccak256(this, erc20Contract, destination, value, spendNonce);
    return message;
  }
  
  function _messageToRecover(address erc20Contract, address destination, uint256 value) private constant returns (bytes32) {
    bytes32 hashedUnsignedMessage = generateMessageToSign(erc20Contract, destination, value);
    bytes memory prefix = "\x19Ethereum Signed Message:\n32";
    return keccak256(prefix,hashedUnsignedMessage);
  }
  
  function spend(address destination, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) public {
    // This require is handled by generateMessageToSign()
    // require(destination != address(this));
    require(address(this).balance >= value);
    require(_validSignature(0x0000000000000000000000000000000000000000, destination, value, vs, rs, ss));
    spendNonce = spendNonce + 1;
    //transfer will throw if fails
    destination.transfer(value);
    emit Spent(destination, value);
  }
  
  // @erc20contract: the erc20 contract address.
  // @destination: the token or ether receiver address.
  // @value: the token or ether value, in wei or token minimum unit.
  // @vs, rs, ss: the signatures
  function spendERC20(address destination, address erc20contract, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) public {
    // This require is handled by generateMessageToSign()
    // require(destination != address(this));
    //transfer erc20 token
    //require(ERC20Interface(erc20contract).balanceOf(address(this)) >= value);
    require(_validSignature(erc20contract, destination, value, vs, rs, ss));
    spendNonce = spendNonce + 1;
    // transfer the tokens from the sender to this contract
    Erc20(erc20contract).transfer(destination, value);
    emit SpentErc20(erc20contract, destination, value);
  }


    //cErc20Contract is just like the destination
    function compoundAction(address cErc20Contract, address erc20contract, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) public {
        CEth ethToken;
        CErc20 erc20Token;
        
        if (erc20contract == 0x0000000000000000000000000000000000000001) {
            require(_validSignature(erc20contract, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //supply ETH
            ethToken = CEth(cErc20Contract);
            ethToken.mint.value(value).gas(250000)();
        } else if (erc20contract == 0x0000000000000000000000000000000000000003) {
            require(_validSignature(erc20contract, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //redeem ETH
            ethToken = CEth(cErc20Contract);
            ethToken.redeem(value);
        } else if (erc20contract == 0x0000000000000000000000000000000000000004) {
            require(_validSignature(erc20contract, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //redeem token
            erc20Token = CErc20(cErc20Contract);
            erc20Token.redeem(value);
        } else if (erc20contract == 0x0000000000000000000000000000000000000005) {
            require(_validSignature(erc20contract, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //redeemUnderlying ETH
            ethToken = CEth(cErc20Contract);
            ethToken.redeemUnderlying(value);
        } else if (erc20contract == 0x0000000000000000000000000000000000000006) {
            require(_validSignature(erc20contract, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //redeemUnderlying token
            erc20Token = CErc20(cErc20Contract);
            erc20Token.redeemUnderlying(value);
        } else {
            //Do not conflict with spendERC20
            require(_validSignature(0x0000000000000000000000000000000000000002, cErc20Contract, value, vs, rs, ss));
            spendNonce = spendNonce + 1;
            
            //supply token
            // Create a reference to the underlying asset contract, like DAI.
            Erc20 underlying = Erc20(erc20contract);
            // Create a reference to the corresponding cToken contract, like cDAI
            erc20Token = CErc20(cErc20Contract);
            // Approve transfer on the ERC20 contract
            underlying.approve(cErc20Contract, value);
            // Mint cTokens
            erc20Token.mint(value);
        } 
    }
    

  // Confirm that the signature triplets (v1, r1, s1) (v2, r2, s2) ...
  // authorize a spend of this contract's funds to the given
  // destination address.
  function _validSignature(address erc20Contract, address destination, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) private constant returns (bool) {
    require(vs.length == rs.length);
    require(rs.length == ss.length);
    require(vs.length <= owners.length);
    require(vs.length >= required);
    bytes32 message = _messageToRecover(erc20Contract, destination, value);
    address[] memory addrs = new address[](vs.length);
    for (uint i=0; i<vs.length; i++) {
        //recover the address associated with the public key from elliptic curve signature or return zero on error 
        addrs[i] = ecrecover(message, vs[i]+27, rs[i], ss[i]);
    }
    require(_distinctOwners(addrs));
    return true;
  }
  
  // Confirm the addresses as distinct owners of this contract.
  function _distinctOwners(address[] addrs) private constant returns (bool) {
    if (addrs.length > owners.length) {
        return false;
    }
    for (uint i = 0; i < addrs.length; i++) {
        if (!isOwner[addrs[i]]) {
            return false;
        }
        //address should be distinct
        for (uint j = 0; j < i; j++) {
            if (addrs[i] == addrs[j]) {
                return false;
            }
        }
    }
    return true;
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"destination","type":"address"},{"name":"erc20contract","type":"address"},{"name":"value","type":"uint256"},{"name":"vs","type":"uint8[]"},{"name":"rs","type":"bytes32[]"},{"name":"ss","type":"bytes32[]"}],"name":"spendERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRequired","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"vs","type":"uint8[]"},{"name":"rs","type":"bytes32[]"},{"name":"ss","type":"bytes32[]"}],"name":"spend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"cErc20Contract","type":"address"},{"name":"erc20contract","type":"address"},{"name":"value","type":"uint256"},{"name":"vs","type":"uint8[]"},{"name":"rs","type":"bytes32[]"},{"name":"ss","type":"bytes32[]"}],"name":"compoundAction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSpendNonce","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_OWNER_COUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"erc20Contract","type":"address"},{"name":"destination","type":"address"},{"name":"value","type":"uint256"}],"name":"generateMessageToSign","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_required","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"new_balance","type":"uint256"}],"name":"Funded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"transfer","type":"uint256"}],"name":"Spent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"erc20contract","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"transfer","type":"uint256"}],"name":"SpentErc20","type":"event"}]

Deployed Bytecode

0x60806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301173672146100de5780631398a5f61461021457806385b2566a1461023f578063a0e67e2b14610355578063c26e69ca146103c1578063c6a2a9f1146104f7578063d74f8edd14610522578063da1a35d51461054d575b7fc4c14883ae9fd8e26d5d59e3485ed29fd126d781d7e498a4ca5c54c8268e49363073ffffffffffffffffffffffffffffffffffffffff16316040518082815260200191505060405180910390a1005b3480156100ea57600080fd5b50610212600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506105d6565b005b34801561022057600080fd5b5061022961075d565b6040518082815260200191505060405180910390f35b34801561024b57600080fd5b50610353600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610767565b005b34801561036157600080fd5b5061036a61086c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103ad578082015181840152602081019050610392565b505050509050019250505060405180910390f35b3480156103cd57600080fd5b506104f5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506108fa565b005b34801561050357600080fd5b5061050c610fba565b6040518082815260200191505060405180910390f35b34801561052e57600080fd5b50610537610fc4565b6040518082815260200191505060405180910390f35b34801561055957600080fd5b506105b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fc9565b60405180826000191660001916815260200191505060405180910390f35b6105e48587868686866110fd565b15156105ef57600080fd5b6001600354016003819055508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050507f05374c4f98ac3202e6e2587fd4fe8290d6d61de6eb031d1abb68f943dcd01635858786604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050505050565b6000600254905090565b833073ffffffffffffffffffffffffffffffffffffffff16311015151561078d57600080fd5b61079c600086868686866110fd565b15156107a757600080fd5b6001600354016003819055508473ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156107f9573d6000803e3d6000fd5b507fd3eec71143c45f28685b24760ea218d476917aa0ac0392a55e5304cef40bd2b68585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050505050565b606060018054806020026020016040519081016040528092919081815260200182805480156108f057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108a6575b5050505050905090565b6000806000600173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614156109e457610942888a898989896110fd565b151561094d57600080fd5b6001600354016003819055508892508273ffffffffffffffffffffffffffffffffffffffff16631249c58b886203d090906040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016000604051808303818589803b1580156109c557600080fd5b5088f11580156109d9573d6000803e3d6000fd5b505050505050610faf565b600373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610af157610a27888a898989896110fd565b1515610a3257600080fd5b6001600354016003819055508892508273ffffffffffffffffffffffffffffffffffffffff1663db006a75886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b505050506040513d6020811015610ada57600080fd5b810190808051906020019092919050505050610fae565b600473ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610bfe57610b34888a898989896110fd565b1515610b3f57600080fd5b6001600354016003819055508891508173ffffffffffffffffffffffffffffffffffffffff1663db006a75886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610bbd57600080fd5b505af1158015610bd1573d6000803e3d6000fd5b505050506040513d6020811015610be757600080fd5b810190808051906020019092919050505050610fad565b600573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610d0b57610c41888a898989896110fd565b1515610c4c57600080fd5b6001600354016003819055508892508273ffffffffffffffffffffffffffffffffffffffff1663852a12e3886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b505050506040513d6020811015610cf457600080fd5b810190808051906020019092919050505050610fac565b600673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610e1857610d4e888a898989896110fd565b1515610d5957600080fd5b6001600354016003819055508891508173ffffffffffffffffffffffffffffffffffffffff1663852a12e3886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b505050506040513d6020811015610e0157600080fd5b810190808051906020019092919050505050610fab565b610e2760028a898989896110fd565b1515610e3257600080fd5b6001600354016003819055508790508891508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38a896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610ee757600080fd5b505af1158015610efb573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff1663a0712d68886040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015610f6e57600080fd5b505af1158015610f82573d6000803e3d6000fd5b505050506040513d6020811015610f9857600080fd5b8101908080519060200190929190505050505b5b5b5b5b505050505050505050565b6000600354905090565b600981565b6000803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561100757600080fd5b30858585600354604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019550505050505060405180910390209050809150509392505050565b600080606060008551875114151561111457600080fd5b8451865114151561112457600080fd5b60018054905087511115151561113957600080fd5b60025487511015151561114b57600080fd5b6111568a8a8a6112de565b925086516040519080825280602002602001820160405280156111885781602001602082028038833980820191505090505b509150600090505b86518110156112b957600183601b89848151811015156111ac57fe5b906020019060200201510188848151811015156111c557fe5b9060200190602002015188858151811015156111dd57fe5b90602001906020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015611258573d6000803e3d6000fd5b50505060206040510351828281518110151561127057fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050611190565b6112c2826113a6565b15156112cd57600080fd5b600193505050509695505050505050565b60008060606112ee868686610fc9565b91506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905080826040518083805190602001908083835b60208310151561135f578051825260208201915060208101905060208303925061133a565b6001836020036101000a0380198251168184511680821785525050505050509050018260001916600019168152602001925050506040518091039020925050509392505050565b6000806000600180549050845111156113c257600092506114d9565b600091505b83518210156114d45760008085848151811015156113e157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561144257600092506114d9565b600090505b818110156114c757838181518110151561145d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16848381518110151561148b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614156114ba57600092506114d9565b8080600101915050611447565b81806001019250506113c7565b600192505b50509190505600a165627a7a72305820a2ccf7247ba566f659b58f7d23539524a71175fd326a4dac4542735f863c53090029

Deployed Bytecode Sourcemap

1351:8751:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3167:29;3182:4;3174:21;;;3167:29;;;;;;;;;;;;;;;;;;1351:8751;5276:633;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5276:633:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3502:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3502:88:0;;;;;;;;;;;;;;;;;;;;;;;4553:504;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4553:504:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3294:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3294:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3294:89:0;;;;;;;;;;;;;;;;;5970:2677;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5970:2677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3395:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3395:95:0;;;;;;;;;;;;;;;;;;;;;;;1388:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1388:40:0;;;;;;;;;;;;;;;;;;;;;;;3859:340;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3859:340:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5276:633;5632:62;5648:13;5663:11;5676:5;5683:2;5687;5691;5632:15;:62::i;:::-;5624:71;;;;;;;;5728:1;5715:10;;:14;5702:10;:27;;;;5803:13;5797:29;;;5827:11;5840:5;5797:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5797:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5797:49:0;;;;5858:45;5869:13;5884:11;5897:5;5858:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5276:633;;;;;;:::o;3502:88::-;3550:4;3574:8;;3567:15;;3502:88;:::o;4553:504::-;4797:5;4780:4;4772:21;;;:30;;4764:39;;;;;;;;4818:91;4834:42;4878:11;4891:5;4898:2;4902;4906;4818:15;:91::i;:::-;4810:100;;;;;;;;4943:1;4930:10;;:14;4917:10;:27;;;;4987:11;:20;;:27;5008:5;4987:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4987:27:0;5026:25;5032:11;5045:5;5026:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4553:504;;;;;:::o;3294:89::-;3340:9;3369:6;3362:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3294:89;:::o;5970:2677::-;6114:13;6138:17;8278:16;6197:42;6180:59;;:13;:59;;;6176:2463;;;6264:65;6280:13;6295:14;6311:5;6318:2;6322;6326;6264:15;:65::i;:::-;6256:74;;;;;;;;6371:1;6358:10;;:14;6345:10;:27;;;;6443:14;6427:31;;6473:8;:13;;;6493:5;6504:6;6473:38;:40;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6473:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6473:40:0;;;;;;6176:2463;;;6552:42;6535:59;;:13;:59;;;6531:2108;;;6619:65;6635:13;6650:14;6666:5;6673:2;6677;6681;6619:15;:65::i;:::-;6611:74;;;;;;;;6726:1;6713:10;;:14;6700:10;:27;;;;6798:14;6782:31;;6828:8;:15;;;6844:5;6828:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6828:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6828:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6828:22:0;;;;;;;;;;;;;;;;;6531:2108;;;6889:42;6872:59;;:13;:59;;;6868:1771;;;6956:65;6972:13;6987:14;7003:5;7010:2;7014;7018;6956:15;:65::i;:::-;6948:74;;;;;;;;7063:1;7050:10;;:14;7037:10;:27;;;;7141:14;7121:35;;7171:10;:17;;;7189:5;7171:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7171:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7171:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7171:24:0;;;;;;;;;;;;;;;;;6868:1771;;;7234:42;7217:59;;:13;:59;;;7213:1426;;;7301:65;7317:13;7332:14;7348:5;7355:2;7359;7363;7301:15;:65::i;:::-;7293:74;;;;;;;;7408:1;7395:10;;:14;7382:10;:27;;;;7490:14;7474:31;;7520:8;:25;;;7546:5;7520:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7520:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7520:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7520:32:0;;;;;;;;;;;;;;;;;7213:1426;;;7591:42;7574:59;;:13;:59;;;7570:1069;;;7658:65;7674:13;7689:14;7705:5;7712:2;7716;7720;7658:15;:65::i;:::-;7650:74;;;;;;;;7765:1;7752:10;;:14;7739:10;:27;;;;7853:14;7833:35;;7883:10;:27;;;7911:5;7883:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7883:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7883:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7883:34:0;;;;;;;;;;;;;;;;;7570:1069;;;8005:94;8021:42;8065:14;8081:5;8088:2;8092;8096;8005:15;:94::i;:::-;7997:103;;;;;;;;8141:1;8128:10;;:14;8115:10;:27;;;;8303:13;8278:39;;8435:14;8415:35;;8520:10;:18;;;8539:14;8555:5;8520:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8520:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8520:41:0;;;;8605:10;:15;;;8621:5;8605:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8605:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8605:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8605:22:0;;;;;;;;;;;;;;;;;7570:1069;7213:1426;6868:1771;6531:2108;6176:2463;5970:2677;;;;;;;;;:::o;3395:95::-;3445:7;3472:10;;3465:17;;3395:95;:::o;1388:40::-;1427:1;1388:40;:::o;3859:340::-;3974:7;4092:15;4021:4;3998:28;;:11;:28;;;;3990:37;;;;;;;;4120:4;4126:13;4141:11;4154:5;4161:10;;4110:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4092:80;;4186:7;4179:14;;3859:340;;;;;;:::o;8820:734::-;8970:4;9138:15;9215:22;9276:6;9004:2;:9;8991:2;:9;:22;8983:31;;;;;;;;9042:2;:9;9029:2;:9;:22;9021:31;;;;;;;;9080:6;:13;;;;9067:2;:9;:26;;9059:35;;;;;;;;9122:8;;9109:2;:9;:21;;9101:30;;;;;;;;9156:52;9174:13;9189:11;9202:5;9156:17;:52::i;:::-;9138:70;;9254:2;:9;9240:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9240:24:0;;;;9215:49;;9283:1;9276:8;;9271:222;9288:2;:9;9286:1;:11;9271:222;;;9443:42;9453:7;9468:2;9462;9465:1;9462:5;;;;;;;;;;;;;;;;;;:8;9472:2;9475:1;9472:5;;;;;;;;;;;;;;;;;;9479:2;9482:1;9479:5;;;;;;;;;;;;;;;;;;9443:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9443:42:0;;;;;;;;9432:5;9438:1;9432:8;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;9299:3;;;;;;;9271:222;;;9507:22;9523:5;9507:15;:22::i;:::-;9499:31;;;;;;;;9544:4;9537:11;;8820:734;;;;;;;;;;;:::o;4207:338::-;4319:7;4335:29;4430:19;4367:56;4389:13;4404:11;4417:5;4367:21;:56::i;:::-;4335:88;;4430:56;;;;;;;;;;;;;;;;;;;;4510:6;4517:21;4500:39;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4500:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4493:46;;4207:338;;;;;;;:::o;9627:472::-;9695:4;9784:6;9946;9727;:13;;;;9712:5;:12;:28;9708:65;;;9760:5;9753:12;;;;9708:65;9793:1;9784:10;;9779:297;9800:5;:12;9796:1;:16;9779:297;;;9835:7;:17;9843:5;9849:1;9843:8;;;;;;;;;;;;;;;;;;9835:17;;;;;;;;;;;;;;;;;;;;;;;;;9834:18;9830:63;;;9876:5;9869:12;;;;9830:63;9955:1;9946:10;;9941:128;9962:1;9958;:5;9941:128;;;10001:5;10007:1;10001:8;;;;;;;;;;;;;;;;;;9989:20;;:5;9995:1;9989:8;;;;;;;;;;;;;;;;;;:20;;;9985:73;;;10037:5;10030:12;;;;9985:73;9965:3;;;;;;;9941:128;;;9814:3;;;;;;;9779:297;;;10089:4;10082:11;;9627:472;;;;;;:::o

Swarm Source

bzzr://a2ccf7247ba566f659b58f7d23539524a71175fd326a4dac4542735f863c5309

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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