Contract 0x2A370A51449a6A804d847a7B102b12Ca600FE746

 
Txn Hash
Method
Block
From
To
Value
0xf9b93e6ff85cf9ced69cc3e56c2d0ab60bfa5ed462d18b034942711daf2c35b70x6080604082072302019-07-23 13:32:321123 days 10 hrs agoCraftR: Deployer IN  Create: CraftrEscrow0 Ether0.005383835
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CraftrEscrow

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-07-23
*/

pragma solidity 0.5.10;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath 
{
  function mul(uint256 a, uint256 b) internal pure returns (uint256) 
  {
    if (a == 0) 
    {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) 
  {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) 
  {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) 
  {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable 
{
    address public owner;

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor() public
    {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() 
    {
        assert(msg.sender == owner);
        _;
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) onlyOwner public
    {
        assert(newOwner != address(0));
        owner = newOwner;
    }
}

contract Token
{
   mapping(address => mapping (address => uint256)) allowed;
   function transfer(address to, uint256 value) public returns (bool);
   function transferFrom(address from, address to, uint256 value) public returns (bool);
}

contract CraftrEscrow is Ownable
{
    using SafeMath for uint256;
    
    Token CRAFTRToken;

    mapping (uint256 => Escrow) inEscrow;
    mapping (address => bool) public admins;

    uint256 round_interval = 12 hours;

    struct Escrow
    {
        address _from;
        address _to;
        uint256 _amount;
        uint256 _expiryTime;
        bool _accepted;
        bool _released;
        bool _denied;
    }

    modifier onlyVendor(address vendor, uint256 depositID)
    {
        assert(inEscrow[depositID]._to == vendor);
        _;
    }
    
    modifier onlyBuyer(address buyer, uint256 depositID)
    {
        assert(inEscrow[depositID]._from == buyer);
        _;
    }

    modifier onlyAdmin()
    {
        assert(msg.sender == owner || admins[msg.sender]);
        _;
    }
    
    event Deposit(address buyer, uint256 amount, uint256 depositID);
    event Accepted(address vendor, uint256 depositID);
    event Declined(address vendor, uint256 depositID);
    event Released(address buyer, address vendor, uint256 amount, uint256 depositID);
    event DepositReverted(address buyer, uint256 amount, uint256 depositID, address reverter);
    event DepositRevertedByOwner();
    event TokensReleasedByOwner(address vendor, uint256 amount, uint256 depositID);
    event AdminAdded(address admin);
    event AdminRemoved(address admin);
    
    constructor(address _tokenContract) public
    {
        CRAFTRToken = Token(_tokenContract);
    }
    
    /**
     * @dev Allows a BUYER to deposit tokens into the contract. Useful information are mapped and 
     * the countdown for the VENDOR is initialized. 
     * @param amount The amount of tokens to deposit
     * @param to The VENDOR address
     * @return The deposit ID
     */
    function deposit(uint256 amount, address to) public returns(uint256)
    {
        uint256 depositID = amount.add(now);
        inEscrow[depositID]._from = msg.sender;
        inEscrow[depositID]._to = to;
        inEscrow[depositID]._amount = amount;
        inEscrow[depositID]._expiryTime = now.add(round_interval);
        inEscrow[depositID]._accepted = false;
        inEscrow[depositID]._denied = false;
        inEscrow[depositID]._released = false;
        CRAFTRToken.transferFrom(msg.sender,address(this),amount);
        emit Deposit(msg.sender, amount, depositID);
        
        return depositID;
    }
    
    /**
     * @dev VENDOR accepts the deposit before the expiration
     * @param depositID The deposit ID
     */
    function acceptDeposit(uint256 depositID) public onlyVendor(msg.sender, depositID)
    {
        require(
            now <= inEscrow[depositID]._expiryTime 
            && !inEscrow[depositID]._denied 
            && !inEscrow[depositID]._accepted
        );
        inEscrow[depositID]._accepted = true;
        emit Accepted(msg.sender, depositID);
    }

    /**
     * @dev VENDOR cancels the deposit before the expiration
     * @param depositID The deposit ID
     */
    function declineDeposit(uint256 depositID) public onlyVendor(msg.sender, depositID)
    {
        require(
            now <= inEscrow[depositID]._expiryTime 
            && !inEscrow[depositID]._denied 
            && !inEscrow[depositID]._accepted
        );
        inEscrow[depositID]._denied = true;
        emit Declined(msg.sender, depositID);
    }
    
    /**
     * @dev BUYER releases the deposit to the VENDOR
     * @param depositID The deposit ID
     */
    function releaseTokens(uint256 depositID) public onlyBuyer(msg.sender, depositID) 
    {
        require(
            inEscrow[depositID]._accepted 
            && !inEscrow[depositID]._denied 
            && !inEscrow[depositID]._released
        );
        CRAFTRToken.transfer(inEscrow[depositID]._to, inEscrow[depositID]._amount);
        inEscrow[depositID]._released = true;
        emit Released(msg.sender, inEscrow[depositID]._to, inEscrow[depositID]._amount, depositID);
    }
    
    /**
     * @dev BUYER reverts the deposit to itself
     * @param depositID The deposit ID
     */
    function revertDeposit(uint256 depositID) public onlyBuyer(msg.sender, depositID)
    {
        require(
            (
                now > inEscrow[depositID]._expiryTime 
                && !inEscrow[depositID]._accepted 
                && !inEscrow[depositID]._released 
                && !inEscrow[depositID]._denied
            ) || (
                inEscrow[depositID]._denied
            )
        );

        CRAFTRToken.transfer(msg.sender,inEscrow[depositID]._amount);
        emit DepositReverted(msg.sender, inEscrow[depositID]._amount, depositID, msg.sender);
        inEscrow[depositID]._released = true;
    }
    
    /**
     * @dev ADMIN reverts tokens to BUYER after a dispute resolution
     * @param depositID The deposit ID
     */
    function adminRevertDeposit(uint256 depositID) public onlyAdmin
    {
        require(
            inEscrow[depositID]._accepted 
            && !inEscrow[depositID]._released 
            && !inEscrow[depositID]._denied
        );
        CRAFTRToken.transfer(inEscrow[depositID]._from,inEscrow[depositID]._amount);
        emit DepositReverted(inEscrow[depositID]._from, inEscrow[depositID]._amount, depositID, msg.sender);
        inEscrow[depositID]._released = true;
        emit DepositRevertedByOwner();
    }
    
    /**
     * @dev ADMIN releases tokens to VENDOR after a dispute resolution
     * @param depositID The deposit ID
     */
    function adminReleaseTokens(uint256 depositID) public onlyAdmin
    {
        require(
            inEscrow[depositID]._accepted 
            && !inEscrow[depositID]._released 
            && !inEscrow[depositID]._denied
        );
        CRAFTRToken.transfer(inEscrow[depositID]._to, inEscrow[depositID]._amount);
        inEscrow[depositID]._released = true;
        emit TokensReleasedByOwner(inEscrow[depositID]._to, inEscrow[depositID]._amount, depositID);
    }

    /**
     * @dev OWNER sets a new ADMIN
     * @param admin The address of the ADMIN
     */
    function setAdmin(address admin) public onlyOwner 
    {
        admins[admin] = true;
        emit AdminAdded(admin);
    }

    /**
     * @dev OWNER removes an ADMIN
     * @param admin The address of the ADMIN
     */
    function unsetAdmin(address admin) public onlyOwner 
    {
        admins[admin] = false;
        emit AdminRemoved(admin);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"adminRevertDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"revertDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"acceptDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"releaseTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"}],"name":"unsetAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"declineDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"to","type":"address"}],"name":"deposit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"admin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"depositID","type":"uint256"}],"name":"adminReleaseTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenContract","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"depositID","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"vendor","type":"address"},{"indexed":false,"name":"depositID","type":"uint256"}],"name":"Accepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"vendor","type":"address"},{"indexed":false,"name":"depositID","type":"uint256"}],"name":"Declined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"vendor","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"depositID","type":"uint256"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"depositID","type":"uint256"},{"indexed":false,"name":"reverter","type":"address"}],"name":"DepositReverted","type":"event"},{"anonymous":false,"inputs":[],"name":"DepositRevertedByOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"vendor","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"depositID","type":"uint256"}],"name":"TokensReleasedByOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"admin","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"admin","type":"address"}],"name":"AdminRemoved","type":"event"}]

608060405261a8c060045534801561001657600080fd5b50604051610e80380380610e808339818101604052602081101561003957600080fd5b5051600080546001600160a01b03199081163317909155600180546001600160a01b0390931692909116919091179055610e08806100786000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806365202f8d1161007157806365202f8d1461018f5780636e553f65146101ac578063704b6c02146101ea5780638da5cb5b14610210578063a4ef109f14610234578063f2fde38b14610251576100b4565b806302177431146100b9578063319f0c0a146100d8578063429b62e5146100f5578063445fe4831461012f5780634b0babdd1461014c5780634d253b5014610169575b600080fd5b6100d6600480360360208110156100cf57600080fd5b5035610277565b005b6100d6600480360360208110156100ee57600080fd5b5035610446565b61011b6004803603602081101561010b57600080fd5b50356001600160a01b031661061b565b604080519115158252519081900360200190f35b6100d66004803603602081101561014557600080fd5b5035610630565b6100d66004803603602081101561016257600080fd5b5035610714565b6100d66004803603602081101561017f57600080fd5b50356001600160a01b03166108b4565b6100d6600480360360208110156101a557600080fd5b5035610920565b6101d8600480360360408110156101c257600080fd5b50803590602001356001600160a01b0316610a08565b60408051918252519081900360200190f35b6100d66004803603602081101561020057600080fd5b50356001600160a01b0316610b5a565b610218610bc9565b604080516001600160a01b039092168252519081900360200190f35b6100d66004803603602081101561024a57600080fd5b5035610bd8565b6100d66004803603602081101561026757600080fd5b50356001600160a01b0316610d77565b6000546001600160a01b031633148061029f57503360009081526003602052604090205460ff165b6102a557fe5b60008181526002602052604090206004015460ff1680156102dd5750600081815260026020526040902060040154610100900460ff16155b8015610301575060008181526002602052604090206004015462010000900460ff16155b61030a57600080fd5b60015460008281526002602081815260408084208054930154815163a9059cbb60e01b81526001600160a01b03948516600482015260248101919091529051929094169363a9059cbb93604480830194928390030190829087803b15801561037157600080fd5b505af1158015610385573d6000803e3d6000fd5b505050506040513d602081101561039b57600080fd5b5050600081815260026020818152604092839020805492015483516001600160a01b0390931683529082015280820183905233606082015290517fe6cd9de0b09270f1d16e4c263adca1289df3320ebac7b1bdb8e2f82cd6a608039181900360800190a1600081815260026020526040808220600401805461ff001916610100179055517f6d3234cd26cd6b23a6521cbc44818ab39a8080d677cf26dff4254a26a5f796149190a150565b600081815260026020526040902054339082906001600160a01b0316821461046a57fe5b6000838152600260205260409020600301544211801561049c575060008381526002602052604090206004015460ff16155b80156104bf5750600083815260026020526040902060040154610100900460ff16155b80156104e3575060008381526002602052604090206004015462010000900460ff16155b80610505575060008381526002602052604090206004015462010000900460ff165b61050e57600080fd5b600154600084815260026020818152604080842090920154825163a9059cbb60e01b8152336004820152602481019190915291516001600160a01b039094169363a9059cbb936044808501948390030190829087803b15801561057057600080fd5b505af1158015610584573d6000803e3d6000fd5b505050506040513d602081101561059a57600080fd5b50506000838152600260208181526040928390209091015482513380825292810191909152808301869052606081019190915290517fe6cd9de0b09270f1d16e4c263adca1289df3320ebac7b1bdb8e2f82cd6a608039181900360800190a150506000908152600260205260409020600401805461ff001916610100179055565b60036020526000908152604090205460ff1681565b600081815260026020526040902060010154339082906001600160a01b0316821461065757fe5b6000838152600260205260409020600301544211801590610690575060008381526002602052604090206004015462010000900460ff16155b80156106ae575060008381526002602052604090206004015460ff16155b6106b757600080fd5b600083815260026020908152604091829020600401805460ff19166001179055815133815290810185905281517fba19e87fb846feb0297591bc7d3f55ec0e3b289f88871a2bcfbe84d66fb47d4a929181900390910190a1505050565b600081815260026020526040902054339082906001600160a01b0316821461073857fe5b60008381526002602052604090206004015460ff168015610771575060008381526002602052604090206004015462010000900460ff16155b80156107945750600083815260026020526040902060040154610100900460ff16155b61079d57600080fd5b600180546000858152600260208181526040808420958601549590920154825163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529151949093169363a9059cbb9360448084019491938390030190829087803b15801561080a57600080fd5b505af115801561081e573d6000803e3d6000fd5b505050506040513d602081101561083457600080fd5b505060008381526002602081815260409283902060048101805461ff001916610100179055600181015492015483513381526001600160a01b0390931691830191909152818301526060810185905290517f29e9bc035f01bfa0da19263257dbbaeb34bf6c9c780d975b99cb802aecfcf1a29181900360800190a1505050565b6000546001600160a01b031633146108c857fe5b6001600160a01b038116600081815260036020908152604091829020805460ff19169055815192835290517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9281900390910190a150565b600081815260026020526040902060010154339082906001600160a01b0316821461094757fe5b6000838152600260205260409020600301544211801590610980575060008381526002602052604090206004015462010000900460ff16155b801561099e575060008381526002602052604090206004015460ff16155b6109a757600080fd5b600083815260026020908152604091829020600401805462ff0000191662010000179055815133815290810185905281517ff01ffb9bc3b6819e56e3eb6e956320fb8f22e6226eb649778b2df18f2c61f5b9929181900390910190a1505050565b600080610a1b844263ffffffff610dbd16565b60008181526002602081905260409091208054336001600160a01b03199182161782556001820180549091166001600160a01b03881617905501859055600454909150610a69904290610dbd565b600082815260026020908152604080832060038101949094556004938401805462ffffff1916905560015481516323b872dd60e01b815233958101959095523060248601526044850189905290516001600160a01b03909116936323b872dd9360648083019493928390030190829087803b158015610ae757600080fd5b505af1158015610afb573d6000803e3d6000fd5b505050506040513d6020811015610b1157600080fd5b5050604080513381526020810186905280820183905290517f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360600190a19392505050565b6000546001600160a01b03163314610b6e57fe5b6001600160a01b038116600081815260036020908152604091829020805460ff19166001179055815192835290517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399281900390910190a150565b6000546001600160a01b031681565b6000546001600160a01b0316331480610c0057503360009081526003602052604090205460ff165b610c0657fe5b60008181526002602052604090206004015460ff168015610c3e5750600081815260026020526040902060040154610100900460ff16155b8015610c62575060008181526002602052604090206004015462010000900460ff16155b610c6b57600080fd5b600180546000838152600260208181526040808420958601549590920154825163a9059cbb60e01b81526001600160a01b03968716600482015260248101919091529151949093169363a9059cbb9360448084019491938390030190829087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b505050506040513d6020811015610d0257600080fd5b505060008181526002602081815260409283902060048101805461ff001916610100179055600181015492015483516001600160a01b0390931683529082015280820183905290517f2ba35f141f0a78120b0861d9d90987092c9aab2450bad4108ef268e9e6fa24a29181900360600190a150565b6000546001600160a01b03163314610d8b57fe5b6001600160a01b038116610d9b57fe5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082820183811015610dcc57fe5b939250505056fea265627a7a723058209c032037bda61d2814c7a479b70a38ea0d20303bd777cd68cd5b2d54cbec9e2064736f6c634300050a00320000000000000000000000002784dcd08f4b1bb25af84fd0b702e2aa5d5d1d64

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

0000000000000000000000002784dcd08f4b1bb25af84fd0b702e2aa5d5d1d64

-----Decoded View---------------
Arg [0] : _tokenContract (address): 0x2784dcd08f4b1bb25af84fd0b702e2aa5d5d1d64

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002784dcd08f4b1bb25af84fd0b702e2aa5d5d1d64


Deployed ByteCode Sourcemap

2082:6608:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2082:6608:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7057:527;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7057:527:0;;:::i;:::-;;6273:644;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6273:644:0;;:::i;2231:39::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2231:39:0;-1:-1:-1;;;;;2231:39:0;;:::i;:::-;;;;;;;;;;;;;;;;;;4675:366;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4675:366:0;;:::i;5658:496::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5658:496:0;;:::i;8548:133::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8548:133:0;-1:-1:-1;;;;;8548:133:0;;:::i;5169:365::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5169:365:0;;:::i;3911:632::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3911:632:0;;;;;;-1:-1:-1;;;;;3911:632:0;;:::i;:::-;;;;;;;;;;;;;;;;8312:128;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8312:128:0;-1:-1:-1;;;;;8312:128:0;;:::i;1109:20::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1109:20:0;;;;;;;;;;;;;;7726:478;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7726:478:0;;:::i;1684:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1684:143:0;-1:-1:-1;;;;;1684:143:0;;:::i;7057:527::-;2872:5;;-1:-1:-1;;;;;2872:5:0;2858:10;:19;;:41;;-1:-1:-1;2888:10:0;2881:18;;;;:6;:18;;;;;;;;2858:41;2851:49;;;;7159:19;;;;:8;:19;;;;;:29;;;;;:77;;;;-1:-1:-1;7207:19:0;;;;:8;:19;;;;;:29;;;;;;;;7206:30;7159:77;:123;;;;-1:-1:-1;7255:19:0;;;;:8;:19;;;;;:27;;;;;;;;7254:28;7159:123;7137:156;;;;;;7304:11;;;7325:19;;;:8;:19;;;;;;;;:25;;7351:27;;;7304:75;;-1:-1:-1;;;7304:75:0;;-1:-1:-1;;;;;7325:25:0;;;7304:75;;;;;;;;;;;;;:11;;;;;:20;;:75;;;;;;;;;;;;;:11;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;7304:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7304:75:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;7411:19:0;;;;:8;7304:75;7411:19;;;;;;;;:25;;7438:27;;;7395:94;;-1:-1:-1;;;;;7411:25:0;;;7395:94;;;;;;;;;;;;7478:10;7395:94;;;;;;;;;;;;;;;7500:19;;;;:8;:19;;;;;;:29;;:36;;-1:-1:-1;;7500:36:0;;;;;7552:24;;;7500:19;7552:24;7057:527;:::o;6273:644::-;2751:19;;;;:8;:19;;;;;:25;6332:10;;6344:9;;-1:-1:-1;;;;;2751:25:0;:34;;2744:42;;;;6418:19;;;;:8;:19;;;;;:31;;;6412:3;:37;:89;;;;-1:-1:-1;6472:19:0;;;;:8;:19;;;;;:29;;;;;6471:30;6412:89;:141;;;;-1:-1:-1;6524:19:0;;;;:8;:19;;;;;:29;;;;;;;;6523:30;6412:141;:191;;;;-1:-1:-1;6576:19:0;;;;:8;:19;;;;;:27;;;;;;;;6575:28;6412:191;6393:290;;;-1:-1:-1;6641:19:0;;;;:8;:19;;;;;:27;;;;;;;;6393:290;6371:323;;;;;;6707:11;;;6739:19;;;:8;:19;;;;;;;;:27;;;;6707:60;;-1:-1:-1;;;6707:60:0;;6728:10;6707:60;;;;;;;;;;;;;-1:-1:-1;;;;;6707:11:0;;;;:20;;:60;;;;;;;;;;;;:11;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;6707:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6707:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;6811:19:0;;;;:8;6707:60;6811:19;;;;;;;;:27;;;;6783:79;;6799:10;6783:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6873:19:0;;;;:8;:19;;;;;:29;;:36;;-1:-1:-1;;6873:36:0;;;;;6273:644::o;2231:39::-;;;;;;;;;;;;;;;:::o;4675:366::-;2609:19;;;;:8;:19;;;;;:23;;;4735:10;;4747:9;;-1:-1:-1;;;;;2609:23:0;:33;;2602:41;;;;4803:19;;;;:8;:19;;;;;:31;;;4796:3;:38;;;;:84;;-1:-1:-1;4853:19:0;;;;:8;:19;;;;;:27;;;;;;;;4852:28;4796:84;:132;;;;-1:-1:-1;4899:19:0;;;;:8;:19;;;;;:29;;;;;4898:30;4796:132;4774:165;;;;;;4950:19;;;;:8;:19;;;;;;;;;:29;;:36;;-1:-1:-1;;4950:36:0;4982:4;4950:36;;;5002:31;;5011:10;5002:31;;;;;;;;;;;;;;;;;;;;;4675:366;;;:::o;5658:496::-;2751:19;;;;:8;:19;;;;;:25;5717:10;;5729:9;;-1:-1:-1;;;;;2751:25:0;:34;;2744:42;;;;5779:19;;;;:8;:19;;;;;:29;;;;;:75;;;;-1:-1:-1;5827:19:0;;;;:8;:19;;;;;:27;;;;;;;;5826:28;5779:75;:123;;;;-1:-1:-1;5873:19:0;;;;:8;:19;;;;;:29;;;;;;;;5872:30;5779:123;5757:156;;;;;;5924:11;;;;5945:19;;;:8;:19;;;;;;;;:23;;;;5970:27;;;;;5924:74;;-1:-1:-1;;;5924:74:0;;-1:-1:-1;;;;;5945:23:0;;;5924:74;;;;;;;;;;;;;:11;;;;;:20;;:74;;;;;5945:19;;5924:74;;;;;;;:11;:74;;;5:2:-1;;;;30:1;27;20:12;5:2;5924:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5924:74:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;6009:19:0;;;;:8;5924:74;6009:19;;;;;;;;:29;;;:36;;-1:-1:-1;;6009:36:0;;;;;6041:4;6082:23;;;6107:27;;;6061:85;;6070:10;6061:85;;-1:-1:-1;;;;;6082:23:0;;;6061:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;5658:496;;;:::o;8548:133::-;1481:5;;-1:-1:-1;;;;;1481:5:0;1467:10;:19;1460:27;;;;-1:-1:-1;;;;;8617:13:0;;8633:5;8617:13;;;:6;:13;;;;;;;;;:21;;-1:-1:-1;;8617:21:0;;;8654:19;;;;;;;;;;;;;;;;;8548:133;:::o;5169:365::-;2609:19;;;;:8;:19;;;;;:23;;;5230:10;;5242:9;;-1:-1:-1;;;;;2609:23:0;:33;;2602:41;;;;5298:19;;;;:8;:19;;;;;:31;;;5291:3;:38;;;;:84;;-1:-1:-1;5348:19:0;;;;:8;:19;;;;;:27;;;;;;;;5347:28;5291:84;:132;;;;-1:-1:-1;5394:19:0;;;;:8;:19;;;;;:29;;;;;5393:30;5291:132;5269:165;;;;;;5445:19;;;;:8;:19;;;;;;;;;:27;;:34;;-1:-1:-1;;5445:34:0;;;;;5495:31;;5504:10;5495:31;;;;;;;;;;;;;;;;;;;;;5169:365;;;:::o;3911:632::-;3971:7;;4016:15;:6;4027:3;4016:15;:10;:15;:::i;:::-;4042:19;;;;:8;:19;;;;;;;;:38;;4070:10;-1:-1:-1;;;;;;4042:38:0;;;;;;-1:-1:-1;4091:23:0;;:28;;;;;-1:-1:-1;;;;;4091:28:0;;;;;4130:27;:36;;;4219:14;;4042:19;;-1:-1:-1;4211:23:0;;:3;;:7;:23::i;:::-;4177:19;;;;:8;:19;;;;;;;;:31;;;:57;;;;4245:29;;;;:37;;-1:-1:-1;;4339:37:0;;;4245;4387:11;:57;;-1:-1:-1;;;4387:57:0;;4412:10;4387:57;;;;;;;4431:4;4387:57;;;;;;;;;;;;-1:-1:-1;;;;;4387:11:0;;;;:24;;:57;;;;;4177:19;4387:57;;;;;;;;:11;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;4387:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4387:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;4460:38:0;;;4468:10;4460:38;;4387:57;4460:38;;;;;;;;;;;;;;;;;;;;;;4526:9;3911:632;-1:-1:-1;;;3911:632:0:o;8312:128::-;1481:5;;-1:-1:-1;;;;;1481:5:0;1467:10;:19;1460:27;;;;-1:-1:-1;;;;;8379:13:0;;;;;;:6;:13;;;;;;;;;:20;;-1:-1:-1;;8379:20:0;8395:4;8379:20;;;8415:17;;;;;;;;;;;;;;;;;8312:128;:::o;1109:20::-;;;-1:-1:-1;;;;;1109:20:0;;:::o;7726:478::-;2872:5;;-1:-1:-1;;;;;2872:5:0;2858:10;:19;;:41;;-1:-1:-1;2888:10:0;2881:18;;;;:6;:18;;;;;;;;2858:41;2851:49;;;;7828:19;;;;:8;:19;;;;;:29;;;;;:77;;;;-1:-1:-1;7876:19:0;;;;:8;:19;;;;;:29;;;;;;;;7875:30;7828:77;:123;;;;-1:-1:-1;7924:19:0;;;;:8;:19;;;;;:27;;;;;;;;7923:28;7828:123;7806:156;;;;;;7973:11;;;;7994:19;;;:8;:19;;;;;;;;:23;;;;8019:27;;;;;7973:74;;-1:-1:-1;;;7973:74:0;;-1:-1:-1;;;;;7994:23:0;;;7973:74;;;;;;;;;;;;;:11;;;;;:20;;:74;;;;;7994:19;;7973:74;;;;;;;:11;:74;;;5:2:-1;;;;30:1;27;20:12;5:2;7973:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7973:74:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;8058:19:0;;;;:8;7973:74;8058:19;;;;;;;;:29;;;:36;;-1:-1:-1;;8058:36:0;;;;;8090:4;8132:23;;;8157:27;;;8110:86;;-1:-1:-1;;;;;8132:23:0;;;8110:86;;;;;;;;;;;;;;;;;;;;;;;7726:478;:::o;1684:143::-;1481:5;;-1:-1:-1;;;;;1481:5:0;1467:10;:19;1460:27;;;;-1:-1:-1;;;;;1769:22:0;;1762:30;;;;1803:5;:16;;-1:-1:-1;;;;;;1803:16:0;-1:-1:-1;;;;;1803:16:0;;;;;;;;;;1684:143::o;744:137::-;802:7;834:5;;;853:6;;;;846:14;;;;874:1;744:137;-1:-1:-1;;;744:137:0:o

Swarm Source

bzzr://9c032037bda61d2814c7a479b70a38ea0d20303bd777cd68cd5b2d54cbec9e20
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.