Overview
GLMR Balance
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Initialize | 2108554 | 917 days ago | IN | 0 GLMR | 0.04379384 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Withdrawal
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma abicoder v2; import "Initializable.sol"; import "IERC20.sol"; import "WithdrawalQueue.sol"; import "ILido.sol"; contract Withdrawal is Initializable { using WithdrawalQueue for WithdrawalQueue.Queue; // Element removed from queue event ElementRemoved(uint256 elementId); // Element added to queue event ElementAdded(uint256 elementId); // New redeem request added event RedeemRequestAdded(address indexed user, uint256 shares, uint256 batchId); // xcKSM claimed by user event Claimed(address indexed user, uint256 claimedAmount); // Losses ditributed to contract event LossesDistributed(uint256 losses); // stKSM smart contract ILido public stKSM; // xcKSM precompile IERC20 public xcKSM; // withdrawal queue WithdrawalQueue.Queue public queue; // batch id => price for pool shares to xcKSM // to retrive xcKSM amount for user: user_pool_shares * batchSharePrice[batch_id] mapping(uint256 => uint256) public batchSharePrice; struct Request { uint256 share; uint256 batchId; } // user's withdrawal requests (unclaimed) mapping(address => Request[]) public userRequests; // total virtual xcKSM amount on contract uint256 public totalVirtualXcKSMAmount; // total amount of xcKSM pool shares uint256 public totalXcKSMPoolShares; // stKSM(xcKSM) virtual amount for batch uint256 public batchVirtualXcKSMAmount; // Last Id of queue element which can be claimed uint256 public claimableId; // Balance for claiming uint256 public pendingForClaiming; // max amount of requests in parallel uint16 internal constant MAX_REQUESTS = 20; modifier onlyLido() { require(msg.sender == address(stKSM), "WITHDRAWAL: CALLER_NOT_LIDO"); _; } /** * @notice Initialize redeemPool contract. * @param _cap - cap for queue * @param _xcKSM - xcKSM precompile address */ function initialize( uint256 _cap, address _xcKSM ) external initializer { require(_cap > 0, "WITHDRAWAL: INCORRECT_CAP"); require(_xcKSM != address(0), "WITHDRAWAL: INCORRECT_XCKSM_ADDRESS"); queue.init(_cap); xcKSM = IERC20(_xcKSM); } /** * @notice Set stKSM contract address, allowed to only once * @param _stKSM stKSM contract address */ function setStKSM(address _stKSM) external { require(address(stKSM) == address(0), "WITHDRAWAL: STKSM_ALREADY_DEFINED"); require(_stKSM != address(0), "WITHDRAWAL: INCORRECT_STKSM_ADDRESS"); stKSM = ILido(_stKSM); } /** * @notice Burn pool shares from first element of queue and move index for allow claiming. After that add new batch */ function newEra() external onlyLido { uint256 newXcKSMAmount = xcKSM.balanceOf(address(this)) - pendingForClaiming; if ((newXcKSMAmount > 0) && (queue.size > 0)) { (WithdrawalQueue.Batch memory topBatch, uint256 topId) = queue.top(); // batchSharePrice = pool_xcKSM_balance / pool_shares // when user try to claim: user_KSM = user_pool_share * batchSharePrice uint256 sharePriceForBatch = getBatchSharePrice(topBatch); uint256 xcKSMForBatch = topBatch.batchTotalShares * sharePriceForBatch / 10**stKSM.decimals(); if (newXcKSMAmount >= xcKSMForBatch) { batchSharePrice[topId] = sharePriceForBatch; totalXcKSMPoolShares -= topBatch.batchXcKSMShares; totalVirtualXcKSMAmount -= xcKSMForBatch; // NOTE: In case when losses occur due to rounding it is possible to // totalVirtualXcKSMAmount > 0 and totalXcKSMPoolShares = 0 if (totalXcKSMPoolShares == 0) { totalVirtualXcKSMAmount = 0; } claimableId = topId; pendingForClaiming += xcKSMForBatch; queue.pop(); emit ElementRemoved(topId); } } if ((batchVirtualXcKSMAmount > 0) && (queue.size < queue.cap)) { uint256 batchKSMPoolShares = getKSMPoolShares(batchVirtualXcKSMAmount); // NOTE: batch total shares = batch xcKSM amount, because 1 share = 1 xcKSM WithdrawalQueue.Batch memory newBatch = WithdrawalQueue.Batch(batchVirtualXcKSMAmount, batchKSMPoolShares); uint256 newId = queue.push(newBatch); totalVirtualXcKSMAmount += batchVirtualXcKSMAmount; totalXcKSMPoolShares += batchKSMPoolShares; batchVirtualXcKSMAmount = 0; emit ElementAdded(newId); } } /** * @notice Returns total virtual xcKSM balance of contract for which losses can be applied */ function totalBalanceForLosses() external view returns (uint256) { return totalVirtualXcKSMAmount + batchVirtualXcKSMAmount; } /** * @notice function returns xcKSM amount that should be available for claiming after batch remove * @param _batchShift batch shift from first element */ function getxcKSMBalanceForBatch(uint256 _batchShift) external view returns (uint256) { (WithdrawalQueue.Batch memory specificBatch, ) = queue.element(_batchShift); // batchSharePrice = pool_xcKSM_balance / pool_shares // when user try to claim: user_KSM = user_pool_share * batchSharePrice uint256 sharePriceForBatch = getBatchSharePrice(specificBatch); uint256 xcKSMForBatch = specificBatch.batchTotalShares * sharePriceForBatch / 10**stKSM.decimals(); return xcKSMForBatch; } /** * @notice function returns specific batch from queue * @param _batchShift batch shift from first element */ function getQueueBatch(uint256 _batchShift) external view returns (WithdrawalQueue.Batch memory) { (WithdrawalQueue.Batch memory specificBatch, ) = queue.element(_batchShift); return specificBatch; } /** * @notice 1. Mint equal amount of pool shares for user * @notice 2. Adjust current amount of virtual xcKSM on Withdrawal contract * @notice 3. Burn shares on LIDO side * @param _from user address for minting * @param _amount amount of stKSM which user wants to redeem */ function redeem(address _from, uint256 _amount) external onlyLido { // NOTE: user share in batch = user stKSM balance in specific batch require(userRequests[_from].length < MAX_REQUESTS, "WITHDRAWAL: REQUEST_CAP_EXCEEDED"); batchVirtualXcKSMAmount += _amount; Request memory req = Request(_amount, queue.nextId()); userRequests[_from].push(req); emit RedeemRequestAdded(_from, req.share, req.batchId); } /** * @notice Returns available for claiming xcKSM amount for user * @param _holder user address for claiming */ function claim(address _holder) external onlyLido returns (uint256) { // go through claims and check if unlocked than just transfer xcKSMs uint256 readyToClaim = 0; uint256 readyToClaimCount = 0; Request[] storage requests = userRequests[_holder]; uint256 stKSMDecimals = 10**stKSM.decimals(); for (uint256 i = 0; i < requests.length; ++i) { if (requests[i].batchId <= claimableId) { readyToClaim += requests[i].share * batchSharePrice[requests[i].batchId] / stKSMDecimals; readyToClaimCount += 1; } else { requests[i - readyToClaimCount] = requests[i]; } } // remove claimed items for (uint256 i = 0; i < readyToClaimCount; ++i) { requests.pop(); } require(readyToClaim <= xcKSM.balanceOf(address(this)), "WITHDRAWAL: CLAIM_EXCEEDS_BALANCE"); xcKSM.transfer(_holder, readyToClaim); pendingForClaiming -= readyToClaim; emit Claimed(_holder, readyToClaim); return readyToClaim; } /** * @notice Apply losses to current stKSM shares on this contract * @param _losses user address for claiming */ function ditributeLosses(uint256 _losses) external onlyLido { totalVirtualXcKSMAmount -= _losses; emit LossesDistributed(_losses); } /** * @notice Check available for claim xcKSM balance for user * @param _holder user address */ function getRedeemStatus(address _holder) external view returns(uint256 _waiting, uint256 _available) { Request[] storage requests = userRequests[_holder]; uint256 stKSMDecimals = 10**stKSM.decimals(); for (uint256 i = 0; i < requests.length; ++i) { if (requests[i].batchId <= claimableId) { _available += requests[i].share * batchSharePrice[requests[i].batchId] / stKSMDecimals; } else { _waiting += requests[i].share * getBatchSharePrice(queue.findBatch(requests[i].batchId)) / stKSMDecimals; } } return (_waiting, _available); } /** * @notice Calculate share price to KSM for specific batch * @param _batch batch */ function getBatchSharePrice(WithdrawalQueue.Batch memory _batch) internal view returns (uint256) { uint256 batchKSMPrice; if (totalXcKSMPoolShares > 0) { // user_xcKSM = user_batch_share * batch_share_price // batch_share_price = (1 / batch_total_shares) * batch_pool_shares * (total_xcKSM / total_pool_shares) if (_batch.batchTotalShares > 0) { batchKSMPrice = (10**stKSM.decimals() * _batch.batchXcKSMShares * totalVirtualXcKSMAmount) / (_batch.batchTotalShares * totalXcKSMPoolShares); } else { // NOTE: This means that batch not added to queue currently if (batchVirtualXcKSMAmount > 0) { batchKSMPrice = (10**stKSM.decimals() * getKSMPoolShares(batchVirtualXcKSMAmount) * totalVirtualXcKSMAmount) / (batchVirtualXcKSMAmount * totalXcKSMPoolShares); } } } else { // NOTE: This means that we have only one batch that no in the pool (batch share price == 10**stKSM.decimals()) if (batchVirtualXcKSMAmount > 0) { batchKSMPrice = 10**stKSM.decimals(); } } return batchKSMPrice; } /** * @notice Calculate shares amount in KSM pool for specific xcKSM amount * @param _amount amount of xcKSM tokens */ function getKSMPoolShares(uint256 _amount) internal view returns (uint256) { if (totalVirtualXcKSMAmount > 0) { return _amount * totalXcKSMPoolShares / totalVirtualXcKSMAmount; } return _amount; } }
// SPDX-License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
// SPDX-License-Identifier: MIT 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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma abicoder v2; library WithdrawalQueue { struct Batch { uint256 batchTotalShares; // Total shares amount for batch uint256 batchXcKSMShares; // Batch xcKSM shares in xcKSM pool } struct Queue { Batch[] items; uint256[] ids; uint256 first; uint256 size; uint256 cap; uint256 id; } /** * @notice Queue initialization * @param queue queue for initializing * @param cap max amount of elements in the queue */ function init(Queue storage queue, uint256 cap) internal { for (uint256 i = 0; i < cap; ++i) { queue.items.push(Batch(0, 0)); } queue.ids = new uint256[](cap); queue.first = 0; queue.size = 0; queue.size = 0; queue.cap = cap; } /** * @notice Add element to the end of queue * @param queue current queue * @param elem element for adding */ function push(Queue storage queue, Batch memory elem) internal returns (uint256 _id) { require(queue.size < queue.cap, "WithdrawalQueue: capacity exceeded"); uint256 lastIndex = (queue.first + queue.size) % queue.cap; queue.items[lastIndex] = elem; queue.id++; queue.ids[lastIndex] = queue.id; queue.size++; return queue.id; } /** * @notice Remove element from top of the queue * @param queue current queue */ function pop(Queue storage queue) internal returns (Batch memory _item, uint256 _id) { require(queue.size > 0, "WithdrawalQueue: queue is empty"); _item = queue.items[queue.first]; _id = queue.ids[queue.first]; queue.first = (queue.first + 1) % queue.cap; queue.size--; } /** * @notice Return batch for specific index * @param queue current queue * @param index index of batch */ function findBatch(Queue storage queue, uint256 index) internal view returns (Batch memory _item) { uint256 startIndex = queue.ids[queue.first]; if (index >= startIndex) { if ((index - startIndex) < queue.size) { return queue.items[(queue.first + (index - startIndex)) % queue.cap]; } } return Batch(0, 0); } /** * @notice Return first element of the queue * @param queue current queue */ function top(Queue storage queue) internal view returns (Batch memory _item, uint256 _id) { require(queue.size > 0, "WithdrawalQueue: queue is empty"); _item = queue.items[queue.first]; _id = queue.ids[queue.first]; } /** * @notice Return specific element of the queue * @param queue current queue * @param shift element shift from top id */ function element(Queue storage queue, uint256 shift) internal view returns (Batch memory _item, uint256 _id) { require(queue.size > 0, "WithdrawalQueue: queue is empty"); require(shift < queue.size, "WithdrawalQueue: index outside queue"); uint256 index = (queue.first + shift) % queue.cap; _item = queue.items[index]; _id = queue.ids[index]; } /** * @notice Return last element of the queue * @param queue current queue */ function last(Queue storage queue) internal view returns (Batch memory _item, uint256 _id) { require(queue.size > 0, "WithdrawalQueue: queue is empty"); uint256 lastIndex = (queue.first + queue.size - 1) % queue.cap; _item = queue.items[lastIndex]; _id = queue.ids[lastIndex]; } /** * @notice Return last element id + 1 * @param queue current queue */ function nextId(Queue storage queue) internal view returns (uint256 _id) { _id = queue.id + 1; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "Types.sol"; interface ILido { function MAX_ALLOWABLE_DIFFERENCE() external view returns(uint128); function deposit(uint256 amount) external returns (uint256); function distributeRewards(uint256 totalRewards, uint256 ledgerBalance) external; function distributeLosses(uint256 totalLosses, uint256 ledgerBalance) external; function getStashAccounts() external view returns (bytes32[] memory); function getLedgerAddresses() external view returns (address[] memory); function ledgerStake(address ledger) external view returns (uint256); function transferFromLedger(uint256 amount, uint256 excess) external; function transferFromLedger(uint256 amount) external; function transferToLedger(uint256 amount) external; function flushStakes() external; function findLedger(bytes32 stash) external view returns (address); function AUTH_MANAGER() external returns(address); function ORACLE_MASTER() external view returns (address); function decimals() external view returns (uint8); function getPooledKSMByShares(uint256 sharesAmount) external view returns (uint256); function getSharesByPooledKSM(uint256 amount) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface Types { struct Fee{ uint16 total; uint16 operators; uint16 developers; uint16 treasury; } struct Stash { bytes32 stashAccount; uint64 eraId; } enum LedgerStatus { // bonded but not participate in staking Idle, // participate as nominator Nominator, // participate as validator Validator, // not bonded not participate in staking None } struct UnlockingChunk { uint128 balance; uint64 era; } struct OracleData { bytes32 stashAccount; bytes32 controllerAccount; LedgerStatus stakeStatus; // active part of stash balance uint128 activeBalance; // locked for stake stash balance. uint128 totalBalance; // totalBalance = activeBalance + sum(unlocked.balance) UnlockingChunk[] unlocking; uint32[] claimedRewards; // stash account balance. It includes locked (totalBalance) balance assigned // to a controller. uint128 stashBalance; // slashing spans for ledger uint32 slashingSpans; } struct RelaySpec { uint16 maxValidatorsPerLedger; uint128 minNominatorBalance; uint128 ledgerMinimumActiveBalance; uint256 maxUnlockingChunks; } }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 10 }, "libraries": { "Withdrawal.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"elementId","type":"uint256"}],"name":"ElementAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"elementId","type":"uint256"}],"name":"ElementRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"losses","type":"uint256"}],"name":"LossesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"batchId","type":"uint256"}],"name":"RedeemRequestAdded","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"batchSharePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchVirtualXcKSMAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"claim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimableId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_losses","type":"uint256"}],"name":"ditributeLosses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchShift","type":"uint256"}],"name":"getQueueBatch","outputs":[{"components":[{"internalType":"uint256","name":"batchTotalShares","type":"uint256"},{"internalType":"uint256","name":"batchXcKSMShares","type":"uint256"}],"internalType":"struct WithdrawalQueue.Batch","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getRedeemStatus","outputs":[{"internalType":"uint256","name":"_waiting","type":"uint256"},{"internalType":"uint256","name":"_available","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batchShift","type":"uint256"}],"name":"getxcKSMBalanceForBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"address","name":"_xcKSM","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newEra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pendingForClaiming","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"queue","outputs":[{"internalType":"uint256","name":"first","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"cap","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stKSM","type":"address"}],"name":"setStKSM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stKSM","outputs":[{"internalType":"contract ILido","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalanceForLosses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVirtualXcKSMAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalXcKSMPoolShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userRequests","outputs":[{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"uint256","name":"batchId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xcKSM","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611cf7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100fc5760003560e01c8063036ec066146101015780630e910c171461011c57806315cda170146101425780631e83409a146101575780631e9a69501461016a578063263cb6b61461017d57806339085301146101a55780633dbfe6cb146101ae5780634f5b636c146101b75780635068231f146101ca57806362cf1182146101dd5780637b207727146101f057806397564389146101f8578063a0965af414610201578063aff7991014610221578063b946b71214610234578063da35a26f14610262578063e10d29ee14610275578063e111e44a146102ab578063e45aeda1146102b4575b600080fd5b6101096102bd565b6040519081526020015b60405180910390f35b600054610135906201000090046001600160a01b031681565b6040516101139190611939565b610155610150366004611964565b6102d4565b005b610109610165366004611964565b6103ce565b61015561017836600461197f565b6107d0565b61019061018b36600461197f565b610925565b60408051928352602083019190915201610113565b610109600c5481565b610109600e5481565b6101556101c53660046119a9565b610961565b6101096101d83660046119a9565b6109de565b600154610135906001600160a01b031681565b610155610a9f565b610109600b5481565b61010961020f3660046119a9565b60086020526000908152604090205481565b61019061022f366004611964565b610da0565b6102476102423660046119a9565b610fa7565b60408051825181526020928301519281019290925201610113565b6101556102703660046119c2565b610fc4565b60045460055460065460075461028b9392919084565b604080519485526020850193909352918301526060820152608001610113565b610109600d5481565b610109600a5481565b6000600c54600a546102cf9190611a04565b905090565b6000546201000090046001600160a01b0316156103425760405162461bcd60e51b815260206004820152602160248201527f5749544844524157414c3a2053544b534d5f414c52454144595f444546494e456044820152601160fa1b60648201526084015b60405180910390fd5b6001600160a01b0381166103a45760405162461bcd60e51b815260206004820152602360248201527f5749544844524157414c3a20494e434f52524543545f53544b534d5f4144445260448201526245535360e81b6064820152608401610339565b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b600080546201000090046001600160a01b031633146103ff5760405162461bcd60e51b815260040161033990611a1c565b600080600060096000866001600160a01b03166001600160a01b03168152602001908152602001600020905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a39190611a51565b6104ae90600a611b58565b905060005b82548110156105e257600d548382815481106104d1576104d1611b67565b906000526020600020906002020160010154116105765781600860008584815481106104ff576104ff611b67565b90600052602060002090600202016001015481526020019081526020016000205484838154811061053257610532611b67565b90600052602060002090600202016000015461054e9190611b7d565b6105589190611bb2565b6105629086611a04565b945061056f600185611a04565b93506105d2565b82818154811061058857610588611b67565b90600052602060002090600202018385836105a39190611bc6565b815481106105b3576105b3611b67565b6000918252602090912082546002909202019081556001918201549101555b6105db81611bdd565b90506104b3565b5060005b8381101561062c57828054806105fe576105fe611bf8565b60008281526020812060026000199093019283020181815560010155905561062581611bdd565b90506105e6565b506001546040516370a0823160e01b81526001600160a01b03909116906370a082319061065d903090600401611939565b602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190611c0e565b8411156106f75760405162461bcd60e51b815260206004820152602160248201527f5749544844524157414c3a20434c41494d5f455843454544535f42414c414e436044820152604560f81b6064820152608401610339565b60015460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af115801561074a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076e9190611c27565b5083600e60008282546107819190611bc6565b90915550506040518481526001600160a01b038716907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9060200160405180910390a25091925050505b919050565b6000546201000090046001600160a01b031633146108005760405162461bcd60e51b815260040161033990611a1c565b6001600160a01b0382166000908152600960205260409020546014116108685760405162461bcd60e51b815260206004820181905260248201527f5749544844524157414c3a20524551554553545f4341505f45584345454445446044820152606401610339565b80600c600082825461087a9190611a04565b925050819055506000604051806040016040528083815260200161089e600261114d565b90526001600160a01b03841660008181526009602090815260408083208054600181810183559185529383902086516002909502018481559286015192018290555193945091927f4d78899c3f146fbd6f7785cdffdcd04c3ebec37360e3013cb521324632eb2d8692610918928252602082015260400190565b60405180910390a2505050565b6009602052816000526040600020818154811061094157600080fd5b600091825260209091206002909102018054600190910154909250905082565b6000546201000090046001600160a01b031633146109915760405162461bcd60e51b815260040161033990611a1c565b80600a60008282546109a39190611bc6565b90915550506040518181527f18d7ff5061dc5fa3e9d0e114f717c584c7c71cfdbf7afdecd92cefc75daaa8609060200160405180910390a150565b6000806109ec600284611166565b50905060006109fa82611283565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190611a51565b610a7f90600a611b58565b8351610a8c908490611b7d565b610a969190611bb2565b95945050505050565b6000546201000090046001600160a01b03163314610acf5760405162461bcd60e51b815260040161033990611a1c565b600e546001546040516370a0823160e01b8152600092916001600160a01b0316906370a0823190610b04903090600401611939565b602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b459190611c0e565b610b4f9190611bc6565b9050600081118015610b62575060055415155b15610ce057600080610b746002611465565b915091506000610b8383611283565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd9190611a51565b610c0890600a611b58565b8451610c15908490611b7d565b610c1f9190611bb2565b9050808510610cdb5760008381526008602090815260408220849055850151600b805491929091610c51908490611bc6565b9250508190555080600a6000828254610c6a9190611bc6565b9091555050600b54610c7c576000600a555b82600d8190555080600e6000828254610c959190611a04565b90915550610ca590506002611505565b50506040518381527fcec9cdff740b6d842df3489c0dcafe7e1592acfcdae1e8e5daed0378935144aa9060200160405180910390a15b505050505b6000600c54118015610cf55750600654600554105b15610d9d576000610d07600c546115e1565b60408051808201909152600c548152602081018290529091506000610d2d60028361160a565b9050600c54600a6000828254610d439190611a04565b9250508190555082600b6000828254610d5c9190611a04565b90915550506000600c556040518181527f36441530b7e50b8d3b0d7edad61c8773152306fe8d81d836f663711cc6c36df29060200160405180910390a15050505b50565b600080600060096000856001600160a01b03166001600160a01b03168152602001908152602001600020905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e449190611a51565b610e4f90600a611b58565b905060005b8254811015610f9f57600d54838281548110610e7257610e72611b67565b90600052602060002090600202016001015411610f0a578160086000858481548110610ea057610ea0611b67565b906000526020600020906002020160010154815260200190815260200160002054848381548110610ed357610ed3611b67565b906000526020600020906002020160000154610eef9190611b7d565b610ef99190611bb2565b610f039085611a04565b9350610f8f565b81610f4a610f45858481548110610f2357610f23611b67565b906000526020600020906002020160010154600261172d90919063ffffffff16565b611283565b848381548110610f5c57610f5c611b67565b906000526020600020906002020160000154610f789190611b7d565b610f829190611bb2565b610f8c9086611a04565b94505b610f9881611bdd565b9050610e54565b505050915091565b610faf6118c8565b6000610fbc600284611166565b509392505050565b600054610100900460ff1680610fdd575060005460ff16155b6110405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610339565b600054610100900460ff16158015611062576000805461ffff19166101011790555b600083116110ae5760405162461bcd60e51b815260206004820152601960248201527805749544844524157414c3a20494e434f52524543545f43415603c1b6044820152606401610339565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152602360248201527f5749544844524157414c3a20494e434f52524543545f58434b534d5f4144445260448201526245535360e81b6064820152608401610339565b61111b600284611804565b600180546001600160a01b0319166001600160a01b0384161790558015611148576000805461ff00191690555b505050565b6000816005015460016111609190611a04565b92915050565b61116e6118c8565b6000808460030154116111935760405162461bcd60e51b815260040161033990611c49565b836003015483106111f25760405162461bcd60e51b8152602060048201526024808201527f5769746864726177616c51756575653a20696e646578206f75747369646520716044820152637565756560e01b6064820152608401610339565b600084600401548486600201546112099190611a04565b6112139190611c80565b905084600001818154811061122a5761122a611b67565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050925084600101818154811061126e5761126e611b67565b90600052602060002001549150509250929050565b6000806000600b5411156113d45782511561135657600b5483516112a79190611b7d565b600a548460200151600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190611a51565b61133190600a611b58565b61133b9190611b7d565b6113459190611b7d565b61134f9190611bb2565b9050611160565b600c54156113cf57600b54600c5461136e9190611b7d565b600a5461137c600c546115e1565b600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611302573d6000803e3d6000fd5b611160565b600c541561116057600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114539190611a51565b61145e90600a611b58565b9392505050565b61146d6118c8565b6000808360030154116114925760405162461bcd60e51b815260040161033990611c49565b826000018360020154815481106114ab576114ab611b67565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509150826001018360020154815481106114f3576114f3611b67565b90600052602060002001549050915091565b61150d6118c8565b6000808360030154116115325760405162461bcd60e51b815260040161033990611c49565b8260000183600201548154811061154b5761154b611b67565b90600052602060002090600202016040518060400160405290816000820154815260200160018201548152505091508260010183600201548154811061159357611593611b67565b906000526020600020015490508260040154836002015460016115b69190611a04565b6115c09190611c80565b60028401556003830180549060006115d783611c94565b9190505550915091565b600a546000901561160657600a54600b546115fc9084611b7d565b6111609190611bb2565b5090565b6000826004015483600301541061166e5760405162461bcd60e51b815260206004820152602260248201527f5769746864726177616c51756575653a20636170616369747920657863656564604482015261195960f21b6064820152608401610339565b60008360040154846003015485600201546116899190611a04565b6116939190611c80565b9050828460000182815481106116ab576116ab611b67565b6000918252602080832084516002909302019182559290920151600190920191909155600585018054916116de83611bdd565b919050555083600501548460010182815481106116fd576116fd611b67565b60009182526020822001919091556003850180549161171b83611bdd565b90915550505060059092015492915050565b6117356118c8565b60008360010184600201548154811061175057611750611b67565b906000526020600020015490508083106117e85760038401546117738285611bc6565b10156117e8576004840154849061178a8386611bc6565b86600201546117999190611a04565b6117a39190611c80565b815481106117b3576117b3611b67565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050915050611160565b5050604080518082019091526000808252602082015292915050565b60005b818110156118585760408051808201909152600080825260208083018281528654600181810189558885529290932093516002909302909301918255915191015561185181611bdd565b9050611807565b50806001600160401b0381111561187157611871611cab565b60405190808252806020026020018201604052801561189a578160200160208202803683370190505b5080516118b19160018501916020909101906118e2565b506000600283018190556003830155600490910155565b604051806040016040528060008152602001600081525090565b82805482825590600052602060002090810192821561191d579160200282015b8281111561191d578251825591602001919060010190611902565b506116069291505b808211156116065760008155600101611925565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146107cb57600080fd5b60006020828403121561197657600080fd5b61145e8261194d565b6000806040838503121561199257600080fd5b61199b8361194d565b946020939093013593505050565b6000602082840312156119bb57600080fd5b5035919050565b600080604083850312156119d557600080fd5b823591506119e56020840161194d565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611a1757611a176119ee565b500190565b6020808252601b908201527a5749544844524157414c3a2043414c4c45525f4e4f545f4c49444f60281b604082015260600190565b600060208284031215611a6357600080fd5b815160ff8116811461145e57600080fd5b600181815b80851115611aaf578160001904821115611a9557611a956119ee565b80851615611aa257918102915b93841c9390800290611a79565b509250929050565b600082611ac657506001611160565b81611ad357506000611160565b8160018114611ae95760028114611af357611b0f565b6001915050611160565b60ff841115611b0457611b046119ee565b50506001821b611160565b5060208310610133831016604e8410600b8410161715611b32575081810a611160565b611b3c8383611a74565b8060001904821115611b5057611b506119ee565b029392505050565b600061145e60ff841683611ab7565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615611b9757611b976119ee565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611bc157611bc1611b9c565b500490565b600082821015611bd857611bd86119ee565b500390565b6000600019821415611bf157611bf16119ee565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611c2057600080fd5b5051919050565b600060208284031215611c3957600080fd5b8151801515811461145e57600080fd5b6020808252601f908201527f5769746864726177616c51756575653a20717565756520697320656d70747900604082015260600190565b600082611c8f57611c8f611b9c565b500690565b600081611ca357611ca36119ee565b506000190190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220e7adf3d7546b0b459fe80c2aad3c3a9db16a8be59f353729c5eb982c12917a9a64736f6c634300080a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100fc5760003560e01c8063036ec066146101015780630e910c171461011c57806315cda170146101425780631e83409a146101575780631e9a69501461016a578063263cb6b61461017d57806339085301146101a55780633dbfe6cb146101ae5780634f5b636c146101b75780635068231f146101ca57806362cf1182146101dd5780637b207727146101f057806397564389146101f8578063a0965af414610201578063aff7991014610221578063b946b71214610234578063da35a26f14610262578063e10d29ee14610275578063e111e44a146102ab578063e45aeda1146102b4575b600080fd5b6101096102bd565b6040519081526020015b60405180910390f35b600054610135906201000090046001600160a01b031681565b6040516101139190611939565b610155610150366004611964565b6102d4565b005b610109610165366004611964565b6103ce565b61015561017836600461197f565b6107d0565b61019061018b36600461197f565b610925565b60408051928352602083019190915201610113565b610109600c5481565b610109600e5481565b6101556101c53660046119a9565b610961565b6101096101d83660046119a9565b6109de565b600154610135906001600160a01b031681565b610155610a9f565b610109600b5481565b61010961020f3660046119a9565b60086020526000908152604090205481565b61019061022f366004611964565b610da0565b6102476102423660046119a9565b610fa7565b60408051825181526020928301519281019290925201610113565b6101556102703660046119c2565b610fc4565b60045460055460065460075461028b9392919084565b604080519485526020850193909352918301526060820152608001610113565b610109600d5481565b610109600a5481565b6000600c54600a546102cf9190611a04565b905090565b6000546201000090046001600160a01b0316156103425760405162461bcd60e51b815260206004820152602160248201527f5749544844524157414c3a2053544b534d5f414c52454144595f444546494e456044820152601160fa1b60648201526084015b60405180910390fd5b6001600160a01b0381166103a45760405162461bcd60e51b815260206004820152602360248201527f5749544844524157414c3a20494e434f52524543545f53544b534d5f4144445260448201526245535360e81b6064820152608401610339565b600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b600080546201000090046001600160a01b031633146103ff5760405162461bcd60e51b815260040161033990611a1c565b600080600060096000866001600160a01b03166001600160a01b03168152602001908152602001600020905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a39190611a51565b6104ae90600a611b58565b905060005b82548110156105e257600d548382815481106104d1576104d1611b67565b906000526020600020906002020160010154116105765781600860008584815481106104ff576104ff611b67565b90600052602060002090600202016001015481526020019081526020016000205484838154811061053257610532611b67565b90600052602060002090600202016000015461054e9190611b7d565b6105589190611bb2565b6105629086611a04565b945061056f600185611a04565b93506105d2565b82818154811061058857610588611b67565b90600052602060002090600202018385836105a39190611bc6565b815481106105b3576105b3611b67565b6000918252602090912082546002909202019081556001918201549101555b6105db81611bdd565b90506104b3565b5060005b8381101561062c57828054806105fe576105fe611bf8565b60008281526020812060026000199093019283020181815560010155905561062581611bdd565b90506105e6565b506001546040516370a0823160e01b81526001600160a01b03909116906370a082319061065d903090600401611939565b602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190611c0e565b8411156106f75760405162461bcd60e51b815260206004820152602160248201527f5749544844524157414c3a20434c41494d5f455843454544535f42414c414e436044820152604560f81b6064820152608401610339565b60015460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af115801561074a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076e9190611c27565b5083600e60008282546107819190611bc6565b90915550506040518481526001600160a01b038716907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9060200160405180910390a25091925050505b919050565b6000546201000090046001600160a01b031633146108005760405162461bcd60e51b815260040161033990611a1c565b6001600160a01b0382166000908152600960205260409020546014116108685760405162461bcd60e51b815260206004820181905260248201527f5749544844524157414c3a20524551554553545f4341505f45584345454445446044820152606401610339565b80600c600082825461087a9190611a04565b925050819055506000604051806040016040528083815260200161089e600261114d565b90526001600160a01b03841660008181526009602090815260408083208054600181810183559185529383902086516002909502018481559286015192018290555193945091927f4d78899c3f146fbd6f7785cdffdcd04c3ebec37360e3013cb521324632eb2d8692610918928252602082015260400190565b60405180910390a2505050565b6009602052816000526040600020818154811061094157600080fd5b600091825260209091206002909102018054600190910154909250905082565b6000546201000090046001600160a01b031633146109915760405162461bcd60e51b815260040161033990611a1c565b80600a60008282546109a39190611bc6565b90915550506040518181527f18d7ff5061dc5fa3e9d0e114f717c584c7c71cfdbf7afdecd92cefc75daaa8609060200160405180910390a150565b6000806109ec600284611166565b50905060006109fa82611283565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190611a51565b610a7f90600a611b58565b8351610a8c908490611b7d565b610a969190611bb2565b95945050505050565b6000546201000090046001600160a01b03163314610acf5760405162461bcd60e51b815260040161033990611a1c565b600e546001546040516370a0823160e01b8152600092916001600160a01b0316906370a0823190610b04903090600401611939565b602060405180830381865afa158015610b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b459190611c0e565b610b4f9190611bc6565b9050600081118015610b62575060055415155b15610ce057600080610b746002611465565b915091506000610b8383611283565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd9190611a51565b610c0890600a611b58565b8451610c15908490611b7d565b610c1f9190611bb2565b9050808510610cdb5760008381526008602090815260408220849055850151600b805491929091610c51908490611bc6565b9250508190555080600a6000828254610c6a9190611bc6565b9091555050600b54610c7c576000600a555b82600d8190555080600e6000828254610c959190611a04565b90915550610ca590506002611505565b50506040518381527fcec9cdff740b6d842df3489c0dcafe7e1592acfcdae1e8e5daed0378935144aa9060200160405180910390a15b505050505b6000600c54118015610cf55750600654600554105b15610d9d576000610d07600c546115e1565b60408051808201909152600c548152602081018290529091506000610d2d60028361160a565b9050600c54600a6000828254610d439190611a04565b9250508190555082600b6000828254610d5c9190611a04565b90915550506000600c556040518181527f36441530b7e50b8d3b0d7edad61c8773152306fe8d81d836f663711cc6c36df29060200160405180910390a15050505b50565b600080600060096000856001600160a01b03166001600160a01b03168152602001908152602001600020905060008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e449190611a51565b610e4f90600a611b58565b905060005b8254811015610f9f57600d54838281548110610e7257610e72611b67565b90600052602060002090600202016001015411610f0a578160086000858481548110610ea057610ea0611b67565b906000526020600020906002020160010154815260200190815260200160002054848381548110610ed357610ed3611b67565b906000526020600020906002020160000154610eef9190611b7d565b610ef99190611bb2565b610f039085611a04565b9350610f8f565b81610f4a610f45858481548110610f2357610f23611b67565b906000526020600020906002020160010154600261172d90919063ffffffff16565b611283565b848381548110610f5c57610f5c611b67565b906000526020600020906002020160000154610f789190611b7d565b610f829190611bb2565b610f8c9086611a04565b94505b610f9881611bdd565b9050610e54565b505050915091565b610faf6118c8565b6000610fbc600284611166565b509392505050565b600054610100900460ff1680610fdd575060005460ff16155b6110405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610339565b600054610100900460ff16158015611062576000805461ffff19166101011790555b600083116110ae5760405162461bcd60e51b815260206004820152601960248201527805749544844524157414c3a20494e434f52524543545f43415603c1b6044820152606401610339565b6001600160a01b0382166111105760405162461bcd60e51b815260206004820152602360248201527f5749544844524157414c3a20494e434f52524543545f58434b534d5f4144445260448201526245535360e81b6064820152608401610339565b61111b600284611804565b600180546001600160a01b0319166001600160a01b0384161790558015611148576000805461ff00191690555b505050565b6000816005015460016111609190611a04565b92915050565b61116e6118c8565b6000808460030154116111935760405162461bcd60e51b815260040161033990611c49565b836003015483106111f25760405162461bcd60e51b8152602060048201526024808201527f5769746864726177616c51756575653a20696e646578206f75747369646520716044820152637565756560e01b6064820152608401610339565b600084600401548486600201546112099190611a04565b6112139190611c80565b905084600001818154811061122a5761122a611b67565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050925084600101818154811061126e5761126e611b67565b90600052602060002001549150509250929050565b6000806000600b5411156113d45782511561135657600b5483516112a79190611b7d565b600a548460200151600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113269190611a51565b61133190600a611b58565b61133b9190611b7d565b6113459190611b7d565b61134f9190611bb2565b9050611160565b600c54156113cf57600b54600c5461136e9190611b7d565b600a5461137c600c546115e1565b600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611302573d6000803e3d6000fd5b611160565b600c541561116057600060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114539190611a51565b61145e90600a611b58565b9392505050565b61146d6118c8565b6000808360030154116114925760405162461bcd60e51b815260040161033990611c49565b826000018360020154815481106114ab576114ab611b67565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509150826001018360020154815481106114f3576114f3611b67565b90600052602060002001549050915091565b61150d6118c8565b6000808360030154116115325760405162461bcd60e51b815260040161033990611c49565b8260000183600201548154811061154b5761154b611b67565b90600052602060002090600202016040518060400160405290816000820154815260200160018201548152505091508260010183600201548154811061159357611593611b67565b906000526020600020015490508260040154836002015460016115b69190611a04565b6115c09190611c80565b60028401556003830180549060006115d783611c94565b9190505550915091565b600a546000901561160657600a54600b546115fc9084611b7d565b6111609190611bb2565b5090565b6000826004015483600301541061166e5760405162461bcd60e51b815260206004820152602260248201527f5769746864726177616c51756575653a20636170616369747920657863656564604482015261195960f21b6064820152608401610339565b60008360040154846003015485600201546116899190611a04565b6116939190611c80565b9050828460000182815481106116ab576116ab611b67565b6000918252602080832084516002909302019182559290920151600190920191909155600585018054916116de83611bdd565b919050555083600501548460010182815481106116fd576116fd611b67565b60009182526020822001919091556003850180549161171b83611bdd565b90915550505060059092015492915050565b6117356118c8565b60008360010184600201548154811061175057611750611b67565b906000526020600020015490508083106117e85760038401546117738285611bc6565b10156117e8576004840154849061178a8386611bc6565b86600201546117999190611a04565b6117a39190611c80565b815481106117b3576117b3611b67565b906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050915050611160565b5050604080518082019091526000808252602082015292915050565b60005b818110156118585760408051808201909152600080825260208083018281528654600181810189558885529290932093516002909302909301918255915191015561185181611bdd565b9050611807565b50806001600160401b0381111561187157611871611cab565b60405190808252806020026020018201604052801561189a578160200160208202803683370190505b5080516118b19160018501916020909101906118e2565b506000600283018190556003830155600490910155565b604051806040016040528060008152602001600081525090565b82805482825590600052602060002090810192821561191d579160200282015b8281111561191d578251825591602001919060010190611902565b506116069291505b808211156116065760008155600101611925565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146107cb57600080fd5b60006020828403121561197657600080fd5b61145e8261194d565b6000806040838503121561199257600080fd5b61199b8361194d565b946020939093013593505050565b6000602082840312156119bb57600080fd5b5035919050565b600080604083850312156119d557600080fd5b823591506119e56020840161194d565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611a1757611a176119ee565b500190565b6020808252601b908201527a5749544844524157414c3a2043414c4c45525f4e4f545f4c49444f60281b604082015260600190565b600060208284031215611a6357600080fd5b815160ff8116811461145e57600080fd5b600181815b80851115611aaf578160001904821115611a9557611a956119ee565b80851615611aa257918102915b93841c9390800290611a79565b509250929050565b600082611ac657506001611160565b81611ad357506000611160565b8160018114611ae95760028114611af357611b0f565b6001915050611160565b60ff841115611b0457611b046119ee565b50506001821b611160565b5060208310610133831016604e8410600b8410161715611b32575081810a611160565b611b3c8383611a74565b8060001904821115611b5057611b506119ee565b029392505050565b600061145e60ff841683611ab7565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615611b9757611b976119ee565b500290565b634e487b7160e01b600052601260045260246000fd5b600082611bc157611bc1611b9c565b500490565b600082821015611bd857611bd86119ee565b500390565b6000600019821415611bf157611bf16119ee565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611c2057600080fd5b5051919050565b600060208284031215611c3957600080fd5b8151801515811461145e57600080fd5b6020808252601f908201527f5769746864726177616c51756575653a20717565756520697320656d70747900604082015260600190565b600082611c8f57611c8f611b9c565b500690565b600081611ca357611ca36119ee565b506000190190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220e7adf3d7546b0b459fe80c2aad3c3a9db16a8be59f353729c5eb982c12917a9a64736f6c634300080a0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.