Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 359 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer To Asse... | 17802836 | 362 days ago | IN | 0.32 ETH | 0.00374469 | ||||
Transfer To Asse... | 17769264 | 367 days ago | IN | 0 ETH | 0.00508726 | ||||
Transfer To Asse... | 17765692 | 367 days ago | IN | 0 ETH | 0.0076908 | ||||
Transfer To Asse... | 17750964 | 369 days ago | IN | 0.075 ETH | 0.0036525 | ||||
Transfer To Asse... | 17744937 | 370 days ago | IN | 0 ETH | 0.00434211 | ||||
Transfer To Asse... | 17744920 | 370 days ago | IN | 0 ETH | 0.00443526 | ||||
Transfer To Asse... | 17744908 | 370 days ago | IN | 0 ETH | 0.00464931 | ||||
Transfer To Asse... | 17727542 | 373 days ago | IN | 0 ETH | 0.00609133 | ||||
Transfer To Asse... | 17727528 | 373 days ago | IN | 0 ETH | 0.00563029 | ||||
Transfer To Asse... | 17726179 | 373 days ago | IN | 0 ETH | 0.00378631 | ||||
Transfer To Asse... | 17726151 | 373 days ago | IN | 0 ETH | 0.00403029 | ||||
Transfer To Asse... | 17726065 | 373 days ago | IN | 0 ETH | 0.00395302 | ||||
Transfer To Asse... | 17726045 | 373 days ago | IN | 0 ETH | 0.0042007 | ||||
Transfer To Asse... | 17690414 | 378 days ago | IN | 0 ETH | 0.00404371 | ||||
Transfer To Asse... | 17641834 | 385 days ago | IN | 0 ETH | 0.0049396 | ||||
Transfer To Asse... | 17641457 | 385 days ago | IN | 0 ETH | 0.0047638 | ||||
Transfer To Asse... | 17641398 | 385 days ago | IN | 0 ETH | 0.0048949 | ||||
Transfer To Asse... | 17634035 | 386 days ago | IN | 0.45 ETH | 0.00642613 | ||||
Transfer To Asse... | 17633975 | 386 days ago | IN | 0.65 ETH | 0.00755443 | ||||
Transfer To Asse... | 17633969 | 386 days ago | IN | 0.65 ETH | 0.00746729 | ||||
Transfer To Asse... | 17633925 | 386 days ago | IN | 0 ETH | 0.00669825 | ||||
Transfer To Asse... | 17633914 | 386 days ago | IN | 0 ETH | 0.00725584 | ||||
Transfer To Asse... | 17633903 | 386 days ago | IN | 0 ETH | 0.00764329 | ||||
Transfer To Asse... | 17627573 | 387 days ago | IN | 0.09777501 ETH | 0.01401917 | ||||
Transfer To Asse... | 17220816 | 444 days ago | IN | 0 ETH | 0.01467403 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17802836 | 362 days ago | 0.32 ETH | ||||
17750964 | 369 days ago | 0.075 ETH | ||||
17634035 | 386 days ago | 0.45 ETH | ||||
17633975 | 386 days ago | 0.65 ETH | ||||
17633969 | 386 days ago | 0.65 ETH | ||||
17633969 | 386 days ago | 0.65 ETH | ||||
17633969 | 386 days ago | 0.65 ETH | ||||
17633969 | 386 days ago | 0.65 ETH | ||||
17633969 | 386 days ago | 0.65 ETH | ||||
17627573 | 387 days ago | 0.09777501 ETH | ||||
17627560 | 387 days ago | 0.07420917 ETH | ||||
17627560 | 387 days ago | 0.07420917 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17627560 | 387 days ago | 7.49512626 ETH | ||||
17228473 | 443 days ago | 0.00693543 ETH | ||||
17228473 | 443 days ago | 0.00693543 ETH | ||||
17228473 | 443 days ago | 0.70047909 ETH | ||||
17228473 | 443 days ago | 0.70047909 ETH | ||||
17228473 | 443 days ago | 0.70047909 ETH | ||||
17228473 | 443 days ago | 0.70047909 ETH | ||||
17228473 | 443 days ago | 0.70047909 ETH |
Loading...
Loading
Contract Name:
PositionsController
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import '../lib/factories/HasFactories.sol'; import './ItemRef.sol'; import 'contracts/position_trading/IPositionAlgorithm.sol'; import './IPositionsController.sol'; import 'contracts/fee/IFeeSettings.sol'; import 'contracts/position_trading/ItemRefAsAssetLibrary.sol'; import 'contracts/position_trading/AssetTransferData.sol'; interface IErc20Balance { function balanceOf(address account) external view returns (uint256); } contract PositionsController is HasFactories, IPositionsController { using ItemRefAsAssetLibrary for ItemRef; IFeeSettings feeSettings; uint256 _positionsCount; // total positions created uint256 _assetsCount; mapping(uint256 => address) public owners; // position owners mapping(uint256 => ItemRef) public ownerAssets; // owner's asset (what is offered). by position ids mapping(uint256 => ItemRef) public outputAssets; // output asset (what they want in return), may be absent, in case of locks. by position ids mapping(uint256 => address) public algorithms; // algorithm for processing the input and output asset mapping(uint256 => bool) _buildModes; // build modes by positions mapping(uint256 => uint256) _positionsByAssets; constructor(address feeSettings_) { feeSettings = IFeeSettings(feeSettings_); } receive() external payable {} modifier onlyPositionOwner(uint256 positionId) { require(owners[positionId] == msg.sender, 'only for position owner'); _; } modifier onlyBuildMode(uint256 positionId) { require(this.isBuildMode(positionId), 'only for position build mode'); _; } modifier oplyPositionAlgorithm(uint256 positionId) { require( this.getAlgorithm(positionId) == msg.sender, 'only for position algotithm' ); _; } function createPosition(address owner) external onlyFactory returns (uint256) { ++_positionsCount; owners[_positionsCount] = owner; _buildModes[_positionsCount] = true; return _positionsCount; } function getPosition(uint256 positionId) external view returns ( address algorithm, AssetData memory asset1, AssetData memory asset2 ) { algorithm = algorithms[positionId]; ItemRef memory ref = this.getAssetReference(positionId, 1); if (ref.addr != address(0)) asset1 = ref.getData(); ref = this.getAssetReference(positionId, 2); if (ref.addr != address(0)) asset2 = ref.getData(); } function positionsCount() external returns (uint256) { return _positionsCount; } function isBuildMode(uint256 positionId) external view returns (bool) { return _buildModes[positionId]; } function stopBuild(uint256 positionId) external onlyFactory onlyBuildMode(positionId) { address alg = algorithms[positionId]; require(alg != address(0), 'has no algorithm'); delete _buildModes[positionId]; emit NewPosition( owners[positionId], algorithms[positionId], positionId ); } function getFeeSettings() external view returns (IFeeSettings) { return feeSettings; } function ownerOf(uint256 positionId) external view override returns (address) { return owners[positionId]; } function getAssetReference(uint256 positionId, uint256 assetCode) external view returns (ItemRef memory) { if (assetCode == 1) return ownerAssets[positionId]; else if (assetCode == 2) return outputAssets[positionId]; else revert('unknown asset code'); } function getAllPositionAssetReferences(uint256 positionId) external view returns (ItemRef memory position1, ItemRef memory position2) { return (ownerAssets[positionId], outputAssets[positionId]); } function getAsset(uint256 positionId, uint256 assetCode) external view returns (AssetData memory data) { return this.getAssetReference(positionId, assetCode).getData(); } function createAsset( uint256 positionId, uint256 assetCode, address assetsController ) external onlyFactory returns (ItemRef memory) { ItemRef memory asset = ItemRef(assetsController, _createNewAssetId()); _positionsByAssets[asset.id] = positionId; if (assetCode == 1) ownerAssets[positionId] = asset; else if (assetCode == 2) outputAssets[positionId] = asset; else revert('unknown asset code'); return asset; } function setAlgorithm(uint256 positionId, address algorithm) external onlyFactory onlyBuildMode(positionId) { algorithms[positionId] = algorithm; } function getAlgorithm(uint256 positionId) external view override returns (address) { return algorithms[positionId]; } function assetsCount() external view returns (uint256) { return _assetsCount; } function createNewAssetId() external onlyFactory returns (uint256) { return _createNewAssetId(); } function _createNewAssetId() internal onlyFactory returns (uint256) { return ++_assetsCount; } function getAssetPositionId(uint256 assetId) external view returns (uint256) { return _positionsByAssets[assetId]; } function beforeAssetTransfer(AssetTransferData calldata arg) external onlyFactory { uint256 positionId = arg.asset.getPositionId(); IPositionAlgorithm alg = IPositionAlgorithm(algorithms[positionId]); if (address(alg) == address(0)) return; alg.beforeAssetTransfer(arg); } function afterAssetTransfer(AssetTransferData calldata arg) external payable onlyFactory { uint256 positionId = arg.asset.getPositionId(); IPositionAlgorithm alg = IPositionAlgorithm(algorithms[positionId]); if (address(alg) == address(0)) return; alg.afterAssetTransfer{ value: msg.value }(arg); } function transferToAsset( uint256 positionId, uint256 assetCode, uint256 count, uint256[] calldata data ) external payable returns (uint256 ethSurplus) { ItemRef memory asset = this.getAssetReference(positionId, assetCode); ethSurplus = IAssetsController(asset.addr).transferToAsset{ value: msg.value }( AssetTransferData( positionId, asset, assetCode, msg.sender, asset.addr, count, data ) ); if (ethSurplus > 0) { (bool surplusSent, ) = payable(msg.sender).call{ value: ethSurplus }(''); require(surplusSent, 'ethereum surplus is not sent'); } } function transferToAssetFrom( address from, uint256 positionId, uint256 assetCode, uint256 count, uint256[] calldata data ) external payable onlyFactory returns (uint256 ethSurplus) { ItemRef memory asset = this.getAssetReference(positionId, assetCode); ethSurplus = IAssetsController(asset.addr).transferToAsset{ value: msg.value }( AssetTransferData( positionId, asset, assetCode, from, asset.addr, count, data ) ); if (ethSurplus > 0) { (bool surplusSent, ) = msg.sender.call{ value: ethSurplus }(''); require(surplusSent, 'ethereum surplus is not sent'); } } function transferToAnotherAssetInternal( ItemRef calldata from, ItemRef calldata to, uint256 count ) external oplyPositionAlgorithm(from.getPositionId()) { require( from.assetTypeId() == to.assetTypeId(), 'transfer from asset to must be same types' ); if (to.assetTypeId() == 2) { uint256 lastBalance = IErc20Balance(to.contractAddr()).balanceOf(to.addr); from.withdraw(to.addr, count); to.addCount(IErc20Balance(to.contractAddr()).balanceOf(to.addr) - lastBalance); } else { from.withdraw(to.addr, count); to.addCount(count); } } function withdraw( uint256 positionId, uint256 assetCode, uint256 count ) external onlyPositionOwner(positionId) { _withdrawTo(positionId, assetCode, msg.sender, count); } function withdrawTo( uint256 positionId, uint256 assetCode, address to, uint256 count ) external { _withdrawTo(positionId, assetCode, to, count); } function _withdrawTo( uint256 positionId, uint256 assetCode, address to, uint256 count ) internal { address algAddr = this.getAlgorithm(positionId); ItemRef memory asset = this.getAssetReference(positionId, assetCode); if (algAddr != address(0)) { IPositionAlgorithm(algAddr).checkCanWithdraw( asset, assetCode, count ); } asset.withdraw(to, count); } function withdrawInternal( ItemRef calldata asset, address to, uint256 count ) external oplyPositionAlgorithm(asset.getPositionId()) { asset.withdraw(to, count); } function count(ItemRef calldata asset) external view returns (uint256) { return asset.count(); } function getCounts(uint256 positionId) external view returns (uint256, uint256) { return ( this.getAssetReference(positionId, 1).count(), this.getAssetReference(positionId, 2).count() ); } function positionLocked(uint256 positionId) external view returns (bool) { address algAddr = this.getAlgorithm(positionId); if (algAddr == address(0)) return false; return IPositionAlgorithm(algAddr).positionLocked(positionId); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import '../ownable/Ownable.sol'; import './IHasFactories.sol'; contract HasFactories is Ownable, IHasFactories { mapping(address => bool) internal _factories; // factories modifier onlyFactory() { require(_isFactory(msg.sender), 'only for factories'); _; } function isFactory(address addr) external view returns (bool) { return _isFactory(addr); } function _isFactory(address addr) internal view returns (bool) { if (addr == address(this)) return true; return _factories[addr]; } function addFactory(address factory) external onlyOwner { _factories[factory] = true; } function removeFactory(address factory) external onlyOwner { _factories[factory] = false; } function setFactories(address[] calldata addresses, bool isFactory_) external onlyOwner { uint256 len = addresses.length; for (uint256 i = 0; i < len; ++i) { _factories[addresses[i]] = isFactory_; } } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; /// @dev reference to the item struct ItemRef { address addr; // referenced contract address uint256 id; // id of the item }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import './IAssetListener.sol'; interface IPositionAlgorithm is IAssetListener { /// @dev if asset can not be withdraw - revert function checkCanWithdraw( ItemRef calldata asset, uint256 assetCode, uint256 count ) external view; /// @dev if true than position is locked and can not withdraw function positionLocked(uint256 positionId) external view returns (bool); /// @dev locks the position /// only position owner function lockPosition(uint256 positionId, uint256 lockSeconds) external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import 'contracts/lib/factories/ContractData.sol'; import 'contracts/fee/IFeeSettings.sol'; import './AssetData.sol'; import './ItemRef.sol'; import './IAssetListener.sol'; import '../lib/factories/IHasFactories.sol'; interface IPositionsController is IHasFactories, IAssetListener { /// @dev new position created event NewPosition( address indexed account, address indexed algorithmAddress, uint256 positionId ); /// @dev returns fee settings function getFeeSettings() external view returns (IFeeSettings); /// @dev creates a position /// @return id of new position /// @param owner the owner of the position /// only factory, only build mode function createPosition(address owner) external returns (uint256); /// @dev returns position data function getPosition(uint256 positionId) external view returns ( address algorithm, AssetData memory asset1, AssetData memory asset2 ); /// @dev returns total positions count function positionsCount() external returns (uint256); /// @dev returns the position owner function ownerOf(uint256 positionId) external view returns (address); /// @dev returns an asset by its code in position 1 or 2 function getAsset(uint256 positionId, uint256 assetCode) external view returns (AssetData memory data); /// @dev returns position assets references function getAllPositionAssetReferences(uint256 positionId) external view returns (ItemRef memory position1, ItemRef memory position2); /// @dev returns asset reference by its code in position 1 or 2 function getAssetReference(uint256 positionId, uint256 assetCode) external view returns (ItemRef memory); /// @dev returns position of tne specific asset id function getAssetPositionId(uint256 assetId) external view returns (uint256); /// @dev creates an asset to position, generates asset reference /// @param positionId position ID /// @param assetCode asset code 1 - owner asset 2 - output asset /// @param assetsController reference to asset /// only factories, only build mode function createAsset( uint256 positionId, uint256 assetCode, address assetsController ) external returns (ItemRef memory); /// @dev sets the position algorithm /// id of algorithm is id of the position /// only factory, only build mode function setAlgorithm(uint256 positionId, address algorithmController) external; /// @dev returns the position algorithm contract function getAlgorithm(uint256 positionId) external view returns (address); /// @dev if true, than position in build mode function isBuildMode(uint256 positionId) external view returns (bool); /// @dev stops the position build mode /// onlyFactories, onlyBuildMode function stopBuild(uint256 positionId) external; /// @dev returns total assets count function assetsCount() external view returns (uint256); /// @dev returns new asset id and increments assetsCount /// only factories function createNewAssetId() external returns (uint256); /// @dev transfers caller asset to asset function transferToAsset( uint256 positionId, uint256 assetCode, uint256 count, uint256[] calldata data ) external payable returns (uint256 ethSurplus); /// @dev transfers to asset from account /// @dev returns ethereum surplus sent back to the sender /// onlyFactory function transferToAssetFrom( address from, uint256 positionId, uint256 assetCode, uint256 count, uint256[] calldata data ) external payable returns (uint256 ethSurplus); /// @dev withdraw asset by its position and code (makes all checks) /// only position owner function withdraw( uint256 positionId, uint256 assetCode, uint256 count ) external; /// @dev withdraws asset to specific address /// only position owner function withdrawTo( uint256 positionId, uint256 assetCode, address to, uint256 count ) external; /// @dev internal withdraw asset for algorithms /// oplyPositionAlgorithm function withdrawInternal( ItemRef calldata asset, address to, uint256 count ) external; /// @dev transfers asset to another same type asset /// oplyPositionAlgorithm function transferToAnotherAssetInternal( ItemRef calldata from, ItemRef calldata to, uint256 count ) external; /// @dev returns the count of the asset function count(ItemRef calldata asset) external view returns (uint256); /// @dev returns all counts of the position /// usefull for get snapshot for same algotithms function getCounts(uint256 positionId) external view returns (uint256, uint256); /// @dev if returns true than position is locked function positionLocked(uint256 positionId) external view returns (bool); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; interface IFeeSettings { function feeAddress() external returns (address); // address to pay fee function feePercent() external returns (uint256); // fee in 1/decimals for deviding values function feeDecimals() external view returns(uint256); // fee decimals function feeEth() external returns (uint256); // fee value for not dividing deal points }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import 'contracts/position_trading/ItemRef.sol'; import 'contracts/position_trading/IAssetsController.sol'; /// @dev item reference as asset wrapper functions library ItemRefAsAssetLibrary { function assetsController(ItemRef memory ref) internal pure returns (IAssetsController) { return IAssetsController(ref.addr); } function assetTypeId(ItemRef memory ref) internal pure returns (uint256) { return assetsController(ref).assetTypeId(); } function count(ItemRef memory ref) internal view returns (uint256) { return assetsController(ref).count(ref.id); } function addCount(ItemRef memory ref, uint256 countToAdd) internal { assetsController(ref).addCount(ref.id, countToAdd); } function removeCount(ItemRef memory ref, uint256 countToRemove) internal { assetsController(ref).removeCount(ref.id, countToRemove); } function withdraw( ItemRef memory ref, address recepient, uint256 cnt ) internal { assetsController(ref).withdraw(ref.id, recepient, cnt); } function getPositionId(ItemRef memory ref) internal view returns (uint256) { return assetsController(ref).getPositionId(ref.id); } function clone(ItemRef memory ref, address owner) internal returns (ItemRef memory) { return assetsController(ref).clone(ref.id, owner); } function setNotifyListener(ItemRef memory ref, bool value) internal { assetsController(ref).setNotifyListener(ref.id, value); } function initialize( ItemRef memory ref, address from, AssetCreationData calldata data ) internal { assetsController(ref).initialize(from, ref.id, data); } function getData(ItemRef memory ref) internal view returns (AssetData memory data) { return assetsController(ref).getData(ref.id); } function getCode(ItemRef memory ref) internal view returns (uint256) { return assetsController(ref).getCode(ref.id); } function contractAddr(ItemRef memory ref) internal view returns (address) { return assetsController(ref).contractAddr(ref.id); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import './ItemRef.sol'; struct AssetTransferData { uint256 positionId; ItemRef asset; uint256 assetCode; address from; address to; uint256 count; uint256[] data; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import './IOwnable.sol'; contract Ownable is IOwnable { address _owner; constructor() { _owner = msg.sender; } modifier onlyOwner() { require(_owner == msg.sender, 'caller is not the owner'); _; } function owner() external virtual view returns (address) { return _owner; } function transferOwnership(address newOwner) external override onlyOwner { _owner = newOwner; } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import '../ownable/IOwnable.sol'; interface IHasFactories is IOwnable { /// @dev returns true, if addres is factory function isFactory(address addr) external view returns (bool); /// @dev mark address as factory (only owner) function addFactory(address factory) external; /// @dev mark address as not factory (only owner) function removeFactory(address factory) external; /// @dev mark addresses as factory or not (only owner) function setFactories(address[] calldata addresses, bool isFactory_) external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; interface IOwnable { function owner() external view returns (address); function transferOwnership(address newOwner) external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import 'contracts/position_trading/PositionSnapshot.sol'; import 'contracts/position_trading/AssetTransferData.sol'; import './ItemRef.sol'; interface IAssetListener { function beforeAssetTransfer(AssetTransferData calldata arg) external; function afterAssetTransfer(AssetTransferData calldata arg) external payable; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; // todo cut out struct PositionSnapshot { uint256 owner; uint256 output; uint256 slippage; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; /// @dev data is generated by factory of contract struct ContractData { address factory; // factory address contractAddr; // contract }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; /// @dev read only struct, represents asset struct AssetData { address addr; // the asset contract address uint256 id; // asset id or zero if asset is not exists uint256 assetTypeId; // 1-eth 2-erc20 3-erc721Item 4-Erc721Count uint256 positionId; uint256 positionAssetCode; // code of the asset - 1 or 2 address owner; uint256 count; // current count of the asset address contractAddr; // contract, using in asset or zero if ether uint256 value; // extended asset value (nft id for example) }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; import './AssetData.sol'; import 'contracts/position_trading/ItemRef.sol'; import 'contracts/position_trading/AssetCreationData.sol'; import 'contracts/position_trading/AssetData.sol'; import 'contracts/position_trading/AssetTransferData.sol'; interface IAssetsController { /// @dev initializes the asset by its data /// onlyBuildMode function initialize( address from, uint256 assetId, AssetCreationData calldata data ) external payable returns (uint256 ethSurplus); /// @dev algorithm-controller address function algorithm(uint256 assetId) external view returns (address); /// @dev positions controller function positionsController() external view returns (address); /// @dev returns the asset type code (also used to check asset interface support) /// @return uint256 1-eth 2-erc20 3-erc721Item 4-Erc721Count function assetTypeId() external pure returns (uint256); /// @dev returns the position id by asset id function getPositionId(uint256 assetId) external view returns (uint256); /// @dev the algorithm of the asset that controls it function getAlgorithm(uint256 assetId) external view returns (address algorithm); /// @dev returns the asset code 1 or 2 function getCode(uint256 assetId) external view returns (uint256); /// @dev asset count function count(uint256 assetId) external view returns (uint256); /// @dev external value of the asset (nft token id for example) function value(uint256 assetId) external view returns (uint256); /// @dev the address of the contract that is wrapped in the asset function contractAddr(uint256 assetId) external view returns (address); /// @dev returns the full assets data function getData(uint256 assetId) external view returns (AssetData memory); /// @dev withdraw the asset /// @param recepient recepient of asset /// @param count count to withdraw /// onlyPositionsController or algorithm function withdraw( uint256 assetId, address recepient, uint256 count ) external; /// @dev add count to asset /// onlyPositionsController function addCount(uint256 assetId, uint256 count) external; /// @dev remove asset count /// onlyPositionsController function removeCount(uint256 assetId, uint256 count) external; /// @dev transfers to current asset from specific account /// @dev returns ethereum surplus sent back to the sender /// onlyPositionsController function transferToAsset(AssetTransferData calldata arg) external payable returns (uint256 ethSurplus); /// @dev creates a copy of the current asset, with 0 count and the specified owner /// @return uint256 new asset reference function clone(uint256 assetId, address owner) external returns (ItemRef memory); /// @dev owner of the asset function owner(uint256 assetId) external view returns (address); /// @dev if true, then asset notifies its observer (owner) function isNotifyListener(uint256 assetId) external view returns (bool); /// @dev enables or disables the observer notification mechanism /// only factories function setNotifyListener(uint256 assetId, bool value) external; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.17; /// @dev asset creation data struct AssetCreationData { /// @dev asset codes: /// 0 - asset is missing /// 1 - EthAsset /// 2 - Erc20Asset /// 3 - Erc721ItemAsset uint256 assetTypeCode; address contractAddress; /// @dev value for asset creation (count or tokenId) uint256 value; }
{ "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":"feeSettings_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"algorithmAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"NewPosition","type":"event"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"asset","type":"tuple"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"internalType":"struct AssetTransferData","name":"arg","type":"tuple"}],"name":"afterAssetTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"algorithms","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assetsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"asset","type":"tuple"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"internalType":"struct AssetTransferData","name":"arg","type":"tuple"}],"name":"beforeAssetTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"asset","type":"tuple"}],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"address","name":"assetsController","type":"address"}],"name":"createAsset","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createNewAssetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"createPosition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"getAlgorithm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"getAllPositionAssetReferences","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"position1","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"position2","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"}],"name":"getAsset","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"assetTypeId","type":"uint256"},{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"positionAssetCode","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"contractAddr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct AssetData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"getAssetPositionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"}],"name":"getAssetReference","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"getCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeSettings","outputs":[{"internalType":"contract IFeeSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"getPosition","outputs":[{"internalType":"address","name":"algorithm","type":"address"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"assetTypeId","type":"uint256"},{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"positionAssetCode","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"contractAddr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct AssetData","name":"asset1","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"assetTypeId","type":"uint256"},{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"positionAssetCode","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"contractAddr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct AssetData","name":"asset2","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"isBuildMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"outputAssets","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerAssets","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"positionLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"address","name":"algorithm","type":"address"}],"name":"setAlgorithm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isFactory_","type":"bool"}],"name":"setFactories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"stopBuild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"from","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"to","type":"tuple"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"transferToAnotherAssetInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"name":"transferToAsset","outputs":[{"internalType":"uint256","name":"ethSurplus","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"name":"transferToAssetFrom","outputs":[{"internalType":"uint256","name":"ethSurplus","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct ItemRef","name":"asset","type":"tuple"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"withdrawInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002b9f38038062002b9f833981016040819052620000349162000068565b60008054336001600160a01b031991821617909155600280549091166001600160a01b03929092169190911790556200009a565b6000602082840312156200007b57600080fd5b81516001600160a01b03811681146200009357600080fd5b9392505050565b612af580620000aa6000396000f3fe60806040526004361061021d5760003560e01c80637818d48c11610123578063bbc6d73c116100ab578063eb02c3011161006f578063eb02c3011461071d578063f2fde38b1461074c578063f7e0ebf61461076c578063fdb159261461078c578063ff1b2bb41461082457600080fd5b8063bbc6d73c14610685578063cd9df19014610698578063ce3ee62c146106ad578063d93b080c146106dd578063e1dcaf77146106fd57600080fd5b8063a41fe49f116100f2578063a41fe49f146105f4578063acde933614610614578063aeadb8e014610627578063b0f164981461063c578063bad5fdb11461067257600080fd5b80637818d48c146105615780638da5cb5b14610581578063999518fa1461059f5780639d0f5450146105d457600080fd5b806329ce1ec5116101a6578063498e516511610175578063498e5165146104885780634b37c73f146104b55780636352211e146104d557806364d4058e1461050b57806374c895151461054157600080fd5b806329ce1ec5146104155780632b38400e146104355780632d70fc2d1461045357806335cbf96d1461047357600080fd5b80630f04ba67116101ed5780630f04ba671461033857806310a8042f1461036857806319b3e509146103a8578063257d2f9f146103c857806325fd9b17146103f557600080fd5b80621e728a14610229578063025e7c271461026957806308a8ce1f146102b75780630e0d6382146102d957600080fd5b3661022457005b600080fd5b34801561023557600080fd5b506102566102443660046121b1565b6000908152600a602052604090205490565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5061029f6102843660046121b1565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610260565b3480156102c357600080fd5b506102d76102d2366004612224565b610844565b005b3480156102e557600080fd5b506103196102f43660046121b1565b600760205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b039093168352602083019190915201610260565b34801561034457600080fd5b5061035861035336600461229b565b6108ee565b6040519015158152602001610260565b34801561037457600080fd5b506103196103833660046121b1565b600660205260009081526040902080546001909101546001600160a01b039091169082565b3480156103b457600080fd5b506102d76103c33660046122b8565b6108ff565b3480156103d457600080fd5b506103e86103e33660046122e8565b610a01565b6040516102609190612372565b34801561040157600080fd5b506102d76104103660046121b1565b610a7f565b34801561042157600080fd5b506102d761043036600461229b565b610c19565b34801561044157600080fd5b506002546001600160a01b031661029f565b34801561045f57600080fd5b506102d761046e366004612381565b610c6a565b34801561047f57600080fd5b50610256610c7c565b34801561049457600080fd5b506104a86104a33660046123c0565b610cb0565b60405161026091906123ee565b3480156104c157600080fd5b506102d76104d036600461229b565b610df6565b3480156104e157600080fd5b5061029f6104f03660046121b1565b6000908152600560205260409020546001600160a01b031690565b34801561051757600080fd5b5061029f6105263660046121b1565b6000908152600860205260409020546001600160a01b031690565b34801561054d57600080fd5b506102d761055c366004612426565b610e41565b34801561056d57600080fd5b506104a861057c3660046122e8565b611167565b34801561058d57600080fd5b506000546001600160a01b031661029f565b3480156105ab57600080fd5b506105bf6105ba3660046121b1565b6111f5565b60408051928352602083019190915201610260565b3480156105e057600080fd5b506103586105ef3660046121b1565b6112a2565b34801561060057600080fd5b506102d761060f366004612464565b611389565b6102d7610622366004612490565b6113fd565b34801561063357600080fd5b50600354610256565b34801561064857600080fd5b5061029f6106573660046121b1565b6008602052600090815260409020546001600160a01b031681565b6102566106803660046124cc565b6114c4565b61025661069336600461252d565b6116cf565b3480156106a457600080fd5b50600454610256565b3480156106b957600080fd5b506103586106c83660046121b1565b60009081526009602052604090205460ff1690565b3480156106e957600080fd5b506102d76106f8366004612490565b611900565b34801561070957600080fd5b506102566107183660046125a0565b6119c4565b34801561072957600080fd5b5061073d6107383660046121b1565b6119d8565b604051610260939291906125bc565b34801561075857600080fd5b506102d761076736600461229b565b611b18565b34801561077857600080fd5b5061025661078736600461229b565b611b64565b34801561079857600080fd5b506108166107a73660046121b1565b604080518082018252600080825260209182018190528251808401845281815282018190529283526006815281832060078252928290208251808401845284546001600160a01b0390811682526001958601548285015284518086019095528254168452930154908201529091565b6040516102609291906125e8565b34801561083057600080fd5b506102d761083f366004612622565b611bea565b6000546001600160a01b031633146108775760405162461bcd60e51b815260040161086e90612662565b60405180910390fd5b8160005b818110156108e757826001600087878581811061089a5761089a612699565b90506020020160208101906108af919061229b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556108e0816126c5565b905061087b565b5050505050565b60006108f982611cc8565b92915050565b61090833611cc8565b6109245760405162461bcd60e51b815260040161086e906126de565b60405163338fb98b60e21b8152600481018390528290309063ce3ee62c90602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610986919061270a565b6109d25760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920666f7220706f736974696f6e206275696c64206d6f646500000000604482015260640161086e565b5060009182526008602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b610a0961214a565b604051631e06352360e21b81526004810184905260248101839052610a78903090637818d48c906044016040805180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a73919061279b565b611d01565b9392505050565b610a8833611cc8565b610aa45760405162461bcd60e51b815260040161086e906126de565b60405163338fb98b60e21b8152600481018290528190309063ce3ee62c90602401602060405180830381865afa158015610ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b06919061270a565b610b525760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920666f7220706f736974696f6e206275696c64206d6f646500000000604482015260640161086e565b6000828152600860205260409020546001600160a01b031680610baa5760405162461bcd60e51b815260206004820152601060248201526f686173206e6f20616c676f726974686d60801b604482015260640161086e565b6000838152600960209081526040808320805460ff19169055600882528083205460058352928190205490518681526001600160a01b0393841693909116917f5bd5312e98e4e3c59594cdb0e3925ba1351628a2bef5c905af091d5370a86b6f910160405180910390a3505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161086e90612662565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610c7684848484611d7e565b50505050565b6000610c8733611cc8565b610ca35760405162461bcd60e51b815260040161086e906126de565b610cab611ee5565b905090565b6040805180820190915260008082526020820152610ccd33611cc8565b610ce95760405162461bcd60e51b815260040161086e906126de565b60006040518060400160405280846001600160a01b03168152602001610d0d611ee5565b90526020808201516000908152600a9091526040902086905590506001849003610d6d576000858152600660209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600190910155610dee565b83600203610db1576000858152600760209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600190910155610dee565b60405162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e20617373657420636f646560701b604482015260640161086e565b949350505050565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161086e90612662565b6001600160a01b03166000908152600160205260409020805460ff19169055565b610e58610e53368590038501856127d5565b611f25565b60405163326a02c760e11b815260048101829052339030906364d4058e90602401602060405180830381865afa158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba919061280f565b6001600160a01b031614610f105760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f7220706f736974696f6e20616c676f746974686d0000000000604482015260640161086e565b610f27610f22368590038501856127d5565b611fa1565b610f39610f22368790038701876127d5565b14610f985760405162461bcd60e51b815260206004820152602960248201527f7472616e736665722066726f6d20617373657420746f206d7573742062652073604482015268616d6520747970657360b81b606482015260840161086e565b610faa610f22368590038501856127d5565b600203611134576000610fca610fc5368690038601866127d5565b611fe8565b6001600160a01b03166370a08231610fe5602087018761229b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d919061282c565b905061107661105f602086018661229b565b8461106f368990038901896127d5565b9190612064565b61112e8161108c610fc5368890038801886127d5565b6001600160a01b03166370a082316110a7602089018961229b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061282c565b6111199190612845565b611128368790038701876127d5565b906120a9565b50610c76565b611154611144602085018561229b565b8361106f368890038801886127d5565b610c7682611128368690038601866127d5565b6040805180820190915260008082526020820152816001036111b85750600082815260066020908152604091829020825180840190935280546001600160a01b0316835260010154908201526108f9565b81600203610db15750600082815260076020908152604091829020825180840190935280546001600160a01b0316835260010154908201526108f9565b604051631e06352360e21b81526004810182905260016024820152600090819061126a903090637818d48c906044015b6040805180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061279b565b61210f565b604051631e06352360e21b81526004810185905260026024820152611299903090637818d48c90604401611225565b91509150915091565b60405163326a02c760e11b815260048101829052600090819030906364d4058e90602401602060405180830381865afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061280f565b90506001600160a01b0381166113205750600092915050565b6040516309d0f54560e41b8152600481018490526001600160a01b03821690639d0f545090602401602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a78919061270a565b60008381526005602052604090205483906001600160a01b031633146113f15760405162461bcd60e51b815260206004820152601760248201527f6f6e6c7920666f7220706f736974696f6e206f776e6572000000000000000000604482015260640161086e565b610c7684843385611d7e565b61140633611cc8565b6114225760405162461bcd60e51b815260040161086e906126de565b6000611439610e53368490038401602085016127d5565b6000818152600860205260409020549091506001600160a01b03168061145e57505050565b60405163566f499b60e11b81526001600160a01b0382169063acde933690349061148c9087906004016128d3565b6000604051808303818588803b1580156114a557600080fd5b505af11580156114b9573d6000803e3d6000fd5b505050505050505b50565b604051631e06352360e21b8152600481018690526024810185905260009081903090637818d48c906044016040805180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f919061279b565b905080600001516001600160a01b0316637303d7d3346040518060e001604052808b81526020018581526020018a8152602001336001600160a01b0316815260200185600001516001600160a01b0316815260200189815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509152506040516001600160e01b031960e085901b1681526115e0919060040161297f565b60206040518083038185885af11580156115fe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611623919061282c565b915081156116c557604051600090339084908381818185875af1925050503d806000811461166d576040519150601f19603f3d011682016040523d82523d6000602084013e611672565b606091505b50509050806116c35760405162461bcd60e51b815260206004820152601c60248201527f657468657265756d20737572706c7573206973206e6f742073656e7400000000604482015260640161086e565b505b5095945050505050565b60006116da33611cc8565b6116f65760405162461bcd60e51b815260040161086e906126de565b604051631e06352360e21b815260048101879052602481018690526000903090637818d48c906044016040805180830381865afa15801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f919061279b565b905080600001516001600160a01b0316637303d7d3346040518060e001604052808b81526020018581526020018a81526020018c6001600160a01b0316815260200185600001516001600160a01b0316815260200189815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509152506040516001600160e01b031960e085901b168152611810919060040161297f565b60206040518083038185885af115801561182e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611853919061282c565b915081156118f557604051600090339084908381818185875af1925050503d806000811461189d576040519150601f19603f3d011682016040523d82523d6000602084013e6118a2565b606091505b50509050806118f35760405162461bcd60e51b815260206004820152601c60248201527f657468657265756d20737572706c7573206973206e6f742073656e7400000000604482015260640161086e565b505b509695505050505050565b61190933611cc8565b6119255760405162461bcd60e51b815260040161086e906126de565b600061193c610e53368490038401602085016127d5565b6000818152600860205260409020549091506001600160a01b03168061196157505050565b60405163364ec20360e21b81526001600160a01b0382169063d93b080c9061198d9086906004016128d3565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b50505050505050565b60006108f9611265368490038401846127d5565b60006119e261214a565b6119ea61214a565b600084815260086020526040808220549051631e06352360e21b815260048101879052600160248201526001600160a01b0390911694503090637818d48c906044016040805180830381865afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061279b565b80519091506001600160a01b031615611a8b57611a8881611d01565b92505b604051631e06352360e21b815260048101869052600260248201523090637818d48c906044016040805180830381865afa158015611acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af1919061279b565b80519091506001600160a01b031615611b1057611b0d81611d01565b91505b509193909250565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161086e90612662565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611b6f33611cc8565b611b8b5760405162461bcd60e51b815260040161086e906126de565b600360008154611b9a906126c5565b909155505060038054600090815260056020908152604080832080546001600160a01b0319166001600160a01b0387161790558354835260099091529020805460ff19166001179055545b919050565b611bfc610e53368590038501856127d5565b60405163326a02c760e11b815260048101829052339030906364d4058e90602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e919061280f565b6001600160a01b031614611cb45760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f7220706f736974696f6e20616c676f746974686d0000000000604482015260640161086e565b610c76838361106f368890038801886127d5565b6000306001600160a01b03831603611ce257506001919050565b506001600160a01b031660009081526001602052604090205460ff1690565b611d0961214a565b81516001600160a01b0316630178fe3f83602001516040518263ffffffff1660e01b8152600401611d3c91815260200190565b61012060405180830381865afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190612a31565b60405163326a02c760e11b81526004810185905260009030906364d4058e90602401602060405180830381865afa158015611dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de1919061280f565b604051631e06352360e21b815260048101879052602481018690529091506000903090637818d48c906044016040805180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d919061279b565b90506001600160a01b03821615611ed257604051630ada20e960e21b815281516001600160a01b039081166004830152602083015160248301526044820187905260648201859052831690632b6883a49060840160006040518083038186803b158015611eb957600080fd5b505afa158015611ecd573d6000803e3d6000fd5b505050505b611edd818585612064565b505050505050565b6000611ef033611cc8565b611f0c5760405162461bcd60e51b815260040161086e906126de565b600460008154611f1b906126c5565b9182905550905090565b6000611f2f825190565b6001600160a01b03166385d19a2583602001516040518263ffffffff1660e01b8152600401611f6091815260200190565b602060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f9919061282c565b6000611fab825190565b6001600160a01b0316630b4e99c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7d573d6000803e3d6000fd5b6000611ff2825190565b6001600160a01b031663ffcc44dd83602001516040518263ffffffff1660e01b815260040161202391815260200190565b602060405180830381865afa158015612040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f9919061280f565b82516020840151604051631cc6d2f960e31b815260048101919091526001600160a01b038481166024830152604482018490529091169063e63697c89060640161198d565b81516020830151604051633eec831760e11b81526004810191909152602481018390526001600160a01b0390911690637dd9062e90604401600060405180830381600087803b1580156120fb57600080fd5b505af1158015611edd573d6000803e3d6000fd5b6000612119825190565b6001600160a01b0316633b3546c883602001516040518263ffffffff1660e01b8152600401611f6091815260200190565b60405180610120016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081525090565b6000602082840312156121c357600080fd5b5035919050565b60008083601f8401126121dc57600080fd5b50813567ffffffffffffffff8111156121f457600080fd5b6020830191508360208260051b850101111561220f57600080fd5b9250929050565b80151581146114c157600080fd5b60008060006040848603121561223957600080fd5b833567ffffffffffffffff81111561225057600080fd5b61225c868287016121ca565b909450925050602084013561227081612216565b809150509250925092565b6001600160a01b03811681146114c157600080fd5b8035611be58161227b565b6000602082840312156122ad57600080fd5b8135610a788161227b565b600080604083850312156122cb57600080fd5b8235915060208301356122dd8161227b565b809150509250929050565b600080604083850312156122fb57600080fd5b50508035926020909101359150565b60018060a01b03808251168352602082015160208401526040820151604084015260608201516060840152608082015160808401528060a08301511660a084015260c082015160c08401528060e08301511660e0840152506101008082015181840152505050565b61012081016108f9828461230a565b6000806000806080858703121561239757600080fd5b843593506020850135925060408501356123b08161227b565b9396929550929360600135925050565b6000806000606084860312156123d557600080fd5b833592506020840135915060408401356122708161227b565b81516001600160a01b0316815260208083015190820152604081016108f9565b60006040828403121561242057600080fd5b50919050565b600080600060a0848603121561243b57600080fd5b612445858561240e565b9250612454856040860161240e565b9150608084013590509250925092565b60008060006060848603121561247957600080fd5b505081359360208301359350604090920135919050565b6000602082840312156124a257600080fd5b813567ffffffffffffffff8111156124b957600080fd5b82016101008185031215610a7857600080fd5b6000806000806000608086880312156124e457600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff81111561251057600080fd5b61251c888289016121ca565b969995985093965092949392505050565b60008060008060008060a0878903121561254657600080fd5b86356125518161227b565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561258257600080fd5b61258e89828a016121ca565b979a9699509497509295939492505050565b6000604082840312156125b257600080fd5b610a78838361240e565b6001600160a01b038416815261026081016125da602083018561230a565b610dee61014083018461230a565b82516001600160a01b03168152602080840151908201526080810182516001600160a01b0316604083015260208301516060830152610a78565b60008060006080848603121561263757600080fd5b612641858561240e565b925060408401356126518161227b565b929592945050506060919091013590565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126d7576126d76126af565b5060010190565b6020808252601290820152716f6e6c7920666f7220666163746f7269657360701b604082015260600190565b60006020828403121561271c57600080fd5b8151610a7881612216565b6040805190810167ffffffffffffffff8111828210171561275857634e487b7160e01b600052604160045260246000fd5b60405290565b604051610120810167ffffffffffffffff8111828210171561275857634e487b7160e01b600052604160045260246000fd5b8051611be58161227b565b6000604082840312156127ad57600080fd5b6127b5612727565b82516127c08161227b565b81526020928301519281019290925250919050565b6000604082840312156127e757600080fd5b6127ef612727565b82356127fa8161227b565b81526020928301359281019290925250919050565b60006020828403121561282157600080fd5b8151610a788161227b565b60006020828403121561283e57600080fd5b5051919050565b818103818111156108f9576108f96126af565b6000808335601e1984360301811261286f57600080fd5b830160208101925035905067ffffffffffffffff81111561288f57600080fd5b8060051b360382131561220f57600080fd5b81835260006001600160fb1b038311156128ba57600080fd5b8260051b80836020870137939093016020019392505050565b6020815281356020820152600060208301356128ee8161227b565b60018060a01b038116604084015250604083013560608301526060830135608083015261291d60808401612290565b6001600160a01b03811660a08401525061293960a08401612290565b6001600160a01b03811660c08401525060c083013560e083015261296060e0840184612858565b61010084810152612976610120850182846128a1565b95945050505050565b600060208083526101208301845182850152818501516129b5604086018280516001600160a01b03168252602090810151910152565b50604085015160808581019190915260608601516001600160a01b0390811660a080880191909152918701511660c0808701919091529086015160e0860152850151610100808601528051918290528201906000906101408601905b808310156118f55783518252928401926001929092019190840190612a11565b60006101208284031215612a4457600080fd5b612a4c61275e565b612a5583612790565b815260208301516020820152604083015160408201526060830151606082015260808301516080820152612a8b60a08401612790565b60a082015260c083015160c0820152612aa660e08401612790565b60e082015261010092830151928101929092525091905056fea2646970667358221220b41657f8bdc3a7b22b47e37ed89e67ef6e19f4cc69cf8c0ec70895d18066558364736f6c6343000811003300000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d
Deployed Bytecode
0x60806040526004361061021d5760003560e01c80637818d48c11610123578063bbc6d73c116100ab578063eb02c3011161006f578063eb02c3011461071d578063f2fde38b1461074c578063f7e0ebf61461076c578063fdb159261461078c578063ff1b2bb41461082457600080fd5b8063bbc6d73c14610685578063cd9df19014610698578063ce3ee62c146106ad578063d93b080c146106dd578063e1dcaf77146106fd57600080fd5b8063a41fe49f116100f2578063a41fe49f146105f4578063acde933614610614578063aeadb8e014610627578063b0f164981461063c578063bad5fdb11461067257600080fd5b80637818d48c146105615780638da5cb5b14610581578063999518fa1461059f5780639d0f5450146105d457600080fd5b806329ce1ec5116101a6578063498e516511610175578063498e5165146104885780634b37c73f146104b55780636352211e146104d557806364d4058e1461050b57806374c895151461054157600080fd5b806329ce1ec5146104155780632b38400e146104355780632d70fc2d1461045357806335cbf96d1461047357600080fd5b80630f04ba67116101ed5780630f04ba671461033857806310a8042f1461036857806319b3e509146103a8578063257d2f9f146103c857806325fd9b17146103f557600080fd5b80621e728a14610229578063025e7c271461026957806308a8ce1f146102b75780630e0d6382146102d957600080fd5b3661022457005b600080fd5b34801561023557600080fd5b506102566102443660046121b1565b6000908152600a602052604090205490565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5061029f6102843660046121b1565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610260565b3480156102c357600080fd5b506102d76102d2366004612224565b610844565b005b3480156102e557600080fd5b506103196102f43660046121b1565b600760205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b039093168352602083019190915201610260565b34801561034457600080fd5b5061035861035336600461229b565b6108ee565b6040519015158152602001610260565b34801561037457600080fd5b506103196103833660046121b1565b600660205260009081526040902080546001909101546001600160a01b039091169082565b3480156103b457600080fd5b506102d76103c33660046122b8565b6108ff565b3480156103d457600080fd5b506103e86103e33660046122e8565b610a01565b6040516102609190612372565b34801561040157600080fd5b506102d76104103660046121b1565b610a7f565b34801561042157600080fd5b506102d761043036600461229b565b610c19565b34801561044157600080fd5b506002546001600160a01b031661029f565b34801561045f57600080fd5b506102d761046e366004612381565b610c6a565b34801561047f57600080fd5b50610256610c7c565b34801561049457600080fd5b506104a86104a33660046123c0565b610cb0565b60405161026091906123ee565b3480156104c157600080fd5b506102d76104d036600461229b565b610df6565b3480156104e157600080fd5b5061029f6104f03660046121b1565b6000908152600560205260409020546001600160a01b031690565b34801561051757600080fd5b5061029f6105263660046121b1565b6000908152600860205260409020546001600160a01b031690565b34801561054d57600080fd5b506102d761055c366004612426565b610e41565b34801561056d57600080fd5b506104a861057c3660046122e8565b611167565b34801561058d57600080fd5b506000546001600160a01b031661029f565b3480156105ab57600080fd5b506105bf6105ba3660046121b1565b6111f5565b60408051928352602083019190915201610260565b3480156105e057600080fd5b506103586105ef3660046121b1565b6112a2565b34801561060057600080fd5b506102d761060f366004612464565b611389565b6102d7610622366004612490565b6113fd565b34801561063357600080fd5b50600354610256565b34801561064857600080fd5b5061029f6106573660046121b1565b6008602052600090815260409020546001600160a01b031681565b6102566106803660046124cc565b6114c4565b61025661069336600461252d565b6116cf565b3480156106a457600080fd5b50600454610256565b3480156106b957600080fd5b506103586106c83660046121b1565b60009081526009602052604090205460ff1690565b3480156106e957600080fd5b506102d76106f8366004612490565b611900565b34801561070957600080fd5b506102566107183660046125a0565b6119c4565b34801561072957600080fd5b5061073d6107383660046121b1565b6119d8565b604051610260939291906125bc565b34801561075857600080fd5b506102d761076736600461229b565b611b18565b34801561077857600080fd5b5061025661078736600461229b565b611b64565b34801561079857600080fd5b506108166107a73660046121b1565b604080518082018252600080825260209182018190528251808401845281815282018190529283526006815281832060078252928290208251808401845284546001600160a01b0390811682526001958601548285015284518086019095528254168452930154908201529091565b6040516102609291906125e8565b34801561083057600080fd5b506102d761083f366004612622565b611bea565b6000546001600160a01b031633146108775760405162461bcd60e51b815260040161086e90612662565b60405180910390fd5b8160005b818110156108e757826001600087878581811061089a5761089a612699565b90506020020160208101906108af919061229b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556108e0816126c5565b905061087b565b5050505050565b60006108f982611cc8565b92915050565b61090833611cc8565b6109245760405162461bcd60e51b815260040161086e906126de565b60405163338fb98b60e21b8152600481018390528290309063ce3ee62c90602401602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610986919061270a565b6109d25760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920666f7220706f736974696f6e206275696c64206d6f646500000000604482015260640161086e565b5060009182526008602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b610a0961214a565b604051631e06352360e21b81526004810184905260248101839052610a78903090637818d48c906044016040805180830381865afa158015610a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a73919061279b565b611d01565b9392505050565b610a8833611cc8565b610aa45760405162461bcd60e51b815260040161086e906126de565b60405163338fb98b60e21b8152600481018290528190309063ce3ee62c90602401602060405180830381865afa158015610ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b06919061270a565b610b525760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920666f7220706f736974696f6e206275696c64206d6f646500000000604482015260640161086e565b6000828152600860205260409020546001600160a01b031680610baa5760405162461bcd60e51b815260206004820152601060248201526f686173206e6f20616c676f726974686d60801b604482015260640161086e565b6000838152600960209081526040808320805460ff19169055600882528083205460058352928190205490518681526001600160a01b0393841693909116917f5bd5312e98e4e3c59594cdb0e3925ba1351628a2bef5c905af091d5370a86b6f910160405180910390a3505050565b6000546001600160a01b03163314610c435760405162461bcd60e51b815260040161086e90612662565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b610c7684848484611d7e565b50505050565b6000610c8733611cc8565b610ca35760405162461bcd60e51b815260040161086e906126de565b610cab611ee5565b905090565b6040805180820190915260008082526020820152610ccd33611cc8565b610ce95760405162461bcd60e51b815260040161086e906126de565b60006040518060400160405280846001600160a01b03168152602001610d0d611ee5565b90526020808201516000908152600a9091526040902086905590506001849003610d6d576000858152600660209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600190910155610dee565b83600203610db1576000858152600760209081526040909120825181546001600160a01b0319166001600160a01b0390911617815590820151600190910155610dee565b60405162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e20617373657420636f646560701b604482015260640161086e565b949350505050565b6000546001600160a01b03163314610e205760405162461bcd60e51b815260040161086e90612662565b6001600160a01b03166000908152600160205260409020805460ff19169055565b610e58610e53368590038501856127d5565b611f25565b60405163326a02c760e11b815260048101829052339030906364d4058e90602401602060405180830381865afa158015610e96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eba919061280f565b6001600160a01b031614610f105760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f7220706f736974696f6e20616c676f746974686d0000000000604482015260640161086e565b610f27610f22368590038501856127d5565b611fa1565b610f39610f22368790038701876127d5565b14610f985760405162461bcd60e51b815260206004820152602960248201527f7472616e736665722066726f6d20617373657420746f206d7573742062652073604482015268616d6520747970657360b81b606482015260840161086e565b610faa610f22368590038501856127d5565b600203611134576000610fca610fc5368690038601866127d5565b611fe8565b6001600160a01b03166370a08231610fe5602087018761229b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d919061282c565b905061107661105f602086018661229b565b8461106f368990038901896127d5565b9190612064565b61112e8161108c610fc5368890038801886127d5565b6001600160a01b03166370a082316110a7602089018961229b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061282c565b6111199190612845565b611128368790038701876127d5565b906120a9565b50610c76565b611154611144602085018561229b565b8361106f368890038801886127d5565b610c7682611128368690038601866127d5565b6040805180820190915260008082526020820152816001036111b85750600082815260066020908152604091829020825180840190935280546001600160a01b0316835260010154908201526108f9565b81600203610db15750600082815260076020908152604091829020825180840190935280546001600160a01b0316835260010154908201526108f9565b604051631e06352360e21b81526004810182905260016024820152600090819061126a903090637818d48c906044015b6040805180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061279b565b61210f565b604051631e06352360e21b81526004810185905260026024820152611299903090637818d48c90604401611225565b91509150915091565b60405163326a02c760e11b815260048101829052600090819030906364d4058e90602401602060405180830381865afa1580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061280f565b90506001600160a01b0381166113205750600092915050565b6040516309d0f54560e41b8152600481018490526001600160a01b03821690639d0f545090602401602060405180830381865afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a78919061270a565b60008381526005602052604090205483906001600160a01b031633146113f15760405162461bcd60e51b815260206004820152601760248201527f6f6e6c7920666f7220706f736974696f6e206f776e6572000000000000000000604482015260640161086e565b610c7684843385611d7e565b61140633611cc8565b6114225760405162461bcd60e51b815260040161086e906126de565b6000611439610e53368490038401602085016127d5565b6000818152600860205260409020549091506001600160a01b03168061145e57505050565b60405163566f499b60e11b81526001600160a01b0382169063acde933690349061148c9087906004016128d3565b6000604051808303818588803b1580156114a557600080fd5b505af11580156114b9573d6000803e3d6000fd5b505050505050505b50565b604051631e06352360e21b8152600481018690526024810185905260009081903090637818d48c906044016040805180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f919061279b565b905080600001516001600160a01b0316637303d7d3346040518060e001604052808b81526020018581526020018a8152602001336001600160a01b0316815260200185600001516001600160a01b0316815260200189815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509152506040516001600160e01b031960e085901b1681526115e0919060040161297f565b60206040518083038185885af11580156115fe573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611623919061282c565b915081156116c557604051600090339084908381818185875af1925050503d806000811461166d576040519150601f19603f3d011682016040523d82523d6000602084013e611672565b606091505b50509050806116c35760405162461bcd60e51b815260206004820152601c60248201527f657468657265756d20737572706c7573206973206e6f742073656e7400000000604482015260640161086e565b505b5095945050505050565b60006116da33611cc8565b6116f65760405162461bcd60e51b815260040161086e906126de565b604051631e06352360e21b815260048101879052602481018690526000903090637818d48c906044016040805180830381865afa15801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f919061279b565b905080600001516001600160a01b0316637303d7d3346040518060e001604052808b81526020018581526020018a81526020018c6001600160a01b0316815260200185600001516001600160a01b0316815260200189815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509152506040516001600160e01b031960e085901b168152611810919060040161297f565b60206040518083038185885af115801561182e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611853919061282c565b915081156118f557604051600090339084908381818185875af1925050503d806000811461189d576040519150601f19603f3d011682016040523d82523d6000602084013e6118a2565b606091505b50509050806118f35760405162461bcd60e51b815260206004820152601c60248201527f657468657265756d20737572706c7573206973206e6f742073656e7400000000604482015260640161086e565b505b509695505050505050565b61190933611cc8565b6119255760405162461bcd60e51b815260040161086e906126de565b600061193c610e53368490038401602085016127d5565b6000818152600860205260409020549091506001600160a01b03168061196157505050565b60405163364ec20360e21b81526001600160a01b0382169063d93b080c9061198d9086906004016128d3565b600060405180830381600087803b1580156119a757600080fd5b505af11580156119bb573d6000803e3d6000fd5b50505050505050565b60006108f9611265368490038401846127d5565b60006119e261214a565b6119ea61214a565b600084815260086020526040808220549051631e06352360e21b815260048101879052600160248201526001600160a01b0390911694503090637818d48c906044016040805180830381865afa158015611a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6c919061279b565b80519091506001600160a01b031615611a8b57611a8881611d01565b92505b604051631e06352360e21b815260048101869052600260248201523090637818d48c906044016040805180830381865afa158015611acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af1919061279b565b80519091506001600160a01b031615611b1057611b0d81611d01565b91505b509193909250565b6000546001600160a01b03163314611b425760405162461bcd60e51b815260040161086e90612662565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611b6f33611cc8565b611b8b5760405162461bcd60e51b815260040161086e906126de565b600360008154611b9a906126c5565b909155505060038054600090815260056020908152604080832080546001600160a01b0319166001600160a01b0387161790558354835260099091529020805460ff19166001179055545b919050565b611bfc610e53368590038501856127d5565b60405163326a02c760e11b815260048101829052339030906364d4058e90602401602060405180830381865afa158015611c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5e919061280f565b6001600160a01b031614611cb45760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c7920666f7220706f736974696f6e20616c676f746974686d0000000000604482015260640161086e565b610c76838361106f368890038801886127d5565b6000306001600160a01b03831603611ce257506001919050565b506001600160a01b031660009081526001602052604090205460ff1690565b611d0961214a565b81516001600160a01b0316630178fe3f83602001516040518263ffffffff1660e01b8152600401611d3c91815260200190565b61012060405180830381865afa158015611d5a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190612a31565b60405163326a02c760e11b81526004810185905260009030906364d4058e90602401602060405180830381865afa158015611dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de1919061280f565b604051631e06352360e21b815260048101879052602481018690529091506000903090637818d48c906044016040805180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d919061279b565b90506001600160a01b03821615611ed257604051630ada20e960e21b815281516001600160a01b039081166004830152602083015160248301526044820187905260648201859052831690632b6883a49060840160006040518083038186803b158015611eb957600080fd5b505afa158015611ecd573d6000803e3d6000fd5b505050505b611edd818585612064565b505050505050565b6000611ef033611cc8565b611f0c5760405162461bcd60e51b815260040161086e906126de565b600460008154611f1b906126c5565b9182905550905090565b6000611f2f825190565b6001600160a01b03166385d19a2583602001516040518263ffffffff1660e01b8152600401611f6091815260200190565b602060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f9919061282c565b6000611fab825190565b6001600160a01b0316630b4e99c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7d573d6000803e3d6000fd5b6000611ff2825190565b6001600160a01b031663ffcc44dd83602001516040518263ffffffff1660e01b815260040161202391815260200190565b602060405180830381865afa158015612040573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f9919061280f565b82516020840151604051631cc6d2f960e31b815260048101919091526001600160a01b038481166024830152604482018490529091169063e63697c89060640161198d565b81516020830151604051633eec831760e11b81526004810191909152602481018390526001600160a01b0390911690637dd9062e90604401600060405180830381600087803b1580156120fb57600080fd5b505af1158015611edd573d6000803e3d6000fd5b6000612119825190565b6001600160a01b0316633b3546c883602001516040518263ffffffff1660e01b8152600401611f6091815260200190565b60405180610120016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081525090565b6000602082840312156121c357600080fd5b5035919050565b60008083601f8401126121dc57600080fd5b50813567ffffffffffffffff8111156121f457600080fd5b6020830191508360208260051b850101111561220f57600080fd5b9250929050565b80151581146114c157600080fd5b60008060006040848603121561223957600080fd5b833567ffffffffffffffff81111561225057600080fd5b61225c868287016121ca565b909450925050602084013561227081612216565b809150509250925092565b6001600160a01b03811681146114c157600080fd5b8035611be58161227b565b6000602082840312156122ad57600080fd5b8135610a788161227b565b600080604083850312156122cb57600080fd5b8235915060208301356122dd8161227b565b809150509250929050565b600080604083850312156122fb57600080fd5b50508035926020909101359150565b60018060a01b03808251168352602082015160208401526040820151604084015260608201516060840152608082015160808401528060a08301511660a084015260c082015160c08401528060e08301511660e0840152506101008082015181840152505050565b61012081016108f9828461230a565b6000806000806080858703121561239757600080fd5b843593506020850135925060408501356123b08161227b565b9396929550929360600135925050565b6000806000606084860312156123d557600080fd5b833592506020840135915060408401356122708161227b565b81516001600160a01b0316815260208083015190820152604081016108f9565b60006040828403121561242057600080fd5b50919050565b600080600060a0848603121561243b57600080fd5b612445858561240e565b9250612454856040860161240e565b9150608084013590509250925092565b60008060006060848603121561247957600080fd5b505081359360208301359350604090920135919050565b6000602082840312156124a257600080fd5b813567ffffffffffffffff8111156124b957600080fd5b82016101008185031215610a7857600080fd5b6000806000806000608086880312156124e457600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff81111561251057600080fd5b61251c888289016121ca565b969995985093965092949392505050565b60008060008060008060a0878903121561254657600080fd5b86356125518161227b565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561258257600080fd5b61258e89828a016121ca565b979a9699509497509295939492505050565b6000604082840312156125b257600080fd5b610a78838361240e565b6001600160a01b038416815261026081016125da602083018561230a565b610dee61014083018461230a565b82516001600160a01b03168152602080840151908201526080810182516001600160a01b0316604083015260208301516060830152610a78565b60008060006080848603121561263757600080fd5b612641858561240e565b925060408401356126518161227b565b929592945050506060919091013590565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016126d7576126d76126af565b5060010190565b6020808252601290820152716f6e6c7920666f7220666163746f7269657360701b604082015260600190565b60006020828403121561271c57600080fd5b8151610a7881612216565b6040805190810167ffffffffffffffff8111828210171561275857634e487b7160e01b600052604160045260246000fd5b60405290565b604051610120810167ffffffffffffffff8111828210171561275857634e487b7160e01b600052604160045260246000fd5b8051611be58161227b565b6000604082840312156127ad57600080fd5b6127b5612727565b82516127c08161227b565b81526020928301519281019290925250919050565b6000604082840312156127e757600080fd5b6127ef612727565b82356127fa8161227b565b81526020928301359281019290925250919050565b60006020828403121561282157600080fd5b8151610a788161227b565b60006020828403121561283e57600080fd5b5051919050565b818103818111156108f9576108f96126af565b6000808335601e1984360301811261286f57600080fd5b830160208101925035905067ffffffffffffffff81111561288f57600080fd5b8060051b360382131561220f57600080fd5b81835260006001600160fb1b038311156128ba57600080fd5b8260051b80836020870137939093016020019392505050565b6020815281356020820152600060208301356128ee8161227b565b60018060a01b038116604084015250604083013560608301526060830135608083015261291d60808401612290565b6001600160a01b03811660a08401525061293960a08401612290565b6001600160a01b03811660c08401525060c083013560e083015261296060e0840184612858565b61010084810152612976610120850182846128a1565b95945050505050565b600060208083526101208301845182850152818501516129b5604086018280516001600160a01b03168252602090810151910152565b50604085015160808581019190915260608601516001600160a01b0390811660a080880191909152918701511660c0808701919091529086015160e0860152850151610100808601528051918290528201906000906101408601905b808310156118f55783518252928401926001929092019190840190612a11565b60006101208284031215612a4457600080fd5b612a4c61275e565b612a5583612790565b815260208301516020820152604083015160408201526060830151606082015260808301516080820152612a8b60a08401612790565b60a082015260c083015160c0820152612aa660e08401612790565b60e082015261010092830151928101929092525091905056fea2646970667358221220b41657f8bdc3a7b22b47e37ed89e67ef6e19f4cc69cf8c0ec70895d18066558364736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d
-----Decoded View---------------
Arg [0] : feeSettings_ (address): 0x37510211032c82E6fFe134768AAad360e8B9C71D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000037510211032c82e6ffe134768aaad360e8b9c71d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ARB | 100.00% | $3,255.7 | 0.001 | $3.26 |
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.