ETH Price: $2,503.72 (-0.28%)

Contract

0xdF8C073Ec1AD9ad39b87bFF2F8E679ECF9f59c8A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend ERC20124577502021-05-18 10:10:071263 days ago1621332607IN
0xdF8C073E...CF9f59c8A
0 ETH0.0038352959.62743435
Spend ERC20124373032021-05-15 6:19:531266 days ago1621059593IN
0xdF8C073E...CF9f59c8A
0 ETH0.00682796106.19411129
Spend ERC20124297182021-05-14 1:56:271268 days ago1620957387IN
0xdF8C073E...CF9f59c8A
0 ETH0.0096148121.25052798
Spend ERC20124181312021-05-12 6:59:131269 days ago1620802753IN
0xdF8C073E...CF9f59c8A
0 ETH0.01386278215.52502059
Spend ERC20123917592021-05-08 5:26:011273 days ago1620451561IN
0xdF8C073E...CF9f59c8A
0 ETH0.0051898863.75077158
Spend ERC20123875932021-05-07 14:09:131274 days ago1620396553IN
0xdF8C073E...CF9f59c8A
0 ETH0.0070448788.84163202
Spend ERC20123869692021-05-07 11:50:461274 days ago1620388246IN
0xdF8C073E...CF9f59c8A
0 ETH0.0045945457.9496902
Spend ERC20123869392021-05-07 11:42:301274 days ago1620387750IN
0xdF8C073E...CF9f59c8A
0 ETH0.0047793860.25366976
Spend ERC20123867732021-05-07 11:04:071274 days ago1620385447IN
0xdF8C073E...CF9f59c8A
0 ETH0.0041812252.70473954
Spend ERC20123863122021-05-07 9:18:001274 days ago1620379080IN
0xdF8C073E...CF9f59c8A
0 ETH0.0041356652.162001
Spend ERC20123862262021-05-07 9:00:301274 days ago1620378030IN
0xdF8C073E...CF9f59c8A
0 ETH0.0048497761.16882822
Spend ERC20123849622021-05-07 4:09:471275 days ago1620360587IN
0xdF8C073E...CF9f59c8A
0 ETH0.0035906745.26078312
Spend ERC20123811572021-05-06 14:05:581275 days ago1620309958IN
0xdF8C073E...CF9f59c8A
0 ETH0.0072039890.82071556
Spend ERC20123783972021-05-06 3:40:241276 days ago1620272424IN
0xdF8C073E...CF9f59c8A
0 ETH0.0032450450.45082719
Spend ERC20123751482021-05-05 15:59:481276 days ago1620230388IN
0xdF8C073E...CF9f59c8A
0 ETH0.0078892499.47476295
Spend ERC20123718302021-05-05 3:35:281277 days ago1620185728IN
0xdF8C073E...CF9f59c8A
0 ETH0.0026933741.88965959
Spend ERC20123686892021-05-04 15:55:581277 days ago1620143758IN
0xdF8C073E...CF9f59c8A
0 ETH0.01297404163.58849649
Spend ERC20123654022021-05-04 3:35:141278 days ago1620099314IN
0xdF8C073E...CF9f59c8A
0 ETH0.0030434247.32508558
Spend ERC20123460022021-05-01 3:56:371281 days ago1619841397IN
0xdF8C073E...CF9f59c8A
0 ETH0.0061894476.01775671
Spend ERC20123419732021-04-30 13:02:501281 days ago1619787770IN
0xdF8C073E...CF9f59c8A
0 ETH0.0048625261.31109083
Spend ERC20123412192021-04-30 10:15:411281 days ago1619777741IN
0xdF8C073E...CF9f59c8A
0 ETH0.0052821454.7821295
Spend ERC20123411752021-04-30 10:05:201281 days ago1619777120IN
0xdF8C073E...CF9f59c8A
0 ETH0.0044979156.71377745
Spend ERC20123408992021-04-30 8:54:101281 days ago1619772850IN
0xdF8C073E...CF9f59c8A
0 ETH0.0037038246.70823307
Spend ERC20123405952021-04-30 7:45:231281 days ago1619768723IN
0xdF8C073E...CF9f59c8A
0 ETH0.0036338145.81152694
Spend ERC20123404832021-04-30 7:20:571281 days ago1619767257IN
0xdF8C073E...CF9f59c8A
0 ETH0.0037809147.68042639
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 0x200d65f9...8Da044D53
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.26+commit.4563c3fc

Optimization Enabled:
No with 200 runs

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

pragma solidity ^0.4.26;

// 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 generateMessageToSign method.
// 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.
//
// 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.
// Notice that NFT (ERC721/ERC1155) is not supported.

interface Erc20 {
  function approve(address, uint256) public;

  function transfer(address, uint256) public;
    
  //function balanceOf(address) view public returns (uint256);
}

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(address from, uint value);
  
  // An event sent when a spend is triggered to the given address.
  event Spent(address to, uint transfer);
  
  // An event sent when a spendERC20 is triggered to the given address.
  event SpentERC20(address erc20contract, address to, uint transfer);
  
  // An event sent when an spendAny is executed.
  event SpentAny(address to, uint transfer);

  modifier validRequirement(uint ownerCount, uint _required) {
    require (ownerCount <= MAX_OWNER_COUNT
            && _required <= ownerCount
            && _required >= 1);
    _;
  }
  
  /// @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] == address(0x0)) {
            revert();
        }
        isOwner[_owners[i]] = true;
    }
    owners = _owners;
    required = _required;
  }


  // The fallback function for this contract.
  function() public payable {
    if (msg.value > 0) {
        emit Funded(msg.sender, msg.value);
    }
  }
  
  // @dev Returns list of owners.
  // @return List of owner addresses.
  function getOwners() public view returns (address[]) {
    return owners;
  }
    
  function getSpendNonce() public view returns (uint256) {
    return spendNonce;
  }
    
  function getRequired() public view 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) private view returns (bytes32) {
    //the sequence should match generateMultiSigV2 in JS
    bytes32 message = keccak256(abi.encodePacked(address(this), erc20Contract, destination, value, spendNonce));
    return message;
  }
  
  function _messageToRecover(address erc20Contract, address destination, uint256 value) private view returns (bytes32) {
    bytes32 hashedUnsignedMessage = generateMessageToSign(erc20Contract, destination, value);
    bytes memory prefix = "\x19Ethereum Signed Message:\n32";
    return keccak256(abi.encodePacked(prefix, hashedUnsignedMessage));
  }
  
  // @destination: the ether receiver address.
  // @value: the ether value, in wei.
  // @vs, rs, ss: the signatures
  function spend(address destination, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) external {
    require(destination != address(this), "Not allow sending to yourself");
    require(address(this).balance >= value && value > 0, "balance or spend value invalid");
    require(_validSignature(address(0x0), destination, value, vs, rs, ss), "invalid signatures");
    spendNonce = spendNonce + 1;
    //transfer will throw if fails
    destination.transfer(value);
    emit Spent(destination, value);
  }
  
  // @erc20contract: the erc20 contract address.
  // @destination: the token receiver address.
  // @value: the token value, in token minimum unit.
  // @vs, rs, ss: the signatures
  function spendERC20(address destination, address erc20contract, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss) external {
    require(destination != address(this), "Not allow sending to yourself");
    //transfer erc20 token
    //uint256 tokenValue = Erc20(erc20contract).balanceOf(address(this));
    require(value > 0, "Erc20 spend value invalid");
    require(_validSignature(erc20contract, destination, value, vs, rs, ss), "invalid signatures");
    spendNonce = spendNonce + 1;
    // transfer tokens from this contract to the destination address
    Erc20(erc20contract).transfer(destination, value);
    emit SpentERC20(erc20contract, destination, value);
  }
  
  //0x9 is used for spendAny
  //be careful with any action, data is not included into signature computation. So any data can be included in spendAny.
  //This is usually for some emergent recovery, for example, recovery of NTFs, etc.
  //Owners should not generate 0x9 based signatures in normal cases.
  function spendAny(address destination, uint256 value, uint8[] vs, bytes32[] rs, bytes32[] ss, bytes data) external {
    require(destination != address(this), "Not allow sending to yourself");
    require(_validSignature(address(0x9), destination, value, vs, rs, ss), "invalid signatures");
    spendNonce = spendNonce + 1;
    //transfer tokens from this contract to the destination address
    if (destination.call.value(value)(data)) {
        emit SpentAny(destination, 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 view 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 view 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":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"vs","type":"uint8[]"},{"name":"rs","type":"bytes32[]"},{"name":"ss","type":"bytes32[]"},{"name":"data","type":"bytes"}],"name":"spendAny","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"},{"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":"from","type":"address"},{"indexed":false,"name":"value","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"},{"anonymous":false,"inputs":[{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"transfer","type":"uint256"}],"name":"SpentAny","type":"event"}]

Deployed Bytecode

0x608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301173672146100fa5780631398a5f6146101af57806385b2566a146101da578063a0e67e2b1461026f578063b7d5e564146102db578063c6a2a9f114610388578063d74f8edd146103b3575b60003411156100f8577f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5243334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b005b34801561010657600080fd5b506101ad600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293908035906020019082018035906020019190919293919293905050506103de565b005b3480156101bb57600080fd5b506101c461077a565b6040518082815260200191505060405180910390f35b3480156101e657600080fd5b5061026d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610784565b005b34801561027b57600080fd5b50610284610a9b565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c75780820151818401526020810190506102ac565b505050509050019250505060405180910390f35b3480156102e757600080fd5b50610386600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390803590602001908201803590602001919091929391929390505050610b29565b005b34801561039457600080fd5b5061039d610da4565b6040518082815260200191505060405180910390f35b3480156103bf57600080fd5b506103c8610dae565b6040518082815260200191505060405180910390f35b3073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614151515610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f7420616c6c6f772073656e64696e6720746f20796f757273656c6600000081525060200191505060405180910390fd5b6000871115156104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4572633230207370656e642076616c756520696e76616c69640000000000000081525060200191505060405180910390fd5b610595888a89898980806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050610db3565b1515610609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c6964207369676e617475726573000000000000000000000000000081525060200191505060405180910390fd5b6001600354016003819055508773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156106b857600080fd5b505af11580156106cc573d6000803e3d6000fd5b505050507f3d1915a2cdcecdfffc5eb2a7994c069bad5d4aa96aca85667dedbe60bb80491c888a89604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050505050505050565b6000600254905090565b3073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f7420616c6c6f772073656e64696e6720746f20796f757273656c6600000081525060200191505060405180910390fd5b863073ffffffffffffffffffffffffffffffffffffffff16311015801561084f5750600087115b15156108c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f62616c616e6365206f72207370656e642076616c756520696e76616c6964000081525060200191505060405180910390fd5b61095f60008989898980806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050888880806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050878780806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050610db3565b15156109d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c6964207369676e617475726573000000000000000000000000000081525060200191505060405180910390fd5b6001600354016003819055508773ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015610a25573d6000803e3d6000fd5b507fd3eec71143c45f28685b24760ea218d476917aa0ac0392a55e5304cef40bd2b68888604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050505050505050565b60606001805480602002602001604051908101604052809291908181526020018280548015610b1f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610ad5575b5050505050905090565b3073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151515610bcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4e6f7420616c6c6f772073656e64696e6720746f20796f757273656c6600000081525060200191505060405180910390fd5b610c6960098b8b8b8b808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050508a8a80806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050898980806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050610db3565b1515610cdd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c6964207369676e617475726573000000000000000000000000000081525060200191505060405180910390fd5b6001600354016003819055508973ffffffffffffffffffffffffffffffffffffffff168983836040518083838082843782019150509250505060006040518083038185875af19250505015610d98577f62ee6f1a2424e70e5cff9d61a0d928aa101e198f192d726c651f1bdad1cd40d98a8a604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b50505050505050505050565b6000600354905090565b600981565b6000806060600085518751141515610dca57600080fd5b84518651141515610dda57600080fd5b600180549050875111151515610def57600080fd5b600254875110151515610e0157600080fd5b610e0c8a8a8a610f94565b92508651604051908082528060200260200182016040528015610e3e5781602001602082028038833980820191505090505b509150600090505b8651811015610f6f57600183601b8984815181101515610e6257fe5b90602001906020020151018884815181101515610e7b57fe5b906020019060200201518885815181101515610e9357fe5b90602001906020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610f0e573d6000803e3d6000fd5b505050602060405103518282815181101515610f2657fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610e46565b610f78826110c8565b1515610f8357600080fd5b600193505050509695505050505050565b6000806060610fa4868686611202565b91506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905080826040516020018083805190602001908083835b6020831015156110185780518252602082019150602081019050602083039250610ff3565b6001836020036101000a0380198251168184511680821785525050505050509050018260001916600019168152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611090578051825260208201915060208101905060208303925061106b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020925050509392505050565b6000806000600180549050845111156110e457600092506111fb565b600091505b83518210156111f657600080858481518110151561110357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561116457600092506111fb565b600090505b818110156111e957838181518110151561117f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1684838151811015156111ad57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614156111dc57600092506111fb565b8080600101915050611169565b81806001019250506110e9565b600192505b5050919050565b60008030858585600354604051602001808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001955050505050506040516020818303038152906040526040518082805190602001908083835b60208310151561132d5780518252602082019150602081019050602083039250611308565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090508091505093925050505600a165627a7a7230582078b9bd2ebc8e0cff6a86028165c6917f9c74aace4df5f27fa2001ad2db0e533d0029

Deployed Bytecode Sourcemap

1005:7025:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2894:1;2882:9;:13;2878:72;;;2913:29;2920:10;2932:9;2913:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:72;1005:7025;5087:685;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5087:685:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3221:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3221:78:0;;;;;;;;;;;;;;;;;;;;;;;4377:516;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4377:516:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3037:79: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;3037:79:0;;;;;;;;;;;;;;;;;6088:499;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6088:499:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3126:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3126:85:0;;;;;;;;;;;;;;;;;;;;;;;1040:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1040:40:0;;;;;;;;;;;;;;;;;;;;;;;5087:685;5253:4;5230:28;;:11;:28;;;;5222:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5418:1;5410:5;:9;5402:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5464:62;5480:13;5495:11;5508:5;5515:2;;5464:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5519:2;;5464:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5523:2;;5464:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:62::i;:::-;5456:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5582:1;5569:10;;:14;5556:10;:27;;;;5666:13;5660:29;;;5690:11;5703:5;5660:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5660:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5660:49:0;;;;5721:45;5732:13;5747:11;5760:5;5721:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5087:685;;;;;;;;;:::o;3221:78::-;3265:4;3285:8;;3278:15;;3221:78;:::o;4377:516::-;4515:4;4492:28;;:11;:28;;;;4484:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4594:5;4577:4;4569:21;;;:30;;:43;;;;;4611:1;4603:5;:9;4569:43;4561:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4662:61;4686:3;4692:11;4705:5;4712:2;;4662:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4716:2;;4662:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4720:2;;4662:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:61::i;:::-;4654:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4779:1;4766:10;;:14;4753:10;:27;;;;4823:11;:20;;:27;4844:5;4823:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4823:27:0;4862:25;4868:11;4881:5;4862:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;4377:516;;;;;;;;:::o;3037:79::-;3079:9;3104:6;3097:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:79;:::o;6088:499::-;6241:4;6218:28;;:11;:28;;;;6210:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6295:61;6319:3;6325:11;6338:5;6345:2;;6295:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6349:2;;6295:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6353:2;;6295:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:61::i;:::-;6287:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6412:1;6399:10;;:14;6386:10;:27;;;;6493:11;:16;;6516:5;6523:4;;6493:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6489:93;;;6546:28;6555:11;6568:5;6546:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;6489:93;6088:499;;;;;;;;;;:::o;3126:85::-;3172:7;3195:10;;3188:17;;3126:85;:::o;1040:40::-;1079:1;1040:40;:::o;6748:734::-;6894:4;7062:15;7139:22;7200:6;6928:2;:9;6915:2;:9;:22;6907:31;;;;;;;;6966:2;:9;6953:2;:9;:22;6945:31;;;;;;;;7004:6;:13;;;;6991:2;:9;:26;;6983:35;;;;;;;;7046:8;;7033:2;:9;:21;;7025:30;;;;;;;;7080:52;7098:13;7113:11;7126:5;7080:17;:52::i;:::-;7062:70;;7178:2;:9;7164: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;7164:24:0;;;;7139:49;;7209:1;7200:10;;7195:226;7216:2;:9;7212:1;:13;7195:226;;;7371:42;7381:7;7396:2;7390;7393:1;7390:5;;;;;;;;;;;;;;;;;;:8;7400:2;7403:1;7400:5;;;;;;;;;;;;;;;;;;7407:2;7410:1;7407:5;;;;;;;;;;;;;;;;;;7371:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7371:42:0;;;;;;;;7360:5;7366:1;7360:8;;;;;;;;;;;;;;;;;:53;;;;;;;;;;;7227:3;;;;;;;7195:226;;;7435:22;7451:5;7435:15;:22::i;:::-;7427:31;;;;;;;;7472:4;7465:11;;6748:734;;;;;;;;;;;:::o;3895:353::-;4003:7;4019:29;4114:19;4051:56;4073:13;4088:11;4101:5;4051:21;:56::i;:::-;4019:88;;4114:56;;;;;;;;;;;;;;;;;;;;4211:6;4219:21;4194:47;;;;;;;;;;;;;;;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;;;4194:47:0;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4194:47:0;;;4184:58;;;;;;;;;;;;;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;;;4184:58:0;;;;;;;;;;;;;;;;4177:65;;3895:353;;;;;;;:::o;7555:468::-;7619:4;7708:6;7870;7651;:13;;;;7636:5;:12;:28;7632:65;;;7684:5;7677:12;;;;7632:65;7717:1;7708:10;;7703:297;7724:5;:12;7720:1;:16;7703:297;;;7759:7;:17;7767:5;7773:1;7767:8;;;;;;;;;;;;;;;;;;7759:17;;;;;;;;;;;;;;;;;;;;;;;;;7758:18;7754:63;;;7800:5;7793:12;;;;7754:63;7879:1;7870:10;;7865:128;7886:1;7882;:5;7865:128;;;7925:5;7931:1;7925:8;;;;;;;;;;;;;;;;;;7913:20;;:5;7919:1;7913:8;;;;;;;;;;;;;;;;;;:20;;;7909:73;;;7961:5;7954:12;;;;7909:73;7889:3;;;;;;;7865:128;;;7738:3;;;;;;;7703:297;;;8013:4;8006:11;;7555:468;;;;;;:::o;3567:320::-;3679:7;3753:15;3806:4;3813:13;3828:11;3841:5;3848:10;;3781:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3781:78:0;;;3771:89;;;;;;;;;;;;;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;;;3771:89:0;;;;;;;;;;;;;;;;3753:107;;3874:7;3867:14;;3567:320;;;;;;:::o

Swarm Source

bzzr://78b9bd2ebc8e0cff6a86028165c6917f9c74aace4df5f27fa2001ad2db0e533d

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.