Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 7501462 | 173 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PendleRouterDecoderAndSanitizer
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 {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol";
contract PendleRouterDecoderAndSanitizer {
//============================== ERRORS ===============================
error PendleRouterDecoderAndSanitizer__AggregatorSwapsNotPermitted();
error PendleRouterDecoderAndSanitizer__LimitOrderYtMismatch(address ytFound, address ytExpected);
error PendleRouterDecoderAndSanitizer__NoBytes();
//============================== PENDLEROUTER ===============================
function mintSyFromToken(address user, address sy, uint256, DecoderCustomTypes.TokenInput calldata input)
external
pure
virtual
returns (bytes memory addressesFound)
{
if (
input.swapData.swapType != DecoderCustomTypes.SwapType.NONE || input.swapData.extRouter != address(0)
|| input.pendleSwap != address(0) || input.tokenIn != input.tokenMintSy
) revert PendleRouterDecoderAndSanitizer__AggregatorSwapsNotPermitted();
addressesFound =
abi.encodePacked(user, sy, input.tokenIn, input.tokenMintSy, input.pendleSwap, input.swapData.extRouter);
}
function mintPyFromSy(address user, address yt, uint256, uint256)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, yt);
}
function swapExactPtForYt(address user, address market, uint256, uint256, DecoderCustomTypes.ApproxParams calldata)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, market);
}
function swapExactYtForPt(address user, address market, uint256, uint256, DecoderCustomTypes.ApproxParams calldata)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, market);
}
function addLiquidityDualSyAndPt(address user, address market, uint256, uint256, uint256)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, market);
}
function removeLiquidityDualSyAndPt(address user, address market, uint256, uint256, uint256)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, market);
}
function redeemPyToSy(address user, address yt, uint256, uint256)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(user, yt);
}
function redeemSyToToken(address user, address sy, uint256, DecoderCustomTypes.TokenOutput calldata output)
external
pure
virtual
returns (bytes memory addressesFound)
{
if (
output.swapData.swapType != DecoderCustomTypes.SwapType.NONE || output.swapData.extRouter != address(0)
|| output.pendleSwap != address(0) || output.tokenOut != output.tokenRedeemSy
) revert PendleRouterDecoderAndSanitizer__AggregatorSwapsNotPermitted();
addressesFound = abi.encodePacked(
user, sy, output.tokenOut, output.tokenRedeemSy, output.pendleSwap, output.swapData.extRouter
);
}
function redeemDueInterestAndRewards(
address user,
address[] calldata sys,
address[] calldata yts,
address[] calldata markets
) external pure virtual returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(user);
uint256 sysLength = sys.length;
for (uint256 i; i < sysLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, sys[i]);
}
uint256 ytsLength = yts.length;
for (uint256 i; i < ytsLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, yts[i]);
}
uint256 marketsLength = markets.length;
for (uint256 i; i < marketsLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, markets[i]);
}
}
function swapExactSyForPt(
address receiver,
address market,
uint256, /*exactSyIn*/
uint256, /*minPtOut*/
DecoderCustomTypes.ApproxParams calldata,
DecoderCustomTypes.LimitOrderData calldata limit
) external pure virtual returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(receiver, market, _sanitizeLimitOrderData(limit));
}
function swapExactPtForSy(
address receiver,
address market,
uint256, /*exactPtIn*/
uint256, /*minSyOut*/
DecoderCustomTypes.LimitOrderData calldata limit
) external pure virtual returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(receiver, market, _sanitizeLimitOrderData(limit));
}
function swapExactSyForYt(
address receiver,
address market,
uint256, /*exactSyIn*/
uint256, /*minYtOut*/
DecoderCustomTypes.ApproxParams calldata, /*guessYtOut*/
DecoderCustomTypes.LimitOrderData calldata limit
) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(receiver, market, _sanitizeLimitOrderData(limit));
}
function swapExactYtForSy(
address receiver,
address market,
uint256, /*exactYtIn*/
uint256, /*minSyOut*/
DecoderCustomTypes.LimitOrderData calldata limit
) external pure returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(receiver, market, _sanitizeLimitOrderData(limit));
}
/**
* @notice `params[i].order.token` is restricted to be either an input or an output token for the SY,
* so addressesFound only reports the YT address from the FillOrderParams, as the YT address derives
* The SY address which restricts the input and output tokens.
*/
function fill(
DecoderCustomTypes.FillOrderParams[] calldata params,
address receiver,
uint256, /*maxTaking*/
bytes calldata optData,
bytes calldata callback
) external pure virtual returns (bytes memory addressesFound) {
if (optData.length > 0 || callback.length > 0) revert PendleRouterDecoderAndSanitizer__NoBytes();
addressesFound = abi.encodePacked(receiver);
address savedYt;
// Iterate through params, and make sure all orders have the same yt.
for (uint256 i; i < params.length; ++i) {
if (savedYt == address(0)) {
// Update saved yt.
savedYt = params[i].order.YT;
} else {
// Make sure this orders YT matches the saved yt.
if (savedYt != params[i].order.YT) {
revert PendleRouterDecoderAndSanitizer__LimitOrderYtMismatch(params[i].order.YT, savedYt);
}
}
}
// If yt is set, encode it.
if (savedYt != address(0)) {
addressesFound = abi.encodePacked(addressesFound, savedYt);
}
}
function _sanitizeLimitOrderData(DecoderCustomTypes.LimitOrderData calldata limit)
internal
pure
virtual
returns (bytes memory addressesFound)
{
if (limit.limitRouter != address(0)) {
// Trying to fill limit orders.
addressesFound = abi.encodePacked(limit.limitRouter);
if (limit.optData.length > 0) revert PendleRouterDecoderAndSanitizer__NoBytes();
address savedYt;
// Make sure all normal fills have the same yt.
for (uint256 i; i < limit.normalFills.length; ++i) {
if (savedYt == address(0)) {
// Update saved yt.
savedYt = limit.normalFills[i].order.YT;
} else {
// Make sure this orders YT matches the saved yt.
if (savedYt != limit.normalFills[i].order.YT) {
revert PendleRouterDecoderAndSanitizer__LimitOrderYtMismatch(
limit.normalFills[i].order.YT, savedYt
);
}
}
}
// Make sure all flash fills have the same yt.
for (uint256 i; i < limit.flashFills.length; ++i) {
if (savedYt == address(0)) {
// Update saved yt.
savedYt = limit.flashFills[i].order.YT;
} else {
// Make sure this orders YT matches the saved yt.
if (savedYt != limit.flashFills[i].order.YT) {
revert PendleRouterDecoderAndSanitizer__LimitOrderYtMismatch(
limit.flashFills[i].order.YT, savedYt
);
}
}
}
// If yt is set, encode it.
if (savedYt != address(0)) {
addressesFound = abi.encodePacked(addressesFound, savedYt);
}
}
}
}// 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":[],"name":"PendleRouterDecoderAndSanitizer__AggregatorSwapsNotPermitted","type":"error"},{"inputs":[{"internalType":"address","name":"ytFound","type":"address"},{"internalType":"address","name":"ytExpected","type":"address"}],"name":"PendleRouterDecoderAndSanitizer__LimitOrderYtMismatch","type":"error"},{"inputs":[],"name":"PendleRouterDecoderAndSanitizer__NoBytes","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"addLiquidityDualSyAndPt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"params","type":"tuple[]"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"optData","type":"bytes"},{"internalType":"bytes","name":"callback","type":"bytes"}],"name":"fill","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"yt","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintPyFromSy","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"sy","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"netTokenIn","type":"uint256"},{"internalType":"address","name":"tokenMintSy","type":"address"},{"internalType":"address","name":"pendleSwap","type":"address"},{"components":[{"internalType":"enum DecoderCustomTypes.SwapType","name":"swapType","type":"uint8"},{"internalType":"address","name":"extRouter","type":"address"},{"internalType":"bytes","name":"extCalldata","type":"bytes"},{"internalType":"bool","name":"needScale","type":"bool"}],"internalType":"struct DecoderCustomTypes.SwapData","name":"swapData","type":"tuple"}],"internalType":"struct DecoderCustomTypes.TokenInput","name":"input","type":"tuple"}],"name":"mintSyFromToken","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address[]","name":"sys","type":"address[]"},{"internalType":"address[]","name":"yts","type":"address[]"},{"internalType":"address[]","name":"markets","type":"address[]"}],"name":"redeemDueInterestAndRewards","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"yt","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"redeemPyToSy","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"sy","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minTokenOut","type":"uint256"},{"internalType":"address","name":"tokenRedeemSy","type":"address"},{"internalType":"address","name":"pendleSwap","type":"address"},{"components":[{"internalType":"enum DecoderCustomTypes.SwapType","name":"swapType","type":"uint8"},{"internalType":"address","name":"extRouter","type":"address"},{"internalType":"bytes","name":"extCalldata","type":"bytes"},{"internalType":"bool","name":"needScale","type":"bool"}],"internalType":"struct DecoderCustomTypes.SwapData","name":"swapData","type":"tuple"}],"internalType":"struct DecoderCustomTypes.TokenOutput","name":"output","type":"tuple"}],"name":"redeemSyToToken","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"removeLiquidityDualSyAndPt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"limitRouter","type":"address"},{"internalType":"uint256","name":"epsSkipMarket","type":"uint256"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"normalFills","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"flashFills","type":"tuple[]"},{"internalType":"bytes","name":"optData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.LimitOrderData","name":"limit","type":"tuple"}],"name":"swapExactPtForSy","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"uint256","name":"guessMin","type":"uint256"},{"internalType":"uint256","name":"guessMax","type":"uint256"},{"internalType":"uint256","name":"guessOffchain","type":"uint256"},{"internalType":"uint256","name":"maxIteration","type":"uint256"},{"internalType":"uint256","name":"eps","type":"uint256"}],"internalType":"struct DecoderCustomTypes.ApproxParams","name":"","type":"tuple"}],"name":"swapExactPtForYt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"uint256","name":"guessMin","type":"uint256"},{"internalType":"uint256","name":"guessMax","type":"uint256"},{"internalType":"uint256","name":"guessOffchain","type":"uint256"},{"internalType":"uint256","name":"maxIteration","type":"uint256"},{"internalType":"uint256","name":"eps","type":"uint256"}],"internalType":"struct DecoderCustomTypes.ApproxParams","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"limitRouter","type":"address"},{"internalType":"uint256","name":"epsSkipMarket","type":"uint256"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"normalFills","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"flashFills","type":"tuple[]"},{"internalType":"bytes","name":"optData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.LimitOrderData","name":"limit","type":"tuple"}],"name":"swapExactSyForPt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"uint256","name":"guessMin","type":"uint256"},{"internalType":"uint256","name":"guessMax","type":"uint256"},{"internalType":"uint256","name":"guessOffchain","type":"uint256"},{"internalType":"uint256","name":"maxIteration","type":"uint256"},{"internalType":"uint256","name":"eps","type":"uint256"}],"internalType":"struct DecoderCustomTypes.ApproxParams","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"limitRouter","type":"address"},{"internalType":"uint256","name":"epsSkipMarket","type":"uint256"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"normalFills","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"flashFills","type":"tuple[]"},{"internalType":"bytes","name":"optData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.LimitOrderData","name":"limit","type":"tuple"}],"name":"swapExactSyForYt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"uint256","name":"guessMin","type":"uint256"},{"internalType":"uint256","name":"guessMax","type":"uint256"},{"internalType":"uint256","name":"guessOffchain","type":"uint256"},{"internalType":"uint256","name":"maxIteration","type":"uint256"},{"internalType":"uint256","name":"eps","type":"uint256"}],"internalType":"struct DecoderCustomTypes.ApproxParams","name":"","type":"tuple"}],"name":"swapExactYtForPt","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"market","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"components":[{"internalType":"address","name":"limitRouter","type":"address"},{"internalType":"uint256","name":"epsSkipMarket","type":"uint256"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"normalFills","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"enum DecoderCustomTypes.OrderType","name":"orderType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"YT","type":"address"},{"internalType":"address","name":"maker","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"makingAmount","type":"uint256"},{"internalType":"uint256","name":"lnImpliedRate","type":"uint256"},{"internalType":"uint256","name":"failSafeRate","type":"uint256"},{"internalType":"bytes","name":"permit","type":"bytes"}],"internalType":"struct DecoderCustomTypes.Order","name":"order","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"makingAmount","type":"uint256"}],"internalType":"struct DecoderCustomTypes.FillOrderParams[]","name":"flashFills","type":"tuple[]"},{"internalType":"bytes","name":"optData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.LimitOrderData","name":"limit","type":"tuple"}],"name":"swapExactYtForSy","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b506110d7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636122b1731161008c57806397ee279e1161006657806397ee279e14610177578063b7d75b8b14610177578063c861a89814610151578063f7e375e81461018557600080fd5b80636122b173146101645780637b8b4b951461011857806380c4d5661461013e57600080fd5b80633346d3a3116100c85780633346d3a31461013e578063339748cb146100ef578063339a55721461012b578063448b9b951461015157600080fd5b80631a8631b2146100ef5780632a50917c146101185780632e071dc61461012b575b600080fd5b6101026100fd366004610a16565b610198565b60405161010f9190610a7c565b60405180910390f35b610102610126366004610ac1565b6101d8565b610102610139366004610b45565b610212565b61010261014c366004610bad565b61038d565b61010261015f366004610c1f565b6103c6565b610102610172366004610d06565b6103f1565b61010261015f366004610dbd565b610102610193366004610e0a565b6105c2565b604051606085811b6001600160601b0319908116602084015285821b166034830152906048015b6040516020818303038152906040529050949350505050565b606086866101e584610732565b6040516020016101f793929190610eb5565b60405160208183030381529060405290509695505050505050565b606060006102236080840184610f11565b610231906020810190610f31565b600381111561024257610242610efb565b141580610276575060006102596080840184610f11565b61026a906040810190602001610f59565b6001600160a01b031614155b8061029a5750600061028e6080840160608501610f59565b6001600160a01b031614155b806102d257506102b06060830160408401610f59565b6001600160a01b03166102c66020840184610f59565b6001600160a01b031614155b156102f05760405163d368eff560e01b815260040160405180910390fd5b84846102ff6020850185610f59565b61030f6060860160408701610f59565b61031f6080870160608801610f59565b61032c6080880188610f11565b61033d906040810190602001610f59565b6040516001600160601b0319606097881b8116602083015295871b8616603482015293861b8516604885015291851b8416605c840152841b8316607083015290921b1660848201526098016101bf565b6060858561039a84610732565b6040516020016103ac93929190610eb5565b604051602081830303815290604052905095945050505050565b604051606086811b6001600160601b0319908116602084015286821b166034830152906048016103ac565b60608315158061040057508115155b1561041e576040516382cc44c960e01b815260040160405180910390fd5b6040516001600160601b0319606089901b16602082015260340160405160208183030381529060405290506000805b89811015610580576001600160a01b0382166104a9578a8a8281811061047557610475610f74565b90506020028101906104879190610f8a565b6104919080610fa0565b6104a29060c081019060a001610f59565b9150610570565b8a8a828181106104bb576104bb610f74565b90506020028101906104cd9190610f8a565b6104d79080610fa0565b6104e89060c081019060a001610f59565b6001600160a01b0316826001600160a01b031614610570578a8a8281811061051257610512610f74565b90506020028101906105249190610f8a565b61052e9080610fa0565b61053f9060c081019060a001610f59565b60405163f071183b60e01b81526001600160a01b039182166004820152908316602482015260440160405180910390fd5b61057981610fb7565b905061044d565b506001600160a01b038116156105b55781816040516020016105a3929190610fde565b60405160208183030381529060405291505b5098975050505050505050565b604080516001600160601b031960608a901b1660208201528151601481830301815260349091019091528560005b81811015610653578289898381811061060b5761060b610f74565b90506020020160208101906106209190610f59565b604051602001610631929190610fde565b60405160208183030381529060405292508061064c90610fb7565b90506105f0565b508460005b818110156106bb578388888381811061067357610673610f74565b90506020020160208101906106889190610f59565b604051602001610699929190610fde565b6040516020818303038152906040529350806106b490610fb7565b9050610658565b508360005b8181101561072357848787838181106106db576106db610f74565b90506020020160208101906106f09190610f59565b604051602001610701929190610fde565b60405160208183030381529060405294508061071c90610fb7565b90506106c0565b50505050979650505050505050565b606060006107436020840184610f59565b6001600160a01b0316146109fa5761075e6020830183610f59565b604051602001610781919060609190911b6001600160601b031916815260140190565b60408051601f19818403018152919052905060006107a26080840184611010565b905011156107c3576040516382cc44c960e01b815260040160405180910390fd5b6000805b6107d46040850185611057565b90508110156108cb576001600160a01b03821661083c576107f86040850185611057565b8281811061080857610808610f74565b905060200281019061081a9190610f8a565b6108249080610fa0565b6108359060c081019060a001610f59565b91506108bb565b6108496040850185611057565b8281811061085957610859610f74565b905060200281019061086b9190610f8a565b6108759080610fa0565b6108869060c081019060a001610f59565b6001600160a01b0316826001600160a01b0316146108bb576108ab6040850185611057565b8281811061051257610512610f74565b6108c481610fb7565b90506107c7565b5060005b6108dc6060850185611057565b90508110156109c3576001600160a01b038216610944576109006060850185611057565b8281811061091057610910610f74565b90506020028101906109229190610f8a565b61092c9080610fa0565b61093d9060c081019060a001610f59565b91506109b3565b6109516060850185611057565b8281811061096157610961610f74565b90506020028101906109739190610f8a565b61097d9080610fa0565b61098e9060c081019060a001610f59565b6001600160a01b0316826001600160a01b0316146109b3576108ab6060850185611057565b6109bc81610fb7565b90506108cf565b506001600160a01b038116156109f85781816040516020016109e6929190610fde565b60405160208183030381529060405291505b505b919050565b80356001600160a01b03811681146109fa57600080fd5b60008060008060808587031215610a2c57600080fd5b610a35856109ff565b9350610a43602086016109ff565b93969395505050506040820135916060013590565b60005b83811015610a73578181015183820152602001610a5b565b50506000910152565b6020815260008251806020840152610a9b816040850160208701610a58565b601f01601f19169190910160400192915050565b600060a082840312156109f857600080fd5b6000806000806000806101408789031215610adb57600080fd5b610ae4876109ff565b9550610af2602088016109ff565b94506040870135935060608701359250610b0f8860808901610aaf565b915061012087013567ffffffffffffffff811115610b2c57600080fd5b610b3889828a01610aaf565b9150509295509295509295565b60008060008060808587031215610b5b57600080fd5b610b64856109ff565b9350610b72602086016109ff565b925060408501359150606085013567ffffffffffffffff811115610b9557600080fd5b610ba187828801610aaf565b91505092959194509250565b600080600080600060a08688031215610bc557600080fd5b610bce866109ff565b9450610bdc602087016109ff565b93506040860135925060608601359150608086013567ffffffffffffffff811115610c0657600080fd5b610c1288828901610aaf565b9150509295509295909350565b60008060008060006101208688031215610c3857600080fd5b610c41866109ff565b9450610c4f602087016109ff565b93506040860135925060608601359150610c6c8760808801610aaf565b90509295509295909350565b60008083601f840112610c8a57600080fd5b50813567ffffffffffffffff811115610ca257600080fd5b6020830191508360208260051b8501011115610cbd57600080fd5b9250929050565b60008083601f840112610cd657600080fd5b50813567ffffffffffffffff811115610cee57600080fd5b602083019150836020828501011115610cbd57600080fd5b60008060008060008060008060a0898b031215610d2257600080fd5b883567ffffffffffffffff80821115610d3a57600080fd5b610d468c838d01610c78565b909a509850889150610d5a60208c016109ff565b975060408b0135965060608b0135915080821115610d7757600080fd5b610d838c838d01610cc4565b909650945060808b0135915080821115610d9c57600080fd5b50610da98b828c01610cc4565b999c989b5096995094979396929594505050565b600080600080600060a08688031215610dd557600080fd5b610dde866109ff565b9450610dec602087016109ff565b94979496505050506040830135926060810135926080909101359150565b60008060008060008060006080888a031215610e2557600080fd5b610e2e886109ff565b9650602088013567ffffffffffffffff80821115610e4b57600080fd5b610e578b838c01610c78565b909850965060408a0135915080821115610e7057600080fd5b610e7c8b838c01610c78565b909650945060608a0135915080821115610e9557600080fd5b50610ea28a828b01610c78565b989b979a50959850939692959293505050565b60006bffffffffffffffffffffffff19808660601b168352808560601b166014840152508251610eec816028850160208701610a58565b91909101602801949350505050565b634e487b7160e01b600052602160045260246000fd5b60008235607e19833603018112610f2757600080fd5b9190910192915050565b600060208284031215610f4357600080fd5b813560048110610f5257600080fd5b9392505050565b600060208284031215610f6b57600080fd5b610f52826109ff565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112610f2757600080fd5b6000823561017e19833603018112610f2757600080fd5b600060018201610fd757634e487b7160e01b600052601160045260246000fd5b5060010190565b60008351610ff0818460208801610a58565b60609390931b6001600160601b0319169190920190815260140192915050565b6000808335601e1984360301811261102757600080fd5b83018035915067ffffffffffffffff82111561104257600080fd5b602001915036819003821315610cbd57600080fd5b6000808335601e1984360301811261106e57600080fd5b83018035915067ffffffffffffffff82111561108957600080fd5b6020019150600581901b3603821315610cbd57600080fdfea2646970667358221220948305c978db90f55bb144120d5d038149d36624ea248a2756354065eefa8a8364736f6c63430008150033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636122b1731161008c57806397ee279e1161006657806397ee279e14610177578063b7d75b8b14610177578063c861a89814610151578063f7e375e81461018557600080fd5b80636122b173146101645780637b8b4b951461011857806380c4d5661461013e57600080fd5b80633346d3a3116100c85780633346d3a31461013e578063339748cb146100ef578063339a55721461012b578063448b9b951461015157600080fd5b80631a8631b2146100ef5780632a50917c146101185780632e071dc61461012b575b600080fd5b6101026100fd366004610a16565b610198565b60405161010f9190610a7c565b60405180910390f35b610102610126366004610ac1565b6101d8565b610102610139366004610b45565b610212565b61010261014c366004610bad565b61038d565b61010261015f366004610c1f565b6103c6565b610102610172366004610d06565b6103f1565b61010261015f366004610dbd565b610102610193366004610e0a565b6105c2565b604051606085811b6001600160601b0319908116602084015285821b166034830152906048015b6040516020818303038152906040529050949350505050565b606086866101e584610732565b6040516020016101f793929190610eb5565b60405160208183030381529060405290509695505050505050565b606060006102236080840184610f11565b610231906020810190610f31565b600381111561024257610242610efb565b141580610276575060006102596080840184610f11565b61026a906040810190602001610f59565b6001600160a01b031614155b8061029a5750600061028e6080840160608501610f59565b6001600160a01b031614155b806102d257506102b06060830160408401610f59565b6001600160a01b03166102c66020840184610f59565b6001600160a01b031614155b156102f05760405163d368eff560e01b815260040160405180910390fd5b84846102ff6020850185610f59565b61030f6060860160408701610f59565b61031f6080870160608801610f59565b61032c6080880188610f11565b61033d906040810190602001610f59565b6040516001600160601b0319606097881b8116602083015295871b8616603482015293861b8516604885015291851b8416605c840152841b8316607083015290921b1660848201526098016101bf565b6060858561039a84610732565b6040516020016103ac93929190610eb5565b604051602081830303815290604052905095945050505050565b604051606086811b6001600160601b0319908116602084015286821b166034830152906048016103ac565b60608315158061040057508115155b1561041e576040516382cc44c960e01b815260040160405180910390fd5b6040516001600160601b0319606089901b16602082015260340160405160208183030381529060405290506000805b89811015610580576001600160a01b0382166104a9578a8a8281811061047557610475610f74565b90506020028101906104879190610f8a565b6104919080610fa0565b6104a29060c081019060a001610f59565b9150610570565b8a8a828181106104bb576104bb610f74565b90506020028101906104cd9190610f8a565b6104d79080610fa0565b6104e89060c081019060a001610f59565b6001600160a01b0316826001600160a01b031614610570578a8a8281811061051257610512610f74565b90506020028101906105249190610f8a565b61052e9080610fa0565b61053f9060c081019060a001610f59565b60405163f071183b60e01b81526001600160a01b039182166004820152908316602482015260440160405180910390fd5b61057981610fb7565b905061044d565b506001600160a01b038116156105b55781816040516020016105a3929190610fde565b60405160208183030381529060405291505b5098975050505050505050565b604080516001600160601b031960608a901b1660208201528151601481830301815260349091019091528560005b81811015610653578289898381811061060b5761060b610f74565b90506020020160208101906106209190610f59565b604051602001610631929190610fde565b60405160208183030381529060405292508061064c90610fb7565b90506105f0565b508460005b818110156106bb578388888381811061067357610673610f74565b90506020020160208101906106889190610f59565b604051602001610699929190610fde565b6040516020818303038152906040529350806106b490610fb7565b9050610658565b508360005b8181101561072357848787838181106106db576106db610f74565b90506020020160208101906106f09190610f59565b604051602001610701929190610fde565b60405160208183030381529060405294508061071c90610fb7565b90506106c0565b50505050979650505050505050565b606060006107436020840184610f59565b6001600160a01b0316146109fa5761075e6020830183610f59565b604051602001610781919060609190911b6001600160601b031916815260140190565b60408051601f19818403018152919052905060006107a26080840184611010565b905011156107c3576040516382cc44c960e01b815260040160405180910390fd5b6000805b6107d46040850185611057565b90508110156108cb576001600160a01b03821661083c576107f86040850185611057565b8281811061080857610808610f74565b905060200281019061081a9190610f8a565b6108249080610fa0565b6108359060c081019060a001610f59565b91506108bb565b6108496040850185611057565b8281811061085957610859610f74565b905060200281019061086b9190610f8a565b6108759080610fa0565b6108869060c081019060a001610f59565b6001600160a01b0316826001600160a01b0316146108bb576108ab6040850185611057565b8281811061051257610512610f74565b6108c481610fb7565b90506107c7565b5060005b6108dc6060850185611057565b90508110156109c3576001600160a01b038216610944576109006060850185611057565b8281811061091057610910610f74565b90506020028101906109229190610f8a565b61092c9080610fa0565b61093d9060c081019060a001610f59565b91506109b3565b6109516060850185611057565b8281811061096157610961610f74565b90506020028101906109739190610f8a565b61097d9080610fa0565b61098e9060c081019060a001610f59565b6001600160a01b0316826001600160a01b0316146109b3576108ab6060850185611057565b6109bc81610fb7565b90506108cf565b506001600160a01b038116156109f85781816040516020016109e6929190610fde565b60405160208183030381529060405291505b505b919050565b80356001600160a01b03811681146109fa57600080fd5b60008060008060808587031215610a2c57600080fd5b610a35856109ff565b9350610a43602086016109ff565b93969395505050506040820135916060013590565b60005b83811015610a73578181015183820152602001610a5b565b50506000910152565b6020815260008251806020840152610a9b816040850160208701610a58565b601f01601f19169190910160400192915050565b600060a082840312156109f857600080fd5b6000806000806000806101408789031215610adb57600080fd5b610ae4876109ff565b9550610af2602088016109ff565b94506040870135935060608701359250610b0f8860808901610aaf565b915061012087013567ffffffffffffffff811115610b2c57600080fd5b610b3889828a01610aaf565b9150509295509295509295565b60008060008060808587031215610b5b57600080fd5b610b64856109ff565b9350610b72602086016109ff565b925060408501359150606085013567ffffffffffffffff811115610b9557600080fd5b610ba187828801610aaf565b91505092959194509250565b600080600080600060a08688031215610bc557600080fd5b610bce866109ff565b9450610bdc602087016109ff565b93506040860135925060608601359150608086013567ffffffffffffffff811115610c0657600080fd5b610c1288828901610aaf565b9150509295509295909350565b60008060008060006101208688031215610c3857600080fd5b610c41866109ff565b9450610c4f602087016109ff565b93506040860135925060608601359150610c6c8760808801610aaf565b90509295509295909350565b60008083601f840112610c8a57600080fd5b50813567ffffffffffffffff811115610ca257600080fd5b6020830191508360208260051b8501011115610cbd57600080fd5b9250929050565b60008083601f840112610cd657600080fd5b50813567ffffffffffffffff811115610cee57600080fd5b602083019150836020828501011115610cbd57600080fd5b60008060008060008060008060a0898b031215610d2257600080fd5b883567ffffffffffffffff80821115610d3a57600080fd5b610d468c838d01610c78565b909a509850889150610d5a60208c016109ff565b975060408b0135965060608b0135915080821115610d7757600080fd5b610d838c838d01610cc4565b909650945060808b0135915080821115610d9c57600080fd5b50610da98b828c01610cc4565b999c989b5096995094979396929594505050565b600080600080600060a08688031215610dd557600080fd5b610dde866109ff565b9450610dec602087016109ff565b94979496505050506040830135926060810135926080909101359150565b60008060008060008060006080888a031215610e2557600080fd5b610e2e886109ff565b9650602088013567ffffffffffffffff80821115610e4b57600080fd5b610e578b838c01610c78565b909850965060408a0135915080821115610e7057600080fd5b610e7c8b838c01610c78565b909650945060608a0135915080821115610e9557600080fd5b50610ea28a828b01610c78565b989b979a50959850939692959293505050565b60006bffffffffffffffffffffffff19808660601b168352808560601b166014840152508251610eec816028850160208701610a58565b91909101602801949350505050565b634e487b7160e01b600052602160045260246000fd5b60008235607e19833603018112610f2757600080fd5b9190910192915050565b600060208284031215610f4357600080fd5b813560048110610f5257600080fd5b9392505050565b600060208284031215610f6b57600080fd5b610f52826109ff565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112610f2757600080fd5b6000823561017e19833603018112610f2757600080fd5b600060018201610fd757634e487b7160e01b600052601160045260246000fd5b5060010190565b60008351610ff0818460208801610a58565b60609390931b6001600160601b0319169190920190815260140192915050565b6000808335601e1984360301811261102757600080fd5b83018035915067ffffffffffffffff82111561104257600080fd5b602001915036819003821315610cbd57600080fd5b6000808335601e1984360301811261106e57600080fd5b83018035915067ffffffffffffffff82111561108957600080fd5b6020019150600581901b3603821315610cbd57600080fdfea2646970667358221220948305c978db90f55bb144120d5d038149d36624ea248a2756354065eefa8a8364736f6c63430008150033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 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.