Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Factories | 15561751 | 870 days ago | IN | 0 ETH | 0.0037069 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
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)
pragma solidity ^0.8.17; import '../lib/factories/HasFactories.sol'; //import '../lib/factories/ContractData.sol'; import 'contracts/interfaces/position_trading/IPositionAlgorithm.sol'; import 'contracts/interfaces/position_trading/IPositionsController.sol'; import 'contracts/fee/IFeeSettings.sol'; contract PositionsController is HasFactories, IPositionsController, IAssetListener { IFeeSettings feeSettings; uint256 public totalPositions; // total positions created mapping(uint256 => address) public owners; // position owners mapping(uint256 => ContractData) public ownerAssets; // owner's asset (what is offered) mapping(uint256 => ContractData) public outputAssets; // output asset (what they want in return), may be absent, in case of locks mapping(uint256 => ContractData) public algorithms; // algorithm for processing the input and output asset mapping(uint256 => bool) public editingLocks; // locks on editing positions mapping(address => mapping(uint256 => uint256)) _ownedPositions; // indexed from position 0 for each account mapping(uint256 => uint256) _ownedPositionsIndex; // mapping from position ID to index in owner list mapping(address => uint256) _positionCountsByAccounts; // counts of positions by account mapping(address => uint256) _positionsByAssets; // asset positions event NewPosition(address indexed account, uint256 indexed positionId); event SetPositionAlgorithm(uint256 indexed positionId, ContractData data); event TransferPositionOwnership( uint256 indexed positionId, address lastOwner, address newOwner ); constructor(address feeSettings_) { feeSettings = IFeeSettings(feeSettings_); } modifier positionUnLocked(uint256 positionId) { require(!editingLocks[positionId], 'position editing is locked'); ContractData memory data = algorithms[positionId]; if (data.contractAddr != address(0)) { require( !IPositionAlgorithm(data.contractAddr).isPositionLocked( positionId ), 'position algogithm is not allowed to edit position' ); } _; } modifier onlyPositionOwner(uint256 positionId) { require(owners[positionId] == msg.sender, 'only for position owner'); _; } function getFeeSettings() external view returns (IFeeSettings) { return feeSettings; } function positionOfOwnerByIndex(address account, uint256 index) public view virtual override returns (uint256) { require( index < _positionCountsByAccounts[account], 'account positions index out of bounds' ); return _ownedPositions[account][index]; } function _addPositionToOwnerEnumeration(address to, uint256 positionId) private { uint256 length = _positionCountsByAccounts[to]; _ownedPositions[to][length] = positionId; _ownedPositionsIndex[positionId] = length; } function _removePositionFromOwnerEnumeration( address from, uint256 positionId ) private { uint256 lastPositionIndex = _positionCountsByAccounts[from] - 1; uint256 positionIndex = _ownedPositionsIndex[positionId]; // When the position to delete is the last posiiton, the swap operation is unnecessary if (positionIndex != lastPositionIndex) { uint256 lastPositionId = _ownedPositions[from][lastPositionIndex]; _ownedPositions[from][positionIndex] = lastPositionId; // Move the last position to the slot of the to-delete token _ownedPositionsIndex[lastPositionId] = positionIndex; // Update the moved position's index } // This also deletes the contents at the last position of the array delete _ownedPositionsIndex[positionId]; delete _ownedPositions[from][lastPositionIndex]; } function transferPositionOwnership(uint256 positionId, address newOwner) external onlyPositionOwner(positionId) { _removePositionFromOwnerEnumeration(msg.sender, positionId); _addPositionToOwnerEnumeration(newOwner, positionId); --_positionCountsByAccounts[msg.sender]; ++_positionCountsByAccounts[newOwner]; owners[positionId] = newOwner; emit TransferPositionOwnership(positionId, msg.sender, newOwner); } function ownedPositionsCount(address account) external view override returns (uint256) { return _positionCountsByAccounts[account]; } function getAssetPositionId(address assetAddress) external view virtual override returns (uint256) { return _positionsByAssets[assetAddress]; } function ownerOf(uint256 positionId) external view override returns (address) { return owners[positionId]; } function getAsset(uint256 positionId, uint256 assetCode) external view returns (ContractData memory) { if (assetCode == 1) return ownerAssets[positionId]; else if (assetCode == 2) return outputAssets[positionId]; else revert('unknown asset code'); } function createPosition() external override { ++totalPositions; owners[totalPositions] = msg.sender; _addPositionToOwnerEnumeration(msg.sender, totalPositions); _positionCountsByAccounts[msg.sender]++; emit NewPosition(msg.sender, totalPositions); } function setAsset( uint256 positionId, uint256 assetCode, ContractData calldata data ) external override onlyFactory positionUnLocked(positionId) { if (assetCode == 1) { delete _positionsByAssets[ownerAssets[positionId].contractAddr]; ownerAssets[positionId] = data; } else if (assetCode == 2) { delete _positionsByAssets[outputAssets[positionId].contractAddr]; outputAssets[positionId] = data; } else revert('unknown asset code'); _positionsByAssets[data.contractAddr] = positionId; trySetAssetOwnershipToAlgorithm(positionId, data); } function trySetAssetOwnershipToAlgorithm( uint256 positionId, ContractData calldata assetData ) internal { if (algorithms[positionId].contractAddr != address(0)) IOwnable(assetData.contractAddr).transferOwnership( algorithms[positionId].contractAddr ); } function setAlgorithm(uint256 positionId, ContractData calldata algData) external override onlyFactory positionUnLocked(positionId) { // if there is already an algorithm, then transfer the asset ownership to the current controller or to a new algorithm // owner's asset if (ownerAssets[positionId].contractAddr != address(0)) { if (algorithms[positionId].contractAddr != address(0)) { IPositionAlgorithm(algorithms[positionId].contractAddr) .transferAssetOwnerShipTo( ownerAssets[positionId].contractAddr, algData.contractAddr != address(0) ? algData.contractAddr : address(this) ); } else { IOwnable(ownerAssets[positionId].contractAddr) .transferOwnership(algData.contractAddr); } } // output asset if (outputAssets[positionId].contractAddr != address(0)) { if (algorithms[positionId].contractAddr != address(0)) { IPositionAlgorithm(algorithms[positionId].contractAddr) .transferAssetOwnerShipTo( outputAssets[positionId].contractAddr, algData.contractAddr != address(0) ? algData.contractAddr : address(this) ); } else { IOwnable(outputAssets[positionId].contractAddr) .transferOwnership(algData.contractAddr); } } // set a new algorithm algorithms[positionId] = algData; emit SetPositionAlgorithm(positionId, algData); } function getAlgorithm(uint256 positionId) external view override returns (ContractData memory data) { return algorithms[positionId]; } function disableEdit(uint256 positionId) external override onlyPositionOwner(positionId) positionUnLocked(positionId) { editingLocks[positionId] = false; } function beforeAssetTransfer( address asset, address from, address to, uint256 amount, uint256[] memory data ) external pure override { revert('has no algorithm'); } function afterAssetTransfer( address asset, address from, address to, uint256 amount, uint256[] memory data ) external pure override { revert('has no algorithm'); } }
pragma solidity ^0.8.17; import '../ownable/Ownable.sol'; abstract contract HasFactories is Ownable { mapping(address => bool) factories; // factories modifier onlyFactory() { require(factories[msg.sender], 'only for factories'); _; } function addFactory(address factory) public onlyOwner { factories[factory] = true; } function removeFactory(address factory) public onlyOwner { factories[factory] = false; } function setFactories(address[] calldata addresses, bool isFactory) public onlyOwner { uint256 len = addresses.length; for (uint256 i = 0; i < len; ++i) { factories[addresses[i]] = isFactory; } } }
pragma solidity ^0.8.17; import 'contracts/interfaces/assets/IAssetListener.sol'; interface IPositionAlgorithm is IAssetListener { /// @dev if true, the algorithm locks position editing function isPositionLocked(uint256 positionId) external view returns (bool); /// @dev transfers ownership of the asset to the specified address function transferAssetOwnerShipTo(address asset, address newOwner) external; }
pragma solidity ^0.8.17; import 'contracts/lib/factories/ContractData.sol'; import 'contracts/fee/IFeeSettings.sol'; interface IPositionsController { /// @dev returns fee settings function getFeeSettings() external view returns(IFeeSettings); /// @dev returns the position owner function ownerOf(uint256 positionId) external view returns (address); /// @dev changes position owner function transferPositionOwnership(uint256 positionId, address newOwner) external; /// @dev returns the position of the asset to its address function getAssetPositionId(address assetAddress) external view returns (uint256); /// @dev returns an asset by its code in position 1 or 2 function getAsset(uint256 positionId, uint256 assetCode) external view returns (ContractData memory); /// @dev creates a position function createPosition() external; /// @dev sets an asset to position /// @param positionId position ID /// @param assetCode asset code 1 - owner asset 2 - output asset /// @param data asset contract data function setAsset( uint256 positionId, uint256 assetCode, ContractData calldata data ) external; /// @dev sets the position algorithm function setAlgorithm(uint256 positionId, ContractData calldata data) external; /// @dev returns the position algorithm function getAlgorithm(uint256 positionId) external view returns (ContractData memory data); /// @dev disables position editing function disableEdit(uint256 positionId) external; /// @dev returns position from the account's list of positions function positionOfOwnerByIndex(address account, uint256 index) external view returns (uint256); /// @dev returns the number of positions the account owns function ownedPositionsCount(address account) external view returns (uint256); }
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 }
pragma solidity ^0.8.17; import 'contracts/interfaces/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 override returns (address) { return _owner; } function transferOwnership(address newOwner) external override onlyOwner { _owner = newOwner; } }
pragma solidity ^0.8.17; interface IOwnable { function owner() external returns (address); function transferOwnership(address newOwner) external; }
pragma solidity ^0.8.17; import 'contracts/position_trading/PositionSnapshot.sol'; interface IAssetListener { function beforeAssetTransfer( address asset, address from, address to, uint256 amount, uint256[] memory data ) external; function afterAssetTransfer( address asset, address from, address to, uint256 amount, uint256[] memory data ) external; }
pragma solidity ^0.8.17; // todo cut out struct PositionSnapshot { uint256 owner; uint256 output; uint256 slippage; }
pragma solidity ^0.8.17; /// @dev data is generated by factory of contract struct ContractData { address factory; // factory address contractAddr; // contract }
{ "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":"uint256","name":"positionId","type":"uint256"}],"name":"NewPosition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"positionId","type":"uint256"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"indexed":false,"internalType":"struct ContractData","name":"data","type":"tuple"}],"name":"SetPositionAlgorithm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"positionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"lastOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferPositionOwnership","type":"event"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"name":"afterAssetTransfer","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"algorithms","outputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"name":"beforeAssetTransfer","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"createPosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"disableEdit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"editingLocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"}],"name":"getAlgorithm","outputs":[{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"internalType":"struct ContractData","name":"data","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":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"internalType":"struct ContractData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"}],"name":"getAssetPositionId","outputs":[{"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":"","type":"uint256"}],"name":"outputAssets","outputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ownedPositionsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerAssets","outputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"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":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"positionOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"internalType":"struct ContractData","name":"algData","type":"tuple"}],"name":"setAlgorithm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"positionId","type":"uint256"},{"internalType":"uint256","name":"assetCode","type":"uint256"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"contractAddr","type":"address"}],"internalType":"struct ContractData","name":"data","type":"tuple"}],"name":"setAsset","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":[],"name":"totalPositions","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":"uint256","name":"positionId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferPositionOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161196838038061196883398101604081905261002f91610062565b60008054336001600160a01b031991821617909155600280549091166001600160a01b0392909216919091179055610092565b60006020828403121561007457600080fd5b81516001600160a01b038116811461008b57600080fd5b9392505050565b6118c7806100a16000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80634b37c73f116100de5780639e6f300111610097578063bcfe0c5311610071578063bcfe0c531461045b578063f2fde38b1461046e578063f485e89114610481578063fda1fa5f146104b457600080fd5b80639e6f300114610414578063b0f1649814610427578063b4e4b1a21461033f57600080fd5b80634b37c73f146103525780636352211e1461036557806364d4058e1461038e5780638da5cb5b146103e85780639ab89f48146103f95780639cdbfbc11461040157600080fd5b8063264dd24c11610130578063264dd24c146102cc57806329ce1ec5146102f55780632b38400e146103085780633be9df4d146103195780633ebf3a6d1461032c5780634268660a1461033f57600080fd5b8063025e7c271461017857806308a8ce1f146101be5780630e0d6382146101d357806310a8042f1461022757806311ef94a01461025b578063257d2f9f14610292575b600080fd5b6101a16101863660046113ba565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101d16101cc3660046113e4565b6104bd565b005b6102076101e13660046113ba565b600660205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016101b5565b6102076102353660046113ba565b600560205260009081526040902080546001909101546001600160a01b03918216911682565b61028461026936600461147f565b6001600160a01b03166000908152600c602052604090205490565b6040519081526020016101b5565b6102a56102a03660046114a3565b610567565b6040805182516001600160a01b0390811682526020938401511692810192909252016101b5565b6102846102da36600461147f565b6001600160a01b03166000908152600b602052604090205490565b6101d161030336600461147f565b610642565b6002546001600160a01b03166101a1565b6101d16103273660046114dd565b610693565b6101d161033a366004611513565b6108a8565b6101d161034d366004611559565b6109d2565b6101d161036036600461147f565b610a0d565b6101a16103733660046113ba565b6000908152600460205260409020546001600160a01b031690565b6102a561039c3660046113ba565b604080518082019091526000808252602082015250600090815260076020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015290565b6000546001600160a01b03166101a1565b6101d1610a58565b61028461040f36600461165b565b610aec565b6101d16104223660046113ba565b610b8a565b6102076104353660046113ba565b600760205260009081526040902080546001909101546001600160a01b03918216911682565b6101d1610469366004611687565b610cff565b6101d161047c36600461147f565b6111e4565b6104a461048f3660046113ba565b60086020526000908152604090205460ff1681565b60405190151581526020016101b5565b61028460035481565b6000546001600160a01b031633146104f05760405162461bcd60e51b81526004016104e7906116b4565b60405180910390fd5b8160005b81811015610560578260016000878785818110610513576105136116eb565b9050602002016020810190610528919061147f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561055981611717565b90506104f4565b5050505050565b6040805180820190915260008082526020820152816001036105bd5750600082815260056020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015261063c565b816002036105ff5750600082815260066020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015261063c565b60405162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e20617373657420636f646560701b60448201526064016104e7565b92915050565b6000546001600160a01b0316331461066c5760405162461bcd60e51b81526004016104e7906116b4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff166106e75760405162461bcd60e51b81526020600482015260126024820152716f6e6c7920666f7220666163746f7269657360701b60448201526064016104e7565b600083815260086020526040902054839060ff16156107185760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b03908116845260019091015416908201819052156107df57602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c29190611767565b156107df5760405162461bcd60e51b81526004016104e790611784565b8360010361082b57600085815260056020818152604080842060018101546001600160a01b03168552600c83529084208490559288905252839061082382826117f6565b90505061086f565b836002036105ff57600085815260066020818152604080842060018101546001600160a01b03168552600c83529084208490559288905252839061082382826117f6565b84600c6000610884604087016020880161147f565b6001600160a01b031681526020810191909152604001600020556105608584611230565b60008281526004602052604090205482906001600160a01b0316331461090a5760405162461bcd60e51b815260206004820152601760248201527637b7363c903337b9103837b9b4ba34b7b71037bbb732b960491b60448201526064016104e7565b61091433846112d3565b61091e828461137e565b336000908152600b60205260408120805490919061093b9061182c565b909155506001600160a01b0382166000908152600b60205260408120805490919061096590611717565b9091555060008381526004602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582513381529182015284917f1a4a83da0a65d7e56d279b0b618914bc4ef6f4153bce22e58a1d0d941267d512910160405180910390a2505050565b60405162461bcd60e51b815260206004820152601060248201526f686173206e6f20616c676f726974686d60801b60448201526064016104e7565b6000546001600160a01b03163314610a375760405162461bcd60e51b81526004016104e7906116b4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600360008154610a6790611717565b9091555060038054600090815260046020526040902080546001600160a01b031916339081179091559054610a9c919061137e565b336000908152600b60205260408120805491610ab783611717565b909155505060035460405133907fd4c1b45f1ec09667398d1c934903dcd7200052bb709fc1c29089fab30717b30290600090a3565b6001600160a01b0382166000908152600b60205260408120548210610b615760405162461bcd60e51b815260206004820152602560248201527f6163636f756e7420706f736974696f6e7320696e646578206f7574206f6620626044820152646f756e647360d81b60648201526084016104e7565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b60008181526004602052604090205481906001600160a01b03163314610bec5760405162461bcd60e51b815260206004820152601760248201527637b7363c903337b9103837b9b4ba34b7b71037bbb732b960491b60448201526064016104e7565b600082815260086020526040902054829060ff1615610c1d5760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b0390811684526001909101541690820181905215610ce457602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190611767565b15610ce45760405162461bcd60e51b81526004016104e790611784565b5050506000908152600860205260409020805460ff19169055565b3360009081526001602052604090205460ff16610d535760405162461bcd60e51b81526020600482015260126024820152716f6e6c7920666f7220666163746f7269657360701b60448201526064016104e7565b600082815260086020526040902054829060ff1615610d845760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b0390811684526001909101541690820181905215610e4b57602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190611767565b15610e4b5760405162461bcd60e51b81526004016104e790611784565b6000848152600560205260409020600101546001600160a01b031615610fea576000848152600760205260409020600101546001600160a01b031615610f5c57600084815260076020908152604080832060019081015460058452828520909101546001600160a01b039182169463cc6a7e2b949190921692610ed39190890190890161147f565b6001600160a01b031603610ee75730610ef7565b610ef7604087016020880161147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b50505050610fea565b600084815260056020908152604091829020600101546001600160a01b03169163f2fde38b91610f9091870190870161147f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b505050505b6000848152600660205260409020600101546001600160a01b031615611189576000848152600760205260409020600101546001600160a01b0316156110fb57600084815260076020908152604080832060019081015460068452828520909101546001600160a01b039182169463cc6a7e2b9491909216926110729190890190890161147f565b6001600160a01b0316036110865730611096565b611096604087016020880161147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b50505050611189565b600084815260066020908152604091829020600101546001600160a01b03169163f2fde38b9161112f91870190870161147f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b505050505b600084815260076020526040902083906111a382826117f6565b905050837f2130f7bfb7023f9ac15124ce386b28bdea72cdf64f45545327afe8801b9caa32846040516111d69190611843565b60405180910390a250505050565b6000546001600160a01b0316331461120e5760405162461bcd60e51b81526004016104e7906116b4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600760205260409020600101546001600160a01b0316156112cf57611260604082016020830161147f565b6000838152600760205260409081902060010154905163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156112b657600080fd5b505af11580156112ca573d6000803e3d6000fd5b505050505b5050565b6001600160a01b0382166000908152600b60205260408120546112f89060019061187e565b6000838152600a602052604090205490915080821461134b576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b6001600160a01b039091166000908152600b6020908152604080832054600983528184208185528352818420859055938352600a909152902055565b6000602082840312156113cc57600080fd5b5035919050565b80151581146113e157600080fd5b50565b6000806000604084860312156113f957600080fd5b833567ffffffffffffffff8082111561141157600080fd5b818601915086601f83011261142557600080fd5b81358181111561143457600080fd5b8760208260051b850101111561144957600080fd5b6020928301955093505084013561145f816113d3565b809150509250925092565b6001600160a01b03811681146113e157600080fd5b60006020828403121561149157600080fd5b813561149c8161146a565b9392505050565b600080604083850312156114b657600080fd5b50508035926020909101359150565b6000604082840312156114d757600080fd5b50919050565b6000806000608084860312156114f257600080fd5b833592506020840135915061150a85604086016114c5565b90509250925092565b6000806040838503121561152657600080fd5b8235915060208301356115388161146a565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561157157600080fd5b853561157c8161146a565b945060208681013561158d8161146a565b9450604087013561159d8161146a565b935060608701359250608087013567ffffffffffffffff808211156115c157600080fd5b818901915089601f8301126115d557600080fd5b8135818111156115e7576115e7611543565b8060051b604051601f19603f8301168101818110858211171561160c5761160c611543565b60405291825284820192508381018501918c83111561162a57600080fd5b938501935b828510156116485784358452938501939285019261162f565b8096505050505050509295509295909350565b6000806040838503121561166e57600080fd5b82356116798161146a565b946020939093013593505050565b6000806060838503121561169a57600080fd5b823591506116ab84602085016114c5565b90509250929050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161172957611729611701565b5060010190565b6020808252601a908201527f706f736974696f6e2065646974696e67206973206c6f636b6564000000000000604082015260600190565b60006020828403121561177957600080fd5b815161149c816113d3565b60208082526032908201527f706f736974696f6e20616c676f676974686d206973206e6f7420616c6c6f776560408201527132103a379032b234ba103837b9b4ba34b7b760711b606082015260800190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b81356118018161146a565b61180b81836117d6565b50602082013561181a8161146a565b61182781600184016117d6565b505050565b60008161183b5761183b611701565b506000190190565b6040810182356118528161146a565b6001600160a01b03908116835260208401359061186e8261146a565b8082166020850152505092915050565b8181038181111561063c5761063c61170156fea26469706673582212204ea3b0d8b608133f4de600c3ec30274b66533542a6231b7816e05b367af701fc64736f6c634300081100330000000000000000000000004097836d3cae060fb8a54cfe3d74f91d46d5cc5c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80634b37c73f116100de5780639e6f300111610097578063bcfe0c5311610071578063bcfe0c531461045b578063f2fde38b1461046e578063f485e89114610481578063fda1fa5f146104b457600080fd5b80639e6f300114610414578063b0f1649814610427578063b4e4b1a21461033f57600080fd5b80634b37c73f146103525780636352211e1461036557806364d4058e1461038e5780638da5cb5b146103e85780639ab89f48146103f95780639cdbfbc11461040157600080fd5b8063264dd24c11610130578063264dd24c146102cc57806329ce1ec5146102f55780632b38400e146103085780633be9df4d146103195780633ebf3a6d1461032c5780634268660a1461033f57600080fd5b8063025e7c271461017857806308a8ce1f146101be5780630e0d6382146101d357806310a8042f1461022757806311ef94a01461025b578063257d2f9f14610292575b600080fd5b6101a16101863660046113ba565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101d16101cc3660046113e4565b6104bd565b005b6102076101e13660046113ba565b600660205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016101b5565b6102076102353660046113ba565b600560205260009081526040902080546001909101546001600160a01b03918216911682565b61028461026936600461147f565b6001600160a01b03166000908152600c602052604090205490565b6040519081526020016101b5565b6102a56102a03660046114a3565b610567565b6040805182516001600160a01b0390811682526020938401511692810192909252016101b5565b6102846102da36600461147f565b6001600160a01b03166000908152600b602052604090205490565b6101d161030336600461147f565b610642565b6002546001600160a01b03166101a1565b6101d16103273660046114dd565b610693565b6101d161033a366004611513565b6108a8565b6101d161034d366004611559565b6109d2565b6101d161036036600461147f565b610a0d565b6101a16103733660046113ba565b6000908152600460205260409020546001600160a01b031690565b6102a561039c3660046113ba565b604080518082019091526000808252602082015250600090815260076020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015290565b6000546001600160a01b03166101a1565b6101d1610a58565b61028461040f36600461165b565b610aec565b6101d16104223660046113ba565b610b8a565b6102076104353660046113ba565b600760205260009081526040902080546001909101546001600160a01b03918216911682565b6101d1610469366004611687565b610cff565b6101d161047c36600461147f565b6111e4565b6104a461048f3660046113ba565b60086020526000908152604090205460ff1681565b60405190151581526020016101b5565b61028460035481565b6000546001600160a01b031633146104f05760405162461bcd60e51b81526004016104e7906116b4565b60405180910390fd5b8160005b81811015610560578260016000878785818110610513576105136116eb565b9050602002016020810190610528919061147f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561055981611717565b90506104f4565b5050505050565b6040805180820190915260008082526020820152816001036105bd5750600082815260056020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015261063c565b816002036105ff5750600082815260066020908152604091829020825180840190935280546001600160a01b039081168452600190910154169082015261063c565b60405162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e20617373657420636f646560701b60448201526064016104e7565b92915050565b6000546001600160a01b0316331461066c5760405162461bcd60e51b81526004016104e7906116b4565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff166106e75760405162461bcd60e51b81526020600482015260126024820152716f6e6c7920666f7220666163746f7269657360701b60448201526064016104e7565b600083815260086020526040902054839060ff16156107185760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b03908116845260019091015416908201819052156107df57602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c29190611767565b156107df5760405162461bcd60e51b81526004016104e790611784565b8360010361082b57600085815260056020818152604080842060018101546001600160a01b03168552600c83529084208490559288905252839061082382826117f6565b90505061086f565b836002036105ff57600085815260066020818152604080842060018101546001600160a01b03168552600c83529084208490559288905252839061082382826117f6565b84600c6000610884604087016020880161147f565b6001600160a01b031681526020810191909152604001600020556105608584611230565b60008281526004602052604090205482906001600160a01b0316331461090a5760405162461bcd60e51b815260206004820152601760248201527637b7363c903337b9103837b9b4ba34b7b71037bbb732b960491b60448201526064016104e7565b61091433846112d3565b61091e828461137e565b336000908152600b60205260408120805490919061093b9061182c565b909155506001600160a01b0382166000908152600b60205260408120805490919061096590611717565b9091555060008381526004602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915582513381529182015284917f1a4a83da0a65d7e56d279b0b618914bc4ef6f4153bce22e58a1d0d941267d512910160405180910390a2505050565b60405162461bcd60e51b815260206004820152601060248201526f686173206e6f20616c676f726974686d60801b60448201526064016104e7565b6000546001600160a01b03163314610a375760405162461bcd60e51b81526004016104e7906116b4565b6001600160a01b03166000908152600160205260409020805460ff19169055565b600360008154610a6790611717565b9091555060038054600090815260046020526040902080546001600160a01b031916339081179091559054610a9c919061137e565b336000908152600b60205260408120805491610ab783611717565b909155505060035460405133907fd4c1b45f1ec09667398d1c934903dcd7200052bb709fc1c29089fab30717b30290600090a3565b6001600160a01b0382166000908152600b60205260408120548210610b615760405162461bcd60e51b815260206004820152602560248201527f6163636f756e7420706f736974696f6e7320696e646578206f7574206f6620626044820152646f756e647360d81b60648201526084016104e7565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b60008181526004602052604090205481906001600160a01b03163314610bec5760405162461bcd60e51b815260206004820152601760248201527637b7363c903337b9103837b9b4ba34b7b71037bbb732b960491b60448201526064016104e7565b600082815260086020526040902054829060ff1615610c1d5760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b0390811684526001909101541690820181905215610ce457602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190611767565b15610ce45760405162461bcd60e51b81526004016104e790611784565b5050506000908152600860205260409020805460ff19169055565b3360009081526001602052604090205460ff16610d535760405162461bcd60e51b81526020600482015260126024820152716f6e6c7920666f7220666163746f7269657360701b60448201526064016104e7565b600082815260086020526040902054829060ff1615610d845760405162461bcd60e51b81526004016104e790611730565b600081815260076020908152604091829020825180840190935280546001600160a01b0390811684526001909101541690820181905215610e4b57602081015160405163f3ec358160e01b8152600481018490526001600160a01b039091169063f3ec358190602401602060405180830381865afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e9190611767565b15610e4b5760405162461bcd60e51b81526004016104e790611784565b6000848152600560205260409020600101546001600160a01b031615610fea576000848152600760205260409020600101546001600160a01b031615610f5c57600084815260076020908152604080832060019081015460058452828520909101546001600160a01b039182169463cc6a7e2b949190921692610ed39190890190890161147f565b6001600160a01b031603610ee75730610ef7565b610ef7604087016020880161147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015610f3f57600080fd5b505af1158015610f53573d6000803e3d6000fd5b50505050610fea565b600084815260056020908152604091829020600101546001600160a01b03169163f2fde38b91610f9091870190870161147f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015610fd157600080fd5b505af1158015610fe5573d6000803e3d6000fd5b505050505b6000848152600660205260409020600101546001600160a01b031615611189576000848152600760205260409020600101546001600160a01b0316156110fb57600084815260076020908152604080832060019081015460068452828520909101546001600160a01b039182169463cc6a7e2b9491909216926110729190890190890161147f565b6001600160a01b0316036110865730611096565b611096604087016020880161147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b50505050611189565b600084815260066020908152604091829020600101546001600160a01b03169163f2fde38b9161112f91870190870161147f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561117057600080fd5b505af1158015611184573d6000803e3d6000fd5b505050505b600084815260076020526040902083906111a382826117f6565b905050837f2130f7bfb7023f9ac15124ce386b28bdea72cdf64f45545327afe8801b9caa32846040516111d69190611843565b60405180910390a250505050565b6000546001600160a01b0316331461120e5760405162461bcd60e51b81526004016104e7906116b4565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600760205260409020600101546001600160a01b0316156112cf57611260604082016020830161147f565b6000838152600760205260409081902060010154905163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156112b657600080fd5b505af11580156112ca573d6000803e3d6000fd5b505050505b5050565b6001600160a01b0382166000908152600b60205260408120546112f89060019061187e565b6000838152600a602052604090205490915080821461134b576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b6001600160a01b039091166000908152600b6020908152604080832054600983528184208185528352818420859055938352600a909152902055565b6000602082840312156113cc57600080fd5b5035919050565b80151581146113e157600080fd5b50565b6000806000604084860312156113f957600080fd5b833567ffffffffffffffff8082111561141157600080fd5b818601915086601f83011261142557600080fd5b81358181111561143457600080fd5b8760208260051b850101111561144957600080fd5b6020928301955093505084013561145f816113d3565b809150509250925092565b6001600160a01b03811681146113e157600080fd5b60006020828403121561149157600080fd5b813561149c8161146a565b9392505050565b600080604083850312156114b657600080fd5b50508035926020909101359150565b6000604082840312156114d757600080fd5b50919050565b6000806000608084860312156114f257600080fd5b833592506020840135915061150a85604086016114c5565b90509250925092565b6000806040838503121561152657600080fd5b8235915060208301356115388161146a565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a0868803121561157157600080fd5b853561157c8161146a565b945060208681013561158d8161146a565b9450604087013561159d8161146a565b935060608701359250608087013567ffffffffffffffff808211156115c157600080fd5b818901915089601f8301126115d557600080fd5b8135818111156115e7576115e7611543565b8060051b604051601f19603f8301168101818110858211171561160c5761160c611543565b60405291825284820192508381018501918c83111561162a57600080fd5b938501935b828510156116485784358452938501939285019261162f565b8096505050505050509295509295909350565b6000806040838503121561166e57600080fd5b82356116798161146a565b946020939093013593505050565b6000806060838503121561169a57600080fd5b823591506116ab84602085016114c5565b90509250929050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161172957611729611701565b5060010190565b6020808252601a908201527f706f736974696f6e2065646974696e67206973206c6f636b6564000000000000604082015260600190565b60006020828403121561177957600080fd5b815161149c816113d3565b60208082526032908201527f706f736974696f6e20616c676f676974686d206973206e6f7420616c6c6f776560408201527132103a379032b234ba103837b9b4ba34b7b760711b606082015260800190565b80546001600160a01b0319166001600160a01b0392909216919091179055565b81356118018161146a565b61180b81836117d6565b50602082013561181a8161146a565b61182781600184016117d6565b505050565b60008161183b5761183b611701565b506000190190565b6040810182356118528161146a565b6001600160a01b03908116835260208401359061186e8261146a565b8082166020850152505092915050565b8181038181111561063c5761063c61170156fea26469706673582212204ea3b0d8b608133f4de600c3ec30274b66533542a6231b7816e05b367af701fc64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004097836d3cae060fb8a54cfe3d74f91d46d5cc5c
-----Decoded View---------------
Arg [0] : feeSettings_ (address): 0x4097836D3CAe060FB8A54cFE3d74f91D46d5cC5c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004097836d3cae060fb8a54cfe3d74f91d46d5cc5c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.