ETH Price: $3,289.05 (-0.24%)

Contract

0x36EF5aD3348DA55519fFDCd17eB42B05C6108e57
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Distribute Payme...171479012023-04-28 23:29:59632 days ago1682724599IN
0x36EF5aD3...5C6108e57
0 ETH0.0027867739.83380335
Withdraw Payment137612952021-12-07 22:56:351139 days ago1638917795IN
0x36EF5aD3...5C6108e57
0 ETH0.00822723129
Distribute Payme...137612922021-12-07 22:55:441139 days ago1638917744IN
0x36EF5aD3...5C6108e57
0 ETH0.0083952120
Start Vesting110893872020-10-19 23:11:201553 days ago1603149080IN
0x36EF5aD3...5C6108e57
0 ETH0.0023341319.00000145
Add Parameters109977602020-10-05 19:57:541567 days ago1601927874IN
0x36EF5aD3...5C6108e57
0 ETH0.0103247547.99999999

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimeLock

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-10-05
*/

/**
 *Submitted for verification at Etherscan.io on 2020-10-05
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.6.0;

interface IERC20 {
    function transfer(address to, uint tokens) external returns (bool success);
    function transferFrom(address from, address to, uint tokens) external returns (bool success);
    function balanceOf(address tokenOwner) external view returns (uint balance);
    function approve(address spender, uint tokens) external returns (bool success);
    function allowance(address tokenOwner, address spender) external view returns (uint remaining);
    function totalSupply() external view returns (uint);
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

library SafeMath {
    function add(uint a, uint b) internal pure returns (uint c) {
        c = a + b;
        require(c >= a);
    }

    function sub(uint a, uint b) internal pure returns (uint c) {
        require(b <= a);
        c = a - b;
    }

    function mul(uint a, uint b) internal pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b);
    }

    function div(uint a, uint b) internal pure returns (uint c) {
        require(b > 0);
        c = a / b;
    }
}

contract TimeLock {
    using SafeMath for uint;

    uint8 private nextSubtract;
    uint8 private nextScheduleId;
    bool public initialized;
    bool private configured;

    address[] private beneficiaries; //
    uint[] private scheduleList; //

    mapping(uint8 => uint) private schedules;
    mapping(address => mapping(address => uint)) private balances;
    mapping(address => uint) private percentages; //
    
    event NewVesting(address newVestingContract, uint indexed timeCreated);
    event Distributed(address token, address executor, uint round);
    event Withdrawn(address token, address beneficiary, uint amount);
    event EtherWithdrawn(address _addr, uint _value);
    
    modifier whenNotInitialized() {
        require(initialized == false, "Vesting has already been initialized");
        _;
    }
    
    modifier whenInitialized() {
        require(initialized == true, "Vesting has not been initialized");
        _;
    }
    
    modifier onlyBeneficiary() {
        bool isApproved = false;
        for(uint i = 0; i < beneficiaries.length; i++) {
            if (beneficiaries[i] == msg.sender) {
                isApproved = true;
            }
        }
        require(isApproved == true, "Only a beneficiary can do this");
        _;
    }
    
    function addParameters(address[] calldata _beneficiary, uint[] calldata _percentages, uint[] calldata _schedules) external whenNotInitialized {
        require(_beneficiary.length == _percentages.length, 'Beneficiary and percentage arrays must have the same length');
        require(configured == false, 'Parameters have already been added');
        uint totalPercentages;
        for(uint i = 0; i < _beneficiary.length; i++) {
            beneficiaries.push(_beneficiary[i]);
            percentages[_beneficiary[i]] = _percentages[i];
            totalPercentages = totalPercentages.add(_percentages[i]);
        }
        require(totalPercentages == 100, 'Percentages must sum up to 100');
        for(uint8 i = 0; i < _schedules.length; i++) {
            scheduleList.push(_schedules[i]);
        }
        configured = true;
    }
    
    function startVesting() external whenNotInitialized onlyBeneficiary {
         for(uint8 i = 0; i < scheduleList.length; i++) {
            schedules[i] = now + scheduleList[i];
         }
         initialized = true;
    }
    
    function nextScheduleTime() external view whenInitialized returns(uint secondsLeft){
        uint time = schedules[nextScheduleId];
        uint nextTime = time - now;
        if (time < now) {
            revert ('distribute payment for previous round');
        } else {
            return nextTime;
        }
    }
    
    function endingTime() external view whenInitialized returns(uint secondsLeft){
        uint allTime = scheduleList.length;
        uint time = schedules[uint8(allTime) - 1];
        return time - now;
        
    }

    function getSchedules() external view whenInitialized returns(uint[] memory schedule){
        return scheduleList;
    }
    
    function currentSchedule() external view whenInitialized returns(uint schedule){
        return scheduleList[nextScheduleId];
    }
    
    function getBalance(address userAddress, address tokenAddress) external view whenInitialized returns(uint){
        return balances[userAddress][tokenAddress];
    }
    
    function getBeneficiaries() external view returns(address[] memory beneficiary) {
        require(configured == true, 'Need to add beneficiaries first');
        return beneficiaries;
    }
    
    function percentageOf(address _beneficiary) external view returns(uint){
        return percentages[_beneficiary];
    }
    
    function _calculatePayment(address _beneficiary, address token, uint totalBalances) internal view returns(uint){
        uint balance = IERC20(token).balanceOf(address(this));
        require(balance > 0, 'Empty pool');
        return percentages[_beneficiary].mul(balance.sub(totalBalances)).div((scheduleList.length.sub(nextSubtract)).mul(100));
    }

    function distributePayment(address token) external whenInitialized {
        require(now >= schedules[nextScheduleId], 'Realease time not reached');
        uint totalBalances;
        for(uint i = 0; i < beneficiaries.length; i++) {
            totalBalances = totalBalances.add(balances[beneficiaries[i]][token]);
        } 
        for(uint i = 0; i < beneficiaries.length; i++){
            uint payment = _calculatePayment(beneficiaries[i], token, totalBalances);
            balances[beneficiaries[i]][token] = balances[beneficiaries[i]][token].add(payment);
        }
        nextScheduleId++; 
        nextSubtract++;
        emit Distributed(token, msg.sender, nextScheduleId);
    }
    
    function withdrawPayment(address token) external whenInitialized onlyBeneficiary returns (bool success) {
        require(balances[msg.sender][token] > 0, 'No balance to withdraw'); 
        
        uint256 amount = balances[msg.sender][token];
        
        balances[msg.sender][token] = 0;
        
        IERC20(token).transfer(msg.sender, amount);
        
        emit Withdrawn(token, msg.sender, amount);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"round","type":"uint256"}],"name":"Distributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"EtherWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newVestingContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"timeCreated","type":"uint256"}],"name":"NewVesting","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address[]","name":"_beneficiary","type":"address[]"},{"internalType":"uint256[]","name":"_percentages","type":"uint256[]"},{"internalType":"uint256[]","name":"_schedules","type":"uint256[]"}],"name":"addParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSchedule","outputs":[{"internalType":"uint256","name":"schedule","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"distributePayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endingTime","outputs":[{"internalType":"uint256","name":"secondsLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBeneficiaries","outputs":[{"internalType":"address[]","name":"beneficiary","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSchedules","outputs":[{"internalType":"uint256[]","name":"schedule","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextScheduleTime","outputs":[{"internalType":"uint256","name":"secondsLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"percentageOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawPayment","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50611205806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80639ae3a334116100715780639ae3a3341461017d5780639ec9bfbf146101a5578063a88ea616146101cb578063d4c0a86f146101d3578063d4fac45d146102e7578063deb36e3214610315576100b4565b8063158ef93e146100b95780633dd05a99146100d55780636c47a6c31461012d5780638ac28d5a146101475780638c3980b01461016d578063913b722c14610175575b600080fd5b6100c161031d565b604080519115158252519081900360200190f35b6100dd61032c565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610119578181015183820152602001610101565b505050509050019250505060405180910390f35b6101356103d6565b60408051918252519081900360200190f35b6100c16004803603602081101561015d57600080fd5b50356001600160a01b0316610447565b610135610697565b6100dd61074c565b6101a36004803603602081101561019357600080fd5b50356001600160a01b0316610811565b005b610135600480360360208110156101bb57600080fd5b50356001600160a01b0316610aa5565b610135610ac0565b6101a3600480360360608110156101e957600080fd5b81019060208101813564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184602083028401116401000000008311171561023857600080fd5b91939092909160208101903564010000000081111561025657600080fd5b82018360208201111561026857600080fd5b8035906020019184602083028401116401000000008311171561028a57600080fd5b9193909290916020810190356401000000008111156102a857600080fd5b8201836020820111156102ba57600080fd5b803590602001918460208302840111640100000000831117156102dc57600080fd5b509092509050610b3b565b610135600480360360408110156102fd57600080fd5b506001600160a01b0381358116916020013516610da2565b6101a3610e21565b60005462010000900460ff1681565b60005460609062010000900460ff16151560011461037f576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60028054806020026020016040519081016040528092919081815260200182805480156103cb57602002820191906000526020600020905b8154815260200190600101908083116103b7575b505050505090505b90565b6000805462010000900460ff161515600114610427576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b506002546000190160ff1660009081526003602052604090205442900390565b6000805462010000900460ff161515600114610498576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b6000805b6001548110156104e557336001600160a01b0316600182815481106104bd57fe5b6000918252602090912001546001600160a01b031614156104dd57600191505b60010161049c565b5060018115151461053d576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920612062656e65666963696172792063616e20646f20746869730000604482015290519081900360640190fd5b3360009081526004602090815260408083206001600160a01b03871684529091529020546105ab576040805162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b604482015290519081900360640190fd5b3360008181526004602081815260408084206001600160a01b038916808652908352818520805490869055825163a9059cbb60e01b815294850196909652602484018690529051909363a9059cbb936044808201949392918390030190829087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b505050506040513d602081101561064357600080fd5b5050604080516001600160a01b038616815233602082015280820183905290517fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9181900360600190a15060019392505050565b6000805462010000900460ff1615156001146106e8576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60008054610100900460ff1681526003602052604090205442808203908210156107435760405162461bcd60e51b815260040180806020018281038252602581526020018061110a6025913960400191505060405180910390fd5b91506103d39050565b6000546060906301000000900460ff1615156001146107b2576040805162461bcd60e51b815260206004820152601f60248201527f4e65656420746f206164642062656e6566696369617269657320666972737400604482015290519081900360640190fd5b60018054806020026020016040519081016040528092919081815260200182805480156103cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575050505050905090565b60005462010000900460ff161515600114610861576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60008054610100900460ff168152600360205260409020544210156108cd576040805162461bcd60e51b815260206004820152601960248201527f5265616c656173652074696d65206e6f74207265616368656400000000000000604482015290519081900360640190fd5b6000805b60015481101561093b5761093160046000600184815481106108ef57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938816825292909252902054839063ffffffff610f6f16565b91506001016108d1565b5060005b600154811015610a1e5760006109776001838154811061095b57fe5b6000918252602090912001546001600160a01b03168585610f7f565b90506109cf81600460006001868154811061098e57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938a168252929092529020549063ffffffff610f6f16565b60046000600185815481106109e057fe5b60009182526020808320909101546001600160a01b03908116845283820194909452604092830182209389168252929092529020555060010161093f565b506000805460ff1961ff0019821660016101009384900460ff908116820181168502929092179283169282160181169190911792839055604080516001600160a01b038716815233602082015292909304168183015290517fad4a9acf26d8bba7a8cf1a41160d59be042ee554578e256c98d2ab74cdd43542916060908290030190a15050565b6001600160a01b031660009081526005602052604090205490565b6000805462010000900460ff161515600114610b11576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b600054600280549091610100900460ff16908110610b2b57fe5b9060005260206000200154905090565b60005462010000900460ff1615610b835760405162461bcd60e51b81526004018080602001828103825260248152602001806111ac6024913960400191505060405180910390fd5b848314610bc15760405162461bcd60e51b815260040180806020018281038252603b815260200180611171603b913960400191505060405180910390fd5b6000546301000000900460ff1615610c0a5760405162461bcd60e51b815260040180806020018281038252602281526020018061114f6022913960400191505060405180910390fd5b6000805b86811015610ce6576001888883818110610c2457fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b039590920293909301359390931692909217905550858582818110610c6c57fe5b90506020020135600560008a8a85818110610c8357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610cdc868683818110610cc657fe5b9050602002013583610f6f90919063ffffffff16565b9150600101610c0e565b5080606414610d3c576040805162461bcd60e51b815260206004820152601e60248201527f50657263656e7461676573206d7573742073756d20757020746f203130300000604482015290519081900360640190fd5b60005b60ff8116831115610d8557600284848360ff16818110610d5b57fe5b83546001808201865560009586526020958690209290950293909301359201919091555001610d3f565b50506000805463ff00000019166301000000179055505050505050565b6000805462010000900460ff161515600114610df3576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b506001600160a01b038083166000908152600460209081526040808320938516835292905220545b92915050565b60005462010000900460ff1615610e695760405162461bcd60e51b81526004018080602001828103825260248152602001806111ac6024913960400191505060405180910390fd5b6000805b600154811015610eb657336001600160a01b031660018281548110610e8e57fe5b6000918252602090912001546001600160a01b03161415610eae57600191505b600101610e6d565b50600181151514610f0e576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920612062656e65666963696172792063616e20646f20746869730000604482015290519081900360640190fd5b60005b60025460ff82161015610f5a5760028160ff1681548110610f2e57fe5b600091825260208083209091015460ff8416835260039091526040909120429091019055600101610f11565b50506000805462ff0000191662010000179055565b81810182811015610e1b57600080fd5b604080516370a0823160e01b8152306004820152905160009182916001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610fca57600080fd5b505afa158015610fde573d6000803e3d6000fd5b505050506040513d6020811015610ff457600080fd5b5051905080611037576040805162461bcd60e51b815260206004820152600a602482015269115b5c1d1e481c1bdbdb60b21b604482015290519081900360640190fd5b6000546002546110ab916110679160649161105b919060ff1663ffffffff6110b416565b9063ffffffff6110c916565b61109f61107a848763ffffffff6110b416565b6001600160a01b0389166000908152600560205260409020549063ffffffff6110c916565b9063ffffffff6110ea16565b95945050505050565b6000828211156110c357600080fd5b50900390565b8181028215806110e15750818382816110de57fe5b04145b610e1b57600080fd5b60008082116110f857600080fd5b81838161110157fe5b04939250505056fe64697374726962757465207061796d656e7420666f722070726576696f757320726f756e6456657374696e6720686173206e6f74206265656e20696e697469616c697a6564506172616d6574657273206861766520616c7265616479206265656e20616464656442656e656669636961727920616e642070657263656e7461676520617272617973206d7573742068617665207468652073616d65206c656e67746856657374696e672068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212208e7df8333c370a1410a6c7bae822d98b5d8cbc3451dd6f85a9ffd22b3b32586264736f6c63430006060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80639ae3a334116100715780639ae3a3341461017d5780639ec9bfbf146101a5578063a88ea616146101cb578063d4c0a86f146101d3578063d4fac45d146102e7578063deb36e3214610315576100b4565b8063158ef93e146100b95780633dd05a99146100d55780636c47a6c31461012d5780638ac28d5a146101475780638c3980b01461016d578063913b722c14610175575b600080fd5b6100c161031d565b604080519115158252519081900360200190f35b6100dd61032c565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610119578181015183820152602001610101565b505050509050019250505060405180910390f35b6101356103d6565b60408051918252519081900360200190f35b6100c16004803603602081101561015d57600080fd5b50356001600160a01b0316610447565b610135610697565b6100dd61074c565b6101a36004803603602081101561019357600080fd5b50356001600160a01b0316610811565b005b610135600480360360208110156101bb57600080fd5b50356001600160a01b0316610aa5565b610135610ac0565b6101a3600480360360608110156101e957600080fd5b81019060208101813564010000000081111561020457600080fd5b82018360208201111561021657600080fd5b8035906020019184602083028401116401000000008311171561023857600080fd5b91939092909160208101903564010000000081111561025657600080fd5b82018360208201111561026857600080fd5b8035906020019184602083028401116401000000008311171561028a57600080fd5b9193909290916020810190356401000000008111156102a857600080fd5b8201836020820111156102ba57600080fd5b803590602001918460208302840111640100000000831117156102dc57600080fd5b509092509050610b3b565b610135600480360360408110156102fd57600080fd5b506001600160a01b0381358116916020013516610da2565b6101a3610e21565b60005462010000900460ff1681565b60005460609062010000900460ff16151560011461037f576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60028054806020026020016040519081016040528092919081815260200182805480156103cb57602002820191906000526020600020905b8154815260200190600101908083116103b7575b505050505090505b90565b6000805462010000900460ff161515600114610427576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b506002546000190160ff1660009081526003602052604090205442900390565b6000805462010000900460ff161515600114610498576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b6000805b6001548110156104e557336001600160a01b0316600182815481106104bd57fe5b6000918252602090912001546001600160a01b031614156104dd57600191505b60010161049c565b5060018115151461053d576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920612062656e65666963696172792063616e20646f20746869730000604482015290519081900360640190fd5b3360009081526004602090815260408083206001600160a01b03871684529091529020546105ab576040805162461bcd60e51b81526020600482015260166024820152754e6f2062616c616e636520746f20776974686472617760501b604482015290519081900360640190fd5b3360008181526004602081815260408084206001600160a01b038916808652908352818520805490869055825163a9059cbb60e01b815294850196909652602484018690529051909363a9059cbb936044808201949392918390030190829087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b505050506040513d602081101561064357600080fd5b5050604080516001600160a01b038616815233602082015280820183905290517fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9181900360600190a15060019392505050565b6000805462010000900460ff1615156001146106e8576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60008054610100900460ff1681526003602052604090205442808203908210156107435760405162461bcd60e51b815260040180806020018281038252602581526020018061110a6025913960400191505060405180910390fd5b91506103d39050565b6000546060906301000000900460ff1615156001146107b2576040805162461bcd60e51b815260206004820152601f60248201527f4e65656420746f206164642062656e6566696369617269657320666972737400604482015290519081900360640190fd5b60018054806020026020016040519081016040528092919081815260200182805480156103cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ea575050505050905090565b60005462010000900460ff161515600114610861576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b60008054610100900460ff168152600360205260409020544210156108cd576040805162461bcd60e51b815260206004820152601960248201527f5265616c656173652074696d65206e6f74207265616368656400000000000000604482015290519081900360640190fd5b6000805b60015481101561093b5761093160046000600184815481106108ef57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938816825292909252902054839063ffffffff610f6f16565b91506001016108d1565b5060005b600154811015610a1e5760006109776001838154811061095b57fe5b6000918252602090912001546001600160a01b03168585610f7f565b90506109cf81600460006001868154811061098e57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220938a168252929092529020549063ffffffff610f6f16565b60046000600185815481106109e057fe5b60009182526020808320909101546001600160a01b03908116845283820194909452604092830182209389168252929092529020555060010161093f565b506000805460ff1961ff0019821660016101009384900460ff908116820181168502929092179283169282160181169190911792839055604080516001600160a01b038716815233602082015292909304168183015290517fad4a9acf26d8bba7a8cf1a41160d59be042ee554578e256c98d2ab74cdd43542916060908290030190a15050565b6001600160a01b031660009081526005602052604090205490565b6000805462010000900460ff161515600114610b11576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b600054600280549091610100900460ff16908110610b2b57fe5b9060005260206000200154905090565b60005462010000900460ff1615610b835760405162461bcd60e51b81526004018080602001828103825260248152602001806111ac6024913960400191505060405180910390fd5b848314610bc15760405162461bcd60e51b815260040180806020018281038252603b815260200180611171603b913960400191505060405180910390fd5b6000546301000000900460ff1615610c0a5760405162461bcd60e51b815260040180806020018281038252602281526020018061114f6022913960400191505060405180910390fd5b6000805b86811015610ce6576001888883818110610c2457fe5b835460018101855560009485526020948590200180546001600160a01b0319166001600160a01b039590920293909301359390931692909217905550858582818110610c6c57fe5b90506020020135600560008a8a85818110610c8357fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550610cdc868683818110610cc657fe5b9050602002013583610f6f90919063ffffffff16565b9150600101610c0e565b5080606414610d3c576040805162461bcd60e51b815260206004820152601e60248201527f50657263656e7461676573206d7573742073756d20757020746f203130300000604482015290519081900360640190fd5b60005b60ff8116831115610d8557600284848360ff16818110610d5b57fe5b83546001808201865560009586526020958690209290950293909301359201919091555001610d3f565b50506000805463ff00000019166301000000179055505050505050565b6000805462010000900460ff161515600114610df3576040805162461bcd60e51b8152602060048201819052602482015260008051602061112f833981519152604482015290519081900360640190fd5b506001600160a01b038083166000908152600460209081526040808320938516835292905220545b92915050565b60005462010000900460ff1615610e695760405162461bcd60e51b81526004018080602001828103825260248152602001806111ac6024913960400191505060405180910390fd5b6000805b600154811015610eb657336001600160a01b031660018281548110610e8e57fe5b6000918252602090912001546001600160a01b03161415610eae57600191505b600101610e6d565b50600181151514610f0e576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c7920612062656e65666963696172792063616e20646f20746869730000604482015290519081900360640190fd5b60005b60025460ff82161015610f5a5760028160ff1681548110610f2e57fe5b600091825260208083209091015460ff8416835260039091526040909120429091019055600101610f11565b50506000805462ff0000191662010000179055565b81810182811015610e1b57600080fd5b604080516370a0823160e01b8152306004820152905160009182916001600160a01b038616916370a08231916024808301926020929190829003018186803b158015610fca57600080fd5b505afa158015610fde573d6000803e3d6000fd5b505050506040513d6020811015610ff457600080fd5b5051905080611037576040805162461bcd60e51b815260206004820152600a602482015269115b5c1d1e481c1bdbdb60b21b604482015290519081900360640190fd5b6000546002546110ab916110679160649161105b919060ff1663ffffffff6110b416565b9063ffffffff6110c916565b61109f61107a848763ffffffff6110b416565b6001600160a01b0389166000908152600560205260409020549063ffffffff6110c916565b9063ffffffff6110ea16565b95945050505050565b6000828211156110c357600080fd5b50900390565b8181028215806110e15750818382816110de57fe5b04145b610e1b57600080fd5b60008082116110f857600080fd5b81838161110157fe5b04939250505056fe64697374726962757465207061796d656e7420666f722070726576696f757320726f756e6456657374696e6720686173206e6f74206265656e20696e697469616c697a6564506172616d6574657273206861766520616c7265616479206265656e20616464656442656e656669636961727920616e642070657263656e7461676520617272617973206d7573742068617665207468652073616d65206c656e67746856657374696e672068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212208e7df8333c370a1410a6c7bae822d98b5d8cbc3451dd6f85a9ffd22b3b32586264736f6c63430006060033

Deployed Bytecode Sourcemap

1357:5338:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1357:5338:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1482:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;4359:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4359:123:0;;;;;;;;;;;;;;;;;4131:220;;;:::i;:::-;;;;;;;;;;;;;;;;6238:454;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6238:454:0;-1:-1:-1;;;;;6238:454:0;;:::i;3794:325::-;;;:::i;4818:192::-;;;:::i;5521:705::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5521:705:0;-1:-1:-1;;;;;5521:705:0;;:::i;:::-;;5022:122;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5022:122:0;-1:-1:-1;;;;;5022:122:0;;:::i;4494:133::-;;;:::i;2689:853::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;2689:853:0;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;2689:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;2689:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2689:853:0;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;2689:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;2689:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2689:853:0;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;2689:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;2689:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;2689:853:0;;-1:-1:-1;2689:853:0;-1:-1:-1;2689:853:0;:::i;4639:167::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;4639:167:0;;;;;;;;;;:::i;3554:228::-;;;:::i;1482:23::-;;;;;;;;;:::o;4359:123::-;2265:11;;4421:22;;2265:11;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;4462:12:::1;4455:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2332:1;4359:123:::0;:::o;4131:220::-;4191:16;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;-1:-1:-1;4234:12:0::1;:19:::0;-1:-1:-1;;4286:18:0;4276:29:::1;;4219:12;4276:29:::0;;;:9:::1;:29;::::0;;;;;4330:3:::1;4323:10:::0;::::1;::::0;4131:220::o;6238:454::-;6328:12;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;2391:15:::1;::::0;2425:161:::1;2445:13;:20:::0;2441:24;::::1;2425:161;;;2511:10;-1:-1:-1::0;;;;;2491:30:0::1;:13;2505:1;2491:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;2491:16:0::1;:30;2487:88;;;2555:4;2542:17;;2487:88;2467:3;;2425:161;;;-1:-1:-1::0;2618:4:0::1;2604:18:::0;::::1;;;2596:61;;;::::0;;-1:-1:-1;;;2596:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6370:10:::2;6391:1;6361:20:::0;;;:8:::2;:20;::::0;;;;;;;-1:-1:-1;;;;;6361:27:0;::::2;::::0;;;;;;;;6353:66:::2;;;::::0;;-1:-1:-1;;;6353:66:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;6353:66:0;;;;;;;;;;;;;::::2;;6467:10;6441:14;6458:20:::0;;;:8:::2;:20;::::0;;;;;;;-1:-1:-1;;;;;6458:27:0;::::2;::::0;;;;;;;;;;;6506:31;;;;6558:42;;-1:-1:-1;;;6558:42:0;;;;::::2;::::0;;;;;;;;;;;;6458:27;;6558:22:::2;::::0;:42;;;;;6458:20;6558:42;;;;;;;;;6458:27;6558:42;::::2;;2:2:-1::0;::::2;;;27:1;24::::0;17:12:::2;2:2;6558:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;6558:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::2;4:2;-1:-1:::0;;6626:36:0::2;::::0;;-1:-1:-1;;;;;6626:36:0;::::2;::::0;;6643:10:::2;6558:42;6626:36:::0;::::2;::::0;;;;;;;;;::::2;::::0;;;;;;;::::2;-1:-1:-1::0;6680:4:0::2;::::0;6238:454;-1:-1:-1;;;6238:454:0:o;3794:325::-;3860:16;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;3888:9:::1;3910:14:::0;;::::1;::::0;::::1;;;3900:25:::0;;:9:::1;:25;::::0;;;;;3959:3:::1;3952:10:::0;;::::1;::::0;3977;::::1;3973:139;;;4004:48;;-1:-1:-1::0;;;4004:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3973:139;4092:8:::0;-1:-1:-1;4085:15:0::1;::::0;-1:-1:-1;4085:15:0::1;4818:192:::0;4917:10;;4868:28;;4917:10;;;;;:18;;4931:4;4917:18;4909:62;;;;;-1:-1:-1;;;4909:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4989:13;4982:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4982:20:0;;;;;;;;;;;;;;;;;;;;;;4818:192;:::o;5521:705::-;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;5614:25:::1;5624:14:::0;;::::1;::::0;::::1;;;5614:25:::0;;:9:::1;:25;::::0;;;;;5607:3:::1;:32;;5599:70;;;::::0;;-1:-1:-1;;;5599:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;5680:18;::::0;5709:142:::1;5729:13;:20:::0;5725:24;::::1;5709:142;;;5787:52;5805:8;:26;5814:13;5828:1;5814:16;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;5814:16:0;;::::1;5805:26:::0;;;;::::1;::::0;;;;;;;;;;:33;;::::1;::::0;;;;;;;;;5787:13;;:52:::1;:17;:52;:::i;:::-;5771:68:::0;-1:-1:-1;5751:3:0::1;;5709:142;;;-1:-1:-1::0;5866:6:0::1;5862:242;5882:13;:20:::0;5878:24;::::1;5862:242;;;5923:12;5938:57;5956:13;5970:1;5956:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;5956:16:0::1;5974:5:::0;5981:13;5938:17:::1;:57::i;:::-;5923:72;;6046:46;6084:7;6046:8;:26;6055:13;6069:1;6055:16;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;6055:16:0;;::::1;6046:26:::0;;;;::::1;::::0;;;;;;;;;;:33;;::::1;::::0;;;;;;;;;;:46:::1;:37;:46;:::i;:::-;6010:8;:26;6019:13;6033:1;6019:16;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;6019:16:0;;::::1;6010:26:::0;;;;::::1;::::0;;;;;;;;;;:33;;::::1;::::0;;;;;;;;:82;-1:-1:-1;6019:16:0;5904:3:::1;5862:242;;;-1:-1:-1::0;6114:14:0::1;:16:::0;;-1:-1:-1;;;;6114:16:0;::::1;:14;:16;::::0;;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;6142:14:::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;6172:46:::1;::::0;;-1:-1:-1;;;;;6172:46:0;::::1;::::0;;6191:10:::1;6172:46;::::0;::::1;::::0;6203:14;;;::::1;;6172:46:::0;;;;;;::::1;::::0;;;;;;;;::::1;2332:1;5521:705:::0;:::o;5022:122::-;-1:-1:-1;;;;;5111:25:0;5088:4;5111:25;;;:11;:25;;;;;;;5022:122::o;4494:133::-;4559:13;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;4604:14:::1;::::0;4591:12:::1;:28:::0;;:12;;4604:14:::1;::::0;::::1;;;::::0;4591:28;::::1;;;;;;;;;;;;;4584:35;;4494:133:::0;:::o;2689:853::-;2126:11;;;;;;;:20;2118:69;;;;-1:-1:-1;;;2118:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:42;;::::1;2842:114;;;;-1:-1:-1::0;;;2842:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2975:10;::::0;;;::::1;;;:19;2967:66;;;;-1:-1:-1::0;;;2967:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3044:21;::::0;3076:240:::1;3092:23:::0;;::::1;3076:240;;;3137:13;3156:12;;3169:1;3156:15;;;;;;;27:10:-1::0;;39:1:::1;23:18:::0;::::1;45:23:::0;;-1:-1;3137:35:0;;;3156:15:::1;3137:35:::0;;;;::::1;::::0;;-1:-1:-1;;;;;;3137:35:0::1;-1:-1:-1::0;;;;;3156:15:0;;;::::1;::::0;;;::::1;;::::0;;;::::1;3137:35:::0;;;::::1;::::0;;-1:-1:-1;3218:12:0;;3231:1;3218:15;;::::1;;;;;;;;;;;3187:11;:28;3199:12;;3212:1;3199:15;;;;;;;;;;;;;-1:-1:-1::0;;;;;3199:15:0::1;-1:-1:-1::0;;;;;3187:28:0::1;-1:-1:-1::0;;;;;3187:28:0::1;;;;;;;;;;;;:46;;;;3267:37;3288:12;;3301:1;3288:15;;;;;;;;;;;;;3267:16;:20;;:37;;;;:::i;:::-;3248:56:::0;-1:-1:-1;3117:3:0::1;;3076:240;;;;3334:16;3354:3;3334:23;3326:66;;;::::0;;-1:-1:-1;;;3326:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3407:7;3403:104;3420:21;::::0;::::1;::::0;-1:-1:-1;3403:104:0::1;;;3463:12;3481:10;;3492:1;3481:13;;;;;;;;;27:10:-1::0;;39:1:::1;23:18:::0;;::::1;45:23:::0;;-1:-1;3463:32:0;;;3481:13:::1;3463:32:::0;;;;3481:13;;;::::1;::::0;;;::::1;;3463:32:::0;::::1;::::0;;;;-1:-1:-1;3443:3:0::1;3403:104;;;-1:-1:-1::0;;3517:10:0::1;:17:::0;;-1:-1:-1;;3517:17:0::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;2689:853:0:o;4639:167::-;4740:4;2265:11;;;;;;;:19;;2280:4;2265:19;2257:64;;;;;-1:-1:-1;;;2257:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2257:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4763:21:0;;::::1;;::::0;;;:8:::1;:21;::::0;;;;;;;:35;;::::1;::::0;;;;;;;2332:1:::1;4639:167:::0;;;;:::o;3554:228::-;2126:11;;;;;;;:20;2118:69;;;;-1:-1:-1;;;2118:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2391:15:::1;::::0;2425:161:::1;2445:13;:20:::0;2441:24;::::1;2425:161;;;2511:10;-1:-1:-1::0;;;;;2491:30:0::1;:13;2505:1;2491:16;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;2491:16:0::1;:30;2487:88;;;2555:4;2542:17;;2487:88;2467:3;;2425:161;;;-1:-1:-1::0;2618:4:0::1;2604:18:::0;::::1;;;2596:61;;;::::0;;-1:-1:-1;;;2596:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3638:7:::2;3634:111;3655:12;:19:::0;3651:23:::2;::::0;::::2;;3634:111;;;3717:12;3730:1;3717:15;;;;;;;;;;;::::0;;;::::2;::::0;;;;;::::2;::::0;3696:12:::2;::::0;::::2;::::0;;:9:::2;:12:::0;;;;;;;3711:3:::2;:21:::0;;::::2;3696:36:::0;;3676:3:::2;;3634:111;;;-1:-1:-1::0;;3756:11:0::2;:18:::0;;-1:-1:-1;;3756:18:0::2;::::0;::::2;::::0;;3554:228::o;857:114::-;932:5;;;956:6;;;;948:15;;12:1:-1;9;2:12;5156:357:0;5293:38;;;-1:-1:-1;;;5293:38:0;;5325:4;5293:38;;;;;;5262:4;;;;-1:-1:-1;;;;;5293:23:0;;;;;:38;;;;;;;;;;;;;;:23;:38;;;2:2:-1;;;;27:1;24;17:12;2:2;5293:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5293:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5293:38:0;;-1:-1:-1;5350:11:0;5342:34;;;;;-1:-1:-1;;;5342:34:0;;;;;;;;;;;;-1:-1:-1;;;5342:34:0;;;;;;;;;;;;;;;5481:12;;5457;:19;5394:111;;5456:48;;5500:3;;5457:37;;:19;5481:12;;5457:37;:23;:37;:::i;:::-;5456:43;:48;:43;:48;:::i;:::-;5394:57;5424:26;:7;5436:13;5424:26;:11;:26;:::i;:::-;-1:-1:-1;;;;;5394:25:0;;;;;;:11;:25;;;;;;;:57;:29;:57;:::i;:::-;:61;:111;:61;:111;:::i;:::-;5387:118;5156:357;-1:-1:-1;;;;;5156:357:0:o;979:114::-;1031:6;1063:1;1058;:6;;1050:15;;12:1:-1;9;2:12;1050:15:0;-1:-1:-1;1080:5:0;;;979:114::o;1101:128::-;1176:5;;;1200:6;;;:20;;;1219:1;1214;1210;:5;;;;;;:10;1200:20;1192:29;;12:1:-1;9;2:12;1237:113:0;1289:6;1320:1;1316;:5;1308:14;;12:1:-1;9;2:12;1308:14:0;1341:1;1337;:5;;;;;;;1237:113;-1:-1:-1;;;1237:113:0:o

Swarm Source

ipfs://8e7df8333c370a1410a6c7bae822d98b5d8cbc3451dd6f85a9ffd22b3b325862

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.