Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Trust
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "./ownable.sol"; import "./ierc20metadata.sol"; import "./IOmnify.sol"; contract Trust is Ownable { event TrustDeposit( string _id, address _initiator, address _asset, uint256 _amount, uint256 _blockNumber, uint256 _date ); event TrustModified(string _id, address _initiator, uint256 _blockNumber, uint256 _date); event TrustWithdrawal( string _id, address _initiator, address _asset, uint256 _amount, uint256 _blockNumber, uint256 _date ); event TrustRetraction( string _id, address _initiator, address _asset, uint256 _amount, uint256 _blockNumber, uint256 _date ); struct Beneficiary { address benef; uint256 allowance; bool isLimited; uint256 dateLastWithdrawal; } struct Owner { address owner; bool isOwner; } struct Deposit { string id; uint256 initialAmount; uint256 remainingAmount; address asset; //true is modifiable bool depositType; //true is retractable bool liquidity; //true is active bool isActive; uint256 dateCreated; bool exists; mapping(address => bool) owners; mapping(address => bool) beneficiaries; mapping(address => Beneficiary) addressToBeneficiary; Owner[] ownerList; Beneficiary[] beneficiaryList; } struct TrustAssetProfile { address asset; uint256 amountWithdrawn; } struct TrustProfileDeposit { string id; bool isOwner; } struct TrustProfile { uint256 assetCount; uint256 depositCount; mapping(address => uint256) assetToCount; mapping(uint256 => TrustAssetProfile) amountOfAssetWithdrawn; mapping(uint256 => TrustProfileDeposit) depositAndIsOwnerOrBeneficiary; } constructor( address _paramOmnifyAddress, uint8 _paramNativeDecimals, uint256 _paramDepositFee, uint256 _paramBenefFee ) Ownable(msg.sender) { omnifyAddress = _paramOmnifyAddress; nativeCoinDecimals = _paramNativeDecimals; depositFee = _paramDepositFee; beneficiaryFee = _paramBenefFee; } uint8 public nativeCoinDecimals; uint256 internal MAXUINT = 2 ** 256 - 1; uint256 public depositFee; uint256 public beneficiaryFee; uint256 public numberOwners; uint256 public numberBeneficiaries; uint256 public numberDeposits; uint256 public amountAssetsDeposited; uint256 public numberWithdrawals; uint256 public amountAssetsWithdrawn; address public feeKeeperAddress; address public omnifyAddress; mapping(string => Deposit) public deposits; mapping(address => TrustProfile) public trustProfiles; function getMinAmount(uint8 _decimals) public pure returns (uint256) { if (_decimals == 0) { return 1; } if (_decimals == 1) { return 0.1 * (10 ** 1); } if (_decimals == 2) { return 0.01 * (10 ** 2); } if (_decimals >= 3) { uint8 powa = _decimals - 3; //0.001 return 1 * (10 ** powa); } return 1; } modifier onlyFeeKeeper(address _sender) { require(_sender == feeKeeperAddress); _; } function setFeeKeeperAddress(address _feeKeeper) external onlyOwner { feeKeeperAddress = _feeKeeper; } function setOmnifyAddress(address _newaddress) external onlyOwner { omnifyAddress = _newaddress; } function setDepositFee(uint256 _fee) external onlyOwner { depositFee = _fee; } function setDepositFeeByFeeKeeper(uint256 _fee) external onlyFeeKeeper(msg.sender) { depositFee = _fee; } function setBeneficiaryFee(uint256 _fee) external onlyOwner { beneficiaryFee = _fee; } function setBeneficiaryFeeByFeeKeeper(uint256 _fee) external onlyFeeKeeper(msg.sender) { beneficiaryFee = _fee; } function _addNumberDeposits() internal { numberDeposits++; } function _addAssetsDeposited(uint256 _amount) internal { amountAssetsDeposited = safeAdd(amountAssetsDeposited, _amount); } function _addNumberWithdrawals() internal { numberWithdrawals++; } function _addAmountAssetsWithdrawn(uint256 _amount) internal { amountAssetsWithdrawn = safeAdd(amountAssetsWithdrawn, _amount); } function _addNumberOwners(uint256 _number) internal { numberOwners = safeAdd(numberOwners, _number); } function _addNumberBeneficiaries(uint256 _number) internal { numberBeneficiaries = safeAdd(numberBeneficiaries, _number); } function lookupDepositInitialAmount(string memory _id) public view returns (uint256) { return deposits[_id].initialAmount; } function lookupDepositRemainingAmount(string memory _id) public view returns (uint256) { return deposits[_id].remainingAmount; } function lookupDepositAsset(string memory _id) public view returns (address) { return deposits[_id].asset; } function lookupDepositType(string memory _id) public view returns (bool) { //true is modifiable return deposits[_id].depositType; } function lookupDepositLiquidity(string memory _id) public view returns (bool) { //true is retractable return deposits[_id].liquidity; } function lookupDepositActivity(string memory _id) public view returns (bool) { //true is active return deposits[_id].isActive; } function lookupDepositExists(string memory _id) public view returns (bool) { return deposits[_id].exists; } function lookupDepositDateCreated(string memory _id) public view returns (uint256) { return deposits[_id].dateCreated; } function lookupDepositOwners(string memory _id) public view returns (Owner[] memory) { return deposits[_id].ownerList; } function lookupDepositBeneficiaries(string memory _id) public view returns (Beneficiary[] memory) { return deposits[_id].beneficiaryList; } function lookupDepositBenefDateLastWithdrawal(string memory _id, address _b) public view returns (uint256) { return deposits[_id].addressToBeneficiary[_b].dateLastWithdrawal; } function lookupTrustProfileAssets(address _profile) public view returns (TrustAssetProfile[] memory) { uint256 profileAssetCount = trustProfiles[_profile].assetCount; TrustAssetProfile[] memory profileAssets = new TrustAssetProfile[](profileAssetCount + 1); if (profileAssetCount > 0) { for (uint256 i = 0; i <= profileAssetCount; i++) { profileAssets[i] = trustProfiles[_profile].amountOfAssetWithdrawn[i]; } } return profileAssets; } function lookupTrustProfileDeposits(address _profile) public view returns (TrustProfileDeposit[] memory) { uint256 profileDepositCount = trustProfiles[_profile].depositCount; TrustProfileDeposit[] memory profileDeposits = new TrustProfileDeposit[](profileDepositCount); if (profileDepositCount > 0) { for (uint256 i = 0; i < profileDepositCount; i++) { profileDeposits[i] = trustProfiles[_profile].depositAndIsOwnerOrBeneficiary[i]; } } return profileDeposits; } function createDeposit( string memory _id, uint256 _amount, address _asset, bool _depositType, bool _liquidity, bool _isActive, Owner[] calldata _owners, Beneficiary[] calldata _beneficiaries ) external payable { require(!deposits[_id].exists); if (_asset == address(0)) { uint256 _minAmount = getMinAmount(nativeCoinDecimals); require(_amount >= _minAmount); uint256 benefFee = beneficiaryFee * _beneficiaries.length; uint256 totalAmount = _amount + depositFee + benefFee; require(msg.value == totalAmount); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: depositFee + benefFee}(); _addNumberDeposits(); _addAssetsDeposited(_amount); _addNumberOwners(_owners.length); _addNumberBeneficiaries(_beneficiaries.length); _addToDeposits(_id, _amount, _asset, _depositType, _liquidity, _isActive, _owners, _beneficiaries); emit TrustDeposit(_id, msg.sender, _asset, _amount, block.number, block.timestamp); } else { uint256 benefFee = beneficiaryFee * _beneficiaries.length; uint256 totalFees = depositFee + benefFee; require(msg.value == totalFees); MYIERC20Metadata coin = MYIERC20Metadata(_asset); uint8 _decimals = coin.decimals(); uint256 _minAmount = getMinAmount(_decimals); require(_amount >= _minAmount); bool success1 = coin.transferFrom(msg.sender, address(this), _amount); require(success1); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: msg.value}(); _addNumberDeposits(); _addAssetsDeposited(_amount); _addNumberOwners(_owners.length); _addNumberBeneficiaries(_beneficiaries.length); _addToDeposits(_id, _amount, _asset, _depositType, _liquidity, _isActive, _owners, _beneficiaries); emit TrustDeposit(_id, msg.sender, _asset, _amount, block.number, block.timestamp); } } function depositIntoExistingDeposit(string memory _id, address _asset, uint256 _amount) external payable { require(deposits[_id].depositType); require(_asset == deposits[_id].asset); if (_asset == address(0)) { uint256 _minAmount = getMinAmount(nativeCoinDecimals); require(_amount >= _minAmount); uint256 totalAmount = _amount + depositFee; require(msg.value == totalAmount); deposits[_id].remainingAmount += _amount; _addAssetsDeposited(_amount); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: depositFee}(); emit TrustDeposit(_id, msg.sender, _asset, _amount, block.number, block.timestamp); } else { require(msg.value == depositFee); MYIERC20Metadata coin = MYIERC20Metadata(_asset); uint8 _decimals = coin.decimals(); uint256 _minAmount = getMinAmount(_decimals); require(_amount >= _minAmount); bool success1 = coin.transferFrom(msg.sender, address(this), _amount); require(success1); deposits[_id].remainingAmount += _amount; _addAssetsDeposited(_amount); IOmnify mainContract = IOmnify(omnifyAddress); mainContract.addProfitsFromExternalContract{value: depositFee}(); emit TrustDeposit(_id, msg.sender, _asset, _amount, block.number, block.timestamp); } } function withdrawFromDeposit(string memory _id, uint256 _amount) external { require(_amount <= deposits[_id].remainingAmount); bool requesterIsBeneficiary = deposits[_id].beneficiaries[msg.sender] == true; require(requesterIsBeneficiary); require(deposits[_id].isActive); Beneficiary memory current = deposits[_id].addressToBeneficiary[msg.sender]; if (current.isLimited) { require(_amount <= current.allowance); require(block.timestamp >= current.dateLastWithdrawal + 1 days); } address depositAsset = deposits[_id].asset; if (depositAsset == address(0)) { deposits[_id].remainingAmount -= _amount; trustProfiles[msg.sender].assetToCount[depositAsset] = 0; uint256 assetCount = trustProfiles[msg.sender].assetToCount[depositAsset]; trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount].asset = address(0); trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount].amountWithdrawn = safeAdd(trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount].amountWithdrawn, _amount); _addNumberWithdrawals(); _addAmountAssetsWithdrawn(_amount); deposits[_id].addressToBeneficiary[msg.sender].dateLastWithdrawal = block.timestamp; address payable sendTo = payable(msg.sender); (bool success,) = sendTo.call{value: _amount}(""); require(success); emit TrustWithdrawal(_id, msg.sender, depositAsset, _amount, block.number, block.timestamp); } else { deposits[_id].remainingAmount -= _amount; uint256 assetCount = trustProfiles[msg.sender].assetToCount[depositAsset]; if (assetCount == 0) { trustProfiles[msg.sender].assetCount++; trustProfiles[msg.sender].assetToCount[depositAsset] = trustProfiles[msg.sender].assetCount; uint256 assetCount2 = trustProfiles[msg.sender].assetToCount[depositAsset]; trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount2].asset = depositAsset; } uint256 assetCount3 = trustProfiles[msg.sender].assetToCount[depositAsset]; trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount3].amountWithdrawn = safeAdd(trustProfiles[msg.sender].amountOfAssetWithdrawn[assetCount3].amountWithdrawn, _amount); _addNumberWithdrawals(); _addAmountAssetsWithdrawn(_amount); deposits[_id].addressToBeneficiary[msg.sender].dateLastWithdrawal = block.timestamp; MYIERC20 coin = MYIERC20(depositAsset); bool success1 = coin.transfer(msg.sender, _amount); require(success1); emit TrustWithdrawal(_id, msg.sender, depositAsset, _amount, block.number, block.timestamp); } } function retractDeposit(string memory _id) external { require(deposits[_id].remainingAmount > 0); require(deposits[_id].owners[msg.sender] == true); require(deposits[_id].liquidity); address depositAsset = deposits[_id].asset; uint256 remaining = deposits[_id].remainingAmount; if (depositAsset == address(0)) { deposits[_id].remainingAmount = 0; deposits[_id].isActive = false; address payable sendTo = payable(msg.sender); (bool success,) = sendTo.call{value: remaining}(""); require(success); emit TrustRetraction(_id, msg.sender, depositAsset, remaining, block.number, block.timestamp); } else { deposits[_id].remainingAmount = 0; deposits[_id].isActive = false; MYIERC20 coin = MYIERC20(depositAsset); bool success1 = coin.transfer(msg.sender, remaining); require(success1); emit TrustRetraction(_id, msg.sender, depositAsset, remaining, block.number, block.timestamp); } } function setDepositActiveVal(string calldata _id, bool _val) external { require(deposits[_id].owners[msg.sender] == true); if (deposits[_id].isActive != _val) { deposits[_id].isActive = _val; } } function modifyDeposit(string memory _id, bool _newIsActive, Beneficiary[] calldata _newBeneficiaries) external payable { require(deposits[_id].owners[msg.sender] == true); require(deposits[_id].depositType); if (deposits[_id].isActive != _newIsActive) { deposits[_id].isActive = _newIsActive; } if (_newBeneficiaries.length > 0) { uint256 totalFee = 0; IOmnify mainContract = IOmnify(omnifyAddress); for (uint256 i = 0; i < _newBeneficiaries.length; i++) { Beneficiary memory _c = _newBeneficiaries[i]; bool isAlreadyABeneficiary = deposits[_id].beneficiaries[_c.benef]; if (isAlreadyABeneficiary == false) { totalFee += beneficiaryFee; } } require(msg.value == totalFee); for (uint256 i = 0; i < deposits[_id].beneficiaryList.length; i++) { Beneficiary memory current = deposits[_id].beneficiaryList[i]; deposits[_id].beneficiaries[current.benef] = false; } mainContract.addProfitsFromExternalContract{value: msg.value}(); deposits[_id].beneficiaryList = _newBeneficiaries; for (uint256 i = 0; i < _newBeneficiaries.length; i++) { Beneficiary memory current = _newBeneficiaries[i]; deposits[_id].beneficiaries[current.benef] = true; deposits[_id].addressToBeneficiary[current.benef].allowance = current.allowance; deposits[_id].addressToBeneficiary[current.benef].isLimited = current.isLimited; uint256 currentDepositCount = trustProfiles[current.benef].depositCount; trustProfiles[current.benef].depositAndIsOwnerOrBeneficiary[currentDepositCount].id = _id; trustProfiles[current.benef].depositAndIsOwnerOrBeneficiary[currentDepositCount].isOwner = false; trustProfiles[_newBeneficiaries[i].benef].depositCount++; } } else { for (uint256 i = 0; i < deposits[_id].beneficiaryList.length; i++) { Beneficiary memory current = deposits[_id].beneficiaryList[i]; deposits[_id].beneficiaries[current.benef] = false; } deposits[_id].beneficiaryList = _newBeneficiaries; } emit TrustModified(_id, msg.sender, block.number, block.timestamp); } function _addToDeposits( string memory _id, uint256 _amount, address _asset, bool _depositType, bool _liquidity, bool _isActive, Owner[] calldata _owners, Beneficiary[] calldata _beneficiaries ) private { deposits[_id].id = _id; deposits[_id].initialAmount = _amount; deposits[_id].remainingAmount = _amount; deposits[_id].asset = _asset; deposits[_id].dateCreated = block.timestamp; deposits[_id].exists = true; deposits[_id].ownerList = _owners; deposits[_id].beneficiaryList = _beneficiaries; if (_depositType) { deposits[_id].depositType = true; } if (_liquidity) { deposits[_id].liquidity = true; } if (_isActive) { deposits[_id].isActive = true; } for (uint256 i = 0; i < _beneficiaries.length; i++) { Beneficiary memory current = _beneficiaries[i]; deposits[_id].beneficiaries[current.benef] = true; deposits[_id].addressToBeneficiary[current.benef].allowance = current.allowance; deposits[_id].addressToBeneficiary[current.benef].isLimited = current.isLimited; uint256 currentDepositCount = trustProfiles[current.benef].depositCount; trustProfiles[current.benef].depositAndIsOwnerOrBeneficiary[currentDepositCount].id = _id; trustProfiles[current.benef].depositAndIsOwnerOrBeneficiary[currentDepositCount].isOwner = false; trustProfiles[_beneficiaries[i].benef].depositCount++; } for (uint256 i = 0; i < _owners.length; i++) { deposits[_id].owners[_owners[i].owner] = true; uint256 currentDepositCount = trustProfiles[_owners[i].owner].depositCount; trustProfiles[_owners[i].owner].depositAndIsOwnerOrBeneficiary[currentDepositCount].id = _id; trustProfiles[_owners[i].owner].depositAndIsOwnerOrBeneficiary[currentDepositCount].isOwner = true; trustProfiles[_owners[i].owner].depositCount++; } } function safeAdd(uint256 _currentAmount, uint256 _amountToBeAdded) internal view returns (uint256) { uint256 _allowedAmount = MAXUINT - _currentAmount; if (_amountToBeAdded <= _allowedAmount) { return _currentAmount + _amountToBeAdded; } return _currentAmount; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; abstract contract MyContext { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is MyContext { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "./ierc20.sol"; interface MYIERC20Metadata is MYIERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; interface IOmnify { function addProfitsFromExternalContract() external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface MYIERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@layerzerolabs/lz-evm-oapp-v2/contracts/=lib/LayerZero-v2/packages/layerzero-v2/evm/oapp/contracts/", "@layerzerolabs/lz-evm-protocol-v2/=lib/LayerZero-v2/packages/layerzero-v2/evm/protocol/", "@layerzerolabs/lz-evm-messagelib-v2/=lib/LayerZero-v2/packages/layerzero-v2/evm/messagelib/", "solidity-bytes-utils/contracts/=lib/solidity-bytes-utils/contracts/", "LayerZero-v2/=lib/LayerZero-v2/", "ds-test/=lib/solidity-stringutils/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solidity-stringutils/=lib/solidity-stringutils/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_paramOmnifyAddress","type":"address"},{"internalType":"uint8","name":"_paramNativeDecimals","type":"uint8"},{"internalType":"uint256","name":"_paramDepositFee","type":"uint256"},{"internalType":"uint256","name":"_paramBenefFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_initiator","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"TrustDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_initiator","type":"address"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"TrustModified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_initiator","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"TrustRetraction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_id","type":"string"},{"indexed":false,"internalType":"address","name":"_initiator","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_date","type":"uint256"}],"name":"TrustWithdrawal","type":"event"},{"inputs":[],"name":"amountAssetsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountAssetsWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiaryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"bool","name":"_depositType","type":"bool"},{"internalType":"bool","name":"_liquidity","type":"bool"},{"internalType":"bool","name":"_isActive","type":"bool"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isOwner","type":"bool"}],"internalType":"struct Trust.Owner[]","name":"_owners","type":"tuple[]"},{"components":[{"internalType":"address","name":"benef","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bool","name":"isLimited","type":"bool"},{"internalType":"uint256","name":"dateLastWithdrawal","type":"uint256"}],"internalType":"struct Trust.Beneficiary[]","name":"_beneficiaries","type":"tuple[]"}],"name":"createDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositIntoExistingDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"deposits","outputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"initialAmount","type":"uint256"},{"internalType":"uint256","name":"remainingAmount","type":"uint256"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"depositType","type":"bool"},{"internalType":"bool","name":"liquidity","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"dateCreated","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeKeeperAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"getMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositActivity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"address","name":"_b","type":"address"}],"name":"lookupDepositBenefDateLastWithdrawal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositBeneficiaries","outputs":[{"components":[{"internalType":"address","name":"benef","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bool","name":"isLimited","type":"bool"},{"internalType":"uint256","name":"dateLastWithdrawal","type":"uint256"}],"internalType":"struct Trust.Beneficiary[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositDateCreated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositInitialAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositOwners","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"isOwner","type":"bool"}],"internalType":"struct Trust.Owner[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositRemainingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"lookupDepositType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupTrustProfileAssets","outputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amountWithdrawn","type":"uint256"}],"internalType":"struct Trust.TrustAssetProfile[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_profile","type":"address"}],"name":"lookupTrustProfileDeposits","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"bool","name":"isOwner","type":"bool"}],"internalType":"struct Trust.TrustProfileDeposit[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"bool","name":"_newIsActive","type":"bool"},{"components":[{"internalType":"address","name":"benef","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"bool","name":"isLimited","type":"bool"},{"internalType":"uint256","name":"dateLastWithdrawal","type":"uint256"}],"internalType":"struct Trust.Beneficiary[]","name":"_newBeneficiaries","type":"tuple[]"}],"name":"modifyDeposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"nativeCoinDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberBeneficiaries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOwners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"omnifyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"retractDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setBeneficiaryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setBeneficiaryFeeByFeeKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"bool","name":"_val","type":"bool"}],"name":"setDepositActiveVal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setDepositFeeByFeeKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeKeeper","type":"address"}],"name":"setFeeKeeperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setOmnifyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustProfiles","outputs":[{"internalType":"uint256","name":"assetCount","type":"uint256"},{"internalType":"uint256","name":"depositCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFromDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080346200011857601f6200366238819003918201601f19168301916001600160401b038311848410176200011d57808492608094604052833981010312620001185780516001600160a01b039182821691829003620001185760208101519160ff83168303620001185760606040830151920151923315620000ff576000549160405195339084167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3600019600155600b80546001600160a01b0319169190911790556001600160a81b03199091163360ff60a01b19161760a09190911b60ff60a01b161760005560025560035561352e9081620001348239f35b604051631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630fbcb48a146125b45750806317b6dd421461258b5780631906f343146125585780631dfa3375146124d85780631f810ead146124ba57806321cdc5f71461248d578063268736f114611ff05780632fdd44c714611fb757806339c7365e14611eb5578063475b905114611e97578063490ae21014611e745780634fabf9e714611e5657806362b0896a14611cd45780636318ac6414611cb157806367a5279314611c9357806368e4e9b814611c3e57806369002f7c14611334578063715018a6146112da57806376d1d35e146112bc5780637e34ff5a146111c55780638d69167d14610f705780638da5cb5b14610f49578063a0514de514610ef4578063a47af53514610ded578063a7469af114610d9b578063a8c8094714610d32578063ab50769a14610aa0578063b1ea9aa814610a73578063b9a8a4fd146109a3578063bae85b9114610985578063bcdc6e6414610967578063bf4ab74314610944578063c342cac314610904578063c3745543146108cc578063c5a416e614610521578063d203f2bf146104d4578063de2231da146104ab578063e9485e6314610342578063e986768714610324578063f2fde38b14610299578063f4ed4c84146102595763f972f2ae146101ef57600080fd5b3461025657602036600319011261025657600435906001600160401b03821161025657602060ff600361023c8361022936600489016126bd565b8160405193828580945193849201612704565b8101600c815203019020015460a81c166040519015158152f35b80fd5b5034610256576020366003190112610256576102736125f6565b61027b612aed565b60018060a01b03166001600160601b0360a01b600a541617600a5580f35b5034610256576020366003190112610256576102b36125f6565b6102bb612aed565b6001600160a01b0390811690811561030b57600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102565780600319360112610256576020600854604051908152f35b50346102565760209081600319360112610256576001600160a01b03806103676125f6565b1690818352600d93600d815260408420546001956001820194858311610497576103a9610393876129cc565b966103a16040519889612681565b8088526129cc565b601f190184885b8281106104755750505082610411575b5050509290604094929451938085019181865286518093528160408701970193905b8382106103ef5786880387f35b84518051821689528301518389015260409097019693820193908501906103e2565b865b8381111561042157506103c0565b61047090828952838652600360408a2001818a528652604089208a6040519161044983612622565b89815416835201548782015261045f828a6129e3565b5261046a81896129e3565b50612938565b610413565b60405161048181612622565b8a81528a8382015282828b0101520185906103b0565b634e487b7160e01b87526011600452602487fd5b5034610256578060031936011261025657600a546040516001600160a01b039091168152602090f35b503461025657602036600319011261025657600435906001600160401b038211610256576020600261050d8261022936600488016126bd565b8101600c8152030190200154604051908152f35b50610100366003190112610256576001600160401b0360043581811161074f5761054f9036906004016126bd565b906024356044356001600160a01b03808216908183036108c75760643580151581036108c75760843580151581036108c75760a4359081151582036108c75760c435928884116107405736602385011215610740578a8460040135958a8711610757576024860195602436918960061b0101116107575760e4359a8b11610757576105df8c9b369060040161275b565b9c909860ff600560405184818096516105fe816020998a809601612704565b8101600c815203019020015416610753578d8161075b5750505061062860ff835460a01c16612893565b8a1061075757899061063c8d60035461286a565b6106528161064d600254809661291e565b61291e565b34036107535761066691600b54169261291e565b90803b1561074f57829060046040518094819363162c2c8560e01b83525af180156107445761071c575b50509261071696959261070495927f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa9b956106cc600654612938565b6006556106db8b600754612ac9565b6007556106ea85600454612ac9565b6004556106f987600554612ac9565b600555888b8d612b29565b6040519384934292439233908761295f565b0390a180f35b61072e909b959296939897949b612653565b61074057929891949590938a38610690565b8a80fd5b6040513d84823e3d90fd5b8280fd5b8380fd5b5080fd5b61076a6107729160035461286a565b60025461291e565b34036107535760405163313ce56760e01b81528281600481855afa80156108bc576107a491869161088f575b50612893565b8c10610753576040516323b872dd60e01b8152336004820152306024820152604481018d90529082908290606490829088905af1918215610884578492610857575b50501561075757600b5416803b1561075757816004916040519283809263162c2c8560e01b825234905af180156107445761071c5750509261071696959261070495927f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa9b956106cc600654612938565b6108769250803d1061087d575b61086e8183612681565b810190612947565b38806107e6565b503d610864565b6040513d86823e3d90fd5b6108af9150843d86116108b5575b6108a78183612681565b810190612ab0565b3861079e565b503d61089d565b6040513d87823e3d90fd5b600080fd5b503461025657602036600319011261025657600435906001600160401b038211610256576020600461050d82610229368785016126bd565b50346102565760203660031901126102565761091e6125f6565b610926612aed565b60018060a01b03166001600160601b0360a01b600b541617600b5580f35b50346102565760203660031901126102565761095e612aed565b60043560035580f35b50346102565780600319360112610256576020600654604051908152f35b50346102565780600319360112610256576020600554604051908152f35b503461025657602036600319011261025657600435906001600160401b03821161025657610a246109dc602061022936600487016126bd565b8101600c8152030190206109ef816127c5565b9060018101549060028101549060ff600382015481600560048501549401541693604051978897610120808a52890190612727565b956020880152604087015260018060a01b0381166060870152818160a01c1615156080870152818160a81c16151560a087015260b01c16151560c085015260e084015215156101008301520390f35b503461025657602036600319011261025657600a546001600160a01b031633036102565760043560035580f35b503461025657602080600319360112610757576004356001600160401b03811161074f57610ad29036906004016126bd565b604051815192600281840194610ae9818588612704565b8301928281600c9586815203019020015415610d2e57600660405182818651610b1381838b612704565b81018681520301902001336000528152600160ff60406000205416151503610d2e5760ff600360405183818751610b4b81838c612704565b810187815203019020015460a81c1615610d2e5760405160038451610b71818489612704565b820191848352838160018060a01b03940301902001541693600260405183818751610b9d818388612704565b81018781520301902001549285610c495791610be79160039388600260405185818b51610bcb81838a612704565b8101868152030190200155604051809481938951928391612704565b82019081520301902001805460ff60b01b191690558380808084335af1610c0c61299c565b5015610753576107167f8ef532cfed85682423f2db41466b16ac5d66b2b43d6b5289a78cd22a55e1d3fb936040519384934292439233908761295f565b82600392610c829289600260405185818c51610c6681838a612704565b8101868152030190200155604051809481938a51928391612704565b82019081520301902001805460ff60b01b1916905560405163a9059cbb60e01b815233600482015260248101839052818160448189895af1918215610d23578692610d06575b505015610753576107167f8ef532cfed85682423f2db41466b16ac5d66b2b43d6b5289a78cd22a55e1d3fb936040519384934292439233908761295f565b610d1c9250803d1061087d5761086e8183612681565b3880610cc8565b6040513d88823e3d90fd5b8480fd5b503461025657602036600319011261025657600435906001600160401b038211610256576020610d6536600485016126bd565b600382610d7b6040519384815193849201612704565b820191600c8352838160018060a01b039403019020015416604051908152f35b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6005610dd68361022936600489016126bd565b8101600c8152030190200154166040519015158152f35b50346102565760209081600319360112610256576004356001600160401b038111610757576009610e2784610229819436906004016126bd565b8101600c815203019020018054610e3d816129cc565b90610e4b6040519283612681565b8082528382018093865284862086915b838310610eb357505050506040519280840191818552518092526040840192945b828110610e895784840385f35b855180516001600160a01b0316855282015115158483015294810194604090930192600101610e7c565b600187819260409a9997989a51610ec981612622565b60ff8654858060a01b038116835260a01c161515838201528152019201920191909694939596610e5b565b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6003610f2f8361022936600489016126bd565b8101600c815203019020015460b01c166040519015158152f35b5034610256578060031936011261025657546040516001600160a01b039091168152602090f35b506060366003190112610256576004356001600160401b03811161075757610f9c9036906004016126bd565b610fa461260c565b906044358360405183519060ff60036020928381818a0196610fc781838a612704565b8101600c815203019020015460a01c161561074f57604051918551610fed818584612704565b8301600c81526003848460018060a01b0396879403019020015416838816908103610d2e57806110fd575061102860ff855460a01c16612893565b85106107535761103a6002548661291e565b34036107535760029161105891604051809381928a51928391612704565b8101600c8152030190200161106e84825461291e565b905561107c83600754612ac9565b600755600b541660025490803b1561074f57829060046040518094819363162c2c8560e01b83525af18015610744576110e9575b50506107167f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa936040519384934292439233908761295f565b6110f290612653565b6107535783386110b0565b6002543403610d2e5760405163313ce56760e01b81528381600481855afa8015610d23576111319187916111ae5750612893565b8610610d2e576040516323b872dd60e01b8152336004820152306024820152604481018790529083908290606490829089905af19081156108bc578591611191575b50156107535760029161105891604051809381928a51928391612704565b6111a89150833d851161087d5761086e8183612681565b38611173565b6108af9150853d87116108b5576108a78183612681565b5034610256576040366003190112610256576001600160401b0360043581811161074f573660238201121561074f57806004013591821161074f576024810190602483369201011161074f5761121961274c565b90600660405184838237602081868101600c8152030190200133600052602052600160ff604060002054161515036107535760ff600360405185848237602081878101600c815203019020015460b01c1682151590151503611279578380f35b8260206003926112b5956040519384928337600c9082019081520301902001805460ff60b01b191691151560b01b60ff60b01b16919091179055565b3880808380f35b50346102565780600319360112610256576020600454604051908152f35b50346102565780600319360112610256576112f3612aed565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b506060366003190112610256576004356001600160401b038111610757576113609036906004016126bd565b61136861274c565b906044356001600160401b0381116107535761138890369060040161275b565b92600660405160208186516113a08183858b01612704565b8101600c81520301902001338652602052600160ff604087205416151503610d2e5760ff600360405160208187516113db8183858c01612704565b8101600c815203019020015460a01c1615610d2e5760ff600360405160208187516114098183858c01612704565b8101600c815203019020015460b01c1681151590151503611bf3575b508215611a0257600b546001600160a01b03169084805b85811061199057503403610d2e57845b604051845161145f818360208901612704565b8101600c8152816020600a9384930301902001548210156114f757906114b26114ac826001946040516020818161149c8d83815193849201612704565b8101600c81520301902001612a0d565b506128de565b6007604051602081816114cb8b83815193849201612704565b8101600c8152030190200190838060a01b0390511688526020526040872060ff1981541690550161144c565b505091929084813b156102565760405163162c2c8560e01b8152918290600490829034905af180156108bc5761197d575b50600a60405160208186516115408183858b01612704565b8101600c81520301902001600160401b82116119695780548282558083106118fd575b50845260208420909392919083825b8682106118895750505082935b8085106115dd5750507fa4b990d84591fd04079e4655b1199880ed2d7ad7395c2b26c464c191d00a82fc9192506115c5905b604051918291608083526080830190612727565b3360208301524360408301524260608301520390a180f35b6115f06115eb868385612a4a565b612a5a565b94600760405160208187516116088183858c01612704565b8101600c8152030190200160018060a01b038751166000526020526040600020600160ff198254161790556116ce602087015160405190865161164f818460208b01612704565b8201600c81528260206008948593030190200160018060a01b038a511660005260205260016040600020015560408801511515906040516020818161169a8b83815193849201612704565b8101600c8152030190200160018060a01b0389511660005260205260026040600020019060ff801983541691151516179055565b85516001600160a01b039081168652600d6020908152604080882060010154895190931688528088208389526004019091528620855197906001600160401b0389116118755761171e815461278b565b601f8111611834575b50602098601f81116001146117cb5780899a60019798999a916117c0575b50600019600383901b1c191690861b1790555b838060a01b039051168752600d6020526004604088200190875260205281604087200160ff198154169055818060a01b0361179c611797838688612a4a565b612a29565b168652600d6020528160408720016117b48154612938565b9055019392919061157f565b905089015138611745565b8189526020892099895b601f198316811061181c5750906001969798999a879282601f19811610611803575b5050811b019055611758565b8b015160001960f88460031b161c1916905538806117f7565b818a01518c556001909b019a602091820191016117d5565b81895260208920601f8b0160051c810160208c1061186e575b601f830160051c82018110611863575050611727565b8a815560010161184d565b508061184d565b634e487b7160e01b88526041600452602488fd5b60046080600192838060a09b98999a9b1b036118a482612a29565b87546001600160a01b03191691161786556020810135848701556118e26118cd60408301612a3d565b600288019060ff801983541691151516179055565b60608101356003870155019301910190919594939295611572565b6001600160fe1b038181168203610497578316830361195557818652602086208360021b81015b8260021b82018110611937575050611563565b80886004925588600182015588600282015588600382015501611924565b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b85526041600452602485fd5b61198990949194612653565b9238611528565b61199e6115eb828886612a4a565b6007604051602081816119b78b83815193849201612704565b600c9082019081520301902091516001600160a01b0316895201602052604087205460ff16156119ea575b60010161143c565b906119fa6001916003549061291e565b9190506119e2565b835b6040518351611a17818360208801612704565b8101600c8152816020600a938493030190200154821015611a975790611a546114ac826001946040516020818161149c8c83815193849201612704565b60076040516020818851611a6b8183858d01612704565b8101600c8152030190200190838060a01b0390511687526020526040862060ff19815416905501611a04565b5050919091600a6040516020818651611ab38183858b01612704565b8101600c8152030190200190600160401b8311611969578154838355808410611b85575b509084526020842084915b838310611b1757505050506115c57fa4b990d84591fd04079e4655b1199880ed2d7ad7395c2b26c464c191d00a82fc916115b1565b6001906004906080906001600160a01b03611b3182612a29565b86546001600160a01b0319169116178555602081013584860155611b6f611b5a60408301612a3d565b600287019060ff801983541691151516179055565b6060810135600386015501920192019190611ae2565b60026001600160fe1b038281168303611bdf578516850361049757838752602087209160021b8201918560021b015b828110611bc2575050611ad7565b808860049255886001820155888382015588600382015501611bb4565b634e487b7160e01b88526011600452602488fd5b611c389060036040516020818751611c0e8183858c01612704565b600c9082019081520301902001805460ff60b01b191691151560b01b60ff60b01b16919091179055565b38611425565b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6003611c798361022936600489016126bd565b8101600c815203019020015460a01c166040519015158152f35b50346102565780600319360112610256576020600254604051908152f35b503461025657806003193601126102565760ff6020915460a01c16604051908152f35b50346102565760209081600319360112610256576001600160a01b03611cf86125f6565b1690818152600d90600d8452600191600160408320015490611d19826129cc565b94611d276040519687612681565b828652611d33836129cc565b601f190187855b828110611e335750505082611dca575b50505060409392919351938385948501908086528451809252604086018160408460051b890101960194905b838210611d835787870388f35b918496819592949698508190603f198b82030185528951908280611db08451604085526040850190612727565b930151151591015298019201920187969593919492611d76565b84845b848110611ddb575050611d4a565b8286528389526004604087200181875289526040862060ff8360405192611e0184612622565b611e0a816127c5565b845201541615158a820152611e1f828a6129e3565b52611e2a81896129e3565b50018590611dcd565b8190604051611e4181612622565b60608152888382015282828c01015201611d3a565b50346102565780600319360112610256576020600954604051908152f35b503461025657602036600319011261025657611e8e612aed565b60043560025580f35b50346102565780600319360112610256576020600754604051908152f35b50346102565760209081600319360112610256576004356001600160401b03811161075757600a611eef84610229819436906004016126bd565b8101600c815203019020018054611f05816129cc565b90611f136040519283612681565b8082528382018093865284862086915b838310611f9057505050506040519280840191818552518092526040840192945b828110611f515784840385f35b855180516001600160a01b0316855280830151858401526040808201511515908601526060908101519085015294810194608090930192600101611f44565b600487600192611fa4859b9a98999b6128de565b8152019201920191909694939596611f23565b503461025657602036600319011261025657600435906001600160401b038211610256576020600161050d8261022936600488016126bd565b5034610256576040366003190112610256576004356001600160401b038111610757576120219036906004016126bd565b6024359060405191815160208084019161203c818785612704565b8501600c908181528683600298899303019020015484116124895760076040518381885161206b81838a612704565b810185815203019020013388528252600160ff604089205416151503612489576040519260ff865161209e818785612704565b85018381528585600397889303019020015460b01c1615612485576040519186516120ca818585612704565b8301818152838560089586930301902001338a5284526120ec60408a206128de565b6040810151612442575b50604051858851612108818487612704565b8201838152829003860190912001546001600160a01b0316978861227857918491836122149460405185818d5161214081838a612704565b810186815203019020016121558a825461292b565b9055338c52600d84528060408d20018b8d5284528b6040812055338c52600d845260408c20018a8c5283528a6040812054338252600d85528860408320018183528552604082206001600160601b0360a01b8154169055338252600d855288604083200181835285528860406121d18c60018387200154612ac9565b93338152600d88522001908d528452600160408d2001556121f28554612938565b855561220088600954612ac9565b600955604051809481938b51928391612704565b82019081520301902001903387525242906040862001558380808084335af161223b61299c565b5015610753576107167f2c3f762ed0eb0fffe73c47263a0393602058fd919c2c7f7c44579fe5b545ee23936040519384934292439233908761295f565b9184959491836123279460405185818d5161229481838a612704565b810186815203019020016122a98a825461292b565b9055338c52600d908185528c8c826040832001915285528b8d6040812054156123d1575b5050338d5281855260408d20018b8d5284528b8760408083205492338152848852828282200184825288526123088d60018484200154612ac9565b9433825288522001908d528452600160408d2001556121f28554612938565b8201908152030190203380895291018352604080882042930192909255905163a9059cbb60e01b8152600481019190915260248101839052818160448189895af1918215610d235786926123b4575b505015610753576107167f2c3f762ed0eb0fffe73c47263a0393602058fd919c2c7f7c44579fe5b545ee23936040519384934292439233908761295f565b6123ca9250803d1061087d5761086e8183612681565b3880612376565b6040903381528488528181206123e78154612938565b90553381528488528382822080549483520188522055338d528185528c8c826040832001915285528c60408120543382528387528960408320019152855260408d208c6001600160601b0360a01b8254161790558b8d6122cd565b848101518711612481576060015162015180810180911161246d57421061246957386120f6565b8880fd5b634e487b7160e01b8a52601160045260248afd5b8980fd5b8780fd5b8680fd5b503461025657602036600319011261025657600a546001600160a01b031633036102565760043560025580f35b50346102565780600319360112610256576020600354604051908152f35b5034610256576040366003190112610256576004356001600160401b03811161075757604060209261251060039336906004016126bd565b60086125318661251e61260c565b9381875193828580945193849201612704565b600c908201908152030190206001600160a01b039092168352018452200154604051908152f35b5034610256576020366003190112610256576004359060ff8216820361025657602061258383612893565b604051908152f35b5034610256578060031936011261025657600b546040516001600160a01b039091168152602090f35b9050346107575760203660031901126107575760409182906001600160a01b036125dc6125f6565b168152600d60205220600181549101549082526020820152f35b600435906001600160a01b03821682036108c757565b602435906001600160a01b03821682036108c757565b604081019081106001600160401b0382111761263d57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161263d57604052565b608081019081106001600160401b0382111761263d57604052565b90601f801991011681019081106001600160401b0382111761263d57604052565b6001600160401b03811161263d57601f01601f191660200190565b81601f820112156108c7578035906126d4826126a2565b926126e26040519485612681565b828452602083830101116108c757816000926020809301838601378301015290565b60005b8381106127175750506000910152565b8181015183820152602001612707565b9060209161274081518092818552858086019101612704565b601f01601f1916010190565b6024359081151582036108c757565b9181601f840112156108c7578235916001600160401b0383116108c7576020808501948460071b0101116108c757565b90600182811c921680156127bb575b60208310146127a557565b634e487b7160e01b600052602260045260246000fd5b91607f169161279a565b906040519182600082546127d88161278b565b908184526020946001916001811690816000146128485750600114612809575b50505061280792500383612681565b565b600090815285812095935091905b81831061283057505061280793508201013880806127f8565b85548884018501529485019487945091830191612817565b9250505061280794925060ff191682840152151560051b8201013880806127f8565b8181029291811591840414171561287d57565b634e487b7160e01b600052601160045260246000fd5b60ff1680156128d857600181146128d857600281146128d85760038110156128bb5750600190565b6002190160ff811161287d5760ff16604d811161287d57600a0a90565b50600190565b906040516128eb81612666565b82546001600160a01b0316815260018301546020820152600283015460ff16151560408201526003909201546060830152565b9190820180921161287d57565b9190820391821161287d57565b600019811461287d5760010190565b908160209103126108c7575180151581036108c75790565b929695949161297960a0959260c0865260c0860190612727565b97600180871b038092166020860152166040840152606083015260808201520152565b3d156129c7573d906129ad826126a2565b916129bb6040519384612681565b82523d6000602084013e565b606090565b6001600160401b03811161263d5760051b60200190565b80518210156129f75760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b80548210156129f75760005260206000209060021b0190600090565b356001600160a01b03811681036108c75790565b3580151581036108c75790565b91908110156129f75760071b0190565b6080813603126108c75760405190612a7182612666565b80356001600160a01b03811681036108c75782526020810135602083015260408101359081151582036108c75760609160408401520135606082015290565b908160209103126108c7575160ff811681036108c75790565b90612ad68260015461292b565b811115612ae1575090565b612aea9161291e565b90565b6000546001600160a01b03163303612b0157565b60405163118cdaa760e01b8152336004820152602490fd5b91908110156129f75760061b0190565b989596979493929190612b4b60208b8160405193828580945193849201612704565b600c818301528101030190208a516001600160401b03811161263d57612b71825461278b565b601f81116134b4575b50806020601f821160011461344a5760009161343f575b508160011b916000199060031b1c19161790555b806001612bc160208d8160405193828580945193849201612704565b600c8183015281010301902001556002612bea60208c8160405193828580945193849201612704565b600c8183015281010301902001556003612c1360208b8160405193828580945193849201612704565b600c908201908152030190200180546001600160a01b0319166001600160a01b03909216919091179055604051885190600490612c54838260208e01612704565b600c8382015260208142948101030190200155600560405160208181612c808d83815193849201612704565b600c8183015281010301902001600160ff19825416179055600960405160208181612cb18d83815193849201612704565b8101600c81520301902001600160401b881161263d578054888255808910613415575b5060009081526020812090875b8982106133c057505050600a60405160208181612d048d83815193849201612704565b8101600c81520301902001600160401b861161263d578054868255808710613362575b5060009081526020812090855b878210613309575050506132cd575b613291575b613257575b600095949392955b828110612fa7575050506000935b818510612d71575050509050565b60066040516020818651612d888183858b01612704565b600c90820190815203019020016001600160a01b03612dab611797888686612b19565b166000526020526040600020600160ff1982541617905560018060a01b03612dd7611797878585612b19565b166000908152600d6020526040902060010154946001600160a01b03612e01611797838686612b19565b16600052600d6020526004604060002001866000526020526040600020958451966001600160401b03881161263d57612e3a815461278b565b601f8111612f63575b50602097601f8111600114612ef7578060019596979899600091612eec575b50600019600383901b1c191690851b1790555b828060a01b03612e89611797848888612b19565b16600052600d602052600460406000200190600052602052816040600020018260ff19825416179055818060a01b03612ec6611797838787612b19565b16600052600d60205281604060002001612ee08154612938565b90550193929190612d63565b905088015138612e62565b8160005260206000209860005b601f1983168110612f4b57509060019596979899869282601f19811610612f32575b5050811b019055612e75565b8a015160001960f88460031b161c191690553880612f26565b90996020600181928d8c01518155019b019101612f04565b816000526020600020601f8a0160051c810160208b10612fa0575b601f830160051c82018110612f94575050612e43565b60008155600101612f7e565b5080612f7e565b612fba6115eb8285859a9798999a612a4a565b600760405160208181612fd38c83815193849201612704565b8101600c8152030190200160018060a01b038251166000526020526040600020600160ff1982541617905561309d602082015160405190602061301c8b84815193849201612704565b8201600c81528260206008948593030190200160018060a01b03855116600052602052600160406000200155604083015115159061306960208b8160405193828580945193849201612704565b8101600c8152030190200160018060a01b0384511660005260205260026040600020019060ff801983541691151516179055565b60018060a01b03815116600052600d6020526001604060002001549060018060a01b03815116600052600460406000200182600052602052604060002088516001600160401b03811161263d576130f4825461278b565b601f8111613213575b506020601f82116001146131a457908060019695949392600091613199575b50600019600383901b1c191690861b1790555b838060a01b03905116600052600d6020526004604060002001906000526020528160406000200160ff198154169055818060a01b03613172611797838787612a4a565b16600052600d6020528160406000200161318c8154612938565b9055019594939295612d55565b90508b01513861311c565b8260005260206000209060005b8c601f19851682106131fb575050916001969594939291879282601f198116106131e2575b5050811b01905561312f565b8d015160001960f88460031b161c1916905538806131d6565b600183946020939484930151815501930191016131b1565b826000526020600020601f830160051c810160208410613250575b601f830160051c820181106132445750506130fd565b6000815560010161322e565b508061322e565b6003604051602081885161326e8183858d01612704565b600c9082019081520301902001805460ff60b01b1916600160b01b179055612d4d565b6003604051602081816132aa8b83815193849201612704565b600c9082019081520301902001805460ff60a81b1916600160a81b179055612d48565b6003604051602081816132e68c83815193849201612704565b600c9082019081520301902001805460ff60a01b1916600160a01b179055612d43565b6001906004906080906001600160a01b0361332382612a29565b87546001600160a01b031916911617865560208101358487015561334c6118cd60408301612a3d565b6060810135600387015501930191019091612d34565b6001600160fe1b03818116820361287d578716870361287d578160005260206000208760021b81015b8260021b8201811061339e575050612d27565b806000600492556000600182015560006002820155600060038201550161338b565b60019081906040906001600160a01b036133d982612a29565b8754911660ff60a01b6133ee60208501612a3d565b151560a01b16916affffffffffffffffffffff60a81b161717865501930191019091612ce1565b816000526020600020908982015b8183018110613433575050612cd4565b60008155600101613423565b90508c015138612b91565b8d9250836000526020600020906000935b601f198416851061349c576001945083601f19811610613483575b505050811b019055612ba5565b015160001960f88460031b161c1916905538808e613476565b8101518255602093840193600190920191018e61345b565b826000526020600020601f830160051c8101602084106134f1575b601f830160051c820181106134e5575050612b7a565b600081556001016134cf565b50806134cf56fea2646970667358221220512c41b8db0e586def611c1df6ca6828f11caed9ec55224fa965569a00172e9e64736f6c63430008180033000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000269818c4005c800000000000000000000000000000000000000000000000000009c51c4521e00000
Deployed Bytecode
0x608080604052600436101561001357600080fd5b600090813560e01c9081630fbcb48a146125b45750806317b6dd421461258b5780631906f343146125585780631dfa3375146124d85780631f810ead146124ba57806321cdc5f71461248d578063268736f114611ff05780632fdd44c714611fb757806339c7365e14611eb5578063475b905114611e97578063490ae21014611e745780634fabf9e714611e5657806362b0896a14611cd45780636318ac6414611cb157806367a5279314611c9357806368e4e9b814611c3e57806369002f7c14611334578063715018a6146112da57806376d1d35e146112bc5780637e34ff5a146111c55780638d69167d14610f705780638da5cb5b14610f49578063a0514de514610ef4578063a47af53514610ded578063a7469af114610d9b578063a8c8094714610d32578063ab50769a14610aa0578063b1ea9aa814610a73578063b9a8a4fd146109a3578063bae85b9114610985578063bcdc6e6414610967578063bf4ab74314610944578063c342cac314610904578063c3745543146108cc578063c5a416e614610521578063d203f2bf146104d4578063de2231da146104ab578063e9485e6314610342578063e986768714610324578063f2fde38b14610299578063f4ed4c84146102595763f972f2ae146101ef57600080fd5b3461025657602036600319011261025657600435906001600160401b03821161025657602060ff600361023c8361022936600489016126bd565b8160405193828580945193849201612704565b8101600c815203019020015460a81c166040519015158152f35b80fd5b5034610256576020366003190112610256576102736125f6565b61027b612aed565b60018060a01b03166001600160601b0360a01b600a541617600a5580f35b5034610256576020366003190112610256576102b36125f6565b6102bb612aed565b6001600160a01b0390811690811561030b57600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b604051631e4fbdf760e01b815260048101849052602490fd5b50346102565780600319360112610256576020600854604051908152f35b50346102565760209081600319360112610256576001600160a01b03806103676125f6565b1690818352600d93600d815260408420546001956001820194858311610497576103a9610393876129cc565b966103a16040519889612681565b8088526129cc565b601f190184885b8281106104755750505082610411575b5050509290604094929451938085019181865286518093528160408701970193905b8382106103ef5786880387f35b84518051821689528301518389015260409097019693820193908501906103e2565b865b8381111561042157506103c0565b61047090828952838652600360408a2001818a528652604089208a6040519161044983612622565b89815416835201548782015261045f828a6129e3565b5261046a81896129e3565b50612938565b610413565b60405161048181612622565b8a81528a8382015282828b0101520185906103b0565b634e487b7160e01b87526011600452602487fd5b5034610256578060031936011261025657600a546040516001600160a01b039091168152602090f35b503461025657602036600319011261025657600435906001600160401b038211610256576020600261050d8261022936600488016126bd565b8101600c8152030190200154604051908152f35b50610100366003190112610256576001600160401b0360043581811161074f5761054f9036906004016126bd565b906024356044356001600160a01b03808216908183036108c75760643580151581036108c75760843580151581036108c75760a4359081151582036108c75760c435928884116107405736602385011215610740578a8460040135958a8711610757576024860195602436918960061b0101116107575760e4359a8b11610757576105df8c9b369060040161275b565b9c909860ff600560405184818096516105fe816020998a809601612704565b8101600c815203019020015416610753578d8161075b5750505061062860ff835460a01c16612893565b8a1061075757899061063c8d60035461286a565b6106528161064d600254809661291e565b61291e565b34036107535761066691600b54169261291e565b90803b1561074f57829060046040518094819363162c2c8560e01b83525af180156107445761071c575b50509261071696959261070495927f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa9b956106cc600654612938565b6006556106db8b600754612ac9565b6007556106ea85600454612ac9565b6004556106f987600554612ac9565b600555888b8d612b29565b6040519384934292439233908761295f565b0390a180f35b61072e909b959296939897949b612653565b61074057929891949590938a38610690565b8a80fd5b6040513d84823e3d90fd5b8280fd5b8380fd5b5080fd5b61076a6107729160035461286a565b60025461291e565b34036107535760405163313ce56760e01b81528281600481855afa80156108bc576107a491869161088f575b50612893565b8c10610753576040516323b872dd60e01b8152336004820152306024820152604481018d90529082908290606490829088905af1918215610884578492610857575b50501561075757600b5416803b1561075757816004916040519283809263162c2c8560e01b825234905af180156107445761071c5750509261071696959261070495927f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa9b956106cc600654612938565b6108769250803d1061087d575b61086e8183612681565b810190612947565b38806107e6565b503d610864565b6040513d86823e3d90fd5b6108af9150843d86116108b5575b6108a78183612681565b810190612ab0565b3861079e565b503d61089d565b6040513d87823e3d90fd5b600080fd5b503461025657602036600319011261025657600435906001600160401b038211610256576020600461050d82610229368785016126bd565b50346102565760203660031901126102565761091e6125f6565b610926612aed565b60018060a01b03166001600160601b0360a01b600b541617600b5580f35b50346102565760203660031901126102565761095e612aed565b60043560035580f35b50346102565780600319360112610256576020600654604051908152f35b50346102565780600319360112610256576020600554604051908152f35b503461025657602036600319011261025657600435906001600160401b03821161025657610a246109dc602061022936600487016126bd565b8101600c8152030190206109ef816127c5565b9060018101549060028101549060ff600382015481600560048501549401541693604051978897610120808a52890190612727565b956020880152604087015260018060a01b0381166060870152818160a01c1615156080870152818160a81c16151560a087015260b01c16151560c085015260e084015215156101008301520390f35b503461025657602036600319011261025657600a546001600160a01b031633036102565760043560035580f35b503461025657602080600319360112610757576004356001600160401b03811161074f57610ad29036906004016126bd565b604051815192600281840194610ae9818588612704565b8301928281600c9586815203019020015415610d2e57600660405182818651610b1381838b612704565b81018681520301902001336000528152600160ff60406000205416151503610d2e5760ff600360405183818751610b4b81838c612704565b810187815203019020015460a81c1615610d2e5760405160038451610b71818489612704565b820191848352838160018060a01b03940301902001541693600260405183818751610b9d818388612704565b81018781520301902001549285610c495791610be79160039388600260405185818b51610bcb81838a612704565b8101868152030190200155604051809481938951928391612704565b82019081520301902001805460ff60b01b191690558380808084335af1610c0c61299c565b5015610753576107167f8ef532cfed85682423f2db41466b16ac5d66b2b43d6b5289a78cd22a55e1d3fb936040519384934292439233908761295f565b82600392610c829289600260405185818c51610c6681838a612704565b8101868152030190200155604051809481938a51928391612704565b82019081520301902001805460ff60b01b1916905560405163a9059cbb60e01b815233600482015260248101839052818160448189895af1918215610d23578692610d06575b505015610753576107167f8ef532cfed85682423f2db41466b16ac5d66b2b43d6b5289a78cd22a55e1d3fb936040519384934292439233908761295f565b610d1c9250803d1061087d5761086e8183612681565b3880610cc8565b6040513d88823e3d90fd5b8480fd5b503461025657602036600319011261025657600435906001600160401b038211610256576020610d6536600485016126bd565b600382610d7b6040519384815193849201612704565b820191600c8352838160018060a01b039403019020015416604051908152f35b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6005610dd68361022936600489016126bd565b8101600c8152030190200154166040519015158152f35b50346102565760209081600319360112610256576004356001600160401b038111610757576009610e2784610229819436906004016126bd565b8101600c815203019020018054610e3d816129cc565b90610e4b6040519283612681565b8082528382018093865284862086915b838310610eb357505050506040519280840191818552518092526040840192945b828110610e895784840385f35b855180516001600160a01b0316855282015115158483015294810194604090930192600101610e7c565b600187819260409a9997989a51610ec981612622565b60ff8654858060a01b038116835260a01c161515838201528152019201920191909694939596610e5b565b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6003610f2f8361022936600489016126bd565b8101600c815203019020015460b01c166040519015158152f35b5034610256578060031936011261025657546040516001600160a01b039091168152602090f35b506060366003190112610256576004356001600160401b03811161075757610f9c9036906004016126bd565b610fa461260c565b906044358360405183519060ff60036020928381818a0196610fc781838a612704565b8101600c815203019020015460a01c161561074f57604051918551610fed818584612704565b8301600c81526003848460018060a01b0396879403019020015416838816908103610d2e57806110fd575061102860ff855460a01c16612893565b85106107535761103a6002548661291e565b34036107535760029161105891604051809381928a51928391612704565b8101600c8152030190200161106e84825461291e565b905561107c83600754612ac9565b600755600b541660025490803b1561074f57829060046040518094819363162c2c8560e01b83525af18015610744576110e9575b50506107167f37ee58370cd460d6c21bfc1df15ae27ec7b1e06328bc46f594d83bce5b9e8afa936040519384934292439233908761295f565b6110f290612653565b6107535783386110b0565b6002543403610d2e5760405163313ce56760e01b81528381600481855afa8015610d23576111319187916111ae5750612893565b8610610d2e576040516323b872dd60e01b8152336004820152306024820152604481018790529083908290606490829089905af19081156108bc578591611191575b50156107535760029161105891604051809381928a51928391612704565b6111a89150833d851161087d5761086e8183612681565b38611173565b6108af9150853d87116108b5576108a78183612681565b5034610256576040366003190112610256576001600160401b0360043581811161074f573660238201121561074f57806004013591821161074f576024810190602483369201011161074f5761121961274c565b90600660405184838237602081868101600c8152030190200133600052602052600160ff604060002054161515036107535760ff600360405185848237602081878101600c815203019020015460b01c1682151590151503611279578380f35b8260206003926112b5956040519384928337600c9082019081520301902001805460ff60b01b191691151560b01b60ff60b01b16919091179055565b3880808380f35b50346102565780600319360112610256576020600454604051908152f35b50346102565780600319360112610256576112f3612aed565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b506060366003190112610256576004356001600160401b038111610757576113609036906004016126bd565b61136861274c565b906044356001600160401b0381116107535761138890369060040161275b565b92600660405160208186516113a08183858b01612704565b8101600c81520301902001338652602052600160ff604087205416151503610d2e5760ff600360405160208187516113db8183858c01612704565b8101600c815203019020015460a01c1615610d2e5760ff600360405160208187516114098183858c01612704565b8101600c815203019020015460b01c1681151590151503611bf3575b508215611a0257600b546001600160a01b03169084805b85811061199057503403610d2e57845b604051845161145f818360208901612704565b8101600c8152816020600a9384930301902001548210156114f757906114b26114ac826001946040516020818161149c8d83815193849201612704565b8101600c81520301902001612a0d565b506128de565b6007604051602081816114cb8b83815193849201612704565b8101600c8152030190200190838060a01b0390511688526020526040872060ff1981541690550161144c565b505091929084813b156102565760405163162c2c8560e01b8152918290600490829034905af180156108bc5761197d575b50600a60405160208186516115408183858b01612704565b8101600c81520301902001600160401b82116119695780548282558083106118fd575b50845260208420909392919083825b8682106118895750505082935b8085106115dd5750507fa4b990d84591fd04079e4655b1199880ed2d7ad7395c2b26c464c191d00a82fc9192506115c5905b604051918291608083526080830190612727565b3360208301524360408301524260608301520390a180f35b6115f06115eb868385612a4a565b612a5a565b94600760405160208187516116088183858c01612704565b8101600c8152030190200160018060a01b038751166000526020526040600020600160ff198254161790556116ce602087015160405190865161164f818460208b01612704565b8201600c81528260206008948593030190200160018060a01b038a511660005260205260016040600020015560408801511515906040516020818161169a8b83815193849201612704565b8101600c8152030190200160018060a01b0389511660005260205260026040600020019060ff801983541691151516179055565b85516001600160a01b039081168652600d6020908152604080882060010154895190931688528088208389526004019091528620855197906001600160401b0389116118755761171e815461278b565b601f8111611834575b50602098601f81116001146117cb5780899a60019798999a916117c0575b50600019600383901b1c191690861b1790555b838060a01b039051168752600d6020526004604088200190875260205281604087200160ff198154169055818060a01b0361179c611797838688612a4a565b612a29565b168652600d6020528160408720016117b48154612938565b9055019392919061157f565b905089015138611745565b8189526020892099895b601f198316811061181c5750906001969798999a879282601f19811610611803575b5050811b019055611758565b8b015160001960f88460031b161c1916905538806117f7565b818a01518c556001909b019a602091820191016117d5565b81895260208920601f8b0160051c810160208c1061186e575b601f830160051c82018110611863575050611727565b8a815560010161184d565b508061184d565b634e487b7160e01b88526041600452602488fd5b60046080600192838060a09b98999a9b1b036118a482612a29565b87546001600160a01b03191691161786556020810135848701556118e26118cd60408301612a3d565b600288019060ff801983541691151516179055565b60608101356003870155019301910190919594939295611572565b6001600160fe1b038181168203610497578316830361195557818652602086208360021b81015b8260021b82018110611937575050611563565b80886004925588600182015588600282015588600382015501611924565b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b85526041600452602485fd5b61198990949194612653565b9238611528565b61199e6115eb828886612a4a565b6007604051602081816119b78b83815193849201612704565b600c9082019081520301902091516001600160a01b0316895201602052604087205460ff16156119ea575b60010161143c565b906119fa6001916003549061291e565b9190506119e2565b835b6040518351611a17818360208801612704565b8101600c8152816020600a938493030190200154821015611a975790611a546114ac826001946040516020818161149c8c83815193849201612704565b60076040516020818851611a6b8183858d01612704565b8101600c8152030190200190838060a01b0390511687526020526040862060ff19815416905501611a04565b5050919091600a6040516020818651611ab38183858b01612704565b8101600c8152030190200190600160401b8311611969578154838355808410611b85575b509084526020842084915b838310611b1757505050506115c57fa4b990d84591fd04079e4655b1199880ed2d7ad7395c2b26c464c191d00a82fc916115b1565b6001906004906080906001600160a01b03611b3182612a29565b86546001600160a01b0319169116178555602081013584860155611b6f611b5a60408301612a3d565b600287019060ff801983541691151516179055565b6060810135600386015501920192019190611ae2565b60026001600160fe1b038281168303611bdf578516850361049757838752602087209160021b8201918560021b015b828110611bc2575050611ad7565b808860049255886001820155888382015588600382015501611bb4565b634e487b7160e01b88526011600452602488fd5b611c389060036040516020818751611c0e8183858c01612704565b600c9082019081520301902001805460ff60b01b191691151560b01b60ff60b01b16919091179055565b38611425565b503461025657602036600319011261025657600435906001600160401b03821161025657602060ff6003611c798361022936600489016126bd565b8101600c815203019020015460a01c166040519015158152f35b50346102565780600319360112610256576020600254604051908152f35b503461025657806003193601126102565760ff6020915460a01c16604051908152f35b50346102565760209081600319360112610256576001600160a01b03611cf86125f6565b1690818152600d90600d8452600191600160408320015490611d19826129cc565b94611d276040519687612681565b828652611d33836129cc565b601f190187855b828110611e335750505082611dca575b50505060409392919351938385948501908086528451809252604086018160408460051b890101960194905b838210611d835787870388f35b918496819592949698508190603f198b82030185528951908280611db08451604085526040850190612727565b930151151591015298019201920187969593919492611d76565b84845b848110611ddb575050611d4a565b8286528389526004604087200181875289526040862060ff8360405192611e0184612622565b611e0a816127c5565b845201541615158a820152611e1f828a6129e3565b52611e2a81896129e3565b50018590611dcd565b8190604051611e4181612622565b60608152888382015282828c01015201611d3a565b50346102565780600319360112610256576020600954604051908152f35b503461025657602036600319011261025657611e8e612aed565b60043560025580f35b50346102565780600319360112610256576020600754604051908152f35b50346102565760209081600319360112610256576004356001600160401b03811161075757600a611eef84610229819436906004016126bd565b8101600c815203019020018054611f05816129cc565b90611f136040519283612681565b8082528382018093865284862086915b838310611f9057505050506040519280840191818552518092526040840192945b828110611f515784840385f35b855180516001600160a01b0316855280830151858401526040808201511515908601526060908101519085015294810194608090930192600101611f44565b600487600192611fa4859b9a98999b6128de565b8152019201920191909694939596611f23565b503461025657602036600319011261025657600435906001600160401b038211610256576020600161050d8261022936600488016126bd565b5034610256576040366003190112610256576004356001600160401b038111610757576120219036906004016126bd565b6024359060405191815160208084019161203c818785612704565b8501600c908181528683600298899303019020015484116124895760076040518381885161206b81838a612704565b810185815203019020013388528252600160ff604089205416151503612489576040519260ff865161209e818785612704565b85018381528585600397889303019020015460b01c1615612485576040519186516120ca818585612704565b8301818152838560089586930301902001338a5284526120ec60408a206128de565b6040810151612442575b50604051858851612108818487612704565b8201838152829003860190912001546001600160a01b0316978861227857918491836122149460405185818d5161214081838a612704565b810186815203019020016121558a825461292b565b9055338c52600d84528060408d20018b8d5284528b6040812055338c52600d845260408c20018a8c5283528a6040812054338252600d85528860408320018183528552604082206001600160601b0360a01b8154169055338252600d855288604083200181835285528860406121d18c60018387200154612ac9565b93338152600d88522001908d528452600160408d2001556121f28554612938565b855561220088600954612ac9565b600955604051809481938b51928391612704565b82019081520301902001903387525242906040862001558380808084335af161223b61299c565b5015610753576107167f2c3f762ed0eb0fffe73c47263a0393602058fd919c2c7f7c44579fe5b545ee23936040519384934292439233908761295f565b9184959491836123279460405185818d5161229481838a612704565b810186815203019020016122a98a825461292b565b9055338c52600d908185528c8c826040832001915285528b8d6040812054156123d1575b5050338d5281855260408d20018b8d5284528b8760408083205492338152848852828282200184825288526123088d60018484200154612ac9565b9433825288522001908d528452600160408d2001556121f28554612938565b8201908152030190203380895291018352604080882042930192909255905163a9059cbb60e01b8152600481019190915260248101839052818160448189895af1918215610d235786926123b4575b505015610753576107167f2c3f762ed0eb0fffe73c47263a0393602058fd919c2c7f7c44579fe5b545ee23936040519384934292439233908761295f565b6123ca9250803d1061087d5761086e8183612681565b3880612376565b6040903381528488528181206123e78154612938565b90553381528488528382822080549483520188522055338d528185528c8c826040832001915285528c60408120543382528387528960408320019152855260408d208c6001600160601b0360a01b8254161790558b8d6122cd565b848101518711612481576060015162015180810180911161246d57421061246957386120f6565b8880fd5b634e487b7160e01b8a52601160045260248afd5b8980fd5b8780fd5b8680fd5b503461025657602036600319011261025657600a546001600160a01b031633036102565760043560025580f35b50346102565780600319360112610256576020600354604051908152f35b5034610256576040366003190112610256576004356001600160401b03811161075757604060209261251060039336906004016126bd565b60086125318661251e61260c565b9381875193828580945193849201612704565b600c908201908152030190206001600160a01b039092168352018452200154604051908152f35b5034610256576020366003190112610256576004359060ff8216820361025657602061258383612893565b604051908152f35b5034610256578060031936011261025657600b546040516001600160a01b039091168152602090f35b9050346107575760203660031901126107575760409182906001600160a01b036125dc6125f6565b168152600d60205220600181549101549082526020820152f35b600435906001600160a01b03821682036108c757565b602435906001600160a01b03821682036108c757565b604081019081106001600160401b0382111761263d57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161263d57604052565b608081019081106001600160401b0382111761263d57604052565b90601f801991011681019081106001600160401b0382111761263d57604052565b6001600160401b03811161263d57601f01601f191660200190565b81601f820112156108c7578035906126d4826126a2565b926126e26040519485612681565b828452602083830101116108c757816000926020809301838601378301015290565b60005b8381106127175750506000910152565b8181015183820152602001612707565b9060209161274081518092818552858086019101612704565b601f01601f1916010190565b6024359081151582036108c757565b9181601f840112156108c7578235916001600160401b0383116108c7576020808501948460071b0101116108c757565b90600182811c921680156127bb575b60208310146127a557565b634e487b7160e01b600052602260045260246000fd5b91607f169161279a565b906040519182600082546127d88161278b565b908184526020946001916001811690816000146128485750600114612809575b50505061280792500383612681565b565b600090815285812095935091905b81831061283057505061280793508201013880806127f8565b85548884018501529485019487945091830191612817565b9250505061280794925060ff191682840152151560051b8201013880806127f8565b8181029291811591840414171561287d57565b634e487b7160e01b600052601160045260246000fd5b60ff1680156128d857600181146128d857600281146128d85760038110156128bb5750600190565b6002190160ff811161287d5760ff16604d811161287d57600a0a90565b50600190565b906040516128eb81612666565b82546001600160a01b0316815260018301546020820152600283015460ff16151560408201526003909201546060830152565b9190820180921161287d57565b9190820391821161287d57565b600019811461287d5760010190565b908160209103126108c7575180151581036108c75790565b929695949161297960a0959260c0865260c0860190612727565b97600180871b038092166020860152166040840152606083015260808201520152565b3d156129c7573d906129ad826126a2565b916129bb6040519384612681565b82523d6000602084013e565b606090565b6001600160401b03811161263d5760051b60200190565b80518210156129f75760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b80548210156129f75760005260206000209060021b0190600090565b356001600160a01b03811681036108c75790565b3580151581036108c75790565b91908110156129f75760071b0190565b6080813603126108c75760405190612a7182612666565b80356001600160a01b03811681036108c75782526020810135602083015260408101359081151582036108c75760609160408401520135606082015290565b908160209103126108c7575160ff811681036108c75790565b90612ad68260015461292b565b811115612ae1575090565b612aea9161291e565b90565b6000546001600160a01b03163303612b0157565b60405163118cdaa760e01b8152336004820152602490fd5b91908110156129f75760061b0190565b989596979493929190612b4b60208b8160405193828580945193849201612704565b600c818301528101030190208a516001600160401b03811161263d57612b71825461278b565b601f81116134b4575b50806020601f821160011461344a5760009161343f575b508160011b916000199060031b1c19161790555b806001612bc160208d8160405193828580945193849201612704565b600c8183015281010301902001556002612bea60208c8160405193828580945193849201612704565b600c8183015281010301902001556003612c1360208b8160405193828580945193849201612704565b600c908201908152030190200180546001600160a01b0319166001600160a01b03909216919091179055604051885190600490612c54838260208e01612704565b600c8382015260208142948101030190200155600560405160208181612c808d83815193849201612704565b600c8183015281010301902001600160ff19825416179055600960405160208181612cb18d83815193849201612704565b8101600c81520301902001600160401b881161263d578054888255808910613415575b5060009081526020812090875b8982106133c057505050600a60405160208181612d048d83815193849201612704565b8101600c81520301902001600160401b861161263d578054868255808710613362575b5060009081526020812090855b878210613309575050506132cd575b613291575b613257575b600095949392955b828110612fa7575050506000935b818510612d71575050509050565b60066040516020818651612d888183858b01612704565b600c90820190815203019020016001600160a01b03612dab611797888686612b19565b166000526020526040600020600160ff1982541617905560018060a01b03612dd7611797878585612b19565b166000908152600d6020526040902060010154946001600160a01b03612e01611797838686612b19565b16600052600d6020526004604060002001866000526020526040600020958451966001600160401b03881161263d57612e3a815461278b565b601f8111612f63575b50602097601f8111600114612ef7578060019596979899600091612eec575b50600019600383901b1c191690851b1790555b828060a01b03612e89611797848888612b19565b16600052600d602052600460406000200190600052602052816040600020018260ff19825416179055818060a01b03612ec6611797838787612b19565b16600052600d60205281604060002001612ee08154612938565b90550193929190612d63565b905088015138612e62565b8160005260206000209860005b601f1983168110612f4b57509060019596979899869282601f19811610612f32575b5050811b019055612e75565b8a015160001960f88460031b161c191690553880612f26565b90996020600181928d8c01518155019b019101612f04565b816000526020600020601f8a0160051c810160208b10612fa0575b601f830160051c82018110612f94575050612e43565b60008155600101612f7e565b5080612f7e565b612fba6115eb8285859a9798999a612a4a565b600760405160208181612fd38c83815193849201612704565b8101600c8152030190200160018060a01b038251166000526020526040600020600160ff1982541617905561309d602082015160405190602061301c8b84815193849201612704565b8201600c81528260206008948593030190200160018060a01b03855116600052602052600160406000200155604083015115159061306960208b8160405193828580945193849201612704565b8101600c8152030190200160018060a01b0384511660005260205260026040600020019060ff801983541691151516179055565b60018060a01b03815116600052600d6020526001604060002001549060018060a01b03815116600052600460406000200182600052602052604060002088516001600160401b03811161263d576130f4825461278b565b601f8111613213575b506020601f82116001146131a457908060019695949392600091613199575b50600019600383901b1c191690861b1790555b838060a01b03905116600052600d6020526004604060002001906000526020528160406000200160ff198154169055818060a01b03613172611797838787612a4a565b16600052600d6020528160406000200161318c8154612938565b9055019594939295612d55565b90508b01513861311c565b8260005260206000209060005b8c601f19851682106131fb575050916001969594939291879282601f198116106131e2575b5050811b01905561312f565b8d015160001960f88460031b161c1916905538806131d6565b600183946020939484930151815501930191016131b1565b826000526020600020601f830160051c810160208410613250575b601f830160051c820181106132445750506130fd565b6000815560010161322e565b508061322e565b6003604051602081885161326e8183858d01612704565b600c9082019081520301902001805460ff60b01b1916600160b01b179055612d4d565b6003604051602081816132aa8b83815193849201612704565b600c9082019081520301902001805460ff60a81b1916600160a81b179055612d48565b6003604051602081816132e68c83815193849201612704565b600c9082019081520301902001805460ff60a01b1916600160a01b179055612d43565b6001906004906080906001600160a01b0361332382612a29565b87546001600160a01b031916911617865560208101358487015561334c6118cd60408301612a3d565b6060810135600387015501930191019091612d34565b6001600160fe1b03818116820361287d578716870361287d578160005260206000208760021b81015b8260021b8201811061339e575050612d27565b806000600492556000600182015560006002820155600060038201550161338b565b60019081906040906001600160a01b036133d982612a29565b8754911660ff60a01b6133ee60208501612a3d565b151560a01b16916affffffffffffffffffffff60a81b161717865501930191019091612ce1565b816000526020600020908982015b8183018110613433575050612cd4565b60008155600101613423565b90508c015138612b91565b8d9250836000526020600020906000935b601f198416851061349c576001945083601f19811610613483575b505050811b019055612ba5565b015160001960f88460031b161c1916905538808e613476565b8101518255602093840193600190920191018e61345b565b826000526020600020601f830160051c8101602084106134f1575b601f830160051c820181106134e5575050612b7a565b600081556001016134cf565b50806134cf56fea2646970667358221220512c41b8db0e586def611c1df6ca6828f11caed9ec55224fa965569a00172e9e64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000269818c4005c800000000000000000000000000000000000000000000000000009c51c4521e00000
-----Decoded View---------------
Arg [0] : _paramOmnifyAddress (address): 0x883bA282D409e0E984Bef70B338f641D0045942F
Arg [1] : _paramNativeDecimals (uint8): 18
Arg [2] : _paramDepositFee (uint256): 2781000000000000000
Arg [3] : _paramBenefFee (uint256): 704000000000000000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000883ba282d409e0e984bef70b338f641d0045942f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [2] : 000000000000000000000000000000000000000000000000269818c4005c8000
Arg [3] : 00000000000000000000000000000000000000000000000009c51c4521e00000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.