Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 7450979 | 107 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UniswapV3DecoderAndSanitizer
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {INonFungiblePositionManager} from "src/interfaces/RawDataDecoderAndSanitizerInterfaces.sol";
import {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol";
contract UniswapV3DecoderAndSanitizer {
//============================== ERRORS ===============================
error UniswapV3DecoderAndSanitizer__BadPathFormat();
error UniswapV3DecoderAndSanitizer__BadTokenId();
//============================== IMMUTABLES ===============================
/**
* @notice The networks uniswapV3 nonfungible position manager.
*/
INonFungiblePositionManager internal immutable uniswapV3NonFungiblePositionManager;
constructor(address _uniswapV3NonFungiblePositionManager) {
uniswapV3NonFungiblePositionManager = INonFungiblePositionManager(_uniswapV3NonFungiblePositionManager);
}
//============================== UNISWAP V3 ===============================
function exactInput(DecoderCustomTypes.ExactInputParams calldata params)
external
pure
virtual
returns (bytes memory addressesFound)
{
// Nothing to sanitize
// Return addresses found
// Determine how many addresses are in params.path.
uint256 chunkSize = 23; // 3 bytes for uint24 fee, and 20 bytes for address token
uint256 pathLength = params.path.length;
if (pathLength % chunkSize != 20) revert UniswapV3DecoderAndSanitizer__BadPathFormat();
uint256 pathAddressLength = 1 + (pathLength / chunkSize);
uint256 pathIndex;
for (uint256 i; i < pathAddressLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, params.path[pathIndex:pathIndex + 20]);
pathIndex += chunkSize;
}
addressesFound = abi.encodePacked(addressesFound, params.recipient);
}
function mint(DecoderCustomTypes.MintParams calldata params)
external
pure
virtual
returns (bytes memory addressesFound)
{
// Nothing to sanitize
// Return addresses found
addressesFound = abi.encodePacked(params.token0, params.token1, params.recipient);
}
function increaseLiquidity(DecoderCustomTypes.IncreaseLiquidityParams calldata params)
external
view
virtual
returns (bytes memory addressesFound)
{
// Sanitize raw data
address owner = uniswapV3NonFungiblePositionManager.ownerOf(params.tokenId);
// Extract addresses from uniswapV3NonFungiblePositionManager.positions(params.tokenId).
(, address operator, address token0, address token1,,,,,,,,) =
uniswapV3NonFungiblePositionManager.positions(params.tokenId);
addressesFound = abi.encodePacked(operator, token0, token1, owner);
}
function decreaseLiquidity(DecoderCustomTypes.DecreaseLiquidityParams calldata params)
external
view
virtual
returns (bytes memory addressesFound)
{
// Sanitize raw data
// NOTE ownerOf check is done in PositionManager contract as well, but it is added here
// just for completeness.
address owner = uniswapV3NonFungiblePositionManager.ownerOf(params.tokenId);
// No addresses in data
return abi.encodePacked(owner);
}
function collect(DecoderCustomTypes.CollectParams calldata params)
external
view
virtual
returns (bytes memory addressesFound)
{
// Sanitize raw data
// NOTE ownerOf check is done in PositionManager contract as well, but it is added here
// just for completeness.
address owner = uniswapV3NonFungiblePositionManager.ownerOf(params.tokenId);
// Return addresses found
addressesFound = abi.encodePacked(params.recipient, owner);
}
function burn(uint256 /*tokenId*/ ) external pure virtual returns (bytes memory addressesFound) {
// positionManager.burn(tokenId) will verify that the tokenId has no liquidity, and no tokens owed.
// Nothing to sanitize or return
return addressesFound;
}
}// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol";
// Swell
interface INonFungiblePositionManager {
struct Position {
// the nonce for permits
uint96 nonce;
// the address that is approved for spending this token
address operator;
// the ID of the pool with which this token is connected
uint80 poolId;
// the tick range of the position
int24 tickLower;
int24 tickUpper;
// the liquidity of the position
uint128 liquidity;
// the fee growth of the aggregate position as of the last action on the individual position
uint256 feeGrowthInside0LastX128;
uint256 feeGrowthInside1LastX128;
// how many uncollected tokens are owed to the position, as of the last computation
uint128 tokensOwed0;
uint128 tokensOwed1;
}
function ownerOf(uint256 tokenId) external view returns (address);
function positions(uint256 tokenId)
external
view
returns (
uint96 nonce,
address operator,
address token0,
address token1,
uint24 fee,
int24 tickLower,
int24 tickUpper,
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
}
interface PancakeSwapV3MasterChef {
function userPositionInfos(uint256 id)
external
view
returns (
uint128 liquidity,
uint128 boostLiquidity,
int24 tickLower,
int24 tickUpper,
uint256 rewardsGrowthInside,
uint256 reward,
address user,
uint256 pid,
uint256 boostMultiplier
);
}
interface CamelotNonFungiblePositionManager {
function ownerOf(uint256 tokenId) external view returns (address);
function positions(uint256 tokenId)
external
view
returns (
uint96 nonce,
address operator,
address token0,
address token1,
int24 tickLower,
int24 tickUpper,
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
}
interface AlgebraNonFungiblePositionManager {
function ownerOf(uint256 tokenId) external view returns (address);
function positions(uint256 tokenId)
external
view
returns (
uint96 nonce,
address operator,
address token0,
address token1,
address deployer,
int24 tickLower,
int24 tickUpper,
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
}
interface IRecipeMarketHub {
enum RewardStyle {
Upfront,
Arrear,
Forfeitable
}
/// @custom:field weirollCommands The weiroll script that will be executed on an AP's weiroll wallet after receiving the inputToken
/// @custom:field weirollState State of the weiroll VM, necessary for executing the weiroll script
struct Recipe {
bytes32[] weirollCommands;
bytes[] weirollState;
}
function offerHashToIPOffer(bytes32 offer)
external
view
returns (uint256, bytes32, address, uint256, uint256, uint256);
function marketHashToWeirollMarket(bytes32 marketHash)
external
view
returns (uint256, address, uint256, uint256, Recipe memory, Recipe memory, RewardStyle);
}
interface IUniswapV4PositionManager {
function getPoolAndPositionInfo(uint256 tokenId) external view returns (DecoderCustomTypes.PoolKey memory, uint256);
}
interface IPoolRegistry {
function poolInfo(uint256 _pid) external view returns (address, address, address, address, uint8);
}
interface IBoringChef {
function rewards(uint256 rewardId) external view returns (DecoderCustomTypes.Reward memory);
}
interface IDvStETHVault {
function underlyingTokens() external view returns (address[] memory);
}// 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;
}
// ========================================= UNISWAP V4 =========================================
struct SwapParams {
/// Whether to swap token0 for token1 or vice versa
bool zeroForOne;
/// The desired input amount if negative (exactIn), or the desired output amount if positive (exactOut)
int256 amountSpecified;
/// The sqrt price at which, if reached, the swap will stop executing
uint160 sqrtPriceLimitX96;
}
struct PoolKey {
/// @notice The lower currency of the pool, sorted numerically
address currency0;
/// @notice The higher currency of the pool, sorted numerically
address currency1;
/// @notice The pool LP fee, capped at 1_000_000. If the highest bit is 1, the pool has a dynamic fee and must be exactly equal to 0x800000
uint24 fee;
/// @notice Ticks that involve positions must be a multiple of tick spacing
int24 tickSpacing;
/// @notice The hooks of the pool
address hooks;
}
/// @dev comes from IV4 Router
struct ExactInputSingleParams {
PoolKey poolKey;
bool zeroForOne;
uint128 amountIn;
uint128 amountOutMinimum;
bytes hookData;
}
/// @notice Parameters for a single-hop exact-output swap
struct ExactOutputSingleParams {
PoolKey poolKey;
bool zeroForOne;
uint128 amountOut;
uint128 amountInMaximum;
bytes hookData;
}
// ========================================= 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 / Algebra V3 =========================================
struct CamelotMintParams {
address token0;
address token1;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
// ========================================= Algebra V4 =========================================
struct AlgebraMintParams {
address token0;
address token1;
address deployer;
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;
}
// ========================================= Odos ==================================
struct swapTokenInfo {
address inputToken;
uint256 inputAmount;
address inputReceiver;
address outputToken;
uint256 outputQuote;
uint256 outputMin;
address outputReceiver;
}
struct swapTokenInfoOogaBooga {
address inputToken;
uint256 inputAmount;
address outputToken;
uint256 outputQuote;
uint256 outputMin;
address outputReceiver;
}
// ========================================= Level ==================================
/// @dev for reference
//enum OrderType {
// MINT,
// REDEEM
//}
struct LevelOrder {
uint8 order_type;
address benefactor;
address beneficiary;
address collateral_asset;
uint256 collateral_amount;
uint256 lvlusd_amount;
}
struct LevelOrderV2 {
address beneficiary;
address collateral_asset;
uint256 collateral_amount;
uint256 min_lvlusd_amount;
}
struct Route {
address[] addresses;
uint256[] ratios;
}
// ========================================= Royco ==================================
struct APOffer { // RecipeMarketHub
uint256 offerID;
bytes32 targetMarketHash;
address ap;
address fundingVault;
uint256 quantity;
uint256 expiry;
address[] incentivesRequested;
uint256[] incentiveAmountsRequested;
}
struct APOfferVault { // VaultMarketHub (renamed to avoid collision)
uint256 offerID;
address targetVault;
address ap;
address fundingVault;
uint256 expiry;
address[] incentivesRequested;
uint256[] incentivesRatesRequested;
}
struct Reward {
uint48 startEpoch;
uint48 endEpoch;
address token;
uint256 rewardRate;
}
// ========================================= Permit2 ==================================
struct TokenSpenderPair {
address token;
address spender;
}
// ========================================= OnChainQueue ==================================
struct OnChainWithdraw {
uint96 nonce; // read from state, used to make it impossible for request Ids to be repeated.
address user; // msg.sender
address assetOut; // input sanitized
uint128 amountOfShares; // input transfered in
uint128 amountOfAssets; // derived from amountOfShares and price
uint40 creationTime; // time withdraw was made
uint24 secondsToMaturity; // in contract, from withdrawAsset?
uint24 secondsToDeadline; // in contract, from withdrawAsset? To get the deadline you take the creationTime add seconds to maturity, add the secondsToDeadline
}
// ========================================= Beraborrow ==================================
struct OpenDenVaultParams {
address denManager;
address collVault;
uint256 _maxFeePercentage;
uint256 _debtAmount;
uint256 _collAssetToDeposit;
address _upperHint;
address _lowerHint;
uint256 _minSharesMinted;
uint256 _collIndex;
bytes _preDeposit;
}
struct AdjustDenVaultParams {
address denManager;
address collVault;
uint256 _maxFeePercentage;
uint256 _collAssetToDeposit;
uint256 _collWithdrawal;
uint256 _debtChange;
bool _isDebtIncrease;
address _upperHint;
address _lowerHint;
bool unwrap;
uint256 _minSharesMinted;
uint256 _minAssetsWithdrawn;
uint256 _collIndex;
bytes _preDeposit;
}
struct RedeemCollateralVaultParams {
address denManager;
address collVault;
uint256 _debtAmount;
address _firstRedemptionHint;
address _upperPartialRedemptionHint;
address _lowerPartialRedemptionHint;
uint256 _partialRedemptionHintNICR;
uint256 _maxIterations;
uint256 _maxFeePercentage;
uint256 _minSharesWithdrawn;
uint256 minAssetsWithdrawn;
uint256 collIndex;
bool unwrap;
}
struct AddCollParams {
address upperHint;
address lowerHint;
uint256 minSharesOut;
uint256 minCollVaultShares;
}
struct ExternalRebalanceParams {
address swapper;
bytes payload;
uint256 minRebalanceOut;
}
// ========================================= Tac Crosschain Layer ==================================
struct TokenAmount {
address evmAddress;
uint256 amount;
}
struct NFTAmount {
address evmAddress;
uint256 tokenId;
uint256 amount;
}
struct OutMessageV1 {
uint64 shardsKey;
string tvmTarget;
string tvmPayload;
uint256 tvmProtocolFee;
uint256 tvmExecutorFee;
string[] tvmValidExecutors;
TokenAmount[] toBridge;
NFTAmount[] toBridgeNFT;
}
}{
"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/",
"@sbu/=lib/OAppAuth/lib/solidity-bytes-utils/",
"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": "paris",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_uniswapV3NonFungiblePositionManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"UniswapV3DecoderAndSanitizer__BadPathFormat","type":"error"},{"inputs":[],"name":"UniswapV3DecoderAndSanitizer__BadTokenId","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint128","name":"amount0Max","type":"uint128"},{"internalType":"uint128","name":"amount1Max","type":"uint128"}],"internalType":"struct DecoderCustomTypes.CollectParams","name":"params","type":"tuple"}],"name":"collect","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct DecoderCustomTypes.DecreaseLiquidityParams","name":"params","type":"tuple"}],"name":"decreaseLiquidity","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"internalType":"struct DecoderCustomTypes.ExactInputParams","name":"params","type":"tuple"}],"name":"exactInput","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct DecoderCustomTypes.IncreaseLiquidityParams","name":"params","type":"tuple"}],"name":"increaseLiquidity","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct DecoderCustomTypes.MintParams","name":"params","type":"tuple"}],"name":"mint","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b50604051610a49380380610a4983398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516109a96100a06000396000818161010c015281816101d00152818161026b01526104c301526109a96000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630c49ccbe14610067578063219f5d171461009057806342966c68146100a357806388316456146100b7578063c04b8d59146100ca578063fc6f7865146100dd575b600080fd5b61007a61007536600461058c565b6100f0565b60405161008791906105d3565b60405180910390f35b61007a61009e366004610606565b6101b4565b61007a6100b1366004610618565b50606090565b61007a6100c5366004610631565b610348565b61007a6100d8366004610644565b6103bc565b61007a6100eb366004610681565b6104a7565b6040516331a9108f60e11b8152813560048201526060906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561015b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017f91906106bb565b6040516001600160601b0319606083901b1660208201529091506034015b604051602081830303815290604052915050919050565b6040516331a9108f60e11b8152813560048201526060906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024391906106bb565b60405163133f757160e31b815284356004820152909150600090819081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906399fbab889060240161018060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d7919061071d565b5050505050505050935093509350508282828660405160200161032e9493929190606094851b6001600160601b0319908116825293851b8416601482015291841b8316602883015290921b16603c82015260500190565b604051602081830303815290604052945050505050919050565b606061035760208301836107fe565b61036760408401602085016107fe565b610379610140850161012086016107fe565b6040516001600160601b0319606094851b8116602083015292841b83166034820152921b166048820152605c016040516020818303038152906040529050919050565b6060601760006103cc848061081b565b91506103da9050828261087f565b6014146103fa57604051633e8c06ad60e01b815260040160405180910390fd5b600061040683836108a9565b6104119060016108bd565b90506000805b82811015610484578561042a888061081b565b84906104378260146108bd565b92610444939291906108d6565b60405160200161045693929190610900565b60408051601f19818403018152919052955061047285836108bd565b915061047d81610928565b9050610417565b508461049660408801602089016107fe565b60405160200161032e929190610941565b6040516331a9108f60e11b8152813560048201526060906000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053691906106bb565b905061054860408401602085016107fe565b6040516001600160601b0319606092831b811660208301529183901b909116603482015260480161019d565b600060a0828403121561058657600080fd5b50919050565b600060a0828403121561059e57600080fd5b6105a88383610574565b9392505050565b60005b838110156105ca5781810151838201526020016105b2565b50506000910152565b60208152600082518060208401526105f28160408501602087016105af565b601f01601f19169190910160400192915050565b600060c0828403121561058657600080fd5b60006020828403121561062a57600080fd5b5035919050565b6000610160828403121561058657600080fd5b60006020828403121561065657600080fd5b813567ffffffffffffffff81111561066d57600080fd5b61067984828501610574565b949350505050565b60006080828403121561058657600080fd5b6001600160a01b03811681146106a857600080fd5b50565b80516106b681610693565b919050565b6000602082840312156106cd57600080fd5b81516105a881610693565b805162ffffff811681146106b657600080fd5b8051600281900b81146106b657600080fd5b80516fffffffffffffffffffffffffffffffff811681146106b657600080fd5b6000806000806000806000806000806000806101808d8f03121561074057600080fd5b8c516bffffffffffffffffffffffff8116811461075c57600080fd5b9b5061076a60208e016106ab565b9a5061077860408e016106ab565b995061078660608e016106ab565b985061079460808e016106d8565b97506107a260a08e016106eb565b96506107b060c08e016106eb565b95506107be60e08e016106fd565b94506101008d015193506101208d015192506107dd6101408e016106fd565b91506107ec6101608e016106fd565b90509295989b509295989b509295989b565b60006020828403121561081057600080fd5b81356105a881610693565b6000808335601e1984360301811261083257600080fd5b83018035915067ffffffffffffffff82111561084d57600080fd5b60200191503681900382131561086257600080fd5b9250929050565b634e487b7160e01b600052601260045260246000fd5b60008261088e5761088e610869565b500690565b634e487b7160e01b600052601160045260246000fd5b6000826108b8576108b8610869565b500490565b808201808211156108d0576108d0610893565b92915050565b600080858511156108e657600080fd5b838611156108f357600080fd5b5050820193919092039150565b600084516109128184602089016105af565b8201838582376000930192835250909392505050565b60006001820161093a5761093a610893565b5060010190565b600083516109538184602088016105af565b60609390931b6001600160601b031916919092019081526014019291505056fea26469706673582212200224bf00c5b2e2e9550f2b7bd84b39b47f0ac3f8acb56929424cba169c96a78364736f6c634300081500330000000000000000000000002659c6085d26144117d904c46b48b6d180393d27
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c80630c49ccbe14610067578063219f5d171461009057806342966c68146100a357806388316456146100b7578063c04b8d59146100ca578063fc6f7865146100dd575b600080fd5b61007a61007536600461058c565b6100f0565b60405161008791906105d3565b60405180910390f35b61007a61009e366004610606565b6101b4565b61007a6100b1366004610618565b50606090565b61007a6100c5366004610631565b610348565b61007a6100d8366004610644565b6103bc565b61007a6100eb366004610681565b6104a7565b6040516331a9108f60e11b8152813560048201526060906000907f0000000000000000000000002659c6085d26144117d904c46b48b6d180393d276001600160a01b031690636352211e90602401602060405180830381865afa15801561015b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017f91906106bb565b6040516001600160601b0319606083901b1660208201529091506034015b604051602081830303815290604052915050919050565b6040516331a9108f60e11b8152813560048201526060906000907f0000000000000000000000002659c6085d26144117d904c46b48b6d180393d276001600160a01b031690636352211e90602401602060405180830381865afa15801561021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024391906106bb565b60405163133f757160e31b815284356004820152909150600090819081906001600160a01b037f0000000000000000000000002659c6085d26144117d904c46b48b6d180393d2716906399fbab889060240161018060405180830381865afa1580156102b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d7919061071d565b5050505050505050935093509350508282828660405160200161032e9493929190606094851b6001600160601b0319908116825293851b8416601482015291841b8316602883015290921b16603c82015260500190565b604051602081830303815290604052945050505050919050565b606061035760208301836107fe565b61036760408401602085016107fe565b610379610140850161012086016107fe565b6040516001600160601b0319606094851b8116602083015292841b83166034820152921b166048820152605c016040516020818303038152906040529050919050565b6060601760006103cc848061081b565b91506103da9050828261087f565b6014146103fa57604051633e8c06ad60e01b815260040160405180910390fd5b600061040683836108a9565b6104119060016108bd565b90506000805b82811015610484578561042a888061081b565b84906104378260146108bd565b92610444939291906108d6565b60405160200161045693929190610900565b60408051601f19818403018152919052955061047285836108bd565b915061047d81610928565b9050610417565b508461049660408801602089016107fe565b60405160200161032e929190610941565b6040516331a9108f60e11b8152813560048201526060906000907f0000000000000000000000002659c6085d26144117d904c46b48b6d180393d276001600160a01b031690636352211e90602401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053691906106bb565b905061054860408401602085016107fe565b6040516001600160601b0319606092831b811660208301529183901b909116603482015260480161019d565b600060a0828403121561058657600080fd5b50919050565b600060a0828403121561059e57600080fd5b6105a88383610574565b9392505050565b60005b838110156105ca5781810151838201526020016105b2565b50506000910152565b60208152600082518060208401526105f28160408501602087016105af565b601f01601f19169190910160400192915050565b600060c0828403121561058657600080fd5b60006020828403121561062a57600080fd5b5035919050565b6000610160828403121561058657600080fd5b60006020828403121561065657600080fd5b813567ffffffffffffffff81111561066d57600080fd5b61067984828501610574565b949350505050565b60006080828403121561058657600080fd5b6001600160a01b03811681146106a857600080fd5b50565b80516106b681610693565b919050565b6000602082840312156106cd57600080fd5b81516105a881610693565b805162ffffff811681146106b657600080fd5b8051600281900b81146106b657600080fd5b80516fffffffffffffffffffffffffffffffff811681146106b657600080fd5b6000806000806000806000806000806000806101808d8f03121561074057600080fd5b8c516bffffffffffffffffffffffff8116811461075c57600080fd5b9b5061076a60208e016106ab565b9a5061077860408e016106ab565b995061078660608e016106ab565b985061079460808e016106d8565b97506107a260a08e016106eb565b96506107b060c08e016106eb565b95506107be60e08e016106fd565b94506101008d015193506101208d015192506107dd6101408e016106fd565b91506107ec6101608e016106fd565b90509295989b509295989b509295989b565b60006020828403121561081057600080fd5b81356105a881610693565b6000808335601e1984360301811261083257600080fd5b83018035915067ffffffffffffffff82111561084d57600080fd5b60200191503681900382131561086257600080fd5b9250929050565b634e487b7160e01b600052601260045260246000fd5b60008261088e5761088e610869565b500690565b634e487b7160e01b600052601160045260246000fd5b6000826108b8576108b8610869565b500490565b808201808211156108d0576108d0610893565b92915050565b600080858511156108e657600080fd5b838611156108f357600080fd5b5050820193919092039150565b600084516109128184602089016105af565b8201838582376000930192835250909392505050565b60006001820161093a5761093a610893565b5060010190565b600083516109538184602088016105af565b60609390931b6001600160601b031916919092019081526014019291505056fea26469706673582212200224bf00c5b2e2e9550f2b7bd84b39b47f0ac3f8acb56929424cba169c96a78364736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002659c6085d26144117d904c46b48b6d180393d27
-----Decoded View---------------
Arg [0] : _uniswapV3NonFungiblePositionManager (address): 0x2659C6085D26144117D904C46B48B6d180393d27
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002659c6085d26144117d904c46b48b6d180393d27
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.