Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
MultiSwapRouter
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.0 <0.9.0;import {Multicall} from "../Multicall.sol";import {IERC20} from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";import {SafeERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol";import {IERC721} from "openzeppelin-contracts/contracts/token/ERC721/IERC721.sol";import {IERC721Receiver} from "openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol";import {IOptionMarketOTMFE} from "../../interfaces/apps/options/IOptionMarketOTMFE.sol";import {ISwapper} from "../../interfaces/ISwapper.sol";import {IWETH} from "../../interfaces/IWETH.sol";/// @title MultiSwapRouter/// @notice A router contract that facilitates token swaps and options minting/// @dev Implements Multicall for batch transactions and IERC721Receiver for handling NFTscontract MultiSwapRouter is Multicall, IERC721Receiver {using SafeERC20 for IERC20;/// @notice Emitted when an option is minted through this router/// @param user The address initiating the mint/// @param receiver The address receiving the minted option/// @param market The address of the option market/// @param optionId The ID of the minted option/// @param frontendId The identifier of the frontend used/// @param referralId The referral code used for the mintevent MintOption(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity =0.8.20;/// @title Multicall/// @notice Enables calling multiple methods in a single call to the contractabstract contract Multicall {function multicall(bytes[] calldata data) public payable returns (bytes[] memory results) {results = new bytes[](data.length);for (uint256 i = 0; i < data.length; i++) {(bool success, bytes memory result) = address(this).delegatecall(data[i]);if (!success) {if (result.length < 68) revert();assembly {result := add(result, 0x04)}revert(abi.decode(result, (string)));}results[i] = result;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Emitted when `value` tokens are moved from one account (`from`) to* another (`to`).** Note that `value` may be zero.*/event Transfer(address indexed from, address indexed to, uint256 value);/*** @dev Emitted when the allowance of a `spender` for an `owner` is set by* a call to {approve}. `value` is the new allowance.*/event Approval(address indexed owner, address indexed spender, uint256 value);/*** @dev Returns the value of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";import {IERC20Permit} from "../extensions/IERC20Permit.sol";import {Address} from "../../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using Address for address;/*** @dev An operation with an ERC20 token failed.*/error SafeERC20FailedOperation(address token);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)pragma solidity ^0.8.20;import {IERC165} from "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)pragma solidity ^0.8.20;/*** @title ERC721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC721 asset contracts.*/interface IERC721Receiver {/*** @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}* by `operator` from `from`, this function is called.** It must return its Solidity selector to confirm the token transfer.* If any other value is returned or the interface is not implemented by the recipient, the transfer will be* reverted.** The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.*/function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data
1234567891011121314151617181920212223242526// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.0 <0.9.0;import {IUniswapV3Pool} from "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol";import {IHandler} from "../../IHandler.sol";import {ISwapper} from "../../ISwapper.sol";import {ERC20} from "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";interface IOptionMarketOTMFE {/// @notice Struct to store option datastruct OptionData {uint256 opTickArrayLen;uint256 expiry;int24 tickLower;int24 tickUpper;bool isCall;}/// @notice Struct to store option ticks datastruct OptionTicks {IHandler _handler;IUniswapV3Pool pool;address hook;int24 tickLower;int24 tickUpper;
12345678// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.0 <0.9.0;interface ISwapper {function onSwapReceived(address _tokenIn, address _tokenOut, uint256 _amountIn, bytes calldata _swapData)externalreturns (uint256 amountOut);}
1234567// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.0 <0.9.0;interface IWETH {function deposit() external payable;function withdraw(uint256 amount) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.** ==== Security Considerations** There are two important considerations concerning the use of `permit`. The first is that a valid permit signature* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be* considered as an intention to spend the allowance in any specific way. The second is that because permits have* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be* generally recommended is:** ```solidity* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}* doThing(..., value);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)pragma solidity ^0.8.20;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev The ETH balance of the account is not enough to perform the operation.*/error AddressInsufficientBalance(address account);/*** @dev There's no code at `target` (it is not a contract).*/error AddressEmptyCode(address target);/*** @dev A call to an address target failed. The target may have reverted.*/error FailedInnerCall();/*** @dev Replacement for Solidity's `transfer`: sends `amount` wei to
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)pragma solidity ^0.8.20;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;import {IUniswapV3PoolImmutables} from './pool/IUniswapV3PoolImmutables.sol';import {IUniswapV3PoolState} from './pool/IUniswapV3PoolState.sol';import {IUniswapV3PoolDerivedState} from './pool/IUniswapV3PoolDerivedState.sol';import {IUniswapV3PoolActions} from './pool/IUniswapV3PoolActions.sol';import {IUniswapV3PoolOwnerActions} from './pool/IUniswapV3PoolOwnerActions.sol';import {IUniswapV3PoolErrors} from './pool/IUniswapV3PoolErrors.sol';import {IUniswapV3PoolEvents} from './pool/IUniswapV3PoolEvents.sol';/// @title The interface for a Uniswap V3 Pool/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform/// to the ERC20 specification/// @dev The pool interface is broken up into many smaller piecesinterface IUniswapV3Pool isIUniswapV3PoolImmutables,IUniswapV3PoolState,IUniswapV3PoolDerivedState,IUniswapV3PoolActions,IUniswapV3PoolOwnerActions,IUniswapV3PoolErrors,IUniswapV3PoolEvents{}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.0 <0.9.0;interface IHandler {struct HookPermInfo {bool onMint;bool onBurn;bool onUse;bool onUnuse;bool onDonate;bool allowSplit;}function registerHook(address _hook, HookPermInfo memory _info) external;function getHandlerIdentifier(bytes calldata _data) external view returns (uint256 handlerIdentifierId);function tokensToPullForMint(bytes calldata _mintPositionData)externalviewreturns (address[] memory tokens, uint256[] memory amounts);function mintPositionHandler(address context, bytes calldata _mintPositionData)externalreturns (uint256 sharesMinted);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)pragma solidity ^0.8.20;import {IERC20} from "./IERC20.sol";import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";import {Context} from "../../utils/Context.sol";import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.** TIP: For a detailed writeup see our guide* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** The default value of {decimals} is 18. To change this, you should override* this function so it returns a different value.** We have followed general OpenZeppelin Contracts guidelines: functions revert* instead returning `false` on failure. This behavior is nonetheless* conventional and does not conflict with the expectations of ERC20
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that never changes/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same valuesinterface IUniswapV3PoolImmutables {/// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface/// @return The contract addressfunction factory() external view returns (address);/// @notice The first of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token0() external view returns (address);/// @notice The second of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token1() external view returns (address);/// @notice The pool's fee in hundredths of a bip, i.e. 1e-6/// @return The feefunction fee() external view returns (uint24);/// @notice The pool tick spacing/// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive/// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, .../// This value is an int24 to avoid casting even though it is always positive.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that can change/// @notice These methods compose the pool's state, and can change with any frequency including multiple times/// per transactioninterface IUniswapV3PoolState {/// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas/// when accessed externally./// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value/// @return tick The current tick of the pool, i.e. according to the last tick transition that was run./// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick/// boundary./// @return observationIndex The index of the last oracle observation that was written,/// @return observationCardinality The current maximum number of observations stored in the pool,/// @return observationCardinalityNext The next maximum number of observations, to be updated when the observation./// @return feeProtocol The protocol fee for both tokens of the pool./// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0/// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee./// unlocked Whether the pool is currently locked to reentrancyfunction slot0()externalviewreturns (uint160 sqrtPriceX96,int24 tick,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that is not stored/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the/// blockchain. The functions here may have variable gas costs.interface IUniswapV3PoolDerivedState {/// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp/// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing/// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,/// you must call it with secondsAgos = [3600, 0]./// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in/// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio./// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned/// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp/// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block/// timestampfunction observe(uint32[] calldata secondsAgos)externalviewreturns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);/// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range/// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed./// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first/// snapshot is taken and the second snapshot is taken.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissionless pool actions/// @notice Contains pool methods that can be called by anyoneinterface IUniswapV3PoolActions {/// @notice Sets the initial price for the pool/// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value/// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96function initialize(uint160 sqrtPriceX96) external;/// @notice Adds liquidity for the given recipient/tickLower/tickUpper position/// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback/// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends/// on tickLower, tickUpper, the amount of liquidity, and the current price./// @param recipient The address for which the liquidity will be created/// @param tickLower The lower tick of the position in which to add liquidity/// @param tickUpper The upper tick of the position in which to add liquidity/// @param amount The amount of liquidity to mint/// @param data Any data that should be passed through to the callback/// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback/// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callbackfunction mint(address recipient,int24 tickLower,int24 tickUpper,
1234567891011121314151617181920212223// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissioned pool actions/// @notice Contains pool methods that may only be called by the factory ownerinterface IUniswapV3PoolOwnerActions {/// @notice Set the denominator of the protocol's % share of the fees/// @param feeProtocol0 new protocol fee for token0 of the pool/// @param feeProtocol1 new protocol fee for token1 of the poolfunction setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;/// @notice Collect the protocol fee accrued to the pool/// @param recipient The address to which collected protocol fees should be sent/// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1/// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0/// @return amount0 The protocol fee collected in token0/// @return amount1 The protocol fee collected in token1function collectProtocol(address recipient,uint128 amount0Requested,uint128 amount1Requested) external returns (uint128 amount0, uint128 amount1);}
12345678910111213141516171819// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Errors emitted by a pool/// @notice Contains all events emitted by the poolinterface IUniswapV3PoolErrors {error LOK();error TLU();error TLM();error TUM();error AI();error M0();error M1();error AS();error IIA();error L();error F0();error F1();}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Events emitted by a pool/// @notice Contains all events emitted by the poolinterface IUniswapV3PoolEvents {/// @notice Emitted exactly once by a pool when #initialize is first called on the pool/// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize/// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96/// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the poolevent Initialize(uint160 sqrtPriceX96, int24 tick);/// @notice Emitted when liquidity is minted for a given position/// @param sender The address that minted the liquidity/// @param owner The owner of the position and recipient of any minted liquidity/// @param tickLower The lower tick of the position/// @param tickUpper The upper tick of the position/// @param amount The amount of liquidity minted to the position range/// @param amount0 How much token0 was required for the minted liquidity/// @param amount1 How much token1 was required for the minted liquidityevent Mint(address sender,address indexed owner,int24 indexed tickLower,int24 indexed tickUpper,uint128 amount,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)pragma solidity ^0.8.20;import {IERC20} from "../IERC20.sol";/*** @dev Interface for the optional metadata functions from the ERC20 standard.*/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);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)pragma solidity ^0.8.20;/*** @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;}function _contextSuffixLength() internal view virtual returns (uint256) {return 0;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)pragma solidity ^0.8.20;/*** @dev Standard ERC20 Errors* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.*/interface IERC20Errors {/*** @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.* @param balance Current balance for the interacting account.* @param needed Minimum amount required to perform a transfer.*/error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);/*** @dev Indicates a failure with the token `sender`. Used in transfers.* @param sender Address whose tokens are being transferred.*/error ERC20InvalidSender(address sender);/*** @dev Indicates a failure with the token `receiver`. Used in transfers.* @param receiver Address to which tokens are being transferred.
1234567891011121314151617181920212223242526{"remappings": ["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","v3-core/=lib/v3-core/contracts/","v3-periphery/=lib/v3-periphery/contracts/","@uniswap/v3-core/=lib/v3-core/","@uniswap/v3-periphery/=lib/v3-periphery/","@openzeppelin/=lib/openzeppelin-contracts/"],"optimizer": {"enabled": false,"runs": 200},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": ["evm.bytecode",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"address","name":"market","type":"address"},{"indexed":false,"internalType":"uint256","name":"optionId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"frontendId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"referralId","type":"bytes32"}],"name":"MintOption","type":"event"},{"inputs":[{"internalType":"contract IOptionMarketOTMFE","name":"market","type":"address"},{"components":[{"components":[{"internalType":"contract IHandler","name":"_handler","type":"address"},{"internalType":"contract IUniswapV3Pool","name":"pool","type":"address"},{"internalType":"address","name":"hook","type":"address"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"liquidityToUse","type":"uint256"}],"internalType":"struct IOptionMarketOTMFE.OptionTicks[]","name":"optionTicks","type":"tuple[]"},{"internalType":"uint256","name":"ttl","type":"uint256"},{"internalType":"uint256","name":"maxCostAllowance","type":"uint256"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"bool","name":"isCall","type":"bool"}],"internalType":"struct IOptionMarketOTMFE.OptionParams","name":"optionParams","type":"tuple"},{"internalType":"address","name":"optionRecipient","type":"address"},{"internalType":"bool","name":"self","type":"bool"},{"internalType":"bytes32","name":"frontendId","type":"bytes32"},{"internalType":"bytes32","name":"referralId","type":"bytes32"}],"name":"mintOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"swapper","type":"address[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes[]","name":"swapData","type":"bytes[]"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"weth","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"self","type":"bool"}],"name":"wrap","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b5061218c8061001d5f395ff3fe608060405260043610610054575f3560e01c8063150b7a02146100585780631ad5195a14610094578063367fc60a146100bc5780633824568e146100e4578063ac9650d814610100578063b8dc491b14610130575b5f80fd5b348015610063575f80fd5b5061007e60048036038101906100799190611044565b610158565b60405161008b91906110fe565b60405180910390f35b34801561009f575f80fd5b506100ba60048036038101906100b59190611488565b61016b565b005b3480156100c7575f80fd5b506100e260048036038101906100dd9190611630565b610664565b005b6100fe60048036038101906100f99190611747565b610858565b005b61011a60048036038101906101159190611797565b6108eb565b6040516101279190611917565b60405180910390f35b34801561013b575f80fd5b5061015660048036038101906101519190611937565b610a7f565b005b5f63150b7a0260e01b9050949350505050565b5f8673ffffffffffffffffffffffffffffffffffffffff166361f812a46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d99190611989565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663c8de6e836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610225573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102499190611989565b9050846103c7578660a00151156103105761028b333089604001518573ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016102ca9291906119d2565b6020604051808303815f875af11580156102e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030a9190611a0d565b506103c2565b610341333089604001518473ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016103809291906119d2565b6020604051808303815f875af115801561039c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c09190611a0d565b505b6104d8565b8660a0015115610456578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016104109291906119d2565b6020604051808303815f875af115801561042c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104509190611a0d565b506104d7565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016104959291906119d2565b6020604051808303815f875af11580156104b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d59190611a0d565b505b5b8773ffffffffffffffffffffffffffffffffffffffff1663cf5c1a2c886040518263ffffffff1660e01b81526004016105119190611c96565b5f604051808303815f87803b158015610528575f80fd5b505af115801561053a573d5f803e3d5ffd5b505050505f8873ffffffffffffffffffffffffffffffffffffffff16631508b8e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610588573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ac9190611cca565b90508873ffffffffffffffffffffffffffffffffffffffff166323b872dd3089846040518463ffffffff1660e01b81526004016105eb93929190611cf5565b5f604051808303815f87803b158015610602575f80fd5b505af1158015610614573d5f803e3d5ffd5b505050507fe21eb7eb03d531c438e2a89f37a9994d7be680de36f6db11191101500e7ae7fa33888b84898960405161065196959493929190611d39565b60405180910390a1505050505050505050565b5f5b8888905081101561084b57610705338c8c8481811061068857610687611d98565b5b905060200201602081019061069d9190611dc5565b8787858181106106b0576106af611d98565b5b905060200201358c8c868181106106ca576106c9611d98565b5b90506020020160208101906106df9190611dc5565b73ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8a8a8281811061071857610717611d98565b5b905060200201602081019061072d9190611dc5565b73ffffffffffffffffffffffffffffffffffffffff1663f3be6fc28a8a8481811061075b5761075a611d98565b5b90506020020160208101906107709190611dc5565b89898581811061078357610782611d98565b5b90506020020160208101906107989190611dc5565b8888868181106107ab576107aa611d98565b5b905060200201358787878181106107c5576107c4611d98565b5b90506020028101906107d79190611dfc565b6040518663ffffffff1660e01b81526004016107f7959493929190611e9a565b6020604051808303815f875af1158015610813573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108379190611cca565b50808061084390611f13565b915050610666565b5050505050505050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b15801561089e575f80fd5b505af11580156108b0573d5f803e3d5ffd5b5050505050806108e6576108e533838573ffffffffffffffffffffffffffffffffffffffff16610ba79092919063ffffffff16565b5b505050565b60608282905067ffffffffffffffff81111561090a57610909610f20565b5b60405190808252806020026020018201604052801561093d57816020015b60608152602001906001900390816109285790505b5090505f5b83839050811015610a78575f803073ffffffffffffffffffffffffffffffffffffffff1686868581811061097957610978611d98565b5b905060200281019061098b9190611dfc565b604051610999929190611f88565b5f60405180830381855af49150503d805f81146109d1576040519150601f19603f3d011682016040523d82523d5f602084013e6109d6565b606091505b509150915081610a44576044815110156109ee575f80fd5b60048101905080806020019051810190610a08919061203e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b91906120d7565b60405180910390fd5b80848481518110610a5857610a57611d98565b5b602002602001018190525050508080610a7090611f13565b915050610942565b5092915050565b610b21818373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610abc91906120f7565b602060405180830381865afa158015610ad7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afb9190611cca565b8473ffffffffffffffffffffffffffffffffffffffff16610ba79092919063ffffffff16565b5050565b610ba1848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610b5a93929190611cf5565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c26565b50505050565b610c21838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610bda9291906119d2565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c26565b505050565b5f610c50828473ffffffffffffffffffffffffffffffffffffffff16610cbb90919063ffffffff16565b90505f815114158015610c74575080806020019051810190610c729190611a0d565b155b15610cb657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610cad91906120f7565b60405180910390fd5b505050565b6060610cc883835f610cd0565b905092915050565b606081471015610d1757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610d0e91906120f7565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610d3f9190612140565b5f6040518083038185875af1925050503d805f8114610d79576040519150601f19603f3d011682016040523d82523d5f602084013e610d7e565b606091505b5091509150610d8e868383610d99565b925050509392505050565b606082610dae57610da982610e26565b610e1e565b5f8251148015610dd457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610e1657836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610e0d91906120f7565b60405180910390fd5b819050610e1f565b5b9392505050565b5f81511115610e385780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ea482610e7b565b9050919050565b610eb481610e9a565b8114610ebe575f80fd5b50565b5f81359050610ecf81610eab565b92915050565b5f819050919050565b610ee781610ed5565b8114610ef1575f80fd5b50565b5f81359050610f0281610ede565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f5682610f10565b810181811067ffffffffffffffff82111715610f7557610f74610f20565b5b80604052505050565b5f610f87610e6a565b9050610f938282610f4d565b919050565b5f67ffffffffffffffff821115610fb257610fb1610f20565b5b610fbb82610f10565b9050602081019050919050565b828183375f83830152505050565b5f610fe8610fe384610f98565b610f7e565b90508281526020810184848401111561100457611003610f0c565b5b61100f848285610fc8565b509392505050565b5f82601f83011261102b5761102a610f08565b5b813561103b848260208601610fd6565b91505092915050565b5f805f806080858703121561105c5761105b610e73565b5b5f61106987828801610ec1565b945050602061107a87828801610ec1565b935050604061108b87828801610ef4565b925050606085013567ffffffffffffffff8111156110ac576110ab610e77565b5b6110b887828801611017565b91505092959194509250565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110f8816110c4565b82525050565b5f6020820190506111115f8301846110ef565b92915050565b5f61112182610e9a565b9050919050565b61113181611117565b811461113b575f80fd5b50565b5f8135905061114c81611128565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561117457611173610f20565b5b602082029050602081019050919050565b5f80fd5b5f61119382610e9a565b9050919050565b6111a381611189565b81146111ad575f80fd5b50565b5f813590506111be8161119a565b92915050565b5f6111ce82610e9a565b9050919050565b6111de816111c4565b81146111e8575f80fd5b50565b5f813590506111f9816111d5565b92915050565b5f8160020b9050919050565b611214816111ff565b811461121e575f80fd5b50565b5f8135905061122f8161120b565b92915050565b5f60c0828403121561124a57611249611152565b5b61125460c0610f7e565b90505f611263848285016111b0565b5f830152506020611276848285016111eb565b602083015250604061128a84828501610ec1565b604083015250606061129e84828501611221565b60608301525060806112b284828501611221565b60808301525060a06112c684828501610ef4565b60a08301525092915050565b5f6112e46112df8461115a565b610f7e565b90508083825260208201905060c0840283018581111561130757611306611185565b5b835b81811015611330578061131c8882611235565b84526020840193505060c081019050611309565b5050509392505050565b5f82601f83011261134e5761134d610f08565b5b813561135e8482602086016112d2565b91505092915050565b5f8115159050919050565b61137b81611367565b8114611385575f80fd5b50565b5f8135905061139681611372565b92915050565b5f60c082840312156113b1576113b0611152565b5b6113bb60c0610f7e565b90505f82013567ffffffffffffffff8111156113da576113d9611156565b5b6113e68482850161133a565b5f8301525060206113f984828501610ef4565b602083015250604061140d84828501610ef4565b604083015250606061142184828501611221565b606083015250608061143584828501611221565b60808301525060a061144984828501611388565b60a08301525092915050565b5f819050919050565b61146781611455565b8114611471575f80fd5b50565b5f813590506114828161145e565b92915050565b5f805f805f8060c087890312156114a2576114a1610e73565b5b5f6114af89828a0161113e565b965050602087013567ffffffffffffffff8111156114d0576114cf610e77565b5b6114dc89828a0161139c565b95505060406114ed89828a01610ec1565b94505060606114fe89828a01611388565b935050608061150f89828a01611474565b92505060a061152089828a01611474565b9150509295509295509295565b5f80fd5b5f8083601f84011261154657611545610f08565b5b8235905067ffffffffffffffff8111156115635761156261152d565b5b60208301915083602082028301111561157f5761157e611185565b5b9250929050565b5f8083601f84011261159b5761159a610f08565b5b8235905067ffffffffffffffff8111156115b8576115b761152d565b5b6020830191508360208202830111156115d4576115d3611185565b5b9250929050565b5f8083601f8401126115f0576115ef610f08565b5b8235905067ffffffffffffffff81111561160d5761160c61152d565b5b60208301915083602082028301111561162957611628611185565b5b9250929050565b5f805f805f805f805f8060a08b8d03121561164e5761164d610e73565b5b5f8b013567ffffffffffffffff81111561166b5761166a610e77565b5b6116778d828e01611531565b9a509a505060208b013567ffffffffffffffff81111561169a57611699610e77565b5b6116a68d828e01611531565b985098505060408b013567ffffffffffffffff8111156116c9576116c8610e77565b5b6116d58d828e01611531565b965096505060608b013567ffffffffffffffff8111156116f8576116f7610e77565b5b6117048d828e01611586565b945094505060808b013567ffffffffffffffff81111561172757611726610e77565b5b6117338d828e016115db565b92509250509295989b9194979a5092959850565b5f805f6060848603121561175e5761175d610e73565b5b5f61176b86828701610ec1565b935050602061177c86828701610ef4565b925050604061178d86828701611388565b9150509250925092565b5f80602083850312156117ad576117ac610e73565b5b5f83013567ffffffffffffffff8111156117ca576117c9610e77565b5b6117d6858286016115db565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611842578082015181840152602081019050611827565b5f8484015250505050565b5f6118578261180b565b6118618185611815565b9350611871818560208601611825565b61187a81610f10565b840191505092915050565b5f611890838361184d565b905092915050565b5f602082019050919050565b5f6118ae826117e2565b6118b881856117ec565b9350836020820285016118ca856117fc565b805f5b8581101561190557848403895281516118e68582611885565b94506118f183611898565b925060208a019950506001810190506118cd565b50829750879550505050505092915050565b5f6020820190508181035f83015261192f81846118a4565b905092915050565b5f806040838503121561194d5761194c610e73565b5b5f61195a85828601610ec1565b925050602061196b85828601610ec1565b9150509250929050565b5f8151905061198381610eab565b92915050565b5f6020828403121561199e5761199d610e73565b5b5f6119ab84828501611975565b91505092915050565b6119bd81610e9a565b82525050565b6119cc81610ed5565b82525050565b5f6040820190506119e55f8301856119b4565b6119f260208301846119c3565b9392505050565b5f81519050611a0781611372565b92915050565b5f60208284031215611a2257611a21610e73565b5b5f611a2f848285016119f9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f611a84611a7f611a7a84610e7b565b611a61565b610e7b565b9050919050565b5f611a9582611a6a565b9050919050565b5f611aa682611a8b565b9050919050565b611ab681611a9c565b82525050565b5f611ac682611a8b565b9050919050565b611ad681611abc565b82525050565b611ae581610e9a565b82525050565b611af4816111ff565b82525050565b611b0381610ed5565b82525050565b60c082015f820151611b1d5f850182611aad565b506020820151611b306020850182611acd565b506040820151611b436040850182611adc565b506060820151611b566060850182611aeb565b506080820151611b696080850182611aeb565b5060a0820151611b7c60a0850182611afa565b50505050565b5f611b8d8383611b09565b60c08301905092915050565b5f602082019050919050565b5f611baf82611a38565b611bb98185611a42565b9350611bc483611a52565b805f5b83811015611bf4578151611bdb8882611b82565b9750611be683611b99565b925050600181019050611bc7565b5085935050505092915050565b611c0a81611367565b82525050565b5f60c083015f8301518482035f860152611c2a8282611ba5565b9150506020830151611c3f6020860182611afa565b506040830151611c526040860182611afa565b506060830151611c656060860182611aeb565b506080830151611c786080860182611aeb565b5060a0830151611c8b60a0860182611c01565b508091505092915050565b5f6020820190508181035f830152611cae8184611c10565b905092915050565b5f81519050611cc481610ede565b92915050565b5f60208284031215611cdf57611cde610e73565b5b5f611cec84828501611cb6565b91505092915050565b5f606082019050611d085f8301866119b4565b611d1560208301856119b4565b611d2260408301846119c3565b949350505050565b611d3381611455565b82525050565b5f60c082019050611d4c5f8301896119b4565b611d5960208301886119b4565b611d6660408301876119b4565b611d7360608301866119c3565b611d806080830185611d2a565b611d8d60a0830184611d2a565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215611dda57611dd9610e73565b5b5f611de784828501610ec1565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112611e1857611e17611df0565b5b80840192508235915067ffffffffffffffff821115611e3a57611e39611df4565b5b602083019250600182023603831315611e5657611e55611df8565b5b509250929050565b5f82825260208201905092915050565b5f611e798385611e5e565b9350611e86838584610fc8565b611e8f83610f10565b840190509392505050565b5f608082019050611ead5f8301886119b4565b611eba60208301876119b4565b611ec760408301866119c3565b8181036060830152611eda818486611e6e565b90509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f1d82610ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4f57611f4e611ee6565b5b600182019050919050565b5f81905092915050565b5f611f6f8385611f5a565b9350611f7c838584610fc8565b82840190509392505050565b5f611f94828486611f64565b91508190509392505050565b5f67ffffffffffffffff821115611fba57611fb9610f20565b5b611fc382610f10565b9050602081019050919050565b5f611fe2611fdd84611fa0565b610f7e565b905082815260208101848484011115611ffe57611ffd610f0c565b5b612009848285611825565b509392505050565b5f82601f83011261202557612024610f08565b5b8151612035848260208601611fd0565b91505092915050565b5f6020828403121561205357612052610e73565b5b5f82015167ffffffffffffffff8111156120705761206f610e77565b5b61207c84828501612011565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6120a982612085565b6120b3818561208f565b93506120c3818560208601611825565b6120cc81610f10565b840191505092915050565b5f6020820190508181035f8301526120ef818461209f565b905092915050565b5f60208201905061210a5f8301846119b4565b92915050565b5f61211a8261180b565b6121248185611f5a565b9350612134818560208601611825565b80840191505092915050565b5f61214b8284612110565b91508190509291505056fea2646970667358221220be60dc17a6aead4ae978a60f46f60cc555a48d8391827d872dd4937d5f7f579464736f6c63430008140033
Deployed Bytecode
0x608060405260043610610054575f3560e01c8063150b7a02146100585780631ad5195a14610094578063367fc60a146100bc5780633824568e146100e4578063ac9650d814610100578063b8dc491b14610130575b5f80fd5b348015610063575f80fd5b5061007e60048036038101906100799190611044565b610158565b60405161008b91906110fe565b60405180910390f35b34801561009f575f80fd5b506100ba60048036038101906100b59190611488565b61016b565b005b3480156100c7575f80fd5b506100e260048036038101906100dd9190611630565b610664565b005b6100fe60048036038101906100f99190611747565b610858565b005b61011a60048036038101906101159190611797565b6108eb565b6040516101279190611917565b60405180910390f35b34801561013b575f80fd5b5061015660048036038101906101519190611937565b610a7f565b005b5f63150b7a0260e01b9050949350505050565b5f8673ffffffffffffffffffffffffffffffffffffffff166361f812a46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d99190611989565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663c8de6e836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610225573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102499190611989565b9050846103c7578660a00151156103105761028b333089604001518573ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016102ca9291906119d2565b6020604051808303815f875af11580156102e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030a9190611a0d565b506103c2565b610341333089604001518473ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016103809291906119d2565b6020604051808303815f875af115801561039c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103c09190611a0d565b505b6104d8565b8660a0015115610456578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016104109291906119d2565b6020604051808303815f875af115801561042c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104509190611a0d565b506104d7565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b38989604001516040518363ffffffff1660e01b81526004016104959291906119d2565b6020604051808303815f875af11580156104b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d59190611a0d565b505b5b8773ffffffffffffffffffffffffffffffffffffffff1663cf5c1a2c886040518263ffffffff1660e01b81526004016105119190611c96565b5f604051808303815f87803b158015610528575f80fd5b505af115801561053a573d5f803e3d5ffd5b505050505f8873ffffffffffffffffffffffffffffffffffffffff16631508b8e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610588573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ac9190611cca565b90508873ffffffffffffffffffffffffffffffffffffffff166323b872dd3089846040518463ffffffff1660e01b81526004016105eb93929190611cf5565b5f604051808303815f87803b158015610602575f80fd5b505af1158015610614573d5f803e3d5ffd5b505050507fe21eb7eb03d531c438e2a89f37a9994d7be680de36f6db11191101500e7ae7fa33888b84898960405161065196959493929190611d39565b60405180910390a1505050505050505050565b5f5b8888905081101561084b57610705338c8c8481811061068857610687611d98565b5b905060200201602081019061069d9190611dc5565b8787858181106106b0576106af611d98565b5b905060200201358c8c868181106106ca576106c9611d98565b5b90506020020160208101906106df9190611dc5565b73ffffffffffffffffffffffffffffffffffffffff16610b25909392919063ffffffff16565b8a8a8281811061071857610717611d98565b5b905060200201602081019061072d9190611dc5565b73ffffffffffffffffffffffffffffffffffffffff1663f3be6fc28a8a8481811061075b5761075a611d98565b5b90506020020160208101906107709190611dc5565b89898581811061078357610782611d98565b5b90506020020160208101906107989190611dc5565b8888868181106107ab576107aa611d98565b5b905060200201358787878181106107c5576107c4611d98565b5b90506020028101906107d79190611dfc565b6040518663ffffffff1660e01b81526004016107f7959493929190611e9a565b6020604051808303815f875af1158015610813573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108379190611cca565b50808061084390611f13565b915050610666565b5050505050505050505050565b8273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b15801561089e575f80fd5b505af11580156108b0573d5f803e3d5ffd5b5050505050806108e6576108e533838573ffffffffffffffffffffffffffffffffffffffff16610ba79092919063ffffffff16565b5b505050565b60608282905067ffffffffffffffff81111561090a57610909610f20565b5b60405190808252806020026020018201604052801561093d57816020015b60608152602001906001900390816109285790505b5090505f5b83839050811015610a78575f803073ffffffffffffffffffffffffffffffffffffffff1686868581811061097957610978611d98565b5b905060200281019061098b9190611dfc565b604051610999929190611f88565b5f60405180830381855af49150503d805f81146109d1576040519150601f19603f3d011682016040523d82523d5f602084013e6109d6565b606091505b509150915081610a44576044815110156109ee575f80fd5b60048101905080806020019051810190610a08919061203e565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3b91906120d7565b60405180910390fd5b80848481518110610a5857610a57611d98565b5b602002602001018190525050508080610a7090611f13565b915050610942565b5092915050565b610b21818373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610abc91906120f7565b602060405180830381865afa158015610ad7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610afb9190611cca565b8473ffffffffffffffffffffffffffffffffffffffff16610ba79092919063ffffffff16565b5050565b610ba1848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610b5a93929190611cf5565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c26565b50505050565b610c21838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610bda9291906119d2565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610c26565b505050565b5f610c50828473ffffffffffffffffffffffffffffffffffffffff16610cbb90919063ffffffff16565b90505f815114158015610c74575080806020019051810190610c729190611a0d565b155b15610cb657826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610cad91906120f7565b60405180910390fd5b505050565b6060610cc883835f610cd0565b905092915050565b606081471015610d1757306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610d0e91906120f7565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610d3f9190612140565b5f6040518083038185875af1925050503d805f8114610d79576040519150601f19603f3d011682016040523d82523d5f602084013e610d7e565b606091505b5091509150610d8e868383610d99565b925050509392505050565b606082610dae57610da982610e26565b610e1e565b5f8251148015610dd457505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610e1657836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610e0d91906120f7565b60405180910390fd5b819050610e1f565b5b9392505050565b5f81511115610e385780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ea482610e7b565b9050919050565b610eb481610e9a565b8114610ebe575f80fd5b50565b5f81359050610ecf81610eab565b92915050565b5f819050919050565b610ee781610ed5565b8114610ef1575f80fd5b50565b5f81359050610f0281610ede565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f5682610f10565b810181811067ffffffffffffffff82111715610f7557610f74610f20565b5b80604052505050565b5f610f87610e6a565b9050610f938282610f4d565b919050565b5f67ffffffffffffffff821115610fb257610fb1610f20565b5b610fbb82610f10565b9050602081019050919050565b828183375f83830152505050565b5f610fe8610fe384610f98565b610f7e565b90508281526020810184848401111561100457611003610f0c565b5b61100f848285610fc8565b509392505050565b5f82601f83011261102b5761102a610f08565b5b813561103b848260208601610fd6565b91505092915050565b5f805f806080858703121561105c5761105b610e73565b5b5f61106987828801610ec1565b945050602061107a87828801610ec1565b935050604061108b87828801610ef4565b925050606085013567ffffffffffffffff8111156110ac576110ab610e77565b5b6110b887828801611017565b91505092959194509250565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6110f8816110c4565b82525050565b5f6020820190506111115f8301846110ef565b92915050565b5f61112182610e9a565b9050919050565b61113181611117565b811461113b575f80fd5b50565b5f8135905061114c81611128565b92915050565b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561117457611173610f20565b5b602082029050602081019050919050565b5f80fd5b5f61119382610e9a565b9050919050565b6111a381611189565b81146111ad575f80fd5b50565b5f813590506111be8161119a565b92915050565b5f6111ce82610e9a565b9050919050565b6111de816111c4565b81146111e8575f80fd5b50565b5f813590506111f9816111d5565b92915050565b5f8160020b9050919050565b611214816111ff565b811461121e575f80fd5b50565b5f8135905061122f8161120b565b92915050565b5f60c0828403121561124a57611249611152565b5b61125460c0610f7e565b90505f611263848285016111b0565b5f830152506020611276848285016111eb565b602083015250604061128a84828501610ec1565b604083015250606061129e84828501611221565b60608301525060806112b284828501611221565b60808301525060a06112c684828501610ef4565b60a08301525092915050565b5f6112e46112df8461115a565b610f7e565b90508083825260208201905060c0840283018581111561130757611306611185565b5b835b81811015611330578061131c8882611235565b84526020840193505060c081019050611309565b5050509392505050565b5f82601f83011261134e5761134d610f08565b5b813561135e8482602086016112d2565b91505092915050565b5f8115159050919050565b61137b81611367565b8114611385575f80fd5b50565b5f8135905061139681611372565b92915050565b5f60c082840312156113b1576113b0611152565b5b6113bb60c0610f7e565b90505f82013567ffffffffffffffff8111156113da576113d9611156565b5b6113e68482850161133a565b5f8301525060206113f984828501610ef4565b602083015250604061140d84828501610ef4565b604083015250606061142184828501611221565b606083015250608061143584828501611221565b60808301525060a061144984828501611388565b60a08301525092915050565b5f819050919050565b61146781611455565b8114611471575f80fd5b50565b5f813590506114828161145e565b92915050565b5f805f805f8060c087890312156114a2576114a1610e73565b5b5f6114af89828a0161113e565b965050602087013567ffffffffffffffff8111156114d0576114cf610e77565b5b6114dc89828a0161139c565b95505060406114ed89828a01610ec1565b94505060606114fe89828a01611388565b935050608061150f89828a01611474565b92505060a061152089828a01611474565b9150509295509295509295565b5f80fd5b5f8083601f84011261154657611545610f08565b5b8235905067ffffffffffffffff8111156115635761156261152d565b5b60208301915083602082028301111561157f5761157e611185565b5b9250929050565b5f8083601f84011261159b5761159a610f08565b5b8235905067ffffffffffffffff8111156115b8576115b761152d565b5b6020830191508360208202830111156115d4576115d3611185565b5b9250929050565b5f8083601f8401126115f0576115ef610f08565b5b8235905067ffffffffffffffff81111561160d5761160c61152d565b5b60208301915083602082028301111561162957611628611185565b5b9250929050565b5f805f805f805f805f8060a08b8d03121561164e5761164d610e73565b5b5f8b013567ffffffffffffffff81111561166b5761166a610e77565b5b6116778d828e01611531565b9a509a505060208b013567ffffffffffffffff81111561169a57611699610e77565b5b6116a68d828e01611531565b985098505060408b013567ffffffffffffffff8111156116c9576116c8610e77565b5b6116d58d828e01611531565b965096505060608b013567ffffffffffffffff8111156116f8576116f7610e77565b5b6117048d828e01611586565b945094505060808b013567ffffffffffffffff81111561172757611726610e77565b5b6117338d828e016115db565b92509250509295989b9194979a5092959850565b5f805f6060848603121561175e5761175d610e73565b5b5f61176b86828701610ec1565b935050602061177c86828701610ef4565b925050604061178d86828701611388565b9150509250925092565b5f80602083850312156117ad576117ac610e73565b5b5f83013567ffffffffffffffff8111156117ca576117c9610e77565b5b6117d6858286016115db565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611842578082015181840152602081019050611827565b5f8484015250505050565b5f6118578261180b565b6118618185611815565b9350611871818560208601611825565b61187a81610f10565b840191505092915050565b5f611890838361184d565b905092915050565b5f602082019050919050565b5f6118ae826117e2565b6118b881856117ec565b9350836020820285016118ca856117fc565b805f5b8581101561190557848403895281516118e68582611885565b94506118f183611898565b925060208a019950506001810190506118cd565b50829750879550505050505092915050565b5f6020820190508181035f83015261192f81846118a4565b905092915050565b5f806040838503121561194d5761194c610e73565b5b5f61195a85828601610ec1565b925050602061196b85828601610ec1565b9150509250929050565b5f8151905061198381610eab565b92915050565b5f6020828403121561199e5761199d610e73565b5b5f6119ab84828501611975565b91505092915050565b6119bd81610e9a565b82525050565b6119cc81610ed5565b82525050565b5f6040820190506119e55f8301856119b4565b6119f260208301846119c3565b9392505050565b5f81519050611a0781611372565b92915050565b5f60208284031215611a2257611a21610e73565b5b5f611a2f848285016119f9565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f611a84611a7f611a7a84610e7b565b611a61565b610e7b565b9050919050565b5f611a9582611a6a565b9050919050565b5f611aa682611a8b565b9050919050565b611ab681611a9c565b82525050565b5f611ac682611a8b565b9050919050565b611ad681611abc565b82525050565b611ae581610e9a565b82525050565b611af4816111ff565b82525050565b611b0381610ed5565b82525050565b60c082015f820151611b1d5f850182611aad565b506020820151611b306020850182611acd565b506040820151611b436040850182611adc565b506060820151611b566060850182611aeb565b506080820151611b696080850182611aeb565b5060a0820151611b7c60a0850182611afa565b50505050565b5f611b8d8383611b09565b60c08301905092915050565b5f602082019050919050565b5f611baf82611a38565b611bb98185611a42565b9350611bc483611a52565b805f5b83811015611bf4578151611bdb8882611b82565b9750611be683611b99565b925050600181019050611bc7565b5085935050505092915050565b611c0a81611367565b82525050565b5f60c083015f8301518482035f860152611c2a8282611ba5565b9150506020830151611c3f6020860182611afa565b506040830151611c526040860182611afa565b506060830151611c656060860182611aeb565b506080830151611c786080860182611aeb565b5060a0830151611c8b60a0860182611c01565b508091505092915050565b5f6020820190508181035f830152611cae8184611c10565b905092915050565b5f81519050611cc481610ede565b92915050565b5f60208284031215611cdf57611cde610e73565b5b5f611cec84828501611cb6565b91505092915050565b5f606082019050611d085f8301866119b4565b611d1560208301856119b4565b611d2260408301846119c3565b949350505050565b611d3381611455565b82525050565b5f60c082019050611d4c5f8301896119b4565b611d5960208301886119b4565b611d6660408301876119b4565b611d7360608301866119c3565b611d806080830185611d2a565b611d8d60a0830184611d2a565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215611dda57611dd9610e73565b5b5f611de784828501610ec1565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112611e1857611e17611df0565b5b80840192508235915067ffffffffffffffff821115611e3a57611e39611df4565b5b602083019250600182023603831315611e5657611e55611df8565b5b509250929050565b5f82825260208201905092915050565b5f611e798385611e5e565b9350611e86838584610fc8565b611e8f83610f10565b840190509392505050565b5f608082019050611ead5f8301886119b4565b611eba60208301876119b4565b611ec760408301866119c3565b8181036060830152611eda818486611e6e565b90509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f1d82610ed5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4f57611f4e611ee6565b5b600182019050919050565b5f81905092915050565b5f611f6f8385611f5a565b9350611f7c838584610fc8565b82840190509392505050565b5f611f94828486611f64565b91508190509392505050565b5f67ffffffffffffffff821115611fba57611fb9610f20565b5b611fc382610f10565b9050602081019050919050565b5f611fe2611fdd84611fa0565b610f7e565b905082815260208101848484011115611ffe57611ffd610f0c565b5b612009848285611825565b509392505050565b5f82601f83011261202557612024610f08565b5b8151612035848260208601611fd0565b91505092915050565b5f6020828403121561205357612052610e73565b5b5f82015167ffffffffffffffff8111156120705761206f610e77565b5b61207c84828501612011565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f6120a982612085565b6120b3818561208f565b93506120c3818560208601611825565b6120cc81610f10565b840191505092915050565b5f6020820190508181035f8301526120ef818461209f565b905092915050565b5f60208201905061210a5f8301846119b4565b92915050565b5f61211a8261180b565b6121248185611f5a565b9350612134818560208601611825565b80840191505092915050565b5f61214b8284612110565b91508190509291505056fea2646970667358221220be60dc17a6aead4ae978a60f46f60cc555a48d8391827d872dd4937d5f7f579464736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.