Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 477 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Imp | 20020315 | 240 days ago | IN | 0 ETH | 0.00038474 | ||||
Harvest | 20014667 | 241 days ago | IN | 0.00085 ETH | 0.0015267 | ||||
Withdraw | 19956504 | 249 days ago | IN | 0.00085 ETH | 0.00226763 | ||||
Deposit | 19923840 | 253 days ago | IN | 0.00085 ETH | 0.00169 | ||||
Harvest | 19837774 | 265 days ago | IN | 0.00085 ETH | 0.00123851 | ||||
Deposit | 19796752 | 271 days ago | IN | 0.00085 ETH | 0.00215763 | ||||
Harvest | 19796730 | 271 days ago | IN | 0.00085 ETH | 0.00174408 | ||||
Deposit | 19791787 | 272 days ago | IN | 0.00085 ETH | 0.00116799 | ||||
Withdraw | 19673185 | 288 days ago | IN | 0.00085 ETH | 0.00237021 | ||||
Withdraw | 19582418 | 301 days ago | IN | 0.00085 ETH | 0.00522508 | ||||
Deposit | 19571232 | 303 days ago | IN | 0.00085 ETH | 0.00520296 | ||||
Harvest | 19570976 | 303 days ago | IN | 0.00085 ETH | 0.00458339 | ||||
Harvest | 19550881 | 305 days ago | IN | 0.00085 ETH | 0.00299265 | ||||
Harvest | 19460061 | 318 days ago | IN | 0.00085 ETH | 0.00436581 | ||||
Deposit | 19448689 | 320 days ago | IN | 0.00085 ETH | 0.0085839 | ||||
Harvest | 19439214 | 321 days ago | IN | 0.00085 ETH | 0.00940895 | ||||
Harvest | 19299972 | 341 days ago | IN | 0.00085 ETH | 0.00666311 | ||||
Harvest | 19147464 | 362 days ago | IN | 0.00085 ETH | 0.00299296 | ||||
Harvest | 19089501 | 370 days ago | IN | 0.00085 ETH | 0.00411715 | ||||
Deposit | 19040589 | 377 days ago | IN | 0.00085 ETH | 0.00497943 | ||||
Harvest | 19040566 | 377 days ago | IN | 0.00085 ETH | 0.00378626 | ||||
Deposit | 18986621 | 385 days ago | IN | 0.00085 ETH | 0.00609184 | ||||
Harvest | 18983101 | 385 days ago | IN | 0.00085 ETH | 0.00576457 | ||||
Withdraw | 18968724 | 387 days ago | IN | 0.00095 ETH | 0.00632705 | ||||
Harvest | 18880131 | 400 days ago | IN | 0.00085 ETH | 0.00500447 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20014667 | 241 days ago | 0.00085 ETH | ||||
19956504 | 249 days ago | 0.00085 ETH | ||||
19923840 | 253 days ago | 0.00085 ETH | ||||
19837774 | 265 days ago | 0.00085 ETH | ||||
19796752 | 271 days ago | 0.00085 ETH | ||||
19796730 | 271 days ago | 0.00085 ETH | ||||
19791787 | 272 days ago | 0.00085 ETH | ||||
19673185 | 288 days ago | 0.00085 ETH | ||||
19582418 | 301 days ago | 0.00085 ETH | ||||
19571232 | 303 days ago | 0.00085 ETH | ||||
19570976 | 303 days ago | 0.00085 ETH | ||||
19550881 | 305 days ago | 0.00085 ETH | ||||
19460061 | 318 days ago | 0.00085 ETH | ||||
19448689 | 320 days ago | 0.00085 ETH | ||||
19439214 | 321 days ago | 0.00085 ETH | ||||
19299972 | 341 days ago | 0.00085 ETH | ||||
19147464 | 362 days ago | 0.00085 ETH | ||||
19089501 | 370 days ago | 0.00085 ETH | ||||
19040589 | 377 days ago | 0.00085 ETH | ||||
19040566 | 377 days ago | 0.00085 ETH | ||||
18986621 | 385 days ago | 0.00085 ETH | ||||
18983101 | 385 days ago | 0.00085 ETH | ||||
18968724 | 387 days ago | 0.00095 ETH | ||||
18880131 | 400 days ago | 0.00085 ETH | ||||
18875744 | 400 days ago | 0.00085 ETH |
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 Source Code Verified (Exact Match)
Contract Name:
SaitaChefProxyFactory
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: UNLICENSED pragma solidity ^0.8.0; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./SaitaChefProxy.sol"; import "./interfaces/ISaitaChef.sol"; import "./interfaces/IToken.sol"; contract SaitaChefProxyFactory is OwnableUpgradeable{ address internal imp; address[] public totalChefInstances; mapping(address => address) public tokenAddrToChefAddr; mapping(address => bool) public tokenExistence; event Deposit(address indexed chefProxy, uint256 amount, uint256 pid, address indexed user); event Withdraw(address indexed chefProxy, uint256 amount, uint256 pid, address indexed user); event Harvest(address indexed chefProxy, uint256 rewardAmount, uint256 pid, address indexed user); event Add(address indexed chefProxy, address indexed _lpToken, uint256 pid, uint256 depositFees, uint256 withdrawalFees, address indexed token, address pairToken, string lpName); event Set(address indexed chefProxy, uint256 pid, uint256 depositFees, uint256 withdrawalFees); event EmergencyWithdrawn(address indexed chefProxy, uint256 amount, uint256 pid, address indexed user); event UpdateEmergencyFees(address indexed chefProxy, uint256 newFees); event UpdatePlatformFee(address indexed chefProxy, uint256 newFees); event UpdateOwnerWallet(address indexed chefProxy, address indexed newOwnerWallet); event UpdateTreasuryWallet(address indexed chefProxy, address indexed newTreasuryWallet); event UpdateRewardWallet(address indexed chefProxy, address indexed newRewardWallet); event UpdateRewardPerBlock(address indexed chefProxy, uint256 newRate); event UpdateMultiplier(address indexed chefProxy, uint256 newMultiplier); event Deployed(address indexed instance); event StakingInitialized(address indexed _proxyInstance, address indexed _saita, uint256 _saitaPerBlock, uint256 _startBlock ); modifier isDuplicated(address _token) { require(tokenExistence[_token] == false, "TOKEN_ALREADY_ADDED"); _; } function initialize(address _imp) external initializer { __Ownable_init(); imp = _imp; } function deposit(address token, uint256 _pid, uint256 _amount) external payable { uint256 amount = ISaitaChef(tokenAddrToChefAddr[token]).deposit{value:msg.value}(msg.sender, _pid, _amount); emit Deposit(tokenAddrToChefAddr[token], amount, _pid, msg.sender); } function withdraw(address token, uint256 _pid, uint256 _amount) external payable { ISaitaChef(tokenAddrToChefAddr[token]).withdraw{value:msg.value}(msg.sender, _pid, _amount); emit Withdraw(tokenAddrToChefAddr[token], _amount, _pid, msg.sender); } function harvest(address token, uint256 _pid) external payable { uint256 rewardAmount = ISaitaChef(tokenAddrToChefAddr[token]).harvest{value:msg.value}(msg.sender, _pid); emit Harvest(tokenAddrToChefAddr[token], rewardAmount, _pid, msg.sender); } function emergencyWithdraw(address token, uint256 _pid) external payable { (uint256 amount) = ISaitaChef(tokenAddrToChefAddr[token]).emergencyWithdraw{value:msg.value}(msg.sender, _pid); emit EmergencyWithdrawn(tokenAddrToChefAddr[token], amount, _pid, msg.sender); } function add(address token, address _lpToken, uint256 _allocPoint, uint256 _depositFees, uint256 _withdrawalFees, bool _withUpdate, address pairToken) external onlyOwner{ uint256 _pid = ISaitaChef(tokenAddrToChefAddr[token]).add(_allocPoint, _lpToken, _depositFees, _withdrawalFees, _withUpdate); string memory pairName = string.concat(IToken(token).symbol(), "-", pairToken!=address(0) ? IToken(pairToken).symbol() : "ETH"); emit Add(tokenAddrToChefAddr[token], _lpToken, _pid, _depositFees, _withdrawalFees, token, pairToken, pairName); } function set(address token,uint256 _pid, uint256 _allocPoint, uint256 _depositFees, uint256 _withdrawalFees, bool _withUpdate) external onlyOwner{ ISaitaChef(tokenAddrToChefAddr[token]).set(_pid, _allocPoint, _depositFees, _withdrawalFees, _withUpdate); emit Set(tokenAddrToChefAddr[token], _pid, _depositFees, _withdrawalFees); } function updateEmergencyFees(address token, uint256 newFees) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateEmergencyFees(newFees); emit UpdateEmergencyFees(tokenAddrToChefAddr[token], newFees); } function updatePlatformFee(address token, uint256 newFee) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updatePlatformFee(newFee); emit UpdatePlatformFee(tokenAddrToChefAddr[token], newFee); } function updateFeeCollector(address token, address newWallet) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateFeeCollector(newWallet); emit UpdateOwnerWallet(tokenAddrToChefAddr[token], newWallet); } function updateTreasuryWallet(address token, address newTreasuryWallet) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateTreasuryWallet(newTreasuryWallet); emit UpdateTreasuryWallet(tokenAddrToChefAddr[token], newTreasuryWallet); } function updateRewardWallet(address token, address newWallet) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateRewardWallet(newWallet); emit UpdateRewardWallet(tokenAddrToChefAddr[token], newWallet); } function updateRewardPerBlock(address token, uint256 newRate) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateRewardPerBlock(newRate); emit UpdateRewardPerBlock(tokenAddrToChefAddr[token], newRate); } function updateMultiplier(address token, uint256 newMultiplier) external onlyOwner { ISaitaChef(tokenAddrToChefAddr[token]).updateMultiplier(newMultiplier); emit UpdateMultiplier(tokenAddrToChefAddr[token], newMultiplier); } function getPoolLength(address token) external view returns(uint256) { return ISaitaChef(tokenAddrToChefAddr[token]).poolLength(); } function deployInstance() external onlyOwner returns(address addr) { addr = address(new SaitaChefProxy(address(this))); require(addr!=address(0), "NULL_CONTRACT_ADDRESS_CREATED"); totalChefInstances.push(addr); emit Deployed(addr); return addr; } function initializeProxyInstance(address _proxyInstance, uint256 _saitaPerBlock, uint256 _startBlock, address token, address _treasury, address _feeCollector, uint256 _platformFees, uint256 _emergencyFees, address _rewardWallet) external onlyOwner isDuplicated(token) { tokenAddrToChefAddr[token] = _proxyInstance; tokenExistence[token] = true; { // initialize pool SaitaChefProxy proxyInstance = SaitaChefProxy(payable(_proxyInstance)); { bytes memory init = returnHash(_saitaPerBlock,_startBlock,token,_treasury, _feeCollector, _platformFees, _emergencyFees, _rewardWallet); if (init.length > 0) assembly { if eq(call(gas(), proxyInstance, 0, add(init, 0x20), mload(init), 0, 0), 0) { revert(0, 0) } } } emit StakingInitialized(_proxyInstance, token, _saitaPerBlock,_startBlock); } } function setFactoryProxyInstance(address _proxyInstance) external onlyOwner { // set factory in deployed proxy instance SaitaChefProxy proxyInstance = SaitaChefProxy(payable(_proxyInstance)); proxyInstance.setFactory(address(this)); } function returnHash(uint256 _saitaPerBlock, uint256 _startBlock, address _saita, address _treasury, address _feeCollector, uint256 _platformFees, uint256 _emergencyFees, address _rewardWallet) internal pure returns(bytes memory data) { data = abi.encodeWithSignature("initialize(uint256,uint256,address,address,address,uint256,uint256,address)", _saitaPerBlock,_startBlock,_saita,_treasury, _feeCollector, _platformFees, _emergencyFees, _rewardWallet); } function updateImp(address _newImp) external onlyOwner { imp = _newImp; } function impl() external view returns(address) { return imp; } function totalChefNo() external view returns(uint256) { return totalChefInstances.length; } function pendingSaita(address token, uint256 pid, address user) external view returns(uint256) { return ISaitaChef(tokenAddrToChefAddr[token]).pendingSaita(pid, user); } function userInfo(address token, uint256 pid, address user) external view returns(uint256) { (uint256 amount,) = ISaitaChef(tokenAddrToChefAddr[token]).userInfo(pid, user); return amount; } function updatePool(address token, uint256 pid) external { ISaitaChef(tokenAddrToChefAddr[token]).updatePool(pid); } function massUpdatePools(address token) external { ISaitaChef(tokenAddrToChefAddr[token]).massUpdatePools(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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); }
// SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.0; import "./interfaces/ISaitaFactory.sol"; contract SaitaChefProxy { bytes32 private constant proxyOwnerPosition = keccak256("com.saitama.chef.proxy.owner"); bytes32 private constant factory = keccak256("com.saitama.chef.proxy.factory"); constructor(address owner) { setProxyOwner(owner); } function setProxyOwner(address newProxyOwner) private { bytes32 position = proxyOwnerPosition; assembly { sstore(position, newProxyOwner) } } function setFactory(address _factory) public { require(msg.sender == proxyOwner(), "ONLY_OWNER_CAN_CHANGE"); bytes32 position = factory; assembly { sstore(position, _factory) } } function getFactory() public view returns (address _factory) { bytes32 position = factory; assembly { _factory := sload(position) } } function proxyOwner() public view returns (address owner) { bytes32 position = proxyOwnerPosition; assembly { owner := sload(position) } } function implementation() public view returns (address) { return ISaitaFactory(getFactory()).impl(); } fallback() external payable { address _impl = implementation(); assembly { let ptr := mload(0x40) // (1) copy incoming call data calldatacopy(ptr, 0, calldatasize()) // (2) forward call to logic contract let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0) let size := returndatasize() // (3) retrieve return data returndatacopy(ptr, 0, size) // (4) forward return data back to caller switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface ISaitaChef { function add(uint256 _allocPoint, address _lpToken, uint256 _depositFees, uint256 _withdrawalFees, bool _withUpdate) external returns(uint256); function set(uint256 _pid, uint256 _allocPoint, uint256 _depositFees, uint256 _withdrawalFees, bool _withUpdate) external; function deposit(address user, uint256 pid, uint256 amount) external payable returns(uint256); function withdraw(address user, uint256 pid, uint256 amount) external payable; function harvest(address user, uint256 pid) external payable returns(uint256); function pendingSaita(uint256 _pid, address _user) external view returns (uint256); function updateRewardPerBlock(uint256 _newRate) external; function emergencyWithdraw(address user, uint256 pid) external payable returns(uint256); function updateEmergencyFees(uint256 newFee) external ; function updatePlatformFee(uint256 newFee) external; function updateFeeCollector(address newWallet) external; function updateTreasuryWallet(address newTreasurywallet) external; function updateRewardWallet(address newWallet) external; function updateMultiplier(uint256 _multiplier) external; function poolLength() external view returns(uint256); function userInfo(uint256 pid, address user) external view returns(uint256, uint256); function updatePool(uint256 pid) external; function massUpdatePools() external; }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; interface IToken { function name() external view returns(string memory); function symbol() external view returns(string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; import "../proxy/utils/Initializable.sol"; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; import "../../utils/AddressUpgradeable.sol"; /** * @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 proxied contracts do not make use of 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. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * 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. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a * constructor. * * Emits an {Initialized} event. */ modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: setting the version to 255 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _initialized = version; _initializing = true; _; _initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint8) { return _initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _initializing; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; interface ISaitaFactory { function impl() external view returns(address); }
{ "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
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":true,"internalType":"address","name":"_lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawalFees","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"pairToken","type":"address"},{"indexed":false,"internalType":"string","name":"lpName","type":"string"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"instance","type":"address"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"EmergencyWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"depositFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawalFees","type":"uint256"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_proxyInstance","type":"address"},{"indexed":true,"internalType":"address","name":"_saita","type":"address"},{"indexed":false,"internalType":"uint256","name":"_saitaPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"StakingInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"newFees","type":"uint256"}],"name":"UpdateEmergencyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"UpdateMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":true,"internalType":"address","name":"newOwnerWallet","type":"address"}],"name":"UpdateOwnerWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"newFees","type":"uint256"}],"name":"UpdatePlatformFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"UpdateRewardPerBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":true,"internalType":"address","name":"newRewardWallet","type":"address"}],"name":"UpdateRewardWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":true,"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"UpdateTreasuryWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"chefProxy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_lpToken","type":"address"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_depositFees","type":"uint256"},{"internalType":"uint256","name":"_withdrawalFees","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"address","name":"pairToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployInstance","outputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPoolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"impl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyInstance","type":"address"},{"internalType":"uint256","name":"_saitaPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_feeCollector","type":"address"},{"internalType":"uint256","name":"_platformFees","type":"uint256"},{"internalType":"uint256","name":"_emergencyFees","type":"uint256"},{"internalType":"address","name":"_rewardWallet","type":"address"}],"name":"initializeProxyInstance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"pendingSaita","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_depositFees","type":"uint256"},{"internalType":"uint256","name":"_withdrawalFees","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyInstance","type":"address"}],"name":"setFactoryProxyInstance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenAddrToChefAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalChefInstances","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalChefNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newFees","type":"uint256"}],"name":"updateEmergencyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newImp","type":"address"}],"name":"updateImp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"updateMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updatePlatformFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506122ce806100206000396000f3fe6080604052600436106101d85760003560e01c806387096f0511610102578063cf815ce811610095578063e51eaf2c11610064578063e51eaf2c1461054e578063ead7b6ab14610563578063f2fde38b14610583578063f8fcc2aa146105a357600080fd5b8063cf815ce8146104b8578063d11e9eea146104d8578063e0059c3d1461050e578063e07403cf1461052e57600080fd5b806395ccea67116100d157806395ccea6714610452578063b5c5f67214610465578063b99c47bc14610478578063c4d66de81461049857600080fd5b806387096f05146103c25780638abf6077146103e25780638da5cb5b146104145780638ed7333d1461043257600080fd5b80633d9a46f01161017a5780636a66d0d2116101495780636a66d0d21461032d5780636ec0a0291461034d578063715018a61461036d5780637e7ede871461038257600080fd5b80633d9a46f0146102ad57806351eaaa57146102cd5780635362b503146102ed578063570b5aff1461030d57600080fd5b806315771475116101b657806315771475146102255780632bdcbda7146102585780633267490f146102785780633bcfc0311461028d57600080fd5b8063018ee9b7146101dd5780630efe6a8b146101f25780630fcf566e14610205575b600080fd5b6101f06101eb366004611aa6565b6105c3565b005b6101f0610200366004611ad0565b6106ac565b34801561021157600080fd5b506101f0610220366004611aa6565b61079c565b34801561023157600080fd5b50610245610240366004611b03565b61086d565b6040519081526020015b60405180910390f35b34801561026457600080fd5b506101f0610273366004611b3f565b6108f9565b34801561028457600080fd5b50606654610245565b34801561029957600080fd5b506101f06102a8366004611bcb565b610aba565b3480156102b957600080fd5b506101f06102c8366004611aa6565b610ae4565b3480156102d957600080fd5b506101f06102e8366004611bed565b610ba8565b3480156102f957600080fd5b506101f0610308366004611bcb565b610c6b565b34801561031957600080fd5b506101f0610328366004611c30565b610cd6565b34801561033957600080fd5b506101f0610348366004611bed565b610dcf565b34801561035957600080fd5b50610245610368366004611b03565b610e92565b34801561037957600080fd5b506101f0610f22565b34801561038e57600080fd5b506103b261039d366004611bcb565b60686020526000908152604090205460ff1681565b604051901515815260200161024f565b3480156103ce57600080fd5b506101f06103dd366004611bcb565b610f36565b3480156103ee57600080fd5b506065546001600160a01b03165b6040516001600160a01b03909116815260200161024f565b34801561042057600080fd5b506033546001600160a01b03166103fc565b34801561043e57600080fd5b506101f061044d366004611aa6565b610f9e565b6101f0610460366004611aa6565b610fde565b6101f0610473366004611ad0565b6110be565b34801561048457600080fd5b506101f0610493366004611bed565b611191565b3480156104a457600080fd5b506101f06104b3366004611bcb565b611254565b3480156104c457600080fd5b506103fc6104d3366004611c88565b611381565b3480156104e457600080fd5b506103fc6104f3366004611bcb565b6067602052600090815260409020546001600160a01b031681565b34801561051a57600080fd5b506101f0610529366004611aa6565b6113ab565b34801561053a57600080fd5b506101f0610549366004611aa6565b611470565b34801561055a57600080fd5b506103fc611535565b34801561056f57600080fd5b506101f061057e366004611ca1565b611649565b34801561058f57600080fd5b506101f061059e366004611bcb565b61187d565b3480156105af57600080fd5b506102456105be366004611bcb565b6118f6565b6001600160a01b0382811660009081526067602052604080822054905163018ee9b760e01b8152336004820152602481018590529192169063018ee9b790349060440160206040518083038185885af1158015610624573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106499190611d12565b6001600160a01b038481166000908152606760209081526040918290205482518581529182018790529394503393909216917f21cbb56dd6543339d498c80d96e1552af32e753decefef74da4c5efef932dbd491015b60405180910390a3505050565b6001600160a01b03838116600090815260676020526040808220549051630efe6a8b60e01b8152336004820152602481018690526044810185905291921690630efe6a8b90349060640160206040518083038185885af1158015610714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107399190611d12565b6001600160a01b038581166000908152606760209081526040918290205482518581529182018890529394503393909216917f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47910160405180910390a350505050565b6107a4611977565b6001600160a01b03828116600090815260676020526040908190205490516315416b3160e31b81526004810184905291169063aa0b598890602401600060405180830381600087803b1580156107f957600080fd5b505af115801561080d573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f5367b030f8e04455fe581e389290939a1fed2c22867424e93a08a3ca90fb5839906108619084815260200190565b60405180910390a25050565b6001600160a01b0383811660009081526067602052604080822054905163cc8feae160e01b81526004810186905284841660248201529192169063cc8feae190604401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190611d12565b949350505050565b610901611977565b6001600160a01b038616600090815260686020526040902054869060ff16156109675760405162461bcd60e51b81526020600482015260136024820152721513d2d15397d053149150511657d051111151606a1b60448201526064015b60405180910390fd5b6001600160a01b03878116600090815260676020908152604080832080546001600160a01b031916948f169490941790935560689052908120805460ff191660011790558a90610a328b8b8b8b8b8b8b8b60408051602481019990995260448901979097526001600160a01b039586166064890152938516608488015291841660a487015260c486015260e4850152166101048084019190915281518084039091018152610124909201905260208101805163adf71f8560e01b6001600160e01b0390911617905290565b805190915015610a565760008060008351602085016000875af103610a5657600080fd5b50876001600160a01b03168b6001600160a01b03167f7b2def0b1435eaac4aa6e33ff92feb38307b870bb9ace925345e48b56ca12cba8c8c604051610aa5929190918252602082015260400190565b60405180910390a35050505050505050505050565b610ac2611977565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610aec611977565b6001600160a01b038281166000908152606760205260409081902054905162fc54bb60e11b8152600481018490529116906301f8a97690602401600060405180830381600087803b158015610b4057600080fd5b505af1158015610b54573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f79ae47fd033188e38f03fe3544ae0e8b981626df8397a219efb410c90709b7a6906108619084815260200190565b610bb0611977565b6001600160a01b038281166000908152606760205260409081902054905163cc600f9160e01b8152838316600482015291169063cc600f9190602401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917fe236ac90fc9ff85ea61b66f411b59fbee0a23a2d595586b1ea2a80a8b2e461af91a35050565b6001600160a01b0380821660009081526067602052604080822054815163630b5ba160e01b8152915193169263630b5ba19260048084019391929182900301818387803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b610cde611977565b6001600160a01b0386811660009081526067602052604090819020549051633072626760e11b81526004810188905260248101879052604481018690526064810185905283151560848201529116906360e4c4ce9060a401600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b505050506001600160a01b038681166000908152606760209081526040918290205482518981529182018790529181018590529116907f70bd1886984139360a7688fe7fee549c7ad1b2cd6882c04cc021dfbdb13369ea9060600160405180910390a2505050505050565b610dd7611977565b6001600160a01b038281166000908152606760205260409081902054905163809d458d60e01b8152838316600482015291169063809d458d90602401600060405180830381600087803b158015610e2d57600080fd5b505af1158015610e41573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917f79a52cbec002ef70283103eb4140713100276944fca2819713130141d04df18391a35050565b6001600160a01b038381166000908152606760205260408082205490516393f1a40b60e01b8152600481018690528484166024820152919283929116906393f1a40b906044016040805180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190611d2b565b5095945050505050565b610f2a611977565b610f3460006119d1565b565b610f3e611977565b604051630b768f0160e31b815230600482015281906001600160a01b03821690635bb47808906024015b600060405180830381600087803b158015610f8257600080fd5b505af1158015610f96573d6000803e3d6000fd5b505050505050565b6001600160a01b03828116600090815260676020526040908190205490516328f582d360e11b8152600481018490529116906351eb05a690602401610f68565b6001600160a01b038281166000908152606760205260408082205490516395ccea6760e01b815233600482015260248101859052919216906395ccea6790349060440160206040518083038185885af115801561103f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110649190611d12565b6001600160a01b038481166000908152606760209081526040918290205482518581529182018790529394503393909216917f776d54d4fe91fdfcf555f0caab1de6392f6be45b0fb749db2b0bb12fe3b43b04910161069f565b6001600160a01b0383811660009081526067602052604090819020549051635ae2fb3960e11b8152336004820152602481018590526044810184905291169063b5c5f6729034906064016000604051808303818588803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506001600160a01b03848116600090815260676020908152604091829020548251868152918201879052339450909216917f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132910161069f565b611199611977565b6001600160a01b0382811660009081526067602052604090819020549051631a586b9d60e31b8152838316600482015291169063d2c35ce890602401600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917ff64c44e7a433ec25908050f86928b3b47eb2b03b40c2116829fcbd39b47a659891a35050565b600054610100900460ff16158080156112745750600054600160ff909116105b8061128e5750303b15801561128e575060005460ff166001145b6112f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095e565b6000805460ff191660011790558015611314576000805461ff0019166101001790555b61131c611a23565b606580546001600160a01b0319166001600160a01b038416179055801561137d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6066818154811061139157600080fd5b6000918252602090912001546001600160a01b0316905081565b6113b3611977565b6001600160a01b0382811660009081526067602052604090819020549051632fff30a360e11b815260048101849052911690635ffe614690602401600060405180830381600087803b15801561140857600080fd5b505af115801561141c573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507fcf12649cc9200d10a84b242df5627dc75aae1025c6d2a3c73b71206d06a44cdc906108619084815260200190565b611478611977565b6001600160a01b038281166000908152606760205260409081902054905163181b27ff60e31b81526004810184905291169063c0d93ff890602401600060405180830381600087803b1580156114cd57600080fd5b505af11580156114e1573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f90b8af5a079ff948f163f52e49aed18d7224abe9cdf0adb5ba1900eeb8810c0f906108619084815260200190565b600061153f611977565b3060405161154c90611a7d565b6001600160a01b039091168152602001604051809103906000f080158015611578573d6000803e3d6000fd5b5090506001600160a01b0381166115d15760405162461bcd60e51b815260206004820152601d60248201527f4e554c4c5f434f4e54524143545f414444524553535f43524541544544000000604482015260640161095e565b6066805460018101825560009182527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b03841690811790915560405190917ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e91a290565b611651611977565b6001600160a01b03878116600090815260676020526040808220549051637b73507360e11b8152600481018990528984166024820152604481018890526064810187905285151560848201529192169063f6e6a0e69060a4016020604051808303816000875af11580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190611d12565b90506000886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117579190810190611d89565b6001600160a01b038416611786576040518060400160405280600381526020016208aa8960eb1b8152506117ec565b836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117ec9190810190611d89565b6040516020016117fd929190611e36565b60408051601f198184030181528282526001600160a01b03808d1660008181526067602052939093205491945091928b83169291909116907f53c6474be7c9cc2b8d0f39ddaaf29dcd0eb71d431e1955f3dec24b28a8bced0d9061186a9087908c908c908b908a90611e72565b60405180910390a4505050505050505050565b611885611977565b6001600160a01b0381166118ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6118f3816119d1565b50565b6001600160a01b03808216600090815260676020908152604080832054815163040f1f6d60e11b815291519394169263081e3eda926004808401939192918290030181865afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190611d12565b92915050565b6033546001600160a01b03163314610f345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611a4a5760405162461bcd60e51b815260040161095e90611ec9565b610f34600054610100900460ff16611a745760405162461bcd60e51b815260040161095e90611ec9565b610f34336119d1565b61038480611f1583390190565b80356001600160a01b0381168114611aa157600080fd5b919050565b60008060408385031215611ab957600080fd5b611ac283611a8a565b946020939093013593505050565b600080600060608486031215611ae557600080fd5b611aee84611a8a565b95602085013595506040909401359392505050565b600080600060608486031215611b1857600080fd5b611b2184611a8a565b925060208401359150611b3660408501611a8a565b90509250925092565b60008060008060008060008060006101208a8c031215611b5e57600080fd5b611b678a611a8a565b985060208a0135975060408a01359650611b8360608b01611a8a565b9550611b9160808b01611a8a565b9450611b9f60a08b01611a8a565b935060c08a0135925060e08a01359150611bbc6101008b01611a8a565b90509295985092959850929598565b600060208284031215611bdd57600080fd5b611be682611a8a565b9392505050565b60008060408385031215611c0057600080fd5b611c0983611a8a565b9150611c1760208401611a8a565b90509250929050565b80358015158114611aa157600080fd5b60008060008060008060c08789031215611c4957600080fd5b611c5287611a8a565b955060208701359450604087013593506060870135925060808701359150611c7c60a08801611c20565b90509295509295509295565b600060208284031215611c9a57600080fd5b5035919050565b600080600080600080600060e0888a031215611cbc57600080fd5b611cc588611a8a565b9650611cd360208901611a8a565b9550604088013594506060880135935060808801359250611cf660a08901611c20565b9150611d0460c08901611a8a565b905092959891949750929550565b600060208284031215611d2457600080fd5b5051919050565b60008060408385031215611d3e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611d80578181015183820152602001611d68565b50506000910152565b600060208284031215611d9b57600080fd5b815167ffffffffffffffff80821115611db357600080fd5b818401915084601f830112611dc757600080fd5b815181811115611dd957611dd9611d4f565b604051601f8201601f19908116603f01168101908382118183101715611e0157611e01611d4f565b81604052828152876020848701011115611e1a57600080fd5b611e2b836020830160208801611d65565b979650505050505050565b60008351611e48818460208801611d65565b602d60f81b9083019081528351611e66816001840160208801611d65565b01600101949350505050565b85815284602082015283604082015260018060a01b038316606082015260a06080820152600082518060a0840152611eb18160c0850160208701611d65565b601f01601f19169190910160c0019695505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405234801561001057600080fd5b5060405161038438038061038483398101604081905261002f9161005d565b610057817fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b5655565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6102e88061009c6000396000f3fe60806040526004361061003f5760003560e01c8063025313a2146100725780635bb47808146100be5780635c60da1b146100de57806388cc58e4146100f3575b6000610049610127565b905060405136600082376000803683855af43d806000843e81801561006c578184f35b8184fd5b005b34801561007e57600080fd5b507fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b56545b6040516001600160a01b03909116815260200160405180910390f35b3480156100ca57600080fd5b506100706100d9366004610271565b6101b7565b3480156100ea57600080fd5b506100a2610127565b3480156100ff57600080fd5b507f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc0546100a2565b60006101517f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc05490565b6001600160a01b0316638abf60776040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b29190610295565b905090565b7fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b56546001600160a01b0316336001600160a01b0316146102355760405162461bcd60e51b81526020600482015260156024820152744f4e4c595f4f574e45525f43414e5f4348414e474560581b604482015260640160405180910390fd5b7f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc055565b6001600160a01b038116811461026e57600080fd5b50565b60006020828403121561028357600080fd5b813561028e81610259565b9392505050565b6000602082840312156102a757600080fd5b815161028e8161025956fea26469706673582212203bdbec81bad86275fa19dd631f52b2350f1fb289b1aef194041ae9747d64d6e464736f6c63430008120033a26469706673582212209fb6c2d5e0161700048e80e4203c7cc7478c8482ea89a130b86ca7a047b9bee164736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101d85760003560e01c806387096f0511610102578063cf815ce811610095578063e51eaf2c11610064578063e51eaf2c1461054e578063ead7b6ab14610563578063f2fde38b14610583578063f8fcc2aa146105a357600080fd5b8063cf815ce8146104b8578063d11e9eea146104d8578063e0059c3d1461050e578063e07403cf1461052e57600080fd5b806395ccea67116100d157806395ccea6714610452578063b5c5f67214610465578063b99c47bc14610478578063c4d66de81461049857600080fd5b806387096f05146103c25780638abf6077146103e25780638da5cb5b146104145780638ed7333d1461043257600080fd5b80633d9a46f01161017a5780636a66d0d2116101495780636a66d0d21461032d5780636ec0a0291461034d578063715018a61461036d5780637e7ede871461038257600080fd5b80633d9a46f0146102ad57806351eaaa57146102cd5780635362b503146102ed578063570b5aff1461030d57600080fd5b806315771475116101b657806315771475146102255780632bdcbda7146102585780633267490f146102785780633bcfc0311461028d57600080fd5b8063018ee9b7146101dd5780630efe6a8b146101f25780630fcf566e14610205575b600080fd5b6101f06101eb366004611aa6565b6105c3565b005b6101f0610200366004611ad0565b6106ac565b34801561021157600080fd5b506101f0610220366004611aa6565b61079c565b34801561023157600080fd5b50610245610240366004611b03565b61086d565b6040519081526020015b60405180910390f35b34801561026457600080fd5b506101f0610273366004611b3f565b6108f9565b34801561028457600080fd5b50606654610245565b34801561029957600080fd5b506101f06102a8366004611bcb565b610aba565b3480156102b957600080fd5b506101f06102c8366004611aa6565b610ae4565b3480156102d957600080fd5b506101f06102e8366004611bed565b610ba8565b3480156102f957600080fd5b506101f0610308366004611bcb565b610c6b565b34801561031957600080fd5b506101f0610328366004611c30565b610cd6565b34801561033957600080fd5b506101f0610348366004611bed565b610dcf565b34801561035957600080fd5b50610245610368366004611b03565b610e92565b34801561037957600080fd5b506101f0610f22565b34801561038e57600080fd5b506103b261039d366004611bcb565b60686020526000908152604090205460ff1681565b604051901515815260200161024f565b3480156103ce57600080fd5b506101f06103dd366004611bcb565b610f36565b3480156103ee57600080fd5b506065546001600160a01b03165b6040516001600160a01b03909116815260200161024f565b34801561042057600080fd5b506033546001600160a01b03166103fc565b34801561043e57600080fd5b506101f061044d366004611aa6565b610f9e565b6101f0610460366004611aa6565b610fde565b6101f0610473366004611ad0565b6110be565b34801561048457600080fd5b506101f0610493366004611bed565b611191565b3480156104a457600080fd5b506101f06104b3366004611bcb565b611254565b3480156104c457600080fd5b506103fc6104d3366004611c88565b611381565b3480156104e457600080fd5b506103fc6104f3366004611bcb565b6067602052600090815260409020546001600160a01b031681565b34801561051a57600080fd5b506101f0610529366004611aa6565b6113ab565b34801561053a57600080fd5b506101f0610549366004611aa6565b611470565b34801561055a57600080fd5b506103fc611535565b34801561056f57600080fd5b506101f061057e366004611ca1565b611649565b34801561058f57600080fd5b506101f061059e366004611bcb565b61187d565b3480156105af57600080fd5b506102456105be366004611bcb565b6118f6565b6001600160a01b0382811660009081526067602052604080822054905163018ee9b760e01b8152336004820152602481018590529192169063018ee9b790349060440160206040518083038185885af1158015610624573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906106499190611d12565b6001600160a01b038481166000908152606760209081526040918290205482518581529182018790529394503393909216917f21cbb56dd6543339d498c80d96e1552af32e753decefef74da4c5efef932dbd491015b60405180910390a3505050565b6001600160a01b03838116600090815260676020526040808220549051630efe6a8b60e01b8152336004820152602481018690526044810185905291921690630efe6a8b90349060640160206040518083038185885af1158015610714573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107399190611d12565b6001600160a01b038581166000908152606760209081526040918290205482518581529182018890529394503393909216917f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47910160405180910390a350505050565b6107a4611977565b6001600160a01b03828116600090815260676020526040908190205490516315416b3160e31b81526004810184905291169063aa0b598890602401600060405180830381600087803b1580156107f957600080fd5b505af115801561080d573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f5367b030f8e04455fe581e389290939a1fed2c22867424e93a08a3ca90fb5839906108619084815260200190565b60405180910390a25050565b6001600160a01b0383811660009081526067602052604080822054905163cc8feae160e01b81526004810186905284841660248201529192169063cc8feae190604401602060405180830381865afa1580156108cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f19190611d12565b949350505050565b610901611977565b6001600160a01b038616600090815260686020526040902054869060ff16156109675760405162461bcd60e51b81526020600482015260136024820152721513d2d15397d053149150511657d051111151606a1b60448201526064015b60405180910390fd5b6001600160a01b03878116600090815260676020908152604080832080546001600160a01b031916948f169490941790935560689052908120805460ff191660011790558a90610a328b8b8b8b8b8b8b8b60408051602481019990995260448901979097526001600160a01b039586166064890152938516608488015291841660a487015260c486015260e4850152166101048084019190915281518084039091018152610124909201905260208101805163adf71f8560e01b6001600160e01b0390911617905290565b805190915015610a565760008060008351602085016000875af103610a5657600080fd5b50876001600160a01b03168b6001600160a01b03167f7b2def0b1435eaac4aa6e33ff92feb38307b870bb9ace925345e48b56ca12cba8c8c604051610aa5929190918252602082015260400190565b60405180910390a35050505050505050505050565b610ac2611977565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610aec611977565b6001600160a01b038281166000908152606760205260409081902054905162fc54bb60e11b8152600481018490529116906301f8a97690602401600060405180830381600087803b158015610b4057600080fd5b505af1158015610b54573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f79ae47fd033188e38f03fe3544ae0e8b981626df8397a219efb410c90709b7a6906108619084815260200190565b610bb0611977565b6001600160a01b038281166000908152606760205260409081902054905163cc600f9160e01b8152838316600482015291169063cc600f9190602401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917fe236ac90fc9ff85ea61b66f411b59fbee0a23a2d595586b1ea2a80a8b2e461af91a35050565b6001600160a01b0380821660009081526067602052604080822054815163630b5ba160e01b8152915193169263630b5ba19260048084019391929182900301818387803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b610cde611977565b6001600160a01b0386811660009081526067602052604090819020549051633072626760e11b81526004810188905260248101879052604481018690526064810185905283151560848201529116906360e4c4ce9060a401600060405180830381600087803b158015610d5057600080fd5b505af1158015610d64573d6000803e3d6000fd5b505050506001600160a01b038681166000908152606760209081526040918290205482518981529182018790529181018590529116907f70bd1886984139360a7688fe7fee549c7ad1b2cd6882c04cc021dfbdb13369ea9060600160405180910390a2505050505050565b610dd7611977565b6001600160a01b038281166000908152606760205260409081902054905163809d458d60e01b8152838316600482015291169063809d458d90602401600060405180830381600087803b158015610e2d57600080fd5b505af1158015610e41573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917f79a52cbec002ef70283103eb4140713100276944fca2819713130141d04df18391a35050565b6001600160a01b038381166000908152606760205260408082205490516393f1a40b60e01b8152600481018690528484166024820152919283929116906393f1a40b906044016040805180830381865afa158015610ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f189190611d2b565b5095945050505050565b610f2a611977565b610f3460006119d1565b565b610f3e611977565b604051630b768f0160e31b815230600482015281906001600160a01b03821690635bb47808906024015b600060405180830381600087803b158015610f8257600080fd5b505af1158015610f96573d6000803e3d6000fd5b505050505050565b6001600160a01b03828116600090815260676020526040908190205490516328f582d360e11b8152600481018490529116906351eb05a690602401610f68565b6001600160a01b038281166000908152606760205260408082205490516395ccea6760e01b815233600482015260248101859052919216906395ccea6790349060440160206040518083038185885af115801561103f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110649190611d12565b6001600160a01b038481166000908152606760209081526040918290205482518581529182018790529394503393909216917f776d54d4fe91fdfcf555f0caab1de6392f6be45b0fb749db2b0bb12fe3b43b04910161069f565b6001600160a01b0383811660009081526067602052604090819020549051635ae2fb3960e11b8152336004820152602481018590526044810184905291169063b5c5f6729034906064016000604051808303818588803b15801561112157600080fd5b505af1158015611135573d6000803e3d6000fd5b505050506001600160a01b03848116600090815260676020908152604091829020548251868152918201879052339450909216917f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132910161069f565b611199611977565b6001600160a01b0382811660009081526067602052604090819020549051631a586b9d60e31b8152838316600482015291169063d2c35ce890602401600060405180830381600087803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b505050506001600160a01b038281166000908152606760205260408082205490518385169391909116917ff64c44e7a433ec25908050f86928b3b47eb2b03b40c2116829fcbd39b47a659891a35050565b600054610100900460ff16158080156112745750600054600160ff909116105b8061128e5750303b15801561128e575060005460ff166001145b6112f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161095e565b6000805460ff191660011790558015611314576000805461ff0019166101001790555b61131c611a23565b606580546001600160a01b0319166001600160a01b038416179055801561137d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6066818154811061139157600080fd5b6000918252602090912001546001600160a01b0316905081565b6113b3611977565b6001600160a01b0382811660009081526067602052604090819020549051632fff30a360e11b815260048101849052911690635ffe614690602401600060405180830381600087803b15801561140857600080fd5b505af115801561141c573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507fcf12649cc9200d10a84b242df5627dc75aae1025c6d2a3c73b71206d06a44cdc906108619084815260200190565b611478611977565b6001600160a01b038281166000908152606760205260409081902054905163181b27ff60e31b81526004810184905291169063c0d93ff890602401600060405180830381600087803b1580156114cd57600080fd5b505af11580156114e1573d6000803e3d6000fd5b5050506001600160a01b0380841660009081526067602052604090819020549051911691507f90b8af5a079ff948f163f52e49aed18d7224abe9cdf0adb5ba1900eeb8810c0f906108619084815260200190565b600061153f611977565b3060405161154c90611a7d565b6001600160a01b039091168152602001604051809103906000f080158015611578573d6000803e3d6000fd5b5090506001600160a01b0381166115d15760405162461bcd60e51b815260206004820152601d60248201527f4e554c4c5f434f4e54524143545f414444524553535f43524541544544000000604482015260640161095e565b6066805460018101825560009182527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b03841690811790915560405190917ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e91a290565b611651611977565b6001600160a01b03878116600090815260676020526040808220549051637b73507360e11b8152600481018990528984166024820152604481018890526064810187905285151560848201529192169063f6e6a0e69060a4016020604051808303816000875af11580156116c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ed9190611d12565b90506000886001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117579190810190611d89565b6001600160a01b038416611786576040518060400160405280600381526020016208aa8960eb1b8152506117ec565b836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117ec9190810190611d89565b6040516020016117fd929190611e36565b60408051601f198184030181528282526001600160a01b03808d1660008181526067602052939093205491945091928b83169291909116907f53c6474be7c9cc2b8d0f39ddaaf29dcd0eb71d431e1955f3dec24b28a8bced0d9061186a9087908c908c908b908a90611e72565b60405180910390a4505050505050505050565b611885611977565b6001600160a01b0381166118ea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6118f3816119d1565b50565b6001600160a01b03808216600090815260676020908152604080832054815163040f1f6d60e11b815291519394169263081e3eda926004808401939192918290030181865afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190611d12565b92915050565b6033546001600160a01b03163314610f345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611a4a5760405162461bcd60e51b815260040161095e90611ec9565b610f34600054610100900460ff16611a745760405162461bcd60e51b815260040161095e90611ec9565b610f34336119d1565b61038480611f1583390190565b80356001600160a01b0381168114611aa157600080fd5b919050565b60008060408385031215611ab957600080fd5b611ac283611a8a565b946020939093013593505050565b600080600060608486031215611ae557600080fd5b611aee84611a8a565b95602085013595506040909401359392505050565b600080600060608486031215611b1857600080fd5b611b2184611a8a565b925060208401359150611b3660408501611a8a565b90509250925092565b60008060008060008060008060006101208a8c031215611b5e57600080fd5b611b678a611a8a565b985060208a0135975060408a01359650611b8360608b01611a8a565b9550611b9160808b01611a8a565b9450611b9f60a08b01611a8a565b935060c08a0135925060e08a01359150611bbc6101008b01611a8a565b90509295985092959850929598565b600060208284031215611bdd57600080fd5b611be682611a8a565b9392505050565b60008060408385031215611c0057600080fd5b611c0983611a8a565b9150611c1760208401611a8a565b90509250929050565b80358015158114611aa157600080fd5b60008060008060008060c08789031215611c4957600080fd5b611c5287611a8a565b955060208701359450604087013593506060870135925060808701359150611c7c60a08801611c20565b90509295509295509295565b600060208284031215611c9a57600080fd5b5035919050565b600080600080600080600060e0888a031215611cbc57600080fd5b611cc588611a8a565b9650611cd360208901611a8a565b9550604088013594506060880135935060808801359250611cf660a08901611c20565b9150611d0460c08901611a8a565b905092959891949750929550565b600060208284031215611d2457600080fd5b5051919050565b60008060408385031215611d3e57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b60005b83811015611d80578181015183820152602001611d68565b50506000910152565b600060208284031215611d9b57600080fd5b815167ffffffffffffffff80821115611db357600080fd5b818401915084601f830112611dc757600080fd5b815181811115611dd957611dd9611d4f565b604051601f8201601f19908116603f01168101908382118183101715611e0157611e01611d4f565b81604052828152876020848701011115611e1a57600080fd5b611e2b836020830160208801611d65565b979650505050505050565b60008351611e48818460208801611d65565b602d60f81b9083019081528351611e66816001840160208801611d65565b01600101949350505050565b85815284602082015283604082015260018060a01b038316606082015260a06080820152600082518060a0840152611eb18160c0850160208701611d65565b601f01601f19169190910160c0019695505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405234801561001057600080fd5b5060405161038438038061038483398101604081905261002f9161005d565b610057817fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b5655565b5061008d565b60006020828403121561006f57600080fd5b81516001600160a01b038116811461008657600080fd5b9392505050565b6102e88061009c6000396000f3fe60806040526004361061003f5760003560e01c8063025313a2146100725780635bb47808146100be5780635c60da1b146100de57806388cc58e4146100f3575b6000610049610127565b905060405136600082376000803683855af43d806000843e81801561006c578184f35b8184fd5b005b34801561007e57600080fd5b507fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b56545b6040516001600160a01b03909116815260200160405180910390f35b3480156100ca57600080fd5b506100706100d9366004610271565b6101b7565b3480156100ea57600080fd5b506100a2610127565b3480156100ff57600080fd5b507f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc0546100a2565b60006101517f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc05490565b6001600160a01b0316638abf60776040518163ffffffff1660e01b8152600401602060405180830381865afa15801561018e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b29190610295565b905090565b7fbc4f1571850c901c10568bf735d5b010f4b89a51313f7bcd3713e783e3175b56546001600160a01b0316336001600160a01b0316146102355760405162461bcd60e51b81526020600482015260156024820152744f4e4c595f4f574e45525f43414e5f4348414e474560581b604482015260640160405180910390fd5b7f92eb0b371c9e0aed3ade2c94f9a87b1d43bc687d45f95be4292a107c0ff8dfc055565b6001600160a01b038116811461026e57600080fd5b50565b60006020828403121561028357600080fd5b813561028e81610259565b9392505050565b6000602082840312156102a757600080fd5b815161028e8161025956fea26469706673582212203bdbec81bad86275fa19dd631f52b2350f1fb289b1aef194041ae9747d64d6e464736f6c63430008120033a26469706673582212209fb6c2d5e0161700048e80e4203c7cc7478c8482ea89a130b86ca7a047b9bee164736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BSC | 100.00% | $677.2 | 0.0187 | $12.66 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.