Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 30 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Release | 24603596 | 13 days ago | IN | 0 ETH | 0.00016164 | ||||
| Release | 24396344 | 42 days ago | IN | 0 ETH | 0.00018155 | ||||
| Release | 24166119 | 74 days ago | IN | 0 ETH | 0.0001647 | ||||
| Release | 23976642 | 100 days ago | IN | 0 ETH | 0.00021651 | ||||
| Release | 23766730 | 130 days ago | IN | 0 ETH | 0.00016606 | ||||
| Release | 23545023 | 161 days ago | IN | 0 ETH | 0.00012716 | ||||
| Release | 23337566 | 190 days ago | IN | 0 ETH | 0.00008964 | ||||
| Release | 23180101 | 212 days ago | IN | 0 ETH | 0.00017483 | ||||
| Release | 23003287 | 237 days ago | IN | 0 ETH | 0.00017826 | ||||
| Release | 22672822 | 283 days ago | IN | 0 ETH | 0.0001412 | ||||
| Release | 22428692 | 317 days ago | IN | 0 ETH | 0.00006831 | ||||
| Release | 22415310 | 319 days ago | IN | 0 ETH | 0.00005251 | ||||
| Release | 22215306 | 347 days ago | IN | 0 ETH | 0.00231217 | ||||
| Release | 22023757 | 373 days ago | IN | 0 ETH | 0.00013003 | ||||
| Release | 21862745 | 396 days ago | IN | 0 ETH | 0.00010501 | ||||
| Release | 21687598 | 420 days ago | IN | 0 ETH | 0.00157656 | ||||
| Release | 21371185 | 465 days ago | IN | 0 ETH | 0.00136584 | ||||
| Release | 21134700 | 498 days ago | IN | 0 ETH | 0.00066722 | ||||
| Release | 20697518 | 559 days ago | IN | 0 ETH | 0.00026175 | ||||
| Release | 20467741 | 591 days ago | IN | 0 ETH | 0.00031116 | ||||
| Release | 20260102 | 620 days ago | IN | 0 ETH | 0.00016223 | ||||
| Release | 20061726 | 647 days ago | IN | 0 ETH | 0.00081805 | ||||
| Release | 19936531 | 665 days ago | IN | 0 ETH | 0.00051981 | ||||
| Release | 19487424 | 728 days ago | IN | 0 ETH | 0.00165953 | ||||
| Release | 19189576 | 770 days ago | IN | 0 ETH | 0.00459736 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
0x6101606040523480156200001257600080fd5b50604051620015a9380380620015a98339810160408190526200003591620005b7565b8051825114620000b25760405162461bcd60e51b815260206004820152603560248201527f546f6b656e56657374696e674c6f636b3a206163636f756e747320616e64207360448201527f6861726573206c656e677468206d69736d61746368000000000000000000000060648201526084015b60405180910390fd5b6000825111620001055760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e56657374696e674c6f636b3a206e6f2070617965657300000000006044820152606401620000a9565b60005b60018351620001189190620006de565b811015620002105760006200012f826001620006fa565b90505b8351811015620001fa5783818151811062000151576200015162000710565b60200260200101516001600160a01b031684838151811062000177576200017762000710565b60200260200101516001600160a01b031603620001e55760405162461bcd60e51b815260206004820152602560248201527f546f6b656e56657374696e674c6f636b3a206475706c69636174652061646472604482015264657373657360d81b6064820152608401620000a9565b80620001f18162000726565b91505062000132565b5080620002078162000726565b91505062000108565b506000805b8251811015620002605782818151811062000234576200023462000710565b602002602001015182620002499190620006fa565b915080620002578162000726565b91505062000215565b5080606414620002b35760405162461bcd60e51b815260206004820152601960248201527f536861726573206d7573742073756d20757020746f20313030000000000000006044820152606401620000a9565b6001600160a01b03881660805260a0869052620002d18742620006fa565b6101005260c085905260e084905260a051620002ef90869062000758565b6101205282516101405260c05160a0516200030b91906200076f565b156200035a5760405162461bcd60e51b815260206004820152601b60248201527f6572726f72206475726174696f6e5365636f6e64732076616c756500000000006044820152606401620000a9565b60005b8351811015620004ad576000606460a05160c05186858151811062000386576200038662000710565b602002602001015160e0516200039d919062000786565b620003a9919062000786565b620003b5919062000758565b620003c1919062000758565b905060006101205182620003d6919062000786565b905060016040518060800160405280888681518110620003fa57620003fa62000710565b60200260200101516001600160a01b0316815260200187868151811062000425576200042562000710565b602090810291909101810151825281810195909552604090810193909352815460018082018455600093845292859020825160049092020180546001600160a01b0319166001600160a01b0390921691909117815593810151918401919091559081015160028301556060015160039091015580620004a48162000726565b9150506200035d565b505050505050505050620007a0565b6001600160a01b0381168114620004d257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620005165762000516620004d5565b604052919050565b60006001600160401b038211156200053a576200053a620004d5565b5060051b60200190565b600082601f8301126200055657600080fd5b815160206200056f62000569836200051e565b620004eb565b82815260059290921b840181019181810190868411156200058f57600080fd5b8286015b84811015620005ac578051835291830191830162000593565b509695505050505050565b600080600080600080600060e0888a031215620005d357600080fd5b8751620005e081620004bc565b60208981015160408b015160608c015160808d015160a08e0151959c50929a5090985096509450906001600160401b03808211156200061e57600080fd5b818b0191508b601f8301126200063357600080fd5b81516200064462000569826200051e565b81815260059190911b8301840190848101908e8311156200066457600080fd5b938501935b828510156200068f5784516200067f81620004bc565b8252938501939085019062000669565b60c08e01519097509450505080831115620006a957600080fd5b5050620006b98a828b0162000544565b91505092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b81810381811115620006f457620006f4620006c8565b92915050565b80820180821115620006f457620006f4620006c8565b634e487b7160e01b600052603260045260246000fd5b6000600182016200073b576200073b620006c8565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826200076a576200076a62000742565b500490565b60008262000781576200078162000742565b500690565b8082028115828204841417620006f457620006f4620006c8565b60805160a05160c05160e051610100516101205161014051610d30620008796000396000610132015260008181610215015281816108fb0152610a150152600081816101bd01528181610354015281816103ef015281816108d30152818161094301526109bb01526000818161015901528181610472015281816104a401526104cd0152600081816101e4015281816103cb01528181610427015261097501526000818161023c0152818161044801528181610922015261099a0152600081816102ca0152818161059f01526106ed0152610d306000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a56829911610097578063bf58390311610066578063bf5839031461026e578063eb9983dd14610276578063fc0c546a146102c5578063fd4fa8241461030457600080fd5b80638a568299146102105780639acba2af146102375780639da7aafe1461025e578063a7e22a3e1461026657600080fd5b806363037b0c116100d357806363037b0c1461017b57806378e97925146101b85780637d1cd04f146101df57806386d1a69f1461020657600080fd5b80631cf1bb72146100fa57806358451f971461012d5780635c25913a14610154575b600080fd5b61011a610108366004610bcc565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61018e610189366004610bfc565b61030d565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610124565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61020e610351565b005b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a7f000000000000000000000000000000000000000000000000000000000000000081565b61011a61082f565b61011a6108ce565b61011a610a03565b610289610284366004610bcc565b610a9e565b604051610124919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102ec7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610124565b61011a60005481565b6001818154811061031d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b427f00000000000000000000000000000000000000000000000000000000000000008110156103c75760405162461bcd60e51b815260206004820152601760248201527f56657374696e67206e6f7420737461727465642079657400000000000000000060448201526064015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006104147f000000000000000000000000000000000000000000000000000000000000000084610c2b565b61041e9190610c44565b9050600061046c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610c44565b610496837f0000000000000000000000000000000000000000000000000000000000000000610c66565b6104a09190610c44565b90507f00000000000000000000000000000000000000000000000000000000000000008111156104ed57507f00000000000000000000000000000000000000000000000000000000000000005b60005b6001548110156108295760006064836001848154811061051257610512610c7d565b90600052602060002090600402016001015461052e9190610c66565b6105389190610c44565b90506000600260006001858154811061055357610553610c7d565b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020546105879083610c2b565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106129190610c93565b81111561067b5760405162461bcd60e51b815260206004820152603160248201527f54686520617661696c61626c652062616c616e636520666f722072656c65617360448201527019481a5cc81a5b9cdd59999a58da595b9d607a1b60648201526084016103be565b80600260006001868154811061069357610693610c7d565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906106cc908490610cac565b92505081905550806000808282546106e49190610cac565b925050819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6001858154811061072d5761072d610c7d565b600091825260209091206004918202015460405160e084901b6001600160e01b03191681526001600160a01b0390911691810191909152602481018490526044016020604051808303816000875af115801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610cbf565b50600183815481106107c5576107c5610c7d565b6000918252602091829020600490910201546040518381526001600160a01b03909116917fcfe8307079d74ae41ebc7046b137d90014152d4d9dc6ea6b93122d14aa400d14910160405180910390a25050808061082190610ce1565b9150506104f0565b50505050565b600080600160008154811061084657610846610c7d565b600091825260208083206004909202909101546001600160a01b031680835260029091526040822054909250900361088057600091505090565b600160008154811061089457610894610c7d565b6000918252602080832060026004909302018201546001600160a01b03851684529190526040909120546108c89190610c44565b91505090565b6000427f0000000000000000000000000000000000000000000000000000000000000000111561091d57507f000000000000000000000000000000000000000000000000000000000000000090565b6109677f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610cac565b42106109735750600090565b7f0000000000000000000000000000000000000000000000000000000000000000426109df7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610cac565b6109e99190610c2b565b6109f39190610c44565b6109fe906001610cac565b905090565b60008080610a0f61082f565b610a39907f0000000000000000000000000000000000000000000000000000000000000000610c2b565b905060005b600154811015610a8c5760018181548110610a5b57610a5b610c7d565b90600052602060002090600402016002015483610a789190610cac565b925080610a8481610ce1565b915050610a3e565b50610a978183610c66565b9250505090565b610ad2604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60005b600154811015610b9157826001600160a01b031660018281548110610afc57610afc610c7d565b60009182526020909120600490910201546001600160a01b031603610b7f5760018181548110610b2e57610b2e610c7d565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529392505050565b80610b8981610ce1565b915050610ad5565b5060405162461bcd60e51b815260206004820152600f60248201526e1b5a5cdcda5b99c81858d8dbdd5b9d608a1b60448201526064016103be565b600060208284031215610bde57600080fd5b81356001600160a01b0381168114610bf557600080fd5b9392505050565b600060208284031215610c0e57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e610c15565b92915050565b600082610c6157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e610c15565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ca557600080fd5b5051919050565b80820180821115610c3e57610c3e610c15565b600060208284031215610cd157600080fd5b81518015158114610bf557600080fd5b600060018201610cf357610cf3610c15565b506001019056fea2646970667358221220c9c4e3f6a2196d43b12dfdaf4cc88afaafa47790643cb6642669d4c9f90278a064736f6c634300081200330000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f00000000000000000000000000000000000000000000000000000000002819a00000000000000000000000000000000000000000000000000000000012cc030000000000000000000000000000000000000000000000000000000000002819a00000000000000000000000000000000000000000003d3cdb1823bbb17a061eb300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003811f5674abbc216ad29a1edcdd0b05172a9f12300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a56829911610097578063bf58390311610066578063bf5839031461026e578063eb9983dd14610276578063fc0c546a146102c5578063fd4fa8241461030457600080fd5b80638a568299146102105780639acba2af146102375780639da7aafe1461025e578063a7e22a3e1461026657600080fd5b806363037b0c116100d357806363037b0c1461017b57806378e97925146101b85780637d1cd04f146101df57806386d1a69f1461020657600080fd5b80631cf1bb72146100fa57806358451f971461012d5780635c25913a14610154575b600080fd5b61011a610108366004610bcc565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61011a7f000000000000000000000000000000000000000000000000000000000000000181565b61011a7f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb381565b61018e610189366004610bfc565b61030d565b604080516001600160a01b0390951685526020850193909352918301526060820152608001610124565b61011a7f00000000000000000000000000000000000000000000000000000000652086a781565b61011a7f00000000000000000000000000000000000000000000000000000000002819a081565b61020e610351565b005b61011a7f000000000000000000000000000000000000000000000000000000000000007881565b61011a7f0000000000000000000000000000000000000000000000000000000012cc030081565b61011a61082f565b61011a6108ce565b61011a610a03565b610289610284366004610bcc565b610a9e565b604051610124919081516001600160a01b0316815260208083015190820152604080830151908201526060918201519181019190915260800190565b6102ec7f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f81565b6040516001600160a01b039091168152602001610124565b61011a60005481565b6001818154811061031d57600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b427f00000000000000000000000000000000000000000000000000000000652086a78110156103c75760405162461bcd60e51b815260206004820152601760248201527f56657374696e67206e6f7420737461727465642079657400000000000000000060448201526064015b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000002819a06104147f00000000000000000000000000000000000000000000000000000000652086a784610c2b565b61041e9190610c44565b9050600061046c7f00000000000000000000000000000000000000000000000000000000002819a07f0000000000000000000000000000000000000000000000000000000012cc0300610c44565b610496837f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb3610c66565b6104a09190610c44565b90507f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb38111156104ed57507f0000000000000000000000000000000000000000003d3cdb1823bbb17a061eb35b60005b6001548110156108295760006064836001848154811061051257610512610c7d565b90600052602060002090600402016001015461052e9190610c66565b6105389190610c44565b90506000600260006001858154811061055357610553610c7d565b600091825260208083206004909202909101546001600160a01b031683528201929092526040019020546105879083610c2b565b6040516370a0823160e01b81523060048201529091507f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f6001600160a01b0316906370a0823190602401602060405180830381865afa1580156105ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106129190610c93565b81111561067b5760405162461bcd60e51b815260206004820152603160248201527f54686520617661696c61626c652062616c616e636520666f722072656c65617360448201527019481a5cc81a5b9cdd59999a58da595b9d607a1b60648201526084016103be565b80600260006001868154811061069357610693610c7d565b600091825260208083206004909202909101546001600160a01b03168352820192909252604001812080549091906106cc908490610cac565b92505081905550806000808282546106e49190610cac565b925050819055507f0000000000000000000000000c90c57aaf95a3a87eadda6ec3974c99d786511f6001600160a01b031663a9059cbb6001858154811061072d5761072d610c7d565b600091825260209091206004918202015460405160e084901b6001600160e01b03191681526001600160a01b0390911691810191909152602481018490526044016020604051808303816000875af115801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610cbf565b50600183815481106107c5576107c5610c7d565b6000918252602091829020600490910201546040518381526001600160a01b03909116917fcfe8307079d74ae41ebc7046b137d90014152d4d9dc6ea6b93122d14aa400d14910160405180910390a25050808061082190610ce1565b9150506104f0565b50505050565b600080600160008154811061084657610846610c7d565b600091825260208083206004909202909101546001600160a01b031680835260029091526040822054909250900361088057600091505090565b600160008154811061089457610894610c7d565b6000918252602080832060026004909302018201546001600160a01b03851684529190526040909120546108c89190610c44565b91505090565b6000427f00000000000000000000000000000000000000000000000000000000652086a7111561091d57507f000000000000000000000000000000000000000000000000000000000000007890565b6109677f0000000000000000000000000000000000000000000000000000000012cc03007f00000000000000000000000000000000000000000000000000000000652086a7610cac565b42106109735750600090565b7f00000000000000000000000000000000000000000000000000000000002819a0426109df7f0000000000000000000000000000000000000000000000000000000012cc03007f00000000000000000000000000000000000000000000000000000000652086a7610cac565b6109e99190610c2b565b6109f39190610c44565b6109fe906001610cac565b905090565b60008080610a0f61082f565b610a39907f0000000000000000000000000000000000000000000000000000000000000078610c2b565b905060005b600154811015610a8c5760018181548110610a5b57610a5b610c7d565b90600052602060002090600402016002015483610a789190610cac565b925080610a8481610ce1565b915050610a3e565b50610a978183610c66565b9250505090565b610ad2604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b60005b600154811015610b9157826001600160a01b031660018281548110610afc57610afc610c7d565b60009182526020909120600490910201546001600160a01b031603610b7f5760018181548110610b2e57610b2e610c7d565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460608201529392505050565b80610b8981610ce1565b915050610ad5565b5060405162461bcd60e51b815260206004820152600f60248201526e1b5a5cdcda5b99c81858d8dbdd5b9d608a1b60448201526064016103be565b600060208284031215610bde57600080fd5b81356001600160a01b0381168114610bf557600080fd5b9392505050565b600060208284031215610c0e57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e610c15565b92915050565b600082610c6157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e610c15565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610ca557600080fd5b5051919050565b80820180821115610c3e57610c3e610c15565b600060208284031215610cd157600080fd5b81518015158114610bf557600080fd5b600060018201610cf357610cf3610c15565b506001019056fea2646970667358221220c9c4e3f6a2196d43b12dfdaf4cc88afaafa47790643cb6642669d4c9f90278a064736f6c63430008120033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.