ETH Price: $2,138.54 (+0.29%)

Contract

0x8e6795E3fDb5FF8A686D5bCdb41d7F0A7F4BD40b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Release246035962026-03-07 5:49:5913 days ago1772862599IN
0x8e6795E3...A7F4BD40b
0 ETH0.000161642.03191402
Release243963442026-02-06 7:38:4742 days ago1770363527IN
0x8e6795E3...A7F4BD40b
0 ETH0.000181552.28226391
Release241661192026-01-05 4:37:5974 days ago1767587879IN
0x8e6795E3...A7F4BD40b
0 ETH0.00016472.07039506
Release239766422025-12-09 17:15:59100 days ago1765300559IN
0x8e6795E3...A7F4BD40b
0 ETH0.000216512.72166807
Release237667302025-11-10 5:19:59130 days ago1762751999IN
0x8e6795E3...A7F4BD40b
0 ETH0.000166062.087556
Release235450232025-10-10 4:43:47161 days ago1760071427IN
0x8e6795E3...A7F4BD40b
0 ETH0.000127161.59855136
Release233375662025-09-11 4:54:23190 days ago1757566463IN
0x8e6795E3...A7F4BD40b
0 ETH0.000089641.1268732
Release231801012025-08-20 5:08:47212 days ago1755666527IN
0x8e6795E3...A7F4BD40b
0 ETH0.000174832.19773684
Release230032872025-07-26 12:21:11237 days ago1753532471IN
0x8e6795E3...A7F4BD40b
0 ETH0.000178262.2408197
Release226728222025-06-10 7:58:47283 days ago1749542327IN
0x8e6795E3...A7F4BD40b
0 ETH0.00014121.77503778
Release224286922025-05-07 2:01:59317 days ago1746583319IN
0x8e6795E3...A7F4BD40b
0 ETH0.000068310.85878879
Release224153102025-05-05 4:59:59319 days ago1746421199IN
0x8e6795E3...A7F4BD40b
0 ETH0.000052510.76828979
Release222153062025-04-07 6:41:59347 days ago1744008119IN
0x8e6795E3...A7F4BD40b
0 ETH0.0023121729.06492992
Release220237572025-03-11 12:54:59373 days ago1741697699IN
0x8e6795E3...A7F4BD40b
0 ETH0.000130031.63453477
Release218627452025-02-17 1:11:23396 days ago1739754683IN
0x8e6795E3...A7F4BD40b
0 ETH0.000105011.3200515
Release216875982025-01-23 13:50:23420 days ago1737640223IN
0x8e6795E3...A7F4BD40b
0 ETH0.0015765619.81802733
Release213711852024-12-10 9:23:11465 days ago1733822591IN
0x8e6795E3...A7F4BD40b
0 ETH0.0013658417.16919089
Release211347002024-11-07 8:51:59498 days ago1730969519IN
0x8e6795E3...A7F4BD40b
0 ETH0.000667228.38727039
Release206975182024-09-07 8:27:11559 days ago1725697631IN
0x8e6795E3...A7F4BD40b
0 ETH0.000261753.2904059
Release204677412024-08-06 6:29:11591 days ago1722925751IN
0x8e6795E3...A7F4BD40b
0 ETH0.000311163.91144413
Release202601022024-07-08 6:47:47620 days ago1720421267IN
0x8e6795E3...A7F4BD40b
0 ETH0.000162232.03940043
Release200617262024-06-10 13:27:47647 days ago1718026067IN
0x8e6795E3...A7F4BD40b
0 ETH0.0008180510.2833259
Release199365312024-05-24 1:42:59665 days ago1716514979IN
0x8e6795E3...A7F4BD40b
0 ETH0.000519816.53423902
Release194874242024-03-22 3:15:23728 days ago1711077323IN
0x8e6795E3...A7F4BD40b
0 ETH0.0016595320.86104012
Release191895762024-02-09 9:07:11770 days ago1707469631IN
0x8e6795E3...A7F4BD40b
0 ETH0.0045973647.56618609
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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

Contract Name:
TokenVestingLock

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

/**
 * @title TokenVestingLock
 * This contract allows HanChain payments to be split among a group of accounts.
 * The sender does not need to be aware that the HanChain tokens will be split in this way,
 * since it is handled transparently by the contract.
 * Additionally, this contract handles the vesting of HanChain tokens for a given payee and
 * release the tokens to the payee following a given vesting schedule.

 * The split can be in equal parts or in any other arbitrary proportion.
 * The way this is specified is by assigning each account to a number of shares.
 * Of all the HanChain tokens that this contract receives, each account will then be able
 * to claim an amount proportional to the percentage of total shares they were assigned.
 * The distribution of shares is set at the time of contract deployment and can't be updated thereafter.
 * Additionally, any token transferred to this contract will follow the vesting schedule as if they were locked from the beginning.
 * Consequently, if the vesting has already started, any amount of tokens sent to this contract will (at least partly)
 * be immediately releasable.

 * 'TokenVestingLock' follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} function.
*/

contract TokenVestingLock {
    IERC20 public immutable token;

    // Payee struct represents a participant who is eligible to receive tokens from a smart contract.
    struct Payee {
        address account;  // The address of the payee's Ethereum account
        uint256 shares;  // The corresponding list of shares (in percentage) that each payee is entitled to receive.
        uint256 tokensPerRoundPerPayee;  // The number of tokens the payee will receive per round of token distribution
        uint256 releaseTokens;  // The total number of tokens the payee is eligible to receive over the course of the contract
    }

    uint256 public immutable durationSeconds;  // The duration of the vesting period in seconds.
    uint256 public immutable intervalSeconds;  // The time interval between token releases in seconds.
    uint256 public immutable totalReleaseTokens;  // The total number of tokens to be released over the vesting period.
    uint256 public immutable startTime;  // The timestamp when the vesting period starts.
    uint256 public immutable totalRounds;  // The total number of token release rounds.
    uint256 public immutable totalAccounts;  // The total number of payees.
    uint256 public totalReleasedTokens;  // The total number of tokens already released.

    Payee[] public payees;  // An array of Payee structs representing the payees.
    mapping(address => uint256) public releasedAmount;  // A mapping of released token amounts for each payee address.


    /** Creates a new TokenVestingLock contract instance that locks the specified ERC20 token for a certain period of time,
     * and releases it in a linear fashion to a list of payees.
     * Set the payee, start timestamp and vesting duration of the 'TokenVestingLock' wallet.
     *
     * Creates an instance of TokenVestingLock where each account in accounts is assigned the number of shares at
     * the matching position in the shares array.
     * All addresses in accounts must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in accounts
     *
     * @param _startDelay The delay in seconds before vesting starts.
     * @param _accounts The list of addresses of the payees.
     */
    
    constructor(IERC20 _token, uint256 _startDelay, uint256 _durationSeconds, uint256 _intervalSeconds, uint256 _totalReleaseTokens, address[] memory _accounts, uint256[] memory _shares) {
        require(_accounts.length == _shares.length, "TokenVestingLock: accounts and shares length mismatch");
        require(_accounts.length > 0, "TokenVestingLock: no payees");

        for (uint256 i = 0; i < _accounts.length - 1; i++) {
            for (uint256 j = i + 1; j < _accounts.length; j++) {
                require(_accounts[i] != _accounts[j], "TokenVestingLock: duplicate addresses");
            }
        }

        uint256 totalShares = 0;
        for (uint256 i = 0; i < _shares.length; i++) {
            totalShares += _shares[i];
        }
        require(totalShares == 100, "Shares must sum up to 100");

        token = _token;
        durationSeconds = _durationSeconds;
        startTime = block.timestamp + _startDelay;
        intervalSeconds = _intervalSeconds;
        totalReleaseTokens = _totalReleaseTokens;
        totalRounds = durationSeconds/intervalSeconds;
        totalAccounts = _accounts.length;
        require(durationSeconds % intervalSeconds == 0, "error durationSeconds value");        
        for (uint256 i = 0; i < _accounts.length; i++) {
            uint256 tokensPerRoundPerBeneficiary = totalReleaseTokens * _shares[i] * intervalSeconds / durationSeconds / 100;
            uint256 releaseTokens = tokensPerRoundPerBeneficiary * totalRounds;
            payees.push(Payee(_accounts[i], _shares[i], tokensPerRoundPerBeneficiary, releaseTokens));
        }

    }

    /**
     * Releases tokens to payees based on the vesting schedule.
     * Tokens are released for each time interval as defined by intervalSeconds until the vesting period ends.
     * Tokens that have already been released will not be released again.
     * If the vesting period has not yet started, the function will revert.
     *
     * Anyone can execute the 'release' function.
     */    

    function release() public {
        uint256 currentTime = block.timestamp;
        require(currentTime >= startTime, "Vesting not started yet");

        uint256 numIntervals = (currentTime - startTime) / intervalSeconds;
        uint256 totalVestedTokens = (totalReleaseTokens * numIntervals) / (durationSeconds / intervalSeconds);
        if (totalVestedTokens > totalReleaseTokens) {
            totalVestedTokens = totalReleaseTokens;
        }

        for (uint256 i = 0; i < payees.length; i++) {
            uint256 payeeShare = (payees[i].shares * totalVestedTokens) / 100;
            uint256 releasable = payeeShare - releasedAmount[payees[i].account];
            require(releasable <= token.balanceOf(address(this)), "The available balance for release is insufficient");
            releasedAmount[payees[i].account] += releasable;
            totalReleasedTokens += releasable;
            token.transfer(payees[i].account, releasable);
            emit released(payees[i].account, releasable);
        }
    }

    /**
     * Returns the Payee struct associated with the specified account.
     * @param _account The address of the payee account to retrieve.
     */
    function getPayee(address _account) public view returns (Payee memory) {
        for (uint256 i = 0; i < payees.length; i++) {
            if (payees[i].account == _account) {
                return payees[i];
            }
        }
        revert("missing account");
    }

    /** Returns the number of rounds released.
     * A round is considered released if the tokens for that round have been fully released.
     * If the payee has not received any tokens yet, returns 0.
     * Otherwise, calculates the number of rounds released based on the tokens already released and the tokens that the payee receives per round.
     */
    function releasedRounds() public view returns (uint256) {
        address account = payees[0].account;
        if(releasedAmount[account] == 0) {
            return 0;
        } else {
            return releasedAmount[account] / payees[0].tokensPerRoundPerPayee;
        }
    }
    
    /** Returns the number of rounds remaining until vesting is complete.
     * If the vesting has not yet started, returns the total number of rounds.
     * If vesting has already completed, returns 0.
     * Otherwise, calculates the number of rounds remaining based on the current time and the vesting duration.
     */
    function remainingRounds() public view returns (uint256) {
        if(startTime > block.timestamp) {
            return totalRounds;
        } else {
            if (block.timestamp >= startTime + durationSeconds) {
                return 0;
            } else {
                return 1 + (startTime + durationSeconds - block.timestamp) / intervalSeconds;
            }
        }
    }

    /**
     * Returns the number of tokens that are yet to be released.
     * Calculates the total number of rounds remaining based on the difference between totalRounds and the number of rounds already released,
     * and then calculates the total number of tokens remaining based on the tokensPerRound for each payee and the number of remaining rounds.
     */
    function remainingTokens() public view returns (uint256) {
        uint256 tokensPerRound = 0;
        uint256 remaining = totalRounds - releasedRounds();
        for (uint256 i = 0; i < payees.length; i++) {
            tokensPerRound += payees[i].tokensPerRoundPerPayee;
        }
        return tokensPerRound * remaining;
    }

    event released(address indexed account, uint256 amount);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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);
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_startDelay","type":"uint256"},{"internalType":"uint256","name":"_durationSeconds","type":"uint256"},{"internalType":"uint256","name":"_intervalSeconds","type":"uint256"},{"internalType":"uint256","name":"_totalReleaseTokens","type":"uint256"},{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_shares","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"released","type":"event"},{"inputs":[],"name":"durationSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getPayee","outputs":[{"components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensPerRoundPerPayee","type":"uint256"},{"internalType":"uint256","name":"releaseTokens","type":"uint256"}],"internalType":"struct TokenVestingLock.Payee","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intervalSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payees","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"tokensPerRoundPerPayee","type":"uint256"},{"internalType":"uint256","name":"releaseTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"releasedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releasedRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAccounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleaseTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleasedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

0x6101606040523480156200001257600080fd5b50604051620015a9380380620015a98339810160408190526200003591620005b7565b8051825114620000b25760405162461bcd60e51b815260206004820152603560248201527f546f6b656e56657374696e674c6f636b3a206163636f756e747320616e64207360448201527f6861726573206c656e677468206d69736d61746368000000000000000000000060648201526084015b60405180910390fd5b6000825111620001055760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e674c6f636b3a206e6f2070617965657300000000006044820152606401620000a9565b60005b60018351620001189190620006de565b811015620002105760006200012f826001620006fa565b90505b8351811015620001fa5783818151811062000151576200015162000710565b60200260200101516001600160a01b031684838151811062000177576200017762000710565b60200260200101516001600160a01b031603620001e55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e56657374696e674c6f636b3a206475706c69636174652061646472604482015264657373657360d81b6064820152608401620000a9565b80620001f18162000726565b91505062000132565b5080620002078162000726565b91505062000108565b506000805b8251811015620002605782818151811062000234576200023462000710565b602002602001015182620002499190620006fa565b915080620002578162000726565b91505062000215565b5080606414620002b35760405162461bcd60e51b815260206004820152601960248201527f536861726573206d7573742073756d20757020746f20313030000000000000006044820152606401620000a9565b6001600160a01b03881660805260a0869052620002d18742620006fa565b6101005260c085905260e084905260a051620002ef90869062000758565b6101205282516101405260c05160a0516200030b91906200076f565b156200035a5760405162461bcd60e51b815260206004820152601b60248201527f6572726f72206475726174696f6e5365636f6e64732076616c756500000000006044820152606401620000a9565b60005b8351811015620004ad576000606460a05160c05186858151811062000386576200038662000710565b602002602001015160e0516200039d919062000786565b620003a9919062000786565b620003b5919062000758565b620003c1919062000758565b905060006101205182620003d6919062000786565b905060016040518060800160405280888681518110620003fa57620003fa62000710565b60200260200101516001600160a01b0316815260200187868151811062000425576200042562000710565b602090810291909101810151825281810195909552604090810193909352815460018082018455600093845292859020825160049092020180546001600160a01b0319166001600160a01b0390921691909117815593810151918401919091559081015160028301556060015160039091015580620004a48162000726565b9150506200035d565b505050505050505050620007a0565b6001600160a01b0381168114620004d257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620005165762000516620004d5565b604052919050565b60006001600160401b038211156200053a576200053a620004d5565b5060051b60200190565b600082601f8301126200055657600080fd5b815160206200056f62000569836200051e565b620004eb565b82815260059290921b840181019181810190868411156200058f57600080fd5b8286015b84811015620005ac578051835291830191830162000593565b509695505050505050565b600080600080600080600060e0888a031215620005d357600080fd5b8751620005e081620004bc565b60208981015160408b015160608c015160808d015160a08e0151959c50929a5090985096509450906001600160401b03808211156200061e57600080fd5b818b0191508b601f8301126200063357600080fd5b81516200064462000569826200051e565b81815260059190911b8301840190848101908e8311156200066457600080fd5b938501935b828510156200068f5784516200067f81620004bc565b8252938501939085019062000669565b60c08e01519097509450505080831115620006a957600080fd5b5050620006b98a828b0162000544565b91505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b81810381811115620006f457620006f4620006c8565b92915050565b80820180821115620006f457620006f4620006c8565b634e487b7160e01b600052603260045260246000fd5b6000600182016200073b576200073b620006c8565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826200076a576200076a62000742565b500490565b60008262000781576200078162000742565b500690565b8082028115828204841417620006f457620006f4620006c8565b60805160a05160c05160e051610100516101205161014051610d30620008796000396000610132015260008181610215015281816108fb0152610a150152600081816101bd01528181610354015281816103ef015281816108d30152818161094301526109bb01526000818161015901528181610472015281816104a401526104cd0152600081816101e4015281816103cb01528181610427015261097501526000818161023c0152818161044801528181610922015261099a0152600081816102ca0152818161059f01526106ed0152610d306000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a56829911610097578063bf58390311610066578063bf5839031461026e578063eb9983dd14610276578063fc0c546a146102c5578063fd4fa8241461030457600080fd5b80638a568299146102105780639acba2af146102375780639da7aafe1461025e578063a7e22a3e1461026657600080fd5b806363037b0c116100d357806363037b0c1461017b57806378e97925146101b85780637d1cd04f146101df57806386d1a69f1461020657600080fd5b80631cf1bb72146100fa57806358451f971461012d5780635c25913a14610154575b600080fd5b61011a610108366004610bcc565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61018e610189366004610bfc565b61030d565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610124565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61020e610351565b005b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a61082f565b61011a6108ce565b61011a610a03565b610289610284366004610bcc565b610a9e565b604051610124919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610124565b61011a60005481565b6001818154811061031d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b427f00000000000000000000000000000000000000000000000000000000000000008110156103c75760405162461bcd60e51b815260206004820152601760248201527f56657374696e67206e6f7420737461727465642079657400000000000000000060448201526064015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006104147f000000000000000000000000000000000000000000000000000000000000000084610c2b565b61041e9190610c44565b9050600061046c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610c44565b610496837f0000000000000000000000000000000000000000000000000000000000000000610c66565b6104a09190610c44565b90507f00000000000000000000000000000000000000000000000000000000000000008111156104ed57507f00000000000000000000000000000000000000000000000000000000000000005b60005b6001548110156108295760006064836001848154811061051257610512610c7d565b90600052602060002090600402016001015461052e9190610c66565b6105389190610c44565b90506000600260006001858154811061055357610553610c7d565b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020546105879083610c2b565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106129190610c93565b81111561067b5760405162461bcd60e51b815260206004820152603160248201527f54686520617661696c61626c652062616c616e636520666f722072656c65617360448201527019481a5cc81a5b9cdd59999a58da595b9d607a1b60648201526084016103be565b80600260006001868154811061069357610693610c7d565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906106cc908490610cac565b92505081905550806000808282546106e49190610cac565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6001858154811061072d5761072d610c7d565b600091825260209091206004918202015460405160e084901b6001600160e01b03191681526001600160a01b0390911691810191909152602481018490526044016020604051808303816000875af115801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610cbf565b50600183815481106107c5576107c5610c7d565b6000918252602091829020600490910201546040518381526001600160a01b03909116917fcfe8307079d74ae41ebc7046b137d90014152d4d9dc6ea6b93122d14aa400d14910160405180910390a25050808061082190610ce1565b9150506104f0565b50505050565b600080600160008154811061084657610846610c7d565b600091825260208083206004909202909101546001600160a01b031680835260029091526040822054909250900361088057600091505090565b600160008154811061089457610894610c7d565b6000918252602080832060026004909302018201546001600160a01b03851684529190526040909120546108c89190610c44565b91505090565b6000427f0000000000000000000000000000000000000000000000000000000000000000111561091d57507f000000000000000000000000000000000000000000000000000000000000000090565b6109677f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610cac565b42106109735750600090565b7f0000000000000000000000000000000000000000000000000000000000000000426109df7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610cac565b6109e99190610c2b565b6109f39190610c44565b6109fe906001610cac565b905090565b60008080610a0f61082f565b610a39907f0000000000000000000000000000000000000000000000000000000000000000610c2b565b905060005b600154811015610a8c5760018181548110610a5b57610a5b610c7d565b90600052602060002090600402016002015483610a789190610cac565b925080610a8481610ce1565b915050610a3e565b50610a978183610c66565b9250505090565b610ad2604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60005b600154811015610b9157826001600160a01b031660018281548110610afc57610afc610c7d565b60009182526020909120600490910201546001600160a01b031603610b7f5760018181548110610b2e57610b2e610c7d565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529392505050565b80610b8981610ce1565b915050610ad5565b5060405162461bcd60e51b815260206004820152600f60248201526e1b5a5cdcda5b99c81858d8dbdd5b9d608a1b60448201526064016103be565b600060208284031215610bde57600080fd5b81356001600160a01b0381168114610bf557600080fd5b9392505050565b600060208284031215610c0e57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e610c15565b92915050565b600082610c6157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e610c15565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ca557600080fd5b5051919050565b80820180821115610c3e57610c3e610c15565b600060208284031215610cd157600080fd5b81518015158114610bf557600080fd5b600060018201610cf357610cf3610c15565b506001019056fea2646970667358221220c9c4e3f6a2196d43b12dfdaf4cc88afaafa47790643cb6642669d4c9f90278a064736f6c634300081200330000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f00000000000000000000000000000000000000000000000000000000002819a00000000000000000000000000000000000000000000000000000000012cc030000000000000000000000000000000000000000000000000000000000002819a00000000000000000000000000000000000000000003d3cdb1823bbb17a061eb300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003811f5674abbc216ad29a1edcdd0b05172a9f12300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a56829911610097578063bf58390311610066578063bf5839031461026e578063eb9983dd14610276578063fc0c546a146102c5578063fd4fa8241461030457600080fd5b80638a568299146102105780639acba2af146102375780639da7aafe1461025e578063a7e22a3e1461026657600080fd5b806363037b0c116100d357806363037b0c1461017b57806378e97925146101b85780637d1cd04f146101df57806386d1a69f1461020657600080fd5b80631cf1bb72146100fa57806358451f971461012d5780635c25913a14610154575b600080fd5b61011a610108366004610bcc565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61011a7f000000000000000000000000000000000000000000000000000000000000000181565b61011a7f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb381565b61018e610189366004610bfc565b61030d565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610124565b61011a7f00000000000000000000000000000000000000000000000000000000652086a781565b61011a7f00000000000000000000000000000000000000000000000000000000002819a081565b61020e610351565b005b61011a7f000000000000000000000000000000000000000000000000000000000000007881565b61011a7f0000000000000000000000000000000000000000000000000000000012cc030081565b61011a61082f565b61011a6108ce565b61011a610a03565b610289610284366004610bcc565b610a9e565b604051610124919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102ec7f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f81565b6040516001600160a01b039091168152602001610124565b61011a60005481565b6001818154811061031d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b427f00000000000000000000000000000000000000000000000000000000652086a78110156103c75760405162461bcd60e51b815260206004820152601760248201527f56657374696e67206e6f7420737461727465642079657400000000000000000060448201526064015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000002819a06104147f00000000000000000000000000000000000000000000000000000000652086a784610c2b565b61041e9190610c44565b9050600061046c7f00000000000000000000000000000000000000000000000000000000002819a07f0000000000000000000000000000000000000000000000000000000012cc0300610c44565b610496837f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb3610c66565b6104a09190610c44565b90507f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb38111156104ed57507f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb35b60005b6001548110156108295760006064836001848154811061051257610512610c7d565b90600052602060002090600402016001015461052e9190610c66565b6105389190610c44565b90506000600260006001858154811061055357610553610c7d565b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020546105879083610c2b565b6040516370a0823160e01b81523060048201529091507f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f6001600160a01b0316906370a0823190602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106129190610c93565b81111561067b5760405162461bcd60e51b815260206004820152603160248201527f54686520617661696c61626c652062616c616e636520666f722072656c65617360448201527019481a5cc81a5b9cdd59999a58da595b9d607a1b60648201526084016103be565b80600260006001868154811061069357610693610c7d565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906106cc908490610cac565b92505081905550806000808282546106e49190610cac565b925050819055507f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f6001600160a01b031663a9059cbb6001858154811061072d5761072d610c7d565b600091825260209091206004918202015460405160e084901b6001600160e01b03191681526001600160a01b0390911691810191909152602481018490526044016020604051808303816000875af115801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610cbf565b50600183815481106107c5576107c5610c7d565b6000918252602091829020600490910201546040518381526001600160a01b03909116917fcfe8307079d74ae41ebc7046b137d90014152d4d9dc6ea6b93122d14aa400d14910160405180910390a25050808061082190610ce1565b9150506104f0565b50505050565b600080600160008154811061084657610846610c7d565b600091825260208083206004909202909101546001600160a01b031680835260029091526040822054909250900361088057600091505090565b600160008154811061089457610894610c7d565b6000918252602080832060026004909302018201546001600160a01b03851684529190526040909120546108c89190610c44565b91505090565b6000427f00000000000000000000000000000000000000000000000000000000652086a7111561091d57507f000000000000000000000000000000000000000000000000000000000000007890565b6109677f0000000000000000000000000000000000000000000000000000000012cc03007f00000000000000000000000000000000000000000000000000000000652086a7610cac565b42106109735750600090565b7f00000000000000000000000000000000000000000000000000000000002819a0426109df7f0000000000000000000000000000000000000000000000000000000012cc03007f00000000000000000000000000000000000000000000000000000000652086a7610cac565b6109e99190610c2b565b6109f39190610c44565b6109fe906001610cac565b905090565b60008080610a0f61082f565b610a39907f0000000000000000000000000000000000000000000000000000000000000078610c2b565b905060005b600154811015610a8c5760018181548110610a5b57610a5b610c7d565b90600052602060002090600402016002015483610a789190610cac565b925080610a8481610ce1565b915050610a3e565b50610a978183610c66565b9250505090565b610ad2604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60005b600154811015610b9157826001600160a01b031660018281548110610afc57610afc610c7d565b60009182526020909120600490910201546001600160a01b031603610b7f5760018181548110610b2e57610b2e610c7d565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529392505050565b80610b8981610ce1565b915050610ad5565b5060405162461bcd60e51b815260206004820152600f60248201526e1b5a5cdcda5b99c81858d8dbdd5b9d608a1b60448201526064016103be565b600060208284031215610bde57600080fd5b81356001600160a01b0381168114610bf557600080fd5b9392505050565b600060208284031215610c0e57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e610c15565b92915050565b600082610c6157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e610c15565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ca557600080fd5b5051919050565b80820180821115610c3e57610c3e610c15565b600060208284031215610cd157600080fd5b81518015158114610bf557600080fd5b600060018201610cf357610cf3610c15565b506001019056fea2646970667358221220c9c4e3f6a2196d43b12dfdaf4cc88afaafa47790643cb6642669d4c9f90278a064736f6c63430008120033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.