ETH Price: $3,396.61 (+2.43%)
Gas: 3.5 Gwei

Contract

0x0b72FB39D51E5D42a1185Be5527F379F70D8cC7F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Spend ERC20176287212023-07-05 15:58:23542 days ago1688572703IN
0x0b72FB39...F70D8cC7F
0 ETH0.0060422965.94875736
Spend ERC20176206582023-07-04 12:47:59543 days ago1688474879IN
0x0b72FB39...F70D8cC7F
0 ETH0.0020011920.75739453
Spend ERC20176193382023-07-04 8:21:23543 days ago1688458883IN
0x0b72FB39...F70D8cC7F
0 ETH0.0020747621.52577776
Spend ERC20176134722023-07-03 12:35:11544 days ago1688387711IN
0x0b72FB39...F70D8cC7F
0 ETH0.0038969749.15885982
Spend ERC20175765562023-06-28 8:13:23549 days ago1687940003IN
0x0b72FB39...F70D8cC7F
0 ETH0.0021266226.82658435
Spend ERC20175703682023-06-27 11:20:35550 days ago1687864835IN
0x0b72FB39...F70D8cC7F
0 ETH0.0014177417.88164902
Spend ERC20175697082023-06-27 9:05:47550 days ago1687856747IN
0x0b72FB39...F70D8cC7F
0 ETH0.0014769118.63360221
Spend ERC20175696442023-06-27 8:52:11550 days ago1687855931IN
0x0b72FB39...F70D8cC7F
0 ETH0.0012781116.12052721
Spend ERC20175642922023-06-26 14:48:23551 days ago1687790903IN
0x0b72FB39...F70D8cC7F
0 ETH0.0019922225.12354608
Spend ERC20175343862023-06-22 9:51:47555 days ago1687427507IN
0x0b72FB39...F70D8cC7F
0 ETH0.0013192916.63231207
Spend ERC20175343702023-06-22 9:48:35555 days ago1687427315IN
0x0b72FB39...F70D8cC7F
0 ETH0.0013646217.20904214
Spend ERC20175127452023-06-19 8:56:47558 days ago1687165007IN
0x0b72FB39...F70D8cC7F
0 ETH0.0013828517.44151759
Spend ERC20174843152023-06-15 9:11:59562 days ago1686820319IN
0x0b72FB39...F70D8cC7F
0 ETH0.002145722.25626284
Spend ERC20174786152023-06-14 13:56:35563 days ago1686750995IN
0x0b72FB39...F70D8cC7F
0 ETH0.0016979821.41951904
Spend ERC20174642512023-06-12 13:23:47565 days ago1686576227IN
0x0b72FB39...F70D8cC7F
0 ETH0.001669621.05184577
Spend ERC20174295142023-06-07 15:54:59570 days ago1686153299IN
0x0b72FB39...F70D8cC7F
0 ETH0.0034826936.1286885
Spend ERC20174278672023-06-07 10:20:59570 days ago1686133259IN
0x0b72FB39...F70D8cC7F
0 ETH0.0019453224.53585787
Spend ERC20174222752023-06-06 15:24:35571 days ago1686065075IN
0x0b72FB39...F70D8cC7F
0 ETH0.0036945546.58429474
Spend ERC20174219392023-06-06 14:16:35571 days ago1686060995IN
0x0b72FB39...F70D8cC7F
0 ETH0.0039869450.27865407
Spend ERC20173941922023-06-02 16:19:59575 days ago1685722799IN
0x0b72FB39...F70D8cC7F
0 ETH0.00842453106.20817904
Spend ERC20173929632023-06-02 12:10:59575 days ago1685707859IN
0x0b72FB39...F70D8cC7F
0 ETH0.0034551243.57200025
Spend ERC20173929532023-06-02 12:08:59575 days ago1685707739IN
0x0b72FB39...F70D8cC7F
0 ETH0.0042619844.20731833
Spend ERC20173863692023-06-01 13:51:11576 days ago1685627471IN
0x0b72FB39...F70D8cC7F
0 ETH0.0034272943.22095571
Spend ERC20173731802023-05-30 17:19:47578 days ago1685467187IN
0x0b72FB39...F70D8cC7F
0 ETH0.0050734263.98975104
Spend ERC20173657492023-05-29 16:12:23579 days ago1685376743IN
0x0b72FB39...F70D8cC7F
0 ETH0.0057717372.78635688
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.