ETH Price: $2,412.05 (-0.18%)

Contract

0x417f44E658353C3720f5B565Bf09697780801622
 

Overview

ETH Balance

0.000000009343652026 ETH

Eth Value

Less Than $0.01 (@ $2,412.05/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend115664502021-01-01 5:06:551373 days ago1609477615IN
0x417f44E6...780801622
0 ETH0.0040772551.95152793
Spend115661172021-01-01 3:52:341373 days ago1609473154IN
0x417f44E6...780801622
0 ETH0.0033706659.07127714
Spend ERC20115660562021-01-01 3:38:251373 days ago1609472305IN
0x417f44E6...780801622
0 ETH0.0052964657.54021992
Spend115613342020-12-31 10:21:581374 days ago1609410118IN
0x417f44E6...780801622
0 ETH0.0077106998.21787663
Spend115478672020-12-29 8:38:141376 days ago1609231094IN
0x417f44E6...780801622
0 ETH0.007517995.76211467
Spend115402992020-12-28 4:49:541377 days ago1609130994IN
0x417f44E6...780801622
0 ETH0.0050575364.42230108
Spend115218862020-12-25 9:12:081380 days ago1608887528IN
0x417f44E6...780801622
0 ETH0.0054616469.56975335
Spend115216362020-12-25 8:19:411380 days ago1608884381IN
0x417f44E6...780801622
0 ETH0.0055525597.26824646
Spend ERC20115215432020-12-25 7:57:021380 days ago1608883022IN
0x417f44E6...780801622
0 ETH0.0089192183.31042085
Spend115146712020-12-24 6:27:541381 days ago1608791274IN
0x417f44E6...780801622
0 ETH0.0077049298.15946855
Spend ERC20115077232020-12-23 4:53:041382 days ago1608699184IN
0x417f44E6...780801622
0 ETH0.0051161655.58877734
Spend ERC20115073112020-12-23 3:23:161382 days ago1608693796IN
0x417f44E6...780801622
0 ETH0.0036454464.31512394
Spend115073072020-12-23 3:22:271382 days ago1608693747IN
0x417f44E6...780801622
0 ETH0.0049257862.75362193
Spend ERC20115069452020-12-23 2:06:091382 days ago1608689169IN
0x417f44E6...780801622
0 ETH0.0091363885.31975048
Spend ERC20114707122020-12-17 12:44:341388 days ago1608209074IN
0x417f44E6...780801622
0 ETH0.0097814991.38506791
Spend ERC20114642642020-12-16 12:56:131389 days ago1608123373IN
0x417f44E6...780801622
0 ETH0.0078310873.13851413
Spend ERC20114639942020-12-16 11:59:241389 days ago1608119964IN
0x417f44E6...780801622
0 ETH0.0036861965.04773729
Spend114639652020-12-16 11:53:281389 days ago1608119608IN
0x417f44E6...780801622
0 ETH0.0058855475.00379288
Transfer114631982020-12-16 9:01:461389 days ago1608109306IN
0x417f44E6...780801622
779.91224196 ETH0.0011342849.72303355
Transfer114488232020-12-14 4:05:311391 days ago1607918731IN
0x417f44E6...780801622
1,723.93519613 ETH0.0009931543.53668217
Spend ERC20113549262020-11-29 17:17:481405 days ago1606670268IN
0x417f44E6...780801622
0 ETH0.0030723828.70097887
0x60806040107468862020-08-28 3:58:201499 days ago1598587100IN
 Contract Creation
0 ETH0.1417236390.23913984

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
115664502021-01-01 5:06:551373 days ago1609477615
0x417f44E6...780801622
603.84743809 ETH
115613342020-12-31 10:21:581374 days ago1609410118
0x417f44E6...780801622
200 ETH
115478672020-12-29 8:38:141376 days ago1609231094
0x417f44E6...780801622
250 ETH
115402992020-12-28 4:49:541377 days ago1609130994
0x417f44E6...780801622
250 ETH
115218862020-12-25 9:12:081380 days ago1608887528
0x417f44E6...780801622
200 ETH
115146712020-12-24 6:27:541381 days ago1608791274
0x417f44E6...780801622
200 ETH
115073072020-12-23 3:22:271382 days ago1608693747
0x417f44E6...780801622
450 ETH
114639652020-12-16 11:53:281389 days ago1608119608
0x417f44E6...780801622
350 ETH
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  ]
[ 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.