Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
9221282 | 45 hrs ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
SonicLBTCvSonicDecoderAndSanitizer
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {BaseDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol"; import {TellerDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/Protocols/TellerDecoderAndSanitizer.sol"; import {OFTDecoderAndSanitizer} from "src/base/DecodersAndSanitizers/Protocols/OFTDecoderAndSanitizer.sol"; import {BalancerV2DecoderAndSanitizer} from "src/base/DecodersAndSanitizers/Protocols/BalancerV2DecoderAndSanitizer.sol"; contract SonicLBTCvSonicDecoderAndSanitizer is BaseDecoderAndSanitizer, TellerDecoderAndSanitizer, OFTDecoderAndSanitizer, BalancerV2DecoderAndSanitizer {}
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol"; contract BaseDecoderAndSanitizer { error BaseDecoderAndSanitizer__FunctionSelectorNotSupported(); //============================== IMMUTABLES =============================== function approve(address spender, uint256) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(spender); } function transfer(address _to, uint256) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(_to); } function claimFees(address feeAsset) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(feeAsset); } function claimYield(address yieldAsset) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(yieldAsset); } function withdrawNonBoringToken(address token, uint256 /*amount*/ ) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(token); } function withdrawNativeFromDrone() external pure returns (bytes memory addressesFound) { return addressesFound; } //============================== FALLBACK =============================== /** * @notice The purpose of this function is to revert with a known error, * so that during merkle tree creation we can verify that a * leafs decoder and sanitizer implments the required function * selector. */ fallback() external { revert BaseDecoderAndSanitizer__FunctionSelectorNotSupported(); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol"; abstract contract TellerDecoderAndSanitizer is BaseDecoderAndSanitizer { //============================== Teller =============================== function bulkDeposit(address depositAsset, uint256, /*depositAmount*/ uint256, /*minimumMint*/ address to) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(depositAsset, to); } function bulkWithdraw(address withdrawAsset, uint256, /*shareAmount*/ uint256, /*minimumAssets*/ address to) external pure returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(withdrawAsset, to); } function deposit(address depositAsset, uint256, /*depositAmount*/ uint256 /*minimumMint*/ ) external pure virtual returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(depositAsset); } // BoringOnChainQueue.sol function requestOnChainWithdraw(address asset, uint128, uint16, uint24) external pure virtual returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(asset); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol"; abstract contract OFTDecoderAndSanitizer is BaseDecoderAndSanitizer { error OFTDecoderAndSanitizer__NonZeroMessage(); error OFTDecoderAndSanitizer__NonZeroOFTCommand(); //============================== OFT =============================== function send( DecoderCustomTypes.SendParam calldata _sendParam, DecoderCustomTypes.MessagingFee calldata, /*_fee*/ address _refundAddress ) external pure virtual returns (bytes memory sensitiveArguments) { // Sanitize Message. if (_sendParam.composeMsg.length > 0) { revert OFTDecoderAndSanitizer__NonZeroMessage(); } if (_sendParam.oftCmd.length > 0) { revert OFTDecoderAndSanitizer__NonZeroOFTCommand(); } sensitiveArguments = abi.encodePacked(address(uint160(_sendParam.dstEid)), address(bytes20(_sendParam.to << 96)), _refundAddress); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {BaseDecoderAndSanitizer, DecoderCustomTypes} from "src/base/DecodersAndSanitizers/BaseDecoderAndSanitizer.sol"; abstract contract BalancerV2DecoderAndSanitizer is BaseDecoderAndSanitizer { //============================== ERRORS =============================== error BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero(); error BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported(); //============================== BALANCER V2 =============================== function flashLoan(address recipient, address[] calldata tokens, uint256[] calldata, bytes calldata) external pure virtual returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(recipient); for (uint256 i; i < tokens.length; ++i) { addressesFound = abi.encodePacked(addressesFound, tokens[i]); } } function swap( DecoderCustomTypes.SingleSwap calldata singleSwap, DecoderCustomTypes.FundManagement calldata funds, uint256, uint256 ) external pure virtual returns (bytes memory addressesFound) { // Sanitize raw data if (singleSwap.userData.length > 0) revert BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero(); if (funds.fromInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported(); if (funds.toInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported(); // Return addresses found addressesFound = abi.encodePacked( _getPoolAddressFromPoolId(singleSwap.poolId), singleSwap.assetIn, singleSwap.assetOut, funds.sender, funds.recipient ); } function joinPool( bytes32 poolId, address sender, address recipient, DecoderCustomTypes.JoinPoolRequest calldata req ) external pure virtual returns (bytes memory addressesFound) { // Sanitize raw data if (req.fromInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported(); // Return addresses found addressesFound = abi.encodePacked(_getPoolAddressFromPoolId(poolId), sender, recipient); uint256 assetsLength = req.assets.length; for (uint256 i; i < assetsLength; ++i) { addressesFound = abi.encodePacked(addressesFound, req.assets[i]); } } function exitPool( bytes32 poolId, address sender, address recipient, DecoderCustomTypes.ExitPoolRequest calldata req ) external pure virtual returns (bytes memory addressesFound) { // Sanitize raw data if (req.toInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported(); // Return addresses found addressesFound = abi.encodePacked(_getPoolAddressFromPoolId(poolId), sender, recipient); uint256 assetsLength = req.assets.length; for (uint256 i; i < assetsLength; ++i) { addressesFound = abi.encodePacked(addressesFound, req.assets[i]); } } function deposit(uint256, address recipient) external pure virtual returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(recipient); } function withdraw(uint256) external pure virtual returns (bytes memory addressesFound) { // No addresses in data return addressesFound; } function mint(address gauge) external pure virtual returns (bytes memory addressesFound) { addressesFound = abi.encodePacked(gauge); } // ========================================= INTERNAL HELPER FUNCTIONS ========================================= /** * @notice Internal helper function that converts poolIds to pool addresses. */ function _getPoolAddressFromPoolId(bytes32 poolId) internal pure returns (address) { return address(uint160(uint256(poolId >> 96))); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; contract DecoderCustomTypes { // ========================================= BALANCER ========================================= struct JoinPoolRequest { address[] assets; uint256[] maxAmountsIn; bytes userData; bool fromInternalBalance; } struct ExitPoolRequest { address[] assets; uint256[] minAmountsOut; bytes userData; bool toInternalBalance; } enum SwapKind { GIVEN_IN, GIVEN_OUT } struct SingleSwap { bytes32 poolId; SwapKind kind; address assetIn; address assetOut; uint256 amount; bytes userData; } struct FundManagement { address sender; bool fromInternalBalance; address recipient; bool toInternalBalance; } // ========================================= UNISWAP V3 ========================================= struct MintParams { address token0; address token1; uint24 fee; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; } struct IncreaseLiquidityParams { uint256 tokenId; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; uint256 deadline; } struct DecreaseLiquidityParams { uint256 tokenId; uint128 liquidity; uint256 amount0Min; uint256 amount1Min; uint256 deadline; } struct CollectParams { uint256 tokenId; address recipient; uint128 amount0Max; uint128 amount1Max; } struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } struct ExactInputParamsRouter02 { bytes path; address recipient; uint256 amountIn; uint256 amountOutMinimum; } struct PancakeSwapExactInputParams { bytes path; address recipient; uint256 amountIn; uint256 amountOutMinimum; } // ========================================= MORPHO BLUE ========================================= struct MarketParams { address loanToken; address collateralToken; address oracle; address irm; uint256 lltv; } // ========================================= 1INCH ========================================= struct SwapDescription { address srcToken; address dstToken; address payable srcReceiver; address payable dstReceiver; uint256 amount; uint256 minReturnAmount; uint256 flags; } // ========================================= PENDLE ========================================= struct TokenInput { // TOKEN DATA address tokenIn; uint256 netTokenIn; address tokenMintSy; // AGGREGATOR DATA address pendleSwap; SwapData swapData; } struct TokenOutput { // TOKEN DATA address tokenOut; uint256 minTokenOut; address tokenRedeemSy; // AGGREGATOR DATA address pendleSwap; SwapData swapData; } struct ApproxParams { uint256 guessMin; uint256 guessMax; uint256 guessOffchain; // pass 0 in to skip this variable uint256 maxIteration; // every iteration, the diff between guessMin and guessMax will be divided by 2 uint256 eps; // the max eps between the returned result & the correct result, base 1e18. Normally this number will be set // to 1e15 (1e18/1000 = 0.1%) } struct SwapData { SwapType swapType; address extRouter; bytes extCalldata; bool needScale; } enum SwapType { NONE, KYBERSWAP, ONE_INCH, // ETH_WETH not used in Aggregator ETH_WETH } struct LimitOrderData { address limitRouter; uint256 epsSkipMarket; // only used for swap operations, will be ignored otherwise FillOrderParams[] normalFills; FillOrderParams[] flashFills; bytes optData; } struct FillOrderParams { Order order; bytes signature; uint256 makingAmount; } struct Order { uint256 salt; uint256 expiry; uint256 nonce; OrderType orderType; address token; address YT; address maker; address receiver; uint256 makingAmount; uint256 lnImpliedRate; uint256 failSafeRate; bytes permit; } enum OrderType { SY_FOR_PT, PT_FOR_SY, SY_FOR_YT, YT_FOR_SY } // ========================================= EIGEN LAYER ========================================= struct QueuedWithdrawalParams { // Array of strategies that the QueuedWithdrawal contains address[] strategies; // Array containing the amount of shares in each Strategy in the `strategies` array uint256[] shares; // The address of the withdrawer address withdrawer; } struct Withdrawal { // The address that originated the Withdrawal address staker; // The address that the staker was delegated to at the time that the Withdrawal was created address delegatedTo; // The address that can complete the Withdrawal + will receive funds when completing the withdrawal address withdrawer; // Nonce used to guarantee that otherwise identical withdrawals have unique hashes uint256 nonce; // Block number when the Withdrawal was created uint32 startBlock; // Array of strategies that the Withdrawal contains address[] strategies; // Array containing the amount of shares in each Strategy in the `strategies` array uint256[] shares; } struct SignatureWithExpiry { // the signature itself, formatted as a single bytes object bytes signature; // the expiration timestamp (UTC) of the signature uint256 expiry; } struct EarnerTreeMerkleLeaf { address earner; bytes32 earnerTokenRoot; } struct TokenTreeMerkleLeaf { address token; uint256 cumulativeEarnings; } struct RewardsMerkleClaim { uint32 rootIndex; uint32 earnerIndex; bytes earnerTreeProof; EarnerTreeMerkleLeaf earnerLeaf; uint32[] tokenIndices; bytes[] tokenTreeProofs; TokenTreeMerkleLeaf[] tokenLeaves; } // ========================================= CCIP ========================================= // If extraArgs is empty bytes, the default is 200k gas limit. struct EVM2AnyMessage { bytes receiver; // abi.encode(receiver address) for dest EVM chains bytes data; // Data payload EVMTokenAmount[] tokenAmounts; // Token transfers address feeToken; // Address of feeToken. address(0) means you will send msg.value. bytes extraArgs; // Populate this with _argsToBytes(EVMExtraArgsV2) } /// @dev RMN depends on this struct, if changing, please notify the RMN maintainers. struct EVMTokenAmount { address token; // token address on the local chain. uint256 amount; // Amount of tokens. } struct EVMExtraArgsV1 { uint256 gasLimit; } // ========================================= OFT ========================================= struct SendParam { uint32 dstEid; // Destination endpoint ID. bytes32 to; // Recipient address. uint256 amountLD; // Amount to send in local decimals. uint256 minAmountLD; // Minimum amount to send in local decimals. bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message. bytes composeMsg; // The composed message for the send() operation. bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations. } struct MessagingFee { uint256 nativeFee; uint256 lzTokenFee; } // ========================================= L1StandardBridge ========================================= struct WithdrawalTransaction { uint256 nonce; address sender; address target; uint256 value; uint256 gasLimit; bytes data; } struct OutputRootProof { bytes32 version; bytes32 stateRoot; bytes32 messagePasserStorageRoot; bytes32 latestBlockhash; } // ========================================= Mantle L1StandardBridge ========================================= struct MantleWithdrawalTransaction { uint256 nonce; address sender; address target; uint256 mntValue; uint256 value; uint256 gasLimit; bytes data; } // ========================================= Linea Bridge ========================================= struct ClaimMessageWithProofParams { bytes32[] proof; uint256 messageNumber; uint32 leafIndex; address from; address to; uint256 fee; uint256 value; address payable feeRecipient; bytes32 merkleRoot; bytes data; } // ========================================= Scroll Bridge ========================================= struct L2MessageProof { uint256 batchIndex; bytes merkleProof; } // ========================================= Camelot V3 ========================================= struct CamelotMintParams { address token0; address token1; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; } // ========================================= Velodrome V3 ========================================= struct VelodromeMintParams { address token0; address token1; int24 tickSpacing; int24 tickLower; int24 tickUpper; uint256 amount0Desired; uint256 amount1Desired; uint256 amount0Min; uint256 amount1Min; address recipient; uint256 deadline; uint160 sqrtPriceX96; } // ========================================= Karak ========================================= struct QueuedWithdrawal { address staker; address delegatedTo; uint256 nonce; uint256 start; WithdrawRequest request; } struct WithdrawRequest { address[] vaults; uint256[] shares; address withdrawer; } // ========================================= Term Finance ================================== /// @dev TermAuctionOfferSubmission represents an offer submission to offeror an amount of money for a specific interest rate struct TermAuctionOfferSubmission { /// @dev For an existing offer this is the unique onchain identifier for this offer. For a new offer this is a randomized input that will be used to generate the unique onchain identifier. bytes32 id; /// @dev The address of the offeror address offeror; /// @dev Hash of the offered price as a percentage of the initial loaned amount vs amount returned at maturity. This stores 9 decimal places bytes32 offerPriceHash; /// @dev The maximum amount of purchase tokens that can be lent uint256 amount; /// @dev The address of the ERC20 purchase token address purchaseToken; } // ========================================= Dolomite Finance ================================== enum BalanceCheckFlag { Both, From, To, None } // ========================================= Silo Finance ================================== /// @dev There are 2 types of accounting in the system: for non-borrowable collateral deposit called "protected" and /// for borrowable collateral deposit called "collateral". System does /// identical calculations for each type of accounting but it uses different data. To avoid code duplication /// this enum is used to decide which data should be read. enum CollateralType { Protected, // default Collateral } enum ActionType { Deposit, Mint, Repay, RepayShares } struct Action { // what do you want to do? uint8 actionType; // which Silo are you interacting with? address silo; // what asset do you want to use? address asset; // options specific for actions bytes options; } struct AnyAction { // how much assets or shares do you want to use? uint256 amount; // are you using Protected, Collateral uint8 assetType; } // ========================================= LBTC Bridge ================================== struct DepositBridgeAction { uint256 fromChain; bytes32 fromContract; uint256 toChain; address toContract; address recipient; uint64 amount; uint256 nonce; } }
{ "remappings": [ "@solmate/=lib/solmate/src/", "@forge-std/=lib/forge-std/src/", "@ds-test/=lib/forge-std/lib/ds-test/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "@ccip/=lib/ccip/", "@oapp-auth/=lib/OAppAuth/src/", "@devtools-oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/contracts/oapp/", "@layerzerolabs/lz-evm-messagelib-v2/=lib/OAppAuth/node_modules/@layerzerolabs/lz-evm-messagelib-v2/", "@layerzerolabs/lz-evm-protocol-v2/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/protocol/", "@layerzerolabs/oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/", "@lz-oapp-evm/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/oapp/contracts/oapp/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "LayerZero-V2/=lib/OAppAuth/lib/", "OAppAuth/=lib/OAppAuth/", "ccip/=lib/ccip/contracts/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "halmos-cheatcodes/=lib/OAppAuth/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solidity-bytes-utils/=lib/OAppAuth/node_modules/solidity-bytes-utils/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "shanghai", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported","type":"error"},{"inputs":[],"name":"BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero","type":"error"},{"inputs":[],"name":"BaseDecoderAndSanitizer__FunctionSelectorNotSupported","type":"error"},{"inputs":[],"name":"OFTDecoderAndSanitizer__NonZeroMessage","type":"error"},{"inputs":[],"name":"OFTDecoderAndSanitizer__NonZeroOFTCommand","type":"error"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"depositAsset","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"bulkDeposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"withdrawAsset","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"bulkWithdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"feeAsset","type":"address"}],"name":"claimFees","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"yieldAsset","type":"address"}],"name":"claimYield","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"depositAsset","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"deposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bool","name":"toInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.ExitPoolRequest","name":"req","type":"tuple"}],"name":"exitPool","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bool","name":"fromInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.JoinPoolRequest","name":"req","type":"tuple"}],"name":"joinPool","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"}],"name":"mint","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint24","name":"","type":"uint24"}],"name":"requestOnChainWithdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"dstEid","type":"uint32"},{"internalType":"bytes32","name":"to","type":"bytes32"},{"internalType":"uint256","name":"amountLD","type":"uint256"},{"internalType":"uint256","name":"minAmountLD","type":"uint256"},{"internalType":"bytes","name":"extraOptions","type":"bytes"},{"internalType":"bytes","name":"composeMsg","type":"bytes"},{"internalType":"bytes","name":"oftCmd","type":"bytes"}],"internalType":"struct DecoderCustomTypes.SendParam","name":"_sendParam","type":"tuple"},{"components":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"lzTokenFee","type":"uint256"}],"internalType":"struct DecoderCustomTypes.MessagingFee","name":"","type":"tuple"},{"internalType":"address","name":"_refundAddress","type":"address"}],"name":"send","outputs":[{"internalType":"bytes","name":"sensitiveArguments","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"enum DecoderCustomTypes.SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.SingleSwap","name":"singleSwap","type":"tuple"},{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"fromInternalBalance","type":"bool"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"toInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.FundManagement","name":"funds","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"withdrawNativeFromDrone","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawNonBoringToken","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50610cf58061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c80636bb3b476116100a05780639d5744201161006f5780639d57442014610190578063a9059cbb1461012d578063b95cac2814610202578063c7c7f5b314610215578063da3ef9d21461022857610114565b80636bb3b476146101c95780636e553f65146101dc5780638bdb3913146101ef578063999927df1461016957610114565b80632e1a7d4d116100e75780632e1a7d4d1461017c5780633e64ce991461019057806352bbbe29146101a35780635c38449e146101b65780636a6278421461016957610114565b8063095ea7b31461012d57806309f0e0c21461012d5780630efe6a8b1461015657806315a0ea6a14610169575b604051633790be8760e21b815260040160405180910390fd5b61014061013b36600461072b565b61022f565b60405161014d9190610775565b60405180910390f35b6101406101643660046107a7565b610259565b6101406101773660046107d7565b610284565b61014061018a3660046107f7565b50606090565b61014061019e36600461080e565b6102ad565b6101406101b1366004610867565b6102ed565b6101406101c436600461090d565b610403565b6101406101d73660046109da565b610498565b6101406101ea366004610a52565b6104ab565b6101406101fd366004610a7c565b6104be565b610140610210366004610a7c565b6105a3565b610140610223366004610ae0565b61067e565b6060610140565b6060826040516020016102429190610b49565b604051602081830303815290604052905092915050565b60608360405160200161026c9190610b49565b60405160208183030381529060405290509392505050565b6060816040516020016102979190610b49565b6040516020818303038152906040529050919050565b604051606085811b6001600160601b0319908116602084015283821b166034830152906048015b6040516020818303038152906040529050949350505050565b60605f6102fd60a0870187610b61565b9050111561031e57604051634c560fcb60e01b815260040160405180910390fd5b61032e6040850160208601610ba4565b1561034c57604051633a68367b60e01b815260040160405180910390fd5b61035c6080850160608601610ba4565b1561037a57604051633a68367b60e01b815260040160405180910390fd5b843560601c61038f60608701604088016107d7565b61039f60808801606089016107d7565b6103ac60208801886107d7565b6103bc6060890160408a016107d7565b6040516001600160601b0319606096871b8116602083015294861b8516603482015292851b8416604884015290841b8316605c83015290921b1660708201526084016102d4565b6060876040516020016104169190610b49565b60405160208183030381529060405290505f5b8681101561048c578188888381811061044457610444610bc3565b905060200201602081019061045991906107d7565b60405160200161046a929190610bd7565b60405160208183030381529060405291508061048590610c08565b9050610429565b50979650505050505050565b6060846040516020016102d49190610b49565b6060816040516020016102429190610b49565b60606104cf60808301838301610ba4565b156104ed57604051633a68367b60e01b815260040160405180910390fd5b6104f78560601c90565b848460405160200161050b93929190610c2c565b60408051601f1981840301815291905290505f6105288380610c56565b905090505f5b8181101561059957826105418580610c56565b8381811061055157610551610bc3565b905060200201602081019061056691906107d7565b604051602001610577929190610bd7565b60405160208183030381529060405292508061059290610c08565b905061052e565b5050949350505050565b60606105b460808301838301610ba4565b156105d257604051633a68367b60e01b815260040160405180910390fd5b6105dc8560601c90565b84846040516020016105f093929190610c2c565b60408051601f1981840301815291905290505f61060d8380610c56565b905090505f5b8181101561059957826106268580610c56565b8381811061063657610636610bc3565b905060200201602081019061064b91906107d7565b60405160200161065c929190610bd7565b60405160208183030381529060405292508061067790610c08565b9050610613565b60605f61068e60a0860186610b61565b905011156106af57604051633483a65b60e11b815260040160405180910390fd5b5f6106bd60c0860186610b61565b905011156106de57604051630d90fb5b60e21b815260040160405180910390fd5b6106eb6020850185610c9c565b63ffffffff1660608560200135901b60601c8360405160200161026c93929190610c2c565b80356001600160a01b0381168114610726575f80fd5b919050565b5f806040838503121561073c575f80fd5b61074583610710565b946020939093013593505050565b5f5b8381101561076d578181015183820152602001610755565b50505f910152565b602081525f8251806020840152610793816040850160208701610753565b601f01601f19169190910160400192915050565b5f805f606084860312156107b9575f80fd5b6107c284610710565b95602085013595506040909401359392505050565b5f602082840312156107e7575f80fd5b6107f082610710565b9392505050565b5f60208284031215610807575f80fd5b5035919050565b5f805f8060808587031215610821575f80fd5b61082a85610710565b9350602085013592506040850135915061084660608601610710565b905092959194509250565b5f60808284031215610861575f80fd5b50919050565b5f805f8060e0858703121561087a575f80fd5b843567ffffffffffffffff811115610890575f80fd5b850160c081880312156108a1575f80fd5b93506108b08660208701610851565b939693955050505060a08201359160c0013590565b5f8083601f8401126108d5575f80fd5b50813567ffffffffffffffff8111156108ec575f80fd5b6020830191508360208260051b8501011115610906575f80fd5b9250929050565b5f805f805f805f6080888a031215610923575f80fd5b61092c88610710565b9650602088013567ffffffffffffffff80821115610948575f80fd5b6109548b838c016108c5565b909850965060408a013591508082111561096c575f80fd5b6109788b838c016108c5565b909650945060608a0135915080821115610990575f80fd5b818a0191508a601f8301126109a3575f80fd5b8135818111156109b1575f80fd5b8b60208285010111156109c2575f80fd5b60208301945080935050505092959891949750929550565b5f805f80608085870312156109ed575f80fd5b6109f685610710565b935060208501356fffffffffffffffffffffffffffffffff81168114610a1a575f80fd5b9250604085013561ffff81168114610a30575f80fd5b9150606085013562ffffff81168114610a47575f80fd5b939692955090935050565b5f8060408385031215610a63575f80fd5b82359150610a7360208401610710565b90509250929050565b5f805f8060808587031215610a8f575f80fd5b84359350610a9f60208601610710565b9250610aad60408601610710565b9150606085013567ffffffffffffffff811115610ac8575f80fd5b610ad487828801610851565b91505092959194509250565b5f805f8385036080811215610af3575f80fd5b843567ffffffffffffffff811115610b09575f80fd5b850160e08188031215610b1a575f80fd5b93506040601f1982011215610b2d575f80fd5b50602084019150610b4060608501610710565b90509250925092565b60609190911b6001600160601b031916815260140190565b5f808335601e19843603018112610b76575f80fd5b83018035915067ffffffffffffffff821115610b90575f80fd5b602001915036819003821315610906575f80fd5b5f60208284031215610bb4575f80fd5b813580151581146107f0575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8351610be8818460208801610753565b60609390931b6001600160601b0319169190920190815260140192915050565b5f60018201610c2557634e487b7160e01b5f52601160045260245ffd5b5060010190565b6001600160601b0319606094851b8116825292841b83166014820152921b166028820152603c0190565b5f808335601e19843603018112610c6b575f80fd5b83018035915067ffffffffffffffff821115610c85575f80fd5b6020019150600581901b3603821315610906575f80fd5b5f60208284031215610cac575f80fd5b813563ffffffff811681146107f0575f80fdfea26469706673582212205594d2c8d10671768175e4e72e92b3c67062bfd33cc0fb922301fc47e7a10c6464736f6c63430008150033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c80636bb3b476116100a05780639d5744201161006f5780639d57442014610190578063a9059cbb1461012d578063b95cac2814610202578063c7c7f5b314610215578063da3ef9d21461022857610114565b80636bb3b476146101c95780636e553f65146101dc5780638bdb3913146101ef578063999927df1461016957610114565b80632e1a7d4d116100e75780632e1a7d4d1461017c5780633e64ce991461019057806352bbbe29146101a35780635c38449e146101b65780636a6278421461016957610114565b8063095ea7b31461012d57806309f0e0c21461012d5780630efe6a8b1461015657806315a0ea6a14610169575b604051633790be8760e21b815260040160405180910390fd5b61014061013b36600461072b565b61022f565b60405161014d9190610775565b60405180910390f35b6101406101643660046107a7565b610259565b6101406101773660046107d7565b610284565b61014061018a3660046107f7565b50606090565b61014061019e36600461080e565b6102ad565b6101406101b1366004610867565b6102ed565b6101406101c436600461090d565b610403565b6101406101d73660046109da565b610498565b6101406101ea366004610a52565b6104ab565b6101406101fd366004610a7c565b6104be565b610140610210366004610a7c565b6105a3565b610140610223366004610ae0565b61067e565b6060610140565b6060826040516020016102429190610b49565b604051602081830303815290604052905092915050565b60608360405160200161026c9190610b49565b60405160208183030381529060405290509392505050565b6060816040516020016102979190610b49565b6040516020818303038152906040529050919050565b604051606085811b6001600160601b0319908116602084015283821b166034830152906048015b6040516020818303038152906040529050949350505050565b60605f6102fd60a0870187610b61565b9050111561031e57604051634c560fcb60e01b815260040160405180910390fd5b61032e6040850160208601610ba4565b1561034c57604051633a68367b60e01b815260040160405180910390fd5b61035c6080850160608601610ba4565b1561037a57604051633a68367b60e01b815260040160405180910390fd5b843560601c61038f60608701604088016107d7565b61039f60808801606089016107d7565b6103ac60208801886107d7565b6103bc6060890160408a016107d7565b6040516001600160601b0319606096871b8116602083015294861b8516603482015292851b8416604884015290841b8316605c83015290921b1660708201526084016102d4565b6060876040516020016104169190610b49565b60405160208183030381529060405290505f5b8681101561048c578188888381811061044457610444610bc3565b905060200201602081019061045991906107d7565b60405160200161046a929190610bd7565b60405160208183030381529060405291508061048590610c08565b9050610429565b50979650505050505050565b6060846040516020016102d49190610b49565b6060816040516020016102429190610b49565b60606104cf60808301838301610ba4565b156104ed57604051633a68367b60e01b815260040160405180910390fd5b6104f78560601c90565b848460405160200161050b93929190610c2c565b60408051601f1981840301815291905290505f6105288380610c56565b905090505f5b8181101561059957826105418580610c56565b8381811061055157610551610bc3565b905060200201602081019061056691906107d7565b604051602001610577929190610bd7565b60405160208183030381529060405292508061059290610c08565b905061052e565b5050949350505050565b60606105b460808301838301610ba4565b156105d257604051633a68367b60e01b815260040160405180910390fd5b6105dc8560601c90565b84846040516020016105f093929190610c2c565b60408051601f1981840301815291905290505f61060d8380610c56565b905090505f5b8181101561059957826106268580610c56565b8381811061063657610636610bc3565b905060200201602081019061064b91906107d7565b60405160200161065c929190610bd7565b60405160208183030381529060405292508061067790610c08565b9050610613565b60605f61068e60a0860186610b61565b905011156106af57604051633483a65b60e11b815260040160405180910390fd5b5f6106bd60c0860186610b61565b905011156106de57604051630d90fb5b60e21b815260040160405180910390fd5b6106eb6020850185610c9c565b63ffffffff1660608560200135901b60601c8360405160200161026c93929190610c2c565b80356001600160a01b0381168114610726575f80fd5b919050565b5f806040838503121561073c575f80fd5b61074583610710565b946020939093013593505050565b5f5b8381101561076d578181015183820152602001610755565b50505f910152565b602081525f8251806020840152610793816040850160208701610753565b601f01601f19169190910160400192915050565b5f805f606084860312156107b9575f80fd5b6107c284610710565b95602085013595506040909401359392505050565b5f602082840312156107e7575f80fd5b6107f082610710565b9392505050565b5f60208284031215610807575f80fd5b5035919050565b5f805f8060808587031215610821575f80fd5b61082a85610710565b9350602085013592506040850135915061084660608601610710565b905092959194509250565b5f60808284031215610861575f80fd5b50919050565b5f805f8060e0858703121561087a575f80fd5b843567ffffffffffffffff811115610890575f80fd5b850160c081880312156108a1575f80fd5b93506108b08660208701610851565b939693955050505060a08201359160c0013590565b5f8083601f8401126108d5575f80fd5b50813567ffffffffffffffff8111156108ec575f80fd5b6020830191508360208260051b8501011115610906575f80fd5b9250929050565b5f805f805f805f6080888a031215610923575f80fd5b61092c88610710565b9650602088013567ffffffffffffffff80821115610948575f80fd5b6109548b838c016108c5565b909850965060408a013591508082111561096c575f80fd5b6109788b838c016108c5565b909650945060608a0135915080821115610990575f80fd5b818a0191508a601f8301126109a3575f80fd5b8135818111156109b1575f80fd5b8b60208285010111156109c2575f80fd5b60208301945080935050505092959891949750929550565b5f805f80608085870312156109ed575f80fd5b6109f685610710565b935060208501356fffffffffffffffffffffffffffffffff81168114610a1a575f80fd5b9250604085013561ffff81168114610a30575f80fd5b9150606085013562ffffff81168114610a47575f80fd5b939692955090935050565b5f8060408385031215610a63575f80fd5b82359150610a7360208401610710565b90509250929050565b5f805f8060808587031215610a8f575f80fd5b84359350610a9f60208601610710565b9250610aad60408601610710565b9150606085013567ffffffffffffffff811115610ac8575f80fd5b610ad487828801610851565b91505092959194509250565b5f805f8385036080811215610af3575f80fd5b843567ffffffffffffffff811115610b09575f80fd5b850160e08188031215610b1a575f80fd5b93506040601f1982011215610b2d575f80fd5b50602084019150610b4060608501610710565b90509250925092565b60609190911b6001600160601b031916815260140190565b5f808335601e19843603018112610b76575f80fd5b83018035915067ffffffffffffffff821115610b90575f80fd5b602001915036819003821315610906575f80fd5b5f60208284031215610bb4575f80fd5b813580151581146107f0575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8351610be8818460208801610753565b60609390931b6001600160601b0319169190920190815260140192915050565b5f60018201610c2557634e487b7160e01b5f52601160045260245ffd5b5060010190565b6001600160601b0319606094851b8116825292841b83166014820152921b166028820152603c0190565b5f808335601e19843603018112610c6b575f80fd5b83018035915067ffffffffffffffff821115610c85575f80fd5b6020019150600581901b3603821315610906575f80fd5b5f60208284031215610cac575f80fd5b813563ffffffff811681146107f0575f80fdfea26469706673582212205594d2c8d10671768175e4e72e92b3c67062bfd33cc0fb922301fc47e7a10c6464736f6c63430008150033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.