Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 900 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 21239899 | 3 days ago | IN | 0 ETH | 0.00077436 | ||||
Claim | 21214662 | 7 days ago | IN | 0 ETH | 0.00053647 | ||||
Claim | 21214619 | 7 days ago | IN | 0 ETH | 0.0006772 | ||||
Claim | 21213658 | 7 days ago | IN | 0 ETH | 0.00077115 | ||||
Claim | 21211926 | 7 days ago | IN | 0 ETH | 0.00056264 | ||||
Claim | 21209290 | 7 days ago | IN | 0 ETH | 0.00074492 | ||||
Claim | 21209290 | 7 days ago | IN | 0 ETH | 0.00074492 | ||||
Claim | 21203284 | 8 days ago | IN | 0 ETH | 0.00058221 | ||||
Claim | 21203281 | 8 days ago | IN | 0 ETH | 0.00078824 | ||||
Claim | 21199204 | 9 days ago | IN | 0 ETH | 0.0006098 | ||||
Claim | 21173675 | 12 days ago | IN | 0 ETH | 0.00249728 | ||||
Claim | 21165777 | 13 days ago | IN | 0 ETH | 0.00297823 | ||||
Claim | 21137645 | 17 days ago | IN | 0 ETH | 0.00106035 | ||||
Claim | 21131155 | 18 days ago | IN | 0 ETH | 0.00139685 | ||||
Claim | 21097725 | 23 days ago | IN | 0 ETH | 0.00032547 | ||||
Claim | 21091681 | 24 days ago | IN | 0 ETH | 0.00045457 | ||||
Claim | 21070084 | 27 days ago | IN | 0 ETH | 0.00044748 | ||||
Claim | 21002560 | 36 days ago | IN | 0 ETH | 0.00049283 | ||||
Claim | 21001463 | 36 days ago | IN | 0 ETH | 0.00065026 | ||||
Claim | 20943886 | 44 days ago | IN | 0 ETH | 0.00161327 | ||||
Claim | 20930883 | 46 days ago | IN | 0 ETH | 0.00091582 | ||||
Claim | 20930878 | 46 days ago | IN | 0 ETH | 0.00087569 | ||||
Claim | 20930869 | 46 days ago | IN | 0 ETH | 0.00094005 | ||||
Claim | 20926032 | 47 days ago | IN | 0 ETH | 0.00049661 | ||||
Claim | 20926028 | 47 days ago | IN | 0 ETH | 0.00049852 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TokenConversion
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // Errors error Conversion_Expired(); error Only_Stream_Owner(); error Invalid_Stream_Owner(); error Invalid_Recipient(); error Invalid_Stream_StartTime(); error Invalid_Token_Decimals(); error Insufficient_Reserves(); // Interfaces interface IERC20Burnable is IERC20 { function burnFrom(address account, uint256 amount) external; } /// Converts a token to another token where the conversion price is fixed and the output token is streamed to the /// owner over a fixed duration. contract TokenConversion is Ownable { // Constants address public immutable tokenIn; // the token to deposit address public immutable tokenOut; // the token to stream uint256 public immutable rate; // tokenIn (in tokenIn precision) that converts to 1 tokenOut (in tokenOut precision) uint256 public immutable duration; // the vesting duration uint256 public immutable expiration; // expiration of the conversion program // Structs struct Stream { uint128 total; // expressed in tokenOut precision uint128 claimed; // expressed in tokenOut precision } // Storage vars // Stream owner and startTime is encoded in streamId mapping(uint256 => Stream) public streams; // Total unclaimed tokenOut uint256 public totalUnclaimed; // Events event Convert( uint256 indexed streamId, address indexed sender, address indexed owner, uint256 amountIn, uint256 amountOut ); event Claim( uint256 indexed streamId, address indexed owner, address indexed recipient, uint256 amount ); event UpdateStreamOwner( uint256 indexed streamId, address indexed owner, address indexed newOwner, uint256 newStreamId ); /// Instantiates a new converter contract with an owner /// @dev owner is able to withdraw tokenOut from the conversion contract constructor( address _tokenIn, address _tokenOut, uint256 _rate, uint256 _duration, uint256 _expiration, address _owner ) { // initialize conversion terms tokenIn = _tokenIn; tokenOut = _tokenOut; rate = _rate; duration = _duration; expiration = _expiration; // Sanity checks if (IERC20Metadata(tokenIn).decimals() != 18) revert Invalid_Token_Decimals(); if (IERC20Metadata(tokenOut).decimals() != 18) revert Invalid_Token_Decimals(); transferOwnership(_owner); } /// Burns `amount` of tokenIn tokens and creates a new stream of tokenOut /// tokens claimable by `owner` over the stream `duration` /// @param amount The amount of tokenIn to convert (in tokenIn precision) /// @param owner The owner of the new stream /// @return streamId Encoded identifier of the stream [owner, startTime] function convert(uint256 amount, address owner) external returns (uint256 streamId) { // assert conversion is not expired if (block.timestamp > expiration) revert Conversion_Expired(); // don't convert to zero address if (owner == address(0)) revert Invalid_Stream_Owner(); // compute stream amount // rate converts from tokenIn precision to tokenOut precision uint256 amountOut = amount / rate; // do not convert if insufficient reserves uint256 newTotalUnclaimed = totalUnclaimed + amountOut; if (IERC20(tokenOut).balanceOf(address(this)) < newTotalUnclaimed) revert Insufficient_Reserves(); // update total unclaimed tokenOut totalUnclaimed = newTotalUnclaimed; // create new stream or add to existing stream created in same block streamId = encodeStreamId(owner, uint64(block.timestamp)); Stream storage stream = streams[streamId]; // this is safe bc tokenOut totalSupply is only 10**7 stream.total = uint128(amountOut + stream.total); // burn deposited tokens // reverts if insufficient allowance or balance IERC20Burnable(tokenIn).burnFrom(msg.sender, amount); emit Convert(streamId, msg.sender, owner, amount, amountOut); } /// Withdraws claimable tokenOut tokens to the stream's `owner` /// @param streamId The encoded identifier of the stream to claim from /// @return claimed The amount of tokens claimed /// @dev Reverts if not called by the stream's `owner` function claim(uint256 streamId) external returns (uint256 claimed) { Stream memory stream = streams[streamId]; (address streamOwner, uint64 startTime) = decodeStreamId(streamId); // withdraw claimable amount return _claim(stream, streamId, streamOwner, streamOwner, startTime); } /// Withdraws claimable tokenOut tokens to a designated `recipient` /// @param streamId The encoded identifier of the stream to claim from /// @param recipient The recipient of the claimed token amount /// @return claimed The amount of tokens claimed /// @dev Reverts if not called by the stream's `owner` function claim(uint256 streamId, address recipient) external returns (uint256 claimed) { // don't claim to zero address if (recipient == address(0)) revert Invalid_Recipient(); Stream memory stream = streams[streamId]; (address streamOwner, uint64 startTime) = decodeStreamId(streamId); // withdraw claimable amount return _claim(stream, streamId, streamOwner, recipient, startTime); } // Implementation of the claim feature function _claim( Stream memory stream, uint256 streamId, address streamOwner, address recipient, uint64 startTime ) private returns (uint256 claimed) { // check owner if (msg.sender != streamOwner) revert Only_Stream_Owner(); // compute claimable amount and update stream claimed = _claimableBalance(stream, startTime); stream.claimed = uint128(stream.claimed + claimed); streams[streamId] = stream; // update remaining total allocated tokenOut // claimed <= stream.total and stream.total <= total totalUnclaimed = totalUnclaimed - claimed; // withdraw claimable amount // reverts if insufficient balance IERC20(tokenOut).transfer(recipient, claimed); emit Claim(streamId, streamOwner, recipient, claimed); } /// Transfers stream to a new owner /// @param streamId The encoded identifier of the stream to transfer to a new owner /// @param owner The new owner of the stream /// @return newStreamId New identifier of the stream [newOwner, startTime] /// @dev Reverts if not called by the stream's `owner` function transferStreamOwnership(uint256 streamId, address owner) external returns (uint256 newStreamId) { // don't transfer stream to zero address if (owner == address(0)) revert Invalid_Stream_Owner(); Stream memory stream = streams[streamId]; (address currentOwner, uint64 startTime) = decodeStreamId(streamId); // only stream owner is allowed to update ownership if (currentOwner != msg.sender) revert Only_Stream_Owner(); // don't transfer stream to currentOwner if (owner == currentOwner) revert Invalid_Stream_Owner(); // store stream with new streamId or add to existing stream newStreamId = encodeStreamId(owner, startTime); Stream memory newStream = streams[newStreamId]; newStream.total += stream.total; newStream.claimed += stream.claimed; streams[newStreamId] = newStream; delete streams[streamId]; emit UpdateStreamOwner(streamId, currentOwner, owner, newStreamId); } // Owner methods /// Withdraws `amount` of tokenOut to owner /// @param amount The amount of tokens to withdraw from the conversion contract /// @dev Reverts if not called by the contract's `owner` /// @dev This is used in two scenarios: /// - Emergency such as a vulnerability in the contract /// - Recover unconverted funds function withdraw(uint256 amount) external onlyOwner { // reverts if insufficient balance IERC20(tokenOut).transfer(owner(), amount); } // View methods /// Returns the claimable balance for a stream /// @param streamId The encoded identifier of the stream to view `claimableBalance` of /// @return claimable The amount of tokens claimable function claimableBalance(uint256 streamId) external view returns (uint256 claimable) { (, uint64 startTime) = decodeStreamId(streamId); return _claimableBalance(streams[streamId], startTime); } // Implementation of claimableBalance query // claimable <= stream.total and stream.total <= total so that claimable <= tokenOut.balanceOf(this) function _claimableBalance(Stream memory stream, uint64 startTime) private view returns (uint256 claimable) { uint256 endTime = startTime + duration; if (block.timestamp <= startTime) { revert Invalid_Stream_StartTime(); } else if (endTime <= block.timestamp) { claimable = stream.total - stream.claimed; } else { uint256 diffTime = block.timestamp - startTime; claimable = (stream.total * diffTime) / duration - stream.claimed; } } /// @notice Encodes `owner` and `startTime` as `streamId` /// @param owner Owner of the stream /// @param startTime Stream startTime timestamp /// @return streamId Encoded identifier of the stream [owner, startTime] function encodeStreamId(address owner, uint64 startTime) public pure returns (uint256 streamId) { unchecked { streamId = (uint256(uint160(owner)) << 96) + startTime; } } /// @notice Decodes the `owner` and `startTime` from `streamId` /// @param streamId The encoded stream identifier consisting of [owner, startTime] /// @return owner owner extracted from `streamId` /// @return startTime startTime extracted from `streamId` function decodeStreamId(uint256 streamId) public pure returns (address owner, uint64 startTime) { owner = address(uint160(uint256(streamId >> 96))); startTime = uint64(streamId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @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 // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [ "@openzeppelin/=lib/openzeppelin-contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "mockprovider/=lib/mockprovider/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 20000 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Conversion_Expired","type":"error"},{"inputs":[],"name":"Insufficient_Reserves","type":"error"},{"inputs":[],"name":"Invalid_Recipient","type":"error"},{"inputs":[],"name":"Invalid_Stream_Owner","type":"error"},{"inputs":[],"name":"Invalid_Stream_StartTime","type":"error"},{"inputs":[],"name":"Invalid_Token_Decimals","type":"error"},{"inputs":[],"name":"Only_Stream_Owner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Convert","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"newStreamId","type":"uint256"}],"name":"UpdateStreamOwner","type":"event"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"claim","outputs":[{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"claim","outputs":[{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"claimableBalance","outputs":[{"internalType":"uint256","name":"claimable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"convert","outputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"decodeStreamId","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"duration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"name":"encodeStreamId","outputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"streams","outputs":[{"internalType":"uint128","name":"total","type":"uint128"},{"internalType":"uint128","name":"claimed","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOut","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"transferStreamOwnership","outputs":[{"internalType":"uint256","name":"newStreamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
610120604081815234620002a85760c082620014ea8038038091620000258285620002ad565b833981010312620002a8576200003b82620002e7565b6020906200004b828501620002e7565b91838501516060860151906200006960a060808901519801620002e7565b94620000753362000317565b608085905260a05260c05260e052610100948552835163313ce56760e01b8082526004936001600160a01b039290849082908790829087165afa9081156200029d5760129160ff916000916200027b575b5016036200026b57828260a05116918588518094819382525afa908115620002605760129160ff916000916200022c575b5016036200021c5733816000541603620001db578316156200018a575050620001209062000317565b5161118b91826200035f8339608051828181610477015261070e015260a0518281816102ed0152818161064b015281816109d80152610f99015260c0518281816105e20152610a56015260e051828181610c7f015261107901525181818161055501526105980152f35b835162461bcd60e51b815291820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260849150fd5b606483838088519262461bcd60e51b845283015260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b845163dbfd83f760e01b81528390fd5b620002519150853d871162000258575b620002488183620002ad565b810190620002fc565b38620000f7565b503d6200023c565b86513d6000823e3d90fd5b855163dbfd83f760e01b81528490fd5b620002969150863d88116200025857620002488183620002ad565b38620000c6565b87513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b03821190821017620002d157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620002a857565b90816020910312620002a8575160ff81168103620002a85790565b600080546001600160a01b039283166001600160a01b03198216811783559216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a356fe6080604081815260048036101561001557600080fd5b600092833560e01c90816309fe471514610ca2575080630fb5a6b414610c675780632b5759ef14610a795780632c4e722e14610a3e5780632e1a7d4d1461093e578063379607f5146108d95780633a2ee252146105785780634665096d1461053d578063494400f1146104dc57806364d60d911461049b5780636daf390b1461044a578063715018a6146103c557806385d3374f146103675780638da5cb5b14610334578063c96f14b814610315578063d0202d3b146102c0578063ddd5e1b2146102085763f2fde38b146100e957600080fd5b3461020457602060031936011261020457610102610cf9565b9083549073ffffffffffffffffffffffffffffffffffffffff8083169361012a338614610d1c565b169384156101815750507fffffffffffffffffffffffff000000000000000000000000000000000000000016821783557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5034610204578160031936011261020457803592610224610cd1565b9173ffffffffffffffffffffffffffffffffffffffff8316156102995750926102929183858360209752600187522084519061025f82610df6565b546fffffffffffffffffffffffffffffffff8116825260801c8682015267ffffffffffffffff8316928060601c91610ea7565b9051908152f35b83517fe331dae2000000000000000000000000000000000000000000000000000000008152fd5b5050346103115781600319360112610311576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b5050346103115781600319360112610311576020906002549051908152f35b50503461031157816003193601126103115773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b50346102045760206003193601126102045760209267ffffffffffffffff836102929335928381526001875220918451926103a184610df6565b546fffffffffffffffffffffffffffffffff8116845260801c86840152169061106e565b83346104475780600319360112610447578080547fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff82169161041d338414610d1c565b1682557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b5050346103115781600319360112610311576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461020457602060031936011261020457918192358152600160205220548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b8284346104475781600319360112610447576104f6610cf9565b906024359067ffffffffffffffff821680920361044757507fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602093519260601b16018152f35b505034610311578160031936011261031157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b509190346103115780600319360112610311578235610595610cd1565b907f000000000000000000000000000000000000000000000000000000000000000042116108b15773ffffffffffffffffffffffffffffffffffffffff93848316928315610889576106077f000000000000000000000000000000000000000000000000000000000000000084610d81565b9161061483600254610dba565b978651987f70a08231000000000000000000000000000000000000000000000000000000008a5230828b01526020998a816024818d7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561087f57908291859161084a575b50106108225760025567ffffffffffffffff927fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008442169160601b16019788835260018a5287832080547fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff6107068184168a610dba565b1691161790557f00000000000000000000000000000000000000000000000000000000000000001692833b156102045782885180957f79cc67900000000000000000000000000000000000000000000000000000000082528183816107918c338a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015610818576107d9575b50505050835191825285820152837f85a336c4f7c5fd8be4f1723eb3e0c30136490a5029768639107a97f87efbad60843393a451908152f35b83116107ec5750508452388080806107a0565b9060416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b88513d85823e3d90fd5b5086517fe5a8e29e000000000000000000000000000000000000000000000000000000008152fd5b8092508c8092503d8311610878575b6108638183610e41565b81010312610874578190513861067e565b8380fd5b503d610859565b89513d86823e3d90fd5b8685517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b8483517f73eb64d3000000000000000000000000000000000000000000000000000000008152fd5b5034610204576020600319360112610204576020928261029292359182815260018652209083519161090a83610df6565b546fffffffffffffffffffffffffffffffff8116835260801c858301528060601c8167ffffffffffffffff82931693610ea7565b5090346102045760206003193601126102045760206109d49273ffffffffffffffffffffffffffffffffffffffff8086541661097b338214610d1c565b8685518097819582947fa9059cbb00000000000000000000000000000000000000000000000000000000845281359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610a355750610a0a575080f35b610a2a9060203d8111610a2e575b610a228183610e41565b810190610e8f565b5080f35b503d610a18565b513d84823e3d90fd5b505034610311578160031936011261031157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5090346102045780600319360112610204578135610a95610cd1565b9273ffffffffffffffffffffffffffffffffffffffff8416918215610c3f5780865260209560018752848120855190610acd82610df6565b54906fffffffffffffffffffffffffffffffff9788831682528982019260801c83528460601c95338703610c1857868814610bf1575067ffffffffffffffff85169060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016019788845260018a52808089862094818d818d5198610b528a610df6565b549781891692838b528a019860801c89525116610b6e9161104a565b16865251168184511690610b819161104a565b16825288845260018a52878420925116905160801b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055818152848120558351868682527f95f4ec591e74f0e3708d4c5312b19c25d511f03406aa826618c1691fe0b6472591a451908152f35b88517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b88517fee9ce58d000000000000000000000000000000000000000000000000000000008152fd5b5082517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b505034610311578160031936011261031157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b9293905034610447576020600319360112610447575067ffffffffffffffff90358060601c8352166020820152f35b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610cf457565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610cf457565b15610d2357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b8115610d8b570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908201809211610dc757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040810190811067ffffffffffffffff821117610e1257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e1257604052565b91908203918211610dc757565b90816020910312610cf457518015158103610cf45790565b94939173ffffffffffffffffffffffffffffffffffffffff8091169283330361102057610ed4908761106e565b956020908181017fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff80610f1b8c82865116610dba565b16835286600052600185526040600020935116915160801b16179055610f4387600254610e82565b6002556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810188905291818360448160007f000000000000000000000000000000000000000000000000000000000000000086165af1928315611014577fa27580a77a01c86ee8598d930ae5f9a0ec6f146c6e0e9e9f50b95bacb337871893610ff7575b50604051958887521694a4565b61100d90833d8511610a2e57610a228183610e41565b5038610fea565b6040513d6000823e3d90fd5b60046040517fee9ce58d000000000000000000000000000000000000000000000000000000008152fd5b9190916fffffffffffffffffffffffffffffffff80809416911601918211610dc757565b67ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000092166110a48382610dba565b4282106110d55760046040517f21f1271c000000000000000000000000000000000000000000000000000000008152fd5b4210611108575090506fffffffffffffffffffffffffffffffff9081602081835116920151169003818111610dc7571690565b6111129042610e82565b916fffffffffffffffffffffffffffffffff9081835116848102948186041490151715610dc75761114860209161115295610d81565b9201511690610e82565b9056fea2646970667358221220bdb2a884725252f44d740822bd4e56627ba4005b1c516b13ba3a5c2b34465cad64736f6c63430008110033000000000000000000000000ed1480d12be41d92f36f5f7bdd88212e381a36770000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f00000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000001e133800000000000000000000000000000000000000000000000000000000065bc307f00000000000000000000000054a66bfed39dd3a51fca506d79818b3dcd07d6aa
Deployed Bytecode
0x6080604081815260048036101561001557600080fd5b600092833560e01c90816309fe471514610ca2575080630fb5a6b414610c675780632b5759ef14610a795780632c4e722e14610a3e5780632e1a7d4d1461093e578063379607f5146108d95780633a2ee252146105785780634665096d1461053d578063494400f1146104dc57806364d60d911461049b5780636daf390b1461044a578063715018a6146103c557806385d3374f146103675780638da5cb5b14610334578063c96f14b814610315578063d0202d3b146102c0578063ddd5e1b2146102085763f2fde38b146100e957600080fd5b3461020457602060031936011261020457610102610cf9565b9083549073ffffffffffffffffffffffffffffffffffffffff8083169361012a338614610d1c565b169384156101815750507fffffffffffffffffffffffff000000000000000000000000000000000000000016821783557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b90602060849251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5034610204578160031936011261020457803592610224610cd1565b9173ffffffffffffffffffffffffffffffffffffffff8316156102995750926102929183858360209752600187522084519061025f82610df6565b546fffffffffffffffffffffffffffffffff8116825260801c8682015267ffffffffffffffff8316928060601c91610ea7565b9051908152f35b83517fe331dae2000000000000000000000000000000000000000000000000000000008152fd5b5050346103115781600319360112610311576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f168152f35b5080fd5b5050346103115781600319360112610311576020906002549051908152f35b50503461031157816003193601126103115773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b50346102045760206003193601126102045760209267ffffffffffffffff836102929335928381526001875220918451926103a184610df6565b546fffffffffffffffffffffffffffffffff8116845260801c86840152169061106e565b83346104475780600319360112610447578080547fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff82169161041d338414610d1c565b1682557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b5050346103115781600319360112610311576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ed1480d12be41d92f36f5f7bdd88212e381a3677168152f35b503461020457602060031936011261020457918192358152600160205220548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b8284346104475781600319360112610447576104f6610cf9565b906024359067ffffffffffffffff821680920361044757507fffffffffffffffffffffffffffffffffffffffff000000000000000000000000602093519260601b16018152f35b505034610311578160031936011261031157602090517f0000000000000000000000000000000000000000000000000000000065bc307f8152f35b509190346103115780600319360112610311578235610595610cd1565b907f0000000000000000000000000000000000000000000000000000000065bc307f42116108b15773ffffffffffffffffffffffffffffffffffffffff93848316928315610889576106077f00000000000000000000000000000000000000000000000000000000000002ee84610d81565b9161061483600254610dba565b978651987f70a08231000000000000000000000000000000000000000000000000000000008a5230828b01526020998a816024818d7f0000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f165afa90811561087f57908291859161084a575b50106108225760025567ffffffffffffffff927fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008442169160601b16019788835260018a5287832080547fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff6107068184168a610dba565b1691161790557f000000000000000000000000ed1480d12be41d92f36f5f7bdd88212e381a36771692833b156102045782885180957f79cc67900000000000000000000000000000000000000000000000000000000082528183816107918c338a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015610818576107d9575b50505050835191825285820152837f85a336c4f7c5fd8be4f1723eb3e0c30136490a5029768639107a97f87efbad60843393a451908152f35b83116107ec5750508452388080806107a0565b9060416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b88513d85823e3d90fd5b5086517fe5a8e29e000000000000000000000000000000000000000000000000000000008152fd5b8092508c8092503d8311610878575b6108638183610e41565b81010312610874578190513861067e565b8380fd5b503d610859565b89513d86823e3d90fd5b8685517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b8483517f73eb64d3000000000000000000000000000000000000000000000000000000008152fd5b5034610204576020600319360112610204576020928261029292359182815260018652209083519161090a83610df6565b546fffffffffffffffffffffffffffffffff8116835260801c858301528060601c8167ffffffffffffffff82931693610ea7565b5090346102045760206003193601126102045760206109d49273ffffffffffffffffffffffffffffffffffffffff8086541661097b338214610d1c565b8685518097819582947fa9059cbb00000000000000000000000000000000000000000000000000000000845281359184016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03927f0000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f165af1908115610a355750610a0a575080f35b610a2a9060203d8111610a2e575b610a228183610e41565b810190610e8f565b5080f35b503d610a18565b513d84823e3d90fd5b505034610311578160031936011261031157602090517f00000000000000000000000000000000000000000000000000000000000002ee8152f35b5090346102045780600319360112610204578135610a95610cd1565b9273ffffffffffffffffffffffffffffffffffffffff8416918215610c3f5780865260209560018752848120855190610acd82610df6565b54906fffffffffffffffffffffffffffffffff9788831682528982019260801c83528460601c95338703610c1857868814610bf1575067ffffffffffffffff85169060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016019788845260018a52808089862094818d818d5198610b528a610df6565b549781891692838b528a019860801c89525116610b6e9161104a565b16865251168184511690610b819161104a565b16825288845260018a52878420925116905160801b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016179055818152848120558351868682527f95f4ec591e74f0e3708d4c5312b19c25d511f03406aa826618c1691fe0b6472591a451908152f35b88517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b88517fee9ce58d000000000000000000000000000000000000000000000000000000008152fd5b5082517f7841294e000000000000000000000000000000000000000000000000000000008152fd5b505034610311578160031936011261031157602090517f0000000000000000000000000000000000000000000000000000000001e133808152f35b9293905034610447576020600319360112610447575067ffffffffffffffff90358060601c8352166020820152f35b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610cf457565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610cf457565b15610d2357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b8115610d8b570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908201809211610dc757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040810190811067ffffffffffffffff821117610e1257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e1257604052565b91908203918211610dc757565b90816020910312610cf457518015158103610cf45790565b94939173ffffffffffffffffffffffffffffffffffffffff8091169283330361102057610ed4908761106e565b956020908181017fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff80610f1b8c82865116610dba565b16835286600052600185526040600020935116915160801b16179055610f4387600254610e82565b6002556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810188905291818360448160007f0000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f86165af1928315611014577fa27580a77a01c86ee8598d930ae5f9a0ec6f146c6e0e9e9f50b95bacb337871893610ff7575b50604051958887521694a4565b61100d90833d8511610a2e57610a228183610e41565b5038610fea565b6040513d6000823e3d90fd5b60046040517fee9ce58d000000000000000000000000000000000000000000000000000000008152fd5b9190916fffffffffffffffffffffffffffffffff80809416911601918211610dc757565b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000001e1338092166110a48382610dba565b4282106110d55760046040517f21f1271c000000000000000000000000000000000000000000000000000000008152fd5b4210611108575090506fffffffffffffffffffffffffffffffff9081602081835116920151169003818111610dc7571690565b6111129042610e82565b916fffffffffffffffffffffffffffffffff9081835116848102948186041490151715610dc75761114860209161115295610d81565b9201511690610e82565b9056fea2646970667358221220bdb2a884725252f44d740822bd4e56627ba4005b1c516b13ba3a5c2b34465cad64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ed1480d12be41d92f36f5f7bdd88212e381a36770000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f00000000000000000000000000000000000000000000000000000000000002ee0000000000000000000000000000000000000000000000000000000001e133800000000000000000000000000000000000000000000000000000000065bc307f00000000000000000000000054a66bfed39dd3a51fca506d79818b3dcd07d6aa
-----Decoded View---------------
Arg [0] : _tokenIn (address): 0xEd1480d12bE41d92F36f5f7bDd88212E381A3677
Arg [1] : _tokenOut (address): 0x0391D2021f89DC339F60Fff84546EA23E337750f
Arg [2] : _rate (uint256): 750
Arg [3] : _duration (uint256): 31536000
Arg [4] : _expiration (uint256): 1706831999
Arg [5] : _owner (address): 0x54A66bfeD39DD3a51fCA506d79818B3dCd07D6Aa
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ed1480d12be41d92f36f5f7bdd88212e381a3677
Arg [1] : 0000000000000000000000000391d2021f89dc339f60fff84546ea23e337750f
Arg [2] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [3] : 0000000000000000000000000000000000000000000000000000000001e13380
Arg [4] : 0000000000000000000000000000000000000000000000000000000065bc307f
Arg [5] : 00000000000000000000000054a66bfed39dd3a51fca506d79818b3dcd07d6aa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1.6 | 213,257.0505 | $341,211.28 |
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.