ETH Price: $2,723.41 (-1.52%)

Contract

0x6397B894b1C68951Bb7164979bf8a95CCebA540b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Token205828252024-08-22 8:02:594 days ago1724313779IN
0x6397B894...CCebA540b
0 ETH0.000102430.98125133
Claim Token203480682024-07-20 13:33:3537 days ago1721482415IN
0x6397B894...CCebA540b
0 ETH0.000425654.87637231
Claim Token200266762024-06-05 15:58:5982 days ago1717603139IN
0x6397B894...CCebA540b
0 ETH0.0022936221.97166127
Claim Token199669482024-05-28 7:43:1190 days ago1716882191IN
0x6397B894...CCebA540b
0 ETH0.0018218415.00858333
Claim Token199556942024-05-26 17:58:3591 days ago1716746315IN
0x6397B894...CCebA540b
0 ETH0.000549336.29323611
Claim Token199401202024-05-24 13:44:2394 days ago1716558263IN
0x6397B894...CCebA540b
0 ETH0.000749158.58231219
Claim Token198788022024-05-15 23:56:11102 days ago1715817371IN
0x6397B894...CCebA540b
0 ETH0.000447764.29361881
Claim Token198332842024-05-09 15:07:59109 days ago1715267279IN
0x6397B894...CCebA540b
0 ETH0.00061197.01
Claim Token198324932024-05-09 12:29:35109 days ago1715257775IN
0x6397B894...CCebA540b
0 ETH0.000428444.10422773
Claim Token197795052024-05-02 2:37:59116 days ago1714617479IN
0x6397B894...CCebA540b
0 ETH0.000548055.25002854
Claim Token197679522024-04-30 11:53:35118 days ago1714478015IN
0x6397B894...CCebA540b
0 ETH0.005463352.33548227
Claim Token197677552024-04-30 11:13:59118 days ago1714475639IN
0x6397B894...CCebA540b
0 ETH0.0085419881.82761356
Claim Token197677402024-04-30 11:10:59118 days ago1714475459IN
0x6397B894...CCebA540b
0 ETH0.008963885.86844294
Claim Token197677202024-04-30 11:06:59118 days ago1714475219IN
0x6397B894...CCebA540b
0 ETH0.0083320179.8162135
Claim Token197654142024-04-30 3:23:35118 days ago1714447415IN
0x6397B894...CCebA540b
0 ETH0.000619825.93761111
Claim Token197595682024-04-29 7:45:59119 days ago1714376759IN
0x6397B894...CCebA540b
0 ETH0.000857628.21560806
Claim Token197595282024-04-29 7:37:59119 days ago1714376279IN
0x6397B894...CCebA540b
0 ETH0.00093678.97312209
Claim Token197594992024-04-29 7:31:59119 days ago1714375919IN
0x6397B894...CCebA540b
0 ETH0.000969549.28774685
Claim Token197594772024-04-29 7:27:35119 days ago1714375655IN
0x6397B894...CCebA540b
0 ETH0.000905098.67031325
Claim Token197594402024-04-29 7:20:11119 days ago1714375211IN
0x6397B894...CCebA540b
0 ETH0.000707996.78221589
Claim Token197382612024-04-26 8:11:11122 days ago1714119071IN
0x6397B894...CCebA540b
0 ETH0.000731567.00801685
Claim Token197381212024-04-26 7:42:59122 days ago1714117379IN
0x6397B894...CCebA540b
0 ETH0.000836948.01750721
Claim Token197381172024-04-26 7:42:11122 days ago1714117331IN
0x6397B894...CCebA540b
0 ETH0.000870258.33660865
Claim Token197381112024-04-26 7:40:59122 days ago1714117259IN
0x6397B894...CCebA540b
0 ETH0.00092948.90319566
Claim Token197381072024-04-26 7:40:11122 days ago1714117211IN
0x6397B894...CCebA540b
0 ETH0.000932868.93634636
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
176123182023-07-03 8:41:11420 days ago1688373671  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x29814582...1516e699E
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FixedVesting

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : FixedVesting.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./TransferHelper.sol";
import "./IFixedCreator.sol";

contract FixedVesting{
    address public immutable creator = msg.sender;
    address public owner = tx.origin;

    bool private initialized;
    bool public isPaused;

    uint128 public vestingLength;
    uint128 public sold;
    
    address public token;

    address[] public buyers;

    struct Detail{
        uint128 datetime;
        uint128 ratio_d2;
    }

    struct Bought{
        uint128 buyerIndex;
        uint128 purchased;
        uint128 completed_d2; // in percent (2 decimal)
        uint128 claimed;
    }
    
    mapping(address => Bought) public invoice;
    mapping(uint128 => Detail) public vesting;
    
    modifier onlyOwner{
        require(msg.sender == owner, "!owner");
        _;
    }
    
    /**
     * @dev Initialize vesting token distribution
     * @param _token Token project address
     * @param _datetime Vesting datetime in epoch
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function initialize(
        address _token,
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) external {
        require(!initialized, "Initialized");
        require(msg.sender == creator, "!creator");

        _setToken(_token);
        _newVesting(_datetime, _ratio_d2);
        
        initialized = true;
    }

    /**
     * @dev Get length of buyer
     */
    function getBuyerLength() external view returns (uint){
        return buyers.length;
    }

    /**
     * @dev Get vesting runnning
     */
    function vestingRunning() public view returns(uint128 round, uint128 totalPercent_d2){
        uint128 vestingSize = vestingLength;
        uint128 total;
        for(uint128 i=1; i<=vestingSize; i++){
            Detail memory temp = vesting[i];
            total += temp.ratio_d2;
            
            if( (temp.datetime <= block.timestamp && block.timestamp <= vesting[i+1].datetime) ||
                (i == vestingSize && block.timestamp >= temp.datetime)
            ){
                round = i;
                totalPercent_d2 = total;
                break;
            }
        }
    }

    /**
     * @dev Token claim
     */
    function claimToken() external {
        (uint128 round, uint128 totalPercent_d2) = vestingRunning();
        Bought memory temp = invoice[msg.sender];

        require(!isPaused && round > 0 && token != address(0), "!started");
        require(temp.purchased > 0, "!buyer");
        require(temp.completed_d2 < totalPercent_d2, "claimed");
        
        uint128 amountToClaim;
        if(temp.completed_d2 == 0){
            amountToClaim = (temp.purchased * totalPercent_d2) / 10000;
        } else{
            amountToClaim = ((temp.claimed * totalPercent_d2) / temp.completed_d2) - temp.claimed;
        }

        require(IERC20(token).balanceOf(address(this)) >= amountToClaim && amountToClaim > 0, "insufficient");
        
        invoice[msg.sender].completed_d2 = totalPercent_d2;
        invoice[msg.sender].claimed = temp.claimed + amountToClaim;

        TransferHelper.safeTransfer(address(token), msg.sender, amountToClaim);        
    }

    /**
     * @dev Set token project
     * @param _token Token project address
     */
    function _setToken(address _token) private {
        token = _token;
    }

    /**
     * @dev Insert new vestings
     * @param _datetime Vesting datetime
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function _newVesting(
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) private {
        require(_datetime.length == _ratio_d2.length, "!good");

        uint128 vestingSize = vestingLength;
        for(uint128 i=0; i<_datetime.length; i++){
            if(i != _datetime.length-1) require(_datetime[i] < _datetime[i+1], "!good");
            vestingSize += 1;
            vesting[vestingSize] = Detail(_datetime[i], _ratio_d2[i]);
        }

        vestingLength = vestingSize;
    }

    /**
     * @dev Insert new buyers & purchases
     * @param _buyer Buyer address
     * @param _purchased Buyer purchase
     */
    function newBuyers(address[] calldata _buyer, uint128[] calldata _purchased) external onlyOwner {
        require(_buyer.length == _purchased.length, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            if(_buyer[i] == address(0) || _purchased[i] == 0) continue;

            Bought memory temp = invoice[_buyer[i]];

            if(temp.purchased == 0){
                buyers.push(_buyer[i]);
                invoice[_buyer[i]].buyerIndex = uint128(buyers.length - 1);
            }
            
            invoice[_buyer[i]].purchased = temp.purchased + _purchased[i];
            sold += _purchased[i];
        }
    }

    /**
     * @dev Replace buyers address
     * @param _oldBuyer Old address
     * @param _newBuyer New purchase
     */
    function replaceBuyers(address[] calldata _oldBuyer, address[] calldata _newBuyer) external onlyOwner {
        require(_oldBuyer.length == _newBuyer.length && buyers.length > 0, "!good");

        for(uint16 i=0; i<_oldBuyer.length; i++){
            Bought memory temp = invoice[_oldBuyer[i]];

            if( temp.purchased == 0 ||
                _oldBuyer[i] == address(0) ||
                _newBuyer[i] == address(0)
            ) continue;

            buyers[temp.buyerIndex] = _newBuyer[i];

            invoice[_newBuyer[i]] = temp;

            delete invoice[_oldBuyer[i]];
        }
    }

    /**
     * @dev Remove buyers
     * @param _buyer Buyer address
     */
    function removeBuyers(address[] calldata _buyer) external onlyOwner {
        require(buyers.length > 0, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            Bought memory temp = invoice[_buyer[i]];

            if(temp.purchased == 0 || _buyer[i] == address(0)) continue;

            sold -= temp.purchased;

            address addressToMove = buyers[buyers.length-1];
            
            buyers[temp.buyerIndex] = addressToMove;
            invoice[addressToMove].buyerIndex = temp.buyerIndex;

            buyers.pop();
            delete invoice[_buyer[i]];
        }
    }
    
    /**
     * @dev Replace buyers purchase
     * @param _buyer Buyer address
     * @param _newPurchased new purchased
     */
    function replacePurchases(address[] calldata _buyer, uint128[] calldata _newPurchased) external onlyOwner {
        require(_buyer.length == _newPurchased.length && buyers.length > 0, "!good");

        for(uint16 i=0; i<_buyer.length; i++){
            Bought memory temp = invoice[_buyer[i]];

            if( temp.purchased == 0 ||
                temp.completed_d2 > 0 ||
                _buyer[i] == address(0) ||
                _newPurchased[i] == 0) continue;
            
            sold = sold - temp.purchased + _newPurchased[i];
            invoice[_buyer[i]].purchased = _newPurchased[i];
        }
    }

    /**
     * @dev Update vestings datetime
     * @param _vestingRound Vesting round
     * @param _newDatetime new datetime in epoch
     */
    function updateVestingDatetimes(uint128[] calldata _vestingRound, uint128[] calldata _newDatetime) external onlyOwner {
        require(_vestingRound.length == _newDatetime.length, "!good");

        (uint128 round, ) = vestingRunning();
        uint128 vestingSize = vestingLength;

        for(uint128 i=0; i<_vestingRound.length; i++){
            if( _vestingRound[i] > vestingSize ||
                round >= _vestingRound[i]) continue;

            vesting[_vestingRound[i]].datetime = _newDatetime[i];
        }
    }

    /**
     * @dev Update vestings ratio
     * @param _vestingRound Vesting round
     * @param _newRatio_d2 New ratio in percent (decimal 2)
     */
    function updateVestingRatios(uint128[] calldata _vestingRound, uint128[] calldata _newRatio_d2) external onlyOwner {
        require(_vestingRound.length == _newRatio_d2.length, "!good");

        (uint128 round, ) = vestingRunning();
        uint128 vestingSize = vestingLength;

        for(uint128 i=0; i<_vestingRound.length; i++){
            if(_vestingRound[i] > vestingSize ||
                round >= _vestingRound[i]) continue;

            vesting[_vestingRound[i]].ratio_d2 = _newRatio_d2[i];
        }
    }

    /**
     * @dev Insert new vestings
     * @param _datetime Vesting datetime
     * @param _ratio_d2 Vesting ratio in percent (decimal 2)
     */
    function newVesting(
        uint128[] calldata _datetime,
        uint128[] calldata _ratio_d2
    ) external onlyOwner {
        _newVesting(_datetime, _ratio_d2);
    }

    /**
     * @dev Remove last vesting round
     */
    function removeLastVestingRound() external onlyOwner {
        uint128 vestingSizeTarget = vestingLength-1;

        delete vesting[vestingSizeTarget];

        vestingLength = vestingSizeTarget;
    }

    /**
     * @dev Emergency condition to withdraw token
     * @param _target Target address
     * @param _amount Amount to withdraw
     */
    function emergencyWithdraw(address _target, uint128 _amount) external onlyOwner {
        require(_target != address(0), "!good");
        
        uint128 contractBalance = uint128(IERC20(token).balanceOf(address(this)));
        if(_amount > contractBalance) _amount = contractBalance;

        TransferHelper.safeTransfer(address(token), _target, _amount);
    }

    /**
     * @dev Set token project
     * @param _token Token project address
     */
    function setToken(address _token) external onlyOwner {
        _setToken(_token);
    }
    
    /**
     * @dev Pause vesting activity
     */
    function togglePause() external onlyOwner {
        isPaused = !isPaused;
    }
    
    /**
     * @dev Transfer ownership
     * @param _newOwner New owner address
     */
    function transferOwnership(address _newOwner) external onlyOwner {
        require(_newOwner != address(0), "!good");
        owner = _newOwner;
    }
}

File 2 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 4 : TransferHelper.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes("approve(address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED");
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes("transfer(address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED");
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes("transferFrom(address,address,uint256)")));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED");
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }
}

File 4 of 4 : IFixedCreator.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.13;

interface IFixedCreator{
    event VestingCreated(address indexed vesting, uint index);
    
    function owner() external  view returns (address);
    
    function allVestingsLength() external view returns(uint);
    
    function allVestings(uint) external view returns(address);
    
    function createVesting(address, uint128[] calldata, uint128[] calldata) external returns (address);
    
    function transferOwnership(address) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint128","name":"_amount","type":"uint128"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyerLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint128[]","name":"_datetime","type":"uint128[]"},{"internalType":"uint128[]","name":"_ratio_d2","type":"uint128[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"invoice","outputs":[{"internalType":"uint128","name":"buyerIndex","type":"uint128"},{"internalType":"uint128","name":"purchased","type":"uint128"},{"internalType":"uint128","name":"completed_d2","type":"uint128"},{"internalType":"uint128","name":"claimed","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"},{"internalType":"uint128[]","name":"_purchased","type":"uint128[]"}],"name":"newBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_datetime","type":"uint128[]"},{"internalType":"uint128[]","name":"_ratio_d2","type":"uint128[]"}],"name":"newVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"}],"name":"removeBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLastVestingRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_oldBuyer","type":"address[]"},{"internalType":"address[]","name":"_newBuyer","type":"address[]"}],"name":"replaceBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_buyer","type":"address[]"},{"internalType":"uint128[]","name":"_newPurchased","type":"uint128[]"}],"name":"replacePurchases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sold","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_vestingRound","type":"uint128[]"},{"internalType":"uint128[]","name":"_newDatetime","type":"uint128[]"}],"name":"updateVestingDatetimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128[]","name":"_vestingRound","type":"uint128[]"},{"internalType":"uint128[]","name":"_newRatio_d2","type":"uint128[]"}],"name":"updateVestingRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"vesting","outputs":[{"internalType":"uint128","name":"datetime","type":"uint128"},{"internalType":"uint128","name":"ratio_d2","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingLength","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingRunning","outputs":[{"internalType":"uint128","name":"round","type":"uint128"},{"internalType":"uint128","name":"totalPercent_d2","type":"uint128"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c806398b3f7e2116100de578063d3b8800311610097578063f2aa821811610071578063f2aa8218146103ef578063f2fde38b14610402578063f33548b514610415578063fc0c546a1461041d57600080fd5b8063d3b88003146103b6578063e3083884146103c9578063f18fa08a146103dc57600080fd5b806398b3f7e21461033e578063a932c47a14610351578063b187bd2614610364578063b217f9d414610388578063c0ac58751461039b578063c4ae3168146103ae57600080fd5b8063545f1a2e11610130578063545f1a2e1461024657806379d973d914610259578063881644681461026c5780638da5cb5b146102a05780638f0164f6146102b357806396fe05821461032d57600080fd5b806302c7e7af1461017857806302d05d3f146101af578063084f1df5146101ee5780630be8639714610216578063144fa6d71461022b5780634451d89f1461023e575b600080fd5b60015461019290600160801b90046001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b6101d67f0000000000000000000000008550d5cc00d89fabb6f52cbdaeda948af9833d8e81565b6040516001600160a01b0390911681526020016101a6565b6101f6610430565b604080516001600160801b039384168152929091166020830152016101a6565b610229610224366004611eac565b61054b565b005b610229610239366004611f34565b6108b7565b6102296108ed565b610229610254366004611eac565b610c0d565b610229610267366004611eac565b610eb6565b6101f661027a366004611f6d565b6005602052600090815260409020546001600160801b0380821691600160801b90041682565b6000546101d6906001600160a01b031681565b6102fa6102c1366004611f34565b600460205260009081526040902080546001909101546001600160801b0380831692600160801b90819004821692808316929190041684565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080016101a6565b6003546040519081526020016101a6565b61022961034c366004611f88565b611072565b61022961035f366004611eac565b611344565b60005461037890600160a81b900460ff1681565b60405190151581526020016101a6565b600154610192906001600160801b031681565b6102296103a9366004611eac565b611628565b61022961165e565b6102296103c4366004611fca565b6116a9565b6102296103d7366004611ffd565b6117a6565b6102296103ea366004611eac565b611880565b6101d66103fd36600461207e565b611a31565b610229610410366004611f34565b611a5b565b610229611acd565b6002546101d6906001600160a01b031681565b6001805460009182916001600160801b03169082905b826001600160801b0316816001600160801b031611610544576001600160801b038082166000908152600560209081526040918290208251808401909352548084168352600160801b9004909216918101829052906104a590846120ad565b92504281600001516001600160801b0316111580156104ef5750600560006104ce8460016120ad565b6001600160801b039081168252602082019290925260400160002054164211155b806105205750836001600160801b0316826001600160801b0316148015610520575080516001600160801b03164210155b156105315781955082945050610544565b508061053c816120d8565b915050610446565b5050509091565b6000546001600160a01b0316331461057e5760405162461bcd60e51b8152600401610575906120fe565b60405180910390fd5b82811461059d5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b0576000858561ffff84168181106105c4576105c461213d565b90506020020160208101906105d99190611f34565b6001600160a01b0316148061061f575082828261ffff168181106105ff576105ff61213d565b90506020020160208101906106149190611f6d565b6001600160801b0316155b61089e5760006004600087878561ffff1681811061063f5761063f61213d565b90506020020160208101906106549190611f34565b6001600160a01b0316815260208082019290925260409081016000908120825160808101845281546001600160801b038082168352600160801b918290048116968301879052600190930154808416958301959095529093041660608301529092500361078e57600386868461ffff168181106106d3576106d361213d565b90506020020160208101906106e89190611f34565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790556003546107279190612153565b6004600088888661ffff168181106107415761074161213d565b90506020020160208101906107569190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b0319166001600160801b03929092169190911790555b83838361ffff168181106107a4576107a461213d565b90506020020160208101906107b99190611f6d565b81602001516107c891906120ad565b6004600088888661ffff168181106107e2576107e261213d565b90506020020160208101906107f79190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b03928316600160801b029216919091179055838361ffff84168181106108415761084161213d565b90506020020160208101906108569190611f6d565b60018054601090610878908490600160801b90046001600160801b03166120ad565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550505b806108a88161216a565b9150506105a0565b5050505050565b6000546001600160a01b031633146108e15760405162461bcd60e51b8152600401610575906120fe565b6108ea81611b3e565b50565b6000806108f8610430565b336000908152600460209081526040808320815160808101835281546001600160801b038082168352600160801b918290048116958301959095526001909201548085169382019390935291049091166060820152905492945090925090600160a81b900460ff1615801561097657506000836001600160801b0316115b801561098c57506002546001600160a01b031615155b6109c35760405162461bcd60e51b8152602060048201526008602482015267085cdd185c9d195960c21b6044820152606401610575565b600081602001516001600160801b031611610a095760405162461bcd60e51b815260206004820152600660248201526510b13abcb2b960d11b6044820152606401610575565b816001600160801b031681604001516001600160801b031610610a585760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610575565b600081604001516001600160801b0316600003610a9357612710838360200151610a829190612181565b610a8c91906121b0565b9050610abe565b60608201516040830151610aa78583612181565b610ab191906121b0565b610abb91906121e4565b90505b6002546040516370a0823160e01b81523060048201526001600160801b038316916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b33919061220c565b10158015610b4a57506000816001600160801b0316115b610b855760405162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b6044820152606401610575565b33600090815260046020526040902060010180546001600160801b0319166001600160801b0385161790556060820151610bc09082906120ad565b33600081815260046020526040902060010180546001600160801b03938416600160801b02908416179055600254610c07926001600160a01b039190911691908416611b60565b50505050565b6000546001600160a01b03163314610c375760405162461bcd60e51b8152600401610575906120fe565b8281148015610c47575060035415155b610c635760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b05760006004600087878561ffff16818110610c8e57610c8e61213d565b9050602002016020810190610ca39190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b9182900481169583018690526001909301548084169483019490945290920416606082015291501580610d1b5750600081604001516001600160801b0316115b80610d5957506000868661ffff8516818110610d3957610d3961213d565b9050602002016020810190610d4e9190611f34565b6001600160a01b0316145b80610d95575083838361ffff16818110610d7557610d7561213d565b9050602002016020810190610d8a9190611f6d565b6001600160801b0316155b15610da05750610ea4565b83838361ffff16818110610db657610db661213d565b9050602002016020810190610dcb9190611f6d565b6020820151600154610ded9190600160801b90046001600160801b03166121e4565b610df791906120ad565b600180546001600160801b03928316600160801b029216919091179055838361ffff8416818110610e2a57610e2a61213d565b9050602002016020810190610e3f9190611f6d565b6004600088888661ffff16818110610e5957610e5961213d565b9050602002016020810190610e6e9190611f34565b6001600160a01b03168152602081019190915260400160002080546001600160801b03928316600160801b029216919091179055505b80610eae8161216a565b915050610c66565b6000546001600160a01b03163314610ee05760405162461bcd60e51b8152600401610575906120fe565b828114610eff5760405162461bcd60e51b81526004016105759061211e565b6000610f09610430565b506001549091506001600160801b031660005b6001600160801b03811686111561106957816001600160801b03168787836001600160801b0316818110610f5257610f5261213d565b9050602002016020810190610f679190611f6d565b6001600160801b03161180610fbd57508686826001600160801b0316818110610f9257610f9261213d565b9050602002016020810190610fa79190611f6d565b6001600160801b0316836001600160801b031610155b611057578484826001600160801b0316818110610fdc57610fdc61213d565b9050602002016020810190610ff19190611f6d565b600560008989856001600160801b03168181106110105761101061213d565b90506020020160208101906110259190611f6d565b6001600160801b039081168252602082019290925260400160002080546001600160801b031916929091169190911790555b80611061816120d8565b915050610f1c565b50505050505050565b6000546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610575906120fe565b6003546110bb5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff811682111561133f5760006004600085858561ffff168181106110e6576110e661213d565b90506020020160208101906110fb9190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b918290048116958301869052600190930154808416948301949094529092041660608201529150158061119957506000848461ffff85168181106111795761117961213d565b905060200201602081019061118e9190611f34565b6001600160a01b0316145b156111a4575061132d565b6020810151600180546010906111cb908490600160801b90046001600160801b03166121e4565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506000600360016003805490506112059190612153565b815481106112155761121561213d565b6000918252602090912001548251600380546001600160a01b039093169350839290916001600160801b03169081106112505761125061213d565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905584519284168252600490526040902080546001600160801b0319166001600160801b0390921691909117905560038054806112b5576112b5612225565b600082815260208120820160001990810180546001600160a01b0319169055909101909155600490868661ffff87168181106112f3576112f361213d565b90506020020160208101906113089190611f34565b6001600160a01b03168152602081019190915260400160009081208181556001015550505b806113378161216a565b9150506110be565b505050565b6000546001600160a01b0316331461136e5760405162461bcd60e51b8152600401610575906120fe565b828114801561137e575060035415155b61139a5760405162461bcd60e51b81526004016105759061211e565b60005b61ffff81168411156108b05760006004600087878561ffff168181106113c5576113c561213d565b90506020020160208101906113da9190611f34565b6001600160a01b031681526020808201929092526040908101600020815160808101835281546001600160801b038082168352600160801b918290048116958301869052600190930154808416948301949094529092041660608201529150158061147857506000868661ffff85168181106114585761145861213d565b905060200201602081019061146d9190611f34565b6001600160a01b0316145b806114b657506000848461ffff85168181106114965761149661213d565b90506020020160208101906114ab9190611f34565b6001600160a01b0316145b156114c15750611616565b83838361ffff168181106114d7576114d761213d565b90506020020160208101906114ec9190611f34565b600382600001516001600160801b03168154811061150c5761150c61213d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806004600086868661ffff168181106115555761155561213d565b905060200201602081019061156a9190611f34565b6001600160a01b03168152602080820192909252604090810160009081208451938501516001600160801b03948516600160801b9186168202178255928501516060909501519484169490931690910292909217600190910155600490878761ffff86168181106115dd576115dd61213d565b90506020020160208101906115f29190611f34565b6001600160a01b031681526020810191909152604001600090812081815560010155505b806116208161216a565b91505061139d565b6000546001600160a01b031633146116525760405162461bcd60e51b8152600401610575906120fe565b610c0784848484611c74565b6000546001600160a01b031633146116885760405162461bcd60e51b8152600401610575906120fe565b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6000546001600160a01b031633146116d35760405162461bcd60e51b8152600401610575906120fe565b6001600160a01b0382166116f95760405162461bcd60e51b81526004016105759061211e565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611742573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611766919061220c565b9050806001600160801b0316826001600160801b03161115611786578091505b60025461133f906001600160a01b0316846001600160801b038516611b60565b600054600160a01b900460ff16156117ee5760405162461bcd60e51b815260206004820152600b60248201526a125b9a5d1a585b1a5e995960aa1b6044820152606401610575565b336001600160a01b037f0000000000000000000000008550d5cc00d89fabb6f52cbdaeda948af9833d8e16146118515760405162461bcd60e51b815260206004820152600860248201526710b1b932b0ba37b960c11b6044820152606401610575565b61185a85611b3e565b61186684848484611c74565b50506000805460ff60a01b1916600160a01b179055505050565b6000546001600160a01b031633146118aa5760405162461bcd60e51b8152600401610575906120fe565b8281146118c95760405162461bcd60e51b81526004016105759061211e565b60006118d3610430565b506001549091506001600160801b031660005b6001600160801b03811686111561106957816001600160801b03168787836001600160801b031681811061191c5761191c61213d565b90506020020160208101906119319190611f6d565b6001600160801b0316118061198757508686826001600160801b031681811061195c5761195c61213d565b90506020020160208101906119719190611f6d565b6001600160801b0316836001600160801b031610155b611a1f578484826001600160801b03168181106119a6576119a661213d565b90506020020160208101906119bb9190611f6d565b600560008989856001600160801b03168181106119da576119da61213d565b90506020020160208101906119ef9190611f6d565b6001600160801b039081168252602082019290925260400160002080548216600160801b93909216929092021790555b80611a29816120d8565b9150506118e6565b60038181548110611a4157600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611a855760405162461bcd60e51b8152600401610575906120fe565b6001600160a01b038116611aab5760405162461bcd60e51b81526004016105759061211e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611af75760405162461bcd60e51b8152600401610575906120fe565b60018054600091611b10916001600160801b03166121e4565b6001600160801b0316600081815260056020526040812055600180546001600160801b031916909117905550565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611bbc919061223b565b6000604051808303816000865af19150503d8060008114611bf9576040519150601f19603f3d011682016040523d82523d6000602084013e611bfe565b606091505b5091509150818015611c28575080511580611c28575080806020019051810190611c289190612276565b6108b05760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610575565b828114611c935760405162461bcd60e51b81526004016105759061211e565b6001546001600160801b031660005b6001600160801b038116851115611e3957611cbe600186612153565b816001600160801b031614611d66578585611cda8360016120ad565b6001600160801b0316818110611cf257611cf261213d565b9050602002016020810190611d079190611f6d565b6001600160801b03168686836001600160801b0316818110611d2b57611d2b61213d565b9050602002016020810190611d409190611f6d565b6001600160801b031610611d665760405162461bcd60e51b81526004016105759061211e565b611d716001836120ad565b915060405180604001604052808787846001600160801b0316818110611d9957611d9961213d565b9050602002016020810190611dae9190611f6d565b6001600160801b031681526020018585846001600160801b0316818110611dd757611dd761213d565b9050602002016020810190611dec9190611f6d565b6001600160801b039081169091528381166000908152600560209081526040909120835193909101518216600160801b029290911691909117905580611e31816120d8565b915050611ca2565b50600180546001600160801b0319166001600160801b039290921691909117905550505050565b60008083601f840112611e7257600080fd5b50813567ffffffffffffffff811115611e8a57600080fd5b6020830191508360208260051b8501011115611ea557600080fd5b9250929050565b60008060008060408587031215611ec257600080fd5b843567ffffffffffffffff80821115611eda57600080fd5b611ee688838901611e60565b90965094506020870135915080821115611eff57600080fd5b50611f0c87828801611e60565b95989497509550505050565b80356001600160a01b0381168114611f2f57600080fd5b919050565b600060208284031215611f4657600080fd5b611f4f82611f18565b9392505050565b80356001600160801b0381168114611f2f57600080fd5b600060208284031215611f7f57600080fd5b611f4f82611f56565b60008060208385031215611f9b57600080fd5b823567ffffffffffffffff811115611fb257600080fd5b611fbe85828601611e60565b90969095509350505050565b60008060408385031215611fdd57600080fd5b611fe683611f18565b9150611ff460208401611f56565b90509250929050565b60008060008060006060868803121561201557600080fd5b61201e86611f18565b9450602086013567ffffffffffffffff8082111561203b57600080fd5b61204789838a01611e60565b9096509450604088013591508082111561206057600080fd5b5061206d88828901611e60565b969995985093965092949392505050565b60006020828403121561209057600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60006001600160801b038083168185168083038211156120cf576120cf612097565b01949350505050565b60006001600160801b038083168181036120f4576120f4612097565b6001019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b6020808252600590820152640859dbdbd960da1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008282101561216557612165612097565b500390565b600061ffff8083168181036120f4576120f4612097565b60006001600160801b03808316818516818304811182151516156121a7576121a7612097565b02949350505050565b60006001600160801b03808416806121d857634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b60006001600160801b038381169083168181101561220457612204612097565b039392505050565b60006020828403121561221e57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b6000825160005b8181101561225c5760208186018101518583015201612242565b8181111561226b576000828501525b509190910192915050565b60006020828403121561228857600080fd5b81518015158114611f4f57600080fdfea264697066735822122061bbe1733724d98498cd2149be97dbabacd758907a2f43d369c281c17f265d5564736f6c634300080d0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.