Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 16796355 | 572 days ago | IN | 0 ETH | 0.01313383 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ConcentratorHarvesterFacet
Compiler Version
v0.7.6+commit.7338295f
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.7.6; pragma abicoder v2; import "../../concentrator/interfaces/IAladdinCompounder.sol"; import "../../concentrator/interfaces/IConcentratorGeneralVault.sol"; import "../libraries/LibConcentratorHarvester.sol"; // solhint-disable not-rely-on-time contract ConcentratorHarvesterFacet { /// @notice Return the minimum amount CTR should be locked. function minLockCTR() external view returns (uint256) { return LibConcentratorHarvester.harvesterStorage().minLockCTR; } /// @notice Return the minimum number of seconds that veCTR should be locked. function minLockDuration() external view returns (uint256) { return LibConcentratorHarvester.harvesterStorage().minLockDuration; } /// @notice Return whether the account is whitelisted. /// @param _account The address of account to query. function isWhitelist(address _account) external view returns (bool) { LibConcentratorHarvester.HarvesterStorage storage hs = LibConcentratorHarvester.harvesterStorage(); return hs.whitelist[_account]; } /// @notice Return whether the account is blacklisted. /// @param _account The address of account to query. function isBlacklist(address _account) external view returns (bool) { LibConcentratorHarvester.HarvesterStorage storage hs = LibConcentratorHarvester.harvesterStorage(); return hs.blacklist[_account]; } /// @notice Return whether the account can do harvest. /// @param _account The address of account to query. function hasPermission(address _account) external view returns (bool) { ICurveVoteEscrow.LockedBalance memory _locked = ICurveVoteEscrow(LibConcentratorHarvester.veCTR).locked(_account); LibConcentratorHarvester.HarvesterStorage storage hs = LibConcentratorHarvester.harvesterStorage(); // check whether is blacklisted if (hs.blacklist[_account]) return false; // check whether is whitelisted if (hs.whitelist[_account] || hs.minLockCTR == 0) return true; // check veCTR locking return uint128(_locked.amount) >= hs.minLockCTR && _locked.end >= hs.minLockDuration + block.timestamp; } /// @notice Harvest pending rewards from concentrator vault. /// @param _vault The address of concentrator vault contract. /// @param _pid The pool id to harvest. /// @param _minOut The minimum amount of rewards should get. function harvestConcentratorVault( address _vault, uint256 _pid, uint256 _minOut ) external { LibConcentratorHarvester.enforceHasPermission(); IConcentratorGeneralVault(_vault).harvest(_pid, msg.sender, _minOut); } /// @notice Harvest pending rewards from AladdinCompounder contract. /// @param _compounder The address of AladdinCompounder contract. /// @param _minAssets The minimum amount of underlying assets should be harvested. function harvestConcentratorCompounder(address _compounder, uint256 _minAssets) external { LibConcentratorHarvester.enforceHasPermission(); IAladdinCompounder(_compounder).harvest(msg.sender, _minAssets); } /// @notice Update the harvester permission parameters. /// @param _minLockCTR The minimum amount CTR should be locked. /// @param _minLockDuration The minimum number of seconds that veCTR should be locked. function updatePermission(uint128 _minLockCTR, uint128 _minLockDuration) external { LibConcentratorHarvester.enforceIsContractOwner(); LibConcentratorHarvester.updatePermission(_minLockCTR, _minLockDuration); } /// @notice Update the whitelist status of account. /// @param _account The address to update. /// @param _status The status to update. function updateWhitelist(address _account, bool _status) external { LibConcentratorHarvester.enforceIsContractOwner(); LibConcentratorHarvester.updateWhitelist(_account, _status); } /// @notice Update the blacklist status of account. /// @param _account The address to update. /// @param _status The status to update. function updateBlacklist(address _account, bool _status) external { LibConcentratorHarvester.enforceIsContractOwner(); LibConcentratorHarvester.updateBlacklist(_account, _status); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import "../../interfaces/ICurveVoteEscrow.sol"; // solhint-disable const-name-snakecase // solhint-disable no-inline-assembly // solhint-disable not-rely-on-time library LibConcentratorHarvester { /************* * Constants * *************/ /// @dev The storage slot for default diamond storage. bytes32 private constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); /// @dev The storage slot for harvester storage. bytes32 private constant HARVESTER_STORAGE_POSITION = keccak256("diamond.harvester.concentrator.storage"); /// @dev The address of veCTR contract. address internal constant veCTR = 0xe4C09928d834cd58D233CD77B5af3545484B4968; /*********** * Structs * ***********/ struct FacetAddressAndSelectorPosition { address facetAddress; uint16 selectorPosition; } struct DiamondStorage { // function selector => facet address and selector position in selectors array mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition; bytes4[] selectors; mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } struct HarvesterStorage { uint128 minLockCTR; uint128 minLockDuration; mapping(address => bool) whitelist; mapping(address => bool) blacklist; } /********************** * Internal Functions * **********************/ function diamondStorage() private pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } function harvesterStorage() internal pure returns (HarvesterStorage storage hs) { bytes32 position = HARVESTER_STORAGE_POSITION; assembly { hs.slot := position } } function updatePermission(uint128 _minLockCTR, uint128 _minLockDuration) internal { HarvesterStorage storage hs = harvesterStorage(); hs.minLockCTR = _minLockCTR; hs.minLockDuration = _minLockDuration; } function updateWhitelist(address _account, bool _status) internal { HarvesterStorage storage hs = harvesterStorage(); hs.whitelist[_account] = _status; } function updateBlacklist(address _account, bool _status) internal { HarvesterStorage storage hs = harvesterStorage(); hs.blacklist[_account] = _status; } function enforceIsContractOwner() internal view { require(msg.sender == diamondStorage().contractOwner, "only owner"); } function enforceHasPermission() internal view { ICurveVoteEscrow.LockedBalance memory _locked = ICurveVoteEscrow(veCTR).locked(msg.sender); HarvesterStorage storage hs = harvesterStorage(); // check whether is blacklisted require(!hs.blacklist[msg.sender], "account blacklisted"); // check whether is whitelisted if (hs.whitelist[msg.sender] || hs.minLockCTR == 0) return; // check veCTR locking require(uint128(_locked.amount) >= hs.minLockCTR, "insufficient lock amount"); require(_locked.end >= hs.minLockDuration + block.timestamp, "insufficient lock duration"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface IConcentratorGeneralVault { /// @notice Emitted when someone change allowance. /// @param pid The pool id. /// @param owner The address of the owner. /// @param spender The address of the spender. /// @param value The new value of allowance. event Approval(uint256 indexed pid, address indexed owner, address indexed spender, uint256 value); /// @notice Emitted when someone deposits asset into this contract. /// @param pid The pool id. /// @param sender The address who sends underlying asset. /// @param recipient The address who will receive the pool shares. /// @param assetsIn The amount of asset deposited. /// @param sharesOut The amounf of pool shares received. event Deposit( uint256 indexed pid, address indexed sender, address indexed recipient, uint256 assetsIn, uint256 sharesOut ); /// @notice Emitted when someone withdraws asset from this contract. /// @param pid The pool id. /// @param sender The address who call the function. /// @param owner The address who owns the assets. /// @param recipient The address who will receive the assets. /// @param assetsOut The amount of asset withdrawn. /// @param sharesIn The amounf of pool shares to withdraw. event Withdraw( uint256 indexed pid, address indexed sender, address indexed owner, address recipient, uint256 sharesIn, uint256 assetsOut ); /// @notice Emitted when someone claim rewards from this contract. /// @param pid The pool id. /// @param sender The address who call the function. /// @param recipient The address who will receive the rewards; /// @param rewards The amount of reward received. event Claim(uint256 indexed pid, address indexed sender, address indexed recipient, uint256 rewards); /// @notice Emitted when someone harvests rewards. /// @param pid The pool id. /// @param caller The address who call the function. /// @param recipient The address of account to recieve the harvest bounty. /// @param rewards The total amount of rewards harvested. /// @param platformFee The amount of harvested assets as platform fee. /// @param harvestBounty The amount of harvested assets as harvest bounty. event Harvest( uint256 indexed pid, address indexed caller, address indexed recipient, uint256 rewards, uint256 platformFee, uint256 harvestBounty ); /// @notice The address of reward token. function rewardToken() external view returns (address); /// @notice Return the amount of pending rewards for specific pool. /// @param pid The pool id. /// @param account The address of user. function pendingReward(uint256 pid, address account) external view returns (uint256); /// @notice Return the amount of pending AladdinCRV rewards for all pool. /// @param account The address of user. function pendingRewardAll(address account) external view returns (uint256); /// @notice Return the user share for specific user. /// @param pid The pool id to query. /// @param account The address of user. function getUserShare(uint256 pid, address account) external view returns (uint256); /// @notice Return the address of underlying token. /// @param pid The pool id to query. function underlying(uint256 pid) external view returns (address); /// @notice Return the total underlying token deposited. /// @param pid The pool id to query. function getTotalUnderlying(uint256 pid) external view returns (uint256); /// @notice Return the total pool share deposited. /// @param pid The pool id to query. function getTotalShare(uint256 pid) external view returns (uint256); /// @notice Returns the remaining number of shares that `spender` will be allowed to spend on behalf of `owner`. /// @param pid The pool id to query. /// @param owner The address of the owner. /// @param spender The address of the spender. function allowance( uint256 pid, address owner, address spender ) external view returns (uint256); /// @notice Sets `amount` as the allowance of `spender` over the caller's share. /// @param pid The pool id to query. /// @param spender The address of the spender. /// @param amount The amount of allowance. function approve( uint256 pid, address spender, uint256 amount ) external; /// @notice Deposit some token to specific pool for someone. /// @param pid The pool id. /// @param recipient The address of recipient who will recieve the token. /// @param assets The amount of token to deposit. -1 means deposit all. /// @return share The amount of share after deposit. function deposit( uint256 pid, address recipient, uint256 assets ) external returns (uint256 share); /// @notice Withdraw some token from specific pool and zap to token. /// @param pid The pool id. /// @param shares The share of token want to withdraw. -1 means withdraw all. /// @param recipient The address of account who will receive the assets. /// @param owner The address of user to withdraw from. /// @return assets The amount of token sent to recipient. function withdraw( uint256 pid, uint256 shares, address recipient, address owner ) external returns (uint256 assets); /// @notice claim pending rewards from specific pool. /// @param pid The pool id. /// @param recipient The address of account who will receive the rewards. /// @param minOut The minimum amount of pending reward to receive. /// @param claimAsToken The address of token to claim as. Use address(0) if claim as ETH /// @return claimed The amount of reward sent to the recipient. function claim( uint256 pid, address recipient, uint256 minOut, address claimAsToken ) external returns (uint256 claimed); /// @notice claim pending rewards from multiple pools. /// @param pids The list of pool id to claim. /// @param recipient The address of account who will receive the rewards. /// @param minOut The minimum amount of pending reward to receive. /// @param claimAsToken The address of token to claim as. Use address(0) if claim as ETH /// @return claimed The amount of reward sent to the recipient. function claimMulti( uint256[] memory pids, address recipient, uint256 minOut, address claimAsToken ) external returns (uint256 claimed); /// @notice claim pending rewards from all pools. /// @param recipient The address of account who will receive the rewards. /// @param minOut The minimum amount of pending reward to receive. /// @param claimAsToken The address of token to claim as. Use address(0) if claim as ETH /// @return claimed The amount of reward sent to the recipient. function claimAll( uint256 minOut, address recipient, address claimAsToken ) external returns (uint256 claimed); /// @notice Harvest the pending reward and convert to aCRV. /// @param pid The pool id. /// @param recipient The address of account to receive harvest bounty. /// @param minOut The minimum amount of cvxCRV should get. /// @return harvested The amount of cvxCRV harvested after zapping all other tokens to it. function harvest( uint256 pid, address recipient, uint256 minOut ) external returns (uint256 harvested); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; /// @title IAladdinCompounder /// @notice The interface for AladdinCompounder like aCRV, aFXS, and is also EIP4646 compatible. interface IAladdinCompounder { /// @notice Emitted when someone deposits asset into this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param sender The address who sends underlying asset. /// @param owner The address who will receive the pool shares. /// @param assets The amount of asset deposited. /// @param shares The amounf of pool shares received. event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares); /// @notice Emitted when someone withdraws asset from this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param sender The address who call the function. /// @param receiver The address who will receive the assets. /// @param owner The address who owns the assets. /// @param assets The amount of asset withdrawn. /// @param shares The amounf of pool shares to withdraw. event Withdraw( address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares ); /// @notice Emitted when someone harvests rewards. /// @param caller The address who call the function. /// @param recipient The address of account to recieve the harvest bounty. /// @param assets The total amount of underlying asset harvested. /// @param platformFee The amount of harvested assets as platform fee. /// @param harvestBounty The amount of harvested assets as harvest bounty. event Harvest( address indexed caller, address indexed recipient, uint256 assets, uint256 platformFee, uint256 harvestBounty ); /// @notice Return the address of underlying assert. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 function asset() external view returns (address assetTokenAddress); /// @notice Return the total amount of underlying assert mananged by the contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 function totalAssets() external view returns (uint256 totalManagedAssets); /// @notice Return the amount of pool shares given the amount of asset. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of asset to convert. function convertToShares(uint256 assets) external view returns (uint256 shares); /// @notice Return the amount of asset given the amount of pool share. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of pool shares to convert. function convertToAssets(uint256 shares) external view returns (uint256 assets); /// @notice Return the maximum amount of asset that the user can deposit. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param receiver The address of user to receive the pool share. function maxDeposit(address receiver) external view returns (uint256 maxAssets); /// @notice Return the amount of pool shares will receive, if perform a deposit. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of asset to deposit. function previewDeposit(uint256 assets) external view returns (uint256 shares); /// @notice Deposit assets into this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of asset to deposit. /// @param receiver The address of account who will receive the pool share. /// @return shares The amount of pool shares received. function deposit(uint256 assets, address receiver) external returns (uint256 shares); /// @notice Return the maximum amount of pool shares that the user can mint. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param receiver The address of user to receive the pool share. function maxMint(address receiver) external view returns (uint256 maxShares); /// @notice Return the amount of assets needed, if perform a mint. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param shares The amount of pool shares to mint. function previewMint(uint256 shares) external view returns (uint256 assets); /// @notice Mint pool shares from this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param shares The amount of pool shares to mint. /// @param receiver The address of account who will receive the pool share. /// @return assets The amount of assets deposited to the contract. function mint(uint256 shares, address receiver) external returns (uint256 assets); /// @notice Return the maximum amount of assets that the user can withdraw. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param owner The address of user to withdraw from. function maxWithdraw(address owner) external view returns (uint256 maxAssets); /// @notice Return the amount of shares needed, if perform a withdraw. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of assets to withdraw. function previewWithdraw(uint256 assets) external view returns (uint256 shares); /// @notice Withdraw assets from this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param assets The amount of assets to withdraw. /// @param receiver The address of account who will receive the assets. /// @param owner The address of user to withdraw from. /// @return shares The amount of pool shares burned. function withdraw( uint256 assets, address receiver, address owner ) external returns (uint256 shares); /// @notice Return the maximum amount of pool shares that the user can redeem. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param owner The address of user to redeem from. function maxRedeem(address owner) external view returns (uint256 maxShares); /// @notice Return the amount of assets to be received, if perform a redeem. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param shares The amount of pool shares to redeem. function previewRedeem(uint256 shares) external view returns (uint256 assets); /// @notice Redeem assets from this contract. /// @dev See https://eips.ethereum.org/EIPS/eip-4626 /// @param shares The amount of pool shares to burn. /// @param receiver The address of account who will receive the assets. /// @param owner The address of user to withdraw from. /// @return assets The amount of assets withdrawn. function redeem( uint256 shares, address receiver, address owner ) external returns (uint256 assets); /// @notice Harvest rewards and convert to underlying asset. /// @param recipient The address of account to recieve the harvest bounty. /// @param minAssets The minimum amount of underlying asset harvested. /// @return assets The total amount of underlying asset harvested. function harvest(address recipient, uint256 minAssets) external returns (uint256 assets); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; // solhint-disable func-name-mixedcase // solhint-disable var-name-mixedcase interface ICurveVoteEscrow { struct LockedBalance { int128 amount; uint256 end; } /// @notice Deposit `_value` tokens for `msg.sender` and lock until `_unlock_time` /// @param _value Amount to deposit /// @param _unlock_time Epoch time when tokens unlock, rounded down to whole weeks function create_lock(uint256 _value, uint256 _unlock_time) external; /// @notice Deposit `_value` additional tokens for `msg.sender` without modifying the unlock time /// @param _value Amount of tokens to deposit and add to the lock function increase_amount(uint256 _value) external; /// @notice Extend the unlock time for `msg.sender` to `_unlock_time` /// @param _unlock_time New epoch time for unlocking function increase_unlock_time(uint256 _unlock_time) external; /// @notice Withdraw all tokens for `msg.sender` /// @dev Only possible if the lock has expired function withdraw() external; /// @notice Get timestamp when `_addr`'s lock finishes /// @param _addr User wallet /// @return Epoch time of the lock end function locked__end(address _addr) external view returns (uint256); function locked(address _addr) external view returns (LockedBalance memory); }
{ "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
[{"inputs":[{"internalType":"address","name":"_compounder","type":"address"},{"internalType":"uint256","name":"_minAssets","type":"uint256"}],"name":"harvestConcentratorCompounder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"}],"name":"harvestConcentratorVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLockCTR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minLockCTR","type":"uint128"},{"internalType":"uint128","name":"_minLockDuration","type":"uint128"}],"name":"updatePermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610a2e806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806397128e001161006657806397128e001461011a578063c683630d1461012d578063c76b4ae214610140578063c7f884c614610155578063d6a298e9146101685761009e565b806304117561146100a35780630d392cd9146100b85780630f45b177146100cb578063333e99db146100de5780639155e08314610107575b600080fd5b6100b66100b13660046107dd565b610170565b005b6100b66100c63660046107a3565b6101fd565b6100b66100d936600461088f565b610213565b6100f16100ec366004610782565b610225565b6040516100fe9190610906565b60405180910390f35b6100b66101153660046107a3565b610258565b6100f1610128366004610782565b61026a565b6100f161013b366004610782565b6103b5565b6101486103e7565b6040516100fe91906109d0565b6100b6610163366004610806565b610400565b610148610490565b6101786104b0565b60405163018ee9b760e01b81526001600160a01b0383169063018ee9b7906101a690339085906004016108ed565b602060405180830381600087803b1580156101c057600080fd5b505af11580156101d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f891906108c1565b505050565b610205610623565b61020f8282610656565b5050565b61021b610623565b61020f8282610690565b6000806102306106d2565b6001600160a01b03841660009081526002909101602052604090205460ff169150505b919050565b610260610623565b61020f82826106f6565b60405163cbf9fe5f60e01b8152600090819073e4c09928d834cd58d233cd77b5af3545484b49689063cbf9fe5f906102a69086906004016108d9565b604080518083038186803b1580156102bd57600080fd5b505afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610838565b905060006103016106d2565b6001600160a01b038516600090815260028201602052604090205490915060ff161561033257600092505050610253565b6001600160a01b038416600090815260018201602052604090205460ff1680610363575080546001600160801b0316155b1561037357600192505050610253565b805482516001600160801b039182169116108015906103ad5750805460208301516001600160801b03600160801b90920491909116420111155b949350505050565b6000806103c06106d2565b6001600160a01b03841660009081526001909101602052604090205460ff16915050919050565b60006103f16106d2565b546001600160801b0316905090565b6104086104b0565b60405163391c963560e21b81526001600160a01b0384169063e47258d490610438908590339086906004016109d9565b602060405180830381600087803b15801561045257600080fd5b505af1158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a91906108c1565b50505050565b600061049a6106d2565b54600160801b90046001600160801b0316919050565b60405163cbf9fe5f60e01b815260009073e4c09928d834cd58d233cd77b5af3545484b49689063cbf9fe5f906104ea9033906004016108d9565b604080518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610838565b905060006105456106d2565b33600090815260028201602052604090205490915060ff16156105835760405162461bcd60e51b815260040161057a90610911565b60405180910390fd5b33600090815260018201602052604090205460ff16806105ab575080546001600160801b0316155b156105b7575050610621565b805482516001600160801b03918216911610156105e65760405162461bcd60e51b815260040161057a9061093e565b805460208301516001600160801b03600160801b909204919091164201111561020f5760405162461bcd60e51b815260040161057a90610975565b565b61062b610730565b600301546001600160a01b031633146106215760405162461bcd60e51b815260040161057a906109ac565b60006106606106d2565b6001600160a01b039390931660009081526001909301602052506040909120805460ff1916911515919091179055565b600061069a6106d2565b80546001600160801b03938416600160801b029484166fffffffffffffffffffffffffffffffff199091161790921692909217905550565b7f7b3d7c6d072f5ba80c1b8069e5afa5580d5083ebf8116656029468cd718daac790565b60006107006106d2565b6001600160a01b039390931660009081526002909301602052506040909120805460ff1916911515919091179055565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b80356001600160a01b038116811461025357600080fd5b80356001600160801b038116811461025357600080fd5b600060208284031215610793578081fd5b61079c82610754565b9392505050565b600080604083850312156107b5578081fd5b6107be83610754565b9150602083013580151581146107d2578182fd5b809150509250929050565b600080604083850312156107ef578182fd5b6107f883610754565b946020939093013593505050565b60008060006060848603121561081a578081fd5b61082384610754565b95602085013595506040909401359392505050565b600060408284031215610849578081fd5b6040516040810181811067ffffffffffffffff8211171561086657fe5b6040528251600f81900b811461087a578283fd5b81526020928301519281019290925250919050565b600080604083850312156108a1578182fd5b6108aa8361076b565b91506108b86020840161076b565b90509250929050565b6000602082840312156108d2578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6020808252601390820152721858d8dbdd5b9d08189b1858dadb1a5cdd1959606a1b604082015260600190565b60208082526018908201527f696e73756666696369656e74206c6f636b20616d6f756e740000000000000000604082015260600190565b6020808252601a908201527f696e73756666696369656e74206c6f636b206475726174696f6e000000000000604082015260600190565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b90815260200190565b9283526001600160a01b0391909116602083015260408201526060019056fea26469706673582212202d9fa60d941e48f139142513aa954581ab18055b43dafd73afc20649991cddbf64736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806397128e001161006657806397128e001461011a578063c683630d1461012d578063c76b4ae214610140578063c7f884c614610155578063d6a298e9146101685761009e565b806304117561146100a35780630d392cd9146100b85780630f45b177146100cb578063333e99db146100de5780639155e08314610107575b600080fd5b6100b66100b13660046107dd565b610170565b005b6100b66100c63660046107a3565b6101fd565b6100b66100d936600461088f565b610213565b6100f16100ec366004610782565b610225565b6040516100fe9190610906565b60405180910390f35b6100b66101153660046107a3565b610258565b6100f1610128366004610782565b61026a565b6100f161013b366004610782565b6103b5565b6101486103e7565b6040516100fe91906109d0565b6100b6610163366004610806565b610400565b610148610490565b6101786104b0565b60405163018ee9b760e01b81526001600160a01b0383169063018ee9b7906101a690339085906004016108ed565b602060405180830381600087803b1580156101c057600080fd5b505af11580156101d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f891906108c1565b505050565b610205610623565b61020f8282610656565b5050565b61021b610623565b61020f8282610690565b6000806102306106d2565b6001600160a01b03841660009081526002909101602052604090205460ff169150505b919050565b610260610623565b61020f82826106f6565b60405163cbf9fe5f60e01b8152600090819073e4c09928d834cd58d233cd77b5af3545484b49689063cbf9fe5f906102a69086906004016108d9565b604080518083038186803b1580156102bd57600080fd5b505afa1580156102d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f59190610838565b905060006103016106d2565b6001600160a01b038516600090815260028201602052604090205490915060ff161561033257600092505050610253565b6001600160a01b038416600090815260018201602052604090205460ff1680610363575080546001600160801b0316155b1561037357600192505050610253565b805482516001600160801b039182169116108015906103ad5750805460208301516001600160801b03600160801b90920491909116420111155b949350505050565b6000806103c06106d2565b6001600160a01b03841660009081526001909101602052604090205460ff16915050919050565b60006103f16106d2565b546001600160801b0316905090565b6104086104b0565b60405163391c963560e21b81526001600160a01b0384169063e47258d490610438908590339086906004016109d9565b602060405180830381600087803b15801561045257600080fd5b505af1158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a91906108c1565b50505050565b600061049a6106d2565b54600160801b90046001600160801b0316919050565b60405163cbf9fe5f60e01b815260009073e4c09928d834cd58d233cd77b5af3545484b49689063cbf9fe5f906104ea9033906004016108d9565b604080518083038186803b15801561050157600080fd5b505afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610838565b905060006105456106d2565b33600090815260028201602052604090205490915060ff16156105835760405162461bcd60e51b815260040161057a90610911565b60405180910390fd5b33600090815260018201602052604090205460ff16806105ab575080546001600160801b0316155b156105b7575050610621565b805482516001600160801b03918216911610156105e65760405162461bcd60e51b815260040161057a9061093e565b805460208301516001600160801b03600160801b909204919091164201111561020f5760405162461bcd60e51b815260040161057a90610975565b565b61062b610730565b600301546001600160a01b031633146106215760405162461bcd60e51b815260040161057a906109ac565b60006106606106d2565b6001600160a01b039390931660009081526001909301602052506040909120805460ff1916911515919091179055565b600061069a6106d2565b80546001600160801b03938416600160801b029484166fffffffffffffffffffffffffffffffff199091161790921692909217905550565b7f7b3d7c6d072f5ba80c1b8069e5afa5580d5083ebf8116656029468cd718daac790565b60006107006106d2565b6001600160a01b039390931660009081526002909301602052506040909120805460ff1916911515919091179055565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b80356001600160a01b038116811461025357600080fd5b80356001600160801b038116811461025357600080fd5b600060208284031215610793578081fd5b61079c82610754565b9392505050565b600080604083850312156107b5578081fd5b6107be83610754565b9150602083013580151581146107d2578182fd5b809150509250929050565b600080604083850312156107ef578182fd5b6107f883610754565b946020939093013593505050565b60008060006060848603121561081a578081fd5b61082384610754565b95602085013595506040909401359392505050565b600060408284031215610849578081fd5b6040516040810181811067ffffffffffffffff8211171561086657fe5b6040528251600f81900b811461087a578283fd5b81526020928301519281019290925250919050565b600080604083850312156108a1578182fd5b6108aa8361076b565b91506108b86020840161076b565b90509250929050565b6000602082840312156108d2578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6020808252601390820152721858d8dbdd5b9d08189b1858dadb1a5cdd1959606a1b604082015260600190565b60208082526018908201527f696e73756666696369656e74206c6f636b20616d6f756e740000000000000000604082015260600190565b6020808252601a908201527f696e73756666696369656e74206c6f636b206475726174696f6e000000000000604082015260600190565b6020808252600a908201526937b7363c9037bbb732b960b11b604082015260600190565b90815260200190565b9283526001600160a01b0391909116602083015260408201526060019056fea26469706673582212202d9fa60d941e48f139142513aa954581ab18055b43dafd73afc20649991cddbf64736f6c63430007060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.