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 | |||
|---|---|---|---|---|---|---|
| 10292553 | 74 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BalancerV2DecoderAndSanitizer
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: SEL-1.0
// Copyright © 2025 Veda Tech Labs
// Derived from Boring Vault Software © 2025 Veda Tech Labs (TEST ONLY – NO COMMERCIAL USE)
// Licensed under Software Evaluation License, Version 1.0
pragma solidity 0.8.21;
import {DecoderCustomTypes} from "src/interfaces/DecoderCustomTypes.sol";
contract BalancerV2DecoderAndSanitizer {
//============================== ERRORS ===============================
error BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero();
error BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported();
//============================== BALANCER V2 ===============================
function flashLoan(address recipient, address[] calldata tokens, uint256[] calldata, bytes calldata)
external
pure
virtual
returns (bytes memory addressesFound)
{
addressesFound = abi.encodePacked(recipient);
for (uint256 i; i < tokens.length; ++i) {
addressesFound = abi.encodePacked(addressesFound, tokens[i]);
}
}
function swap(
DecoderCustomTypes.SingleSwap calldata singleSwap,
DecoderCustomTypes.FundManagement calldata funds,
uint256,
uint256
) external pure virtual returns (bytes memory addressesFound) {
// Sanitize raw data
if (singleSwap.userData.length > 0) revert BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero();
if (funds.fromInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported();
if (funds.toInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported();
// Return addresses found
addressesFound = abi.encodePacked(
_getPoolAddressFromPoolId(singleSwap.poolId),
singleSwap.assetIn,
singleSwap.assetOut,
funds.sender,
funds.recipient
);
}
function joinPool(
bytes32 poolId,
address sender,
address recipient,
DecoderCustomTypes.JoinPoolRequest calldata req
) external pure virtual returns (bytes memory addressesFound) {
// Sanitize raw data
if (req.fromInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported();
// Return addresses found
addressesFound = abi.encodePacked(_getPoolAddressFromPoolId(poolId), sender, recipient);
uint256 assetsLength = req.assets.length;
for (uint256 i; i < assetsLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, req.assets[i]);
}
}
function exitPool(
bytes32 poolId,
address sender,
address recipient,
DecoderCustomTypes.ExitPoolRequest calldata req
) external pure virtual returns (bytes memory addressesFound) {
// Sanitize raw data
if (req.toInternalBalance) revert BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported();
// Return addresses found
addressesFound = abi.encodePacked(_getPoolAddressFromPoolId(poolId), sender, recipient);
uint256 assetsLength = req.assets.length;
for (uint256 i; i < assetsLength; ++i) {
addressesFound = abi.encodePacked(addressesFound, req.assets[i]);
}
}
function deposit(uint256, address recipient) external pure virtual returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(recipient);
}
function withdraw(uint256) external pure virtual returns (bytes memory addressesFound) {
// No addresses in data
return addressesFound;
}
function mint(address gauge) external pure virtual returns (bytes memory addressesFound) {
addressesFound = abi.encodePacked(gauge);
}
// ========================================= INTERNAL HELPER FUNCTIONS =========================================
/**
* @notice Internal helper function that converts poolIds to pool addresses.
*/
function _getPoolAddressFromPoolId(bytes32 poolId) internal pure returns (address) {
return address(uint160(uint256(poolId >> 96)));
}
}// SPDX-License-Identifier: SEL-1.0
// Copyright © 2025 Veda Tech Labs
// Derived from Boring Vault Software © 2025 Veda Tech Labs (TEST ONLY – NO COMMERCIAL USE)
// Licensed under Software Evaluation License, Version 1.0
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;
}
// ========================================= Valantis ==================================
struct DirectSwapParams {
bool[] isUniversalPool;
address[] pools;
uint256[] amountInSpecified;
bytes[] payloads;
bool isTokenOutEth;
address tokenIn;
address tokenOut;
address recipient;
uint256 amountOutMin;
uint256 deadline;
bytes32 code;
}
struct UniversalPoolSwapPayload {
bool isZeroToOne;
address recipient;
int24 limitPriceTick;
uint256 amountOutMin;
uint8[] almOrdering;
bytes[] externalContext;
bytes swapFeeModuleContext;
}
/**
* @notice Internal struct used for single swap payloads in Sovereign pools.
*/
struct SovereignPoolSwapPayload {
bool isZeroToOne;
address recipient;
address swapTokenOut;
uint256 amountOutMin;
bytes externalContext;
bytes verificationContext;
bytes swapFeeModuleContext;
}
struct SovereignPoolSwapContextData {
bytes externalContext;
bytes verifierContext;
bytes swapCallbackContext;
bytes swapFeeModuleContext;
}
struct SovereignPoolSwapParams {
bool isSwapCallback;
bool isZeroToOne;
uint256 amountIn;
uint256 amountOutMin;
uint256 deadline;
address recipient;
address swapTokenOut;
SovereignPoolSwapContextData swapContext;
}
struct UniversalSwapParams {
bool isZeroToOne;
bool isSwapCallback;
int24 limitPriceTick;
address recipient;
uint256 amountIn;
uint256 amountOutMin;
uint256 deadline;
bytes swapCallbackContext;
bytes swapFeeModuleContext;
uint8[] almOrdering;
bytes[] externalContext;
}
}{
"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/",
"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
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"BalancerV2DecoderAndSanitizer__InternalBalancesNotSupported","type":"error"},{"inputs":[],"name":"BalancerV2DecoderAndSanitizer__SingleSwapUserDataLengthNonZero","type":"error"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"deposit","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bool","name":"toInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.ExitPoolRequest","name":"req","type":"tuple"}],"name":"exitPool","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"},{"internalType":"bool","name":"fromInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.JoinPoolRequest","name":"req","type":"tuple"}],"name":"joinPool","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"gauge","type":"address"}],"name":"mint","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"enum DecoderCustomTypes.SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct DecoderCustomTypes.SingleSwap","name":"singleSwap","type":"tuple"},{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"bool","name":"fromInternalBalance","type":"bool"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"toInternalBalance","type":"bool"}],"internalType":"struct DecoderCustomTypes.FundManagement","name":"funds","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bytes","name":"addressesFound","type":"bytes"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610977806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a6278421161005b5780636a627842146100d25780636e553f65146101115780638bdb391314610151578063b95cac281461016457600080fd5b80632e1a7d4d1461008257806352bbbe29146100ac5780635c38449e146100bf575b600080fd5b61009661009036600461053e565b50606090565b6040516100a3919061057b565b60405180910390f35b6100966100ba3660046105c6565b610177565b6100966100cd366004610691565b6102a2565b6100966100e0366004610769565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b61009661011f36600461078b565b604051606082811b6001600160601b031916602083015290603401604051602081830303815290604052905092915050565b61009661015f3660046107b7565b610340565b6100966101723660046107b7565b610444565b6060600061018860a087018761081f565b905011156101a957604051634c560fcb60e01b815260040160405180910390fd5b6101b96040850160208601610866565b156101d757604051633a68367b60e01b815260040160405180910390fd5b6101e76080850160608601610866565b1561020557604051633a68367b60e01b815260040160405180910390fd5b843560601c61021a6060870160408801610769565b61022a6080880160608901610769565b6102376020880188610769565b6102476060890160408a01610769565b6040516001600160601b0319606096871b8116602083015294861b8516603482015292851b8416604884015290841b8316605c83015290921b1660708201526084016040516020818303038152906040529050949350505050565b604051606088811b6001600160601b031916602083015290603401604051602081830303815290604052905060005b8681101561033457818888838181106102ec576102ec610888565b90506020020160208101906103019190610769565b60405160200161031292919061089e565b60405160208183030381529060405291508061032d906108d0565b90506102d1565b50979650505050505050565b606061035160808301838301610866565b1561036f57604051633a68367b60e01b815260040160405180910390fd5b6103798560601c90565b6040516001600160601b0319606092831b8116602083015286831b811660348301529185901b9091166048820152605c0160408051601f19818403018152919052905060006103c883806108f7565b9050905060005b8181101561043a57826103e285806108f7565b838181106103f2576103f2610888565b90506020020160208101906104079190610769565b60405160200161041892919061089e565b604051602081830303815290604052925080610433906108d0565b90506103cf565b5050949350505050565b606061045560808301838301610866565b1561047357604051633a68367b60e01b815260040160405180910390fd5b61047d8560601c90565b6040516001600160601b0319606092831b8116602083015286831b811660348301529185901b9091166048820152605c0160408051601f19818403018152919052905060006104cc83806108f7565b9050905060005b8181101561043a57826104e685806108f7565b838181106104f6576104f6610888565b905060200201602081019061050b9190610769565b60405160200161051c92919061089e565b604051602081830303815290604052925080610537906108d0565b90506104d3565b60006020828403121561055057600080fd5b5035919050565b60005b8381101561057257818101518382015260200161055a565b50506000910152565b602081526000825180602084015261059a816040850160208701610557565b601f01601f19169190910160400192915050565b6000608082840312156105c057600080fd5b50919050565b60008060008060e085870312156105dc57600080fd5b843567ffffffffffffffff8111156105f357600080fd5b850160c0818803121561060557600080fd5b935061061486602087016105ae565b939693955050505060a08201359160c0013590565b80356001600160a01b038116811461064057600080fd5b919050565b60008083601f84011261065757600080fd5b50813567ffffffffffffffff81111561066f57600080fd5b6020830191508360208260051b850101111561068a57600080fd5b9250929050565b60008060008060008060006080888a0312156106ac57600080fd5b6106b588610629565b9650602088013567ffffffffffffffff808211156106d257600080fd5b6106de8b838c01610645565b909850965060408a01359150808211156106f757600080fd5b6107038b838c01610645565b909650945060608a013591508082111561071c57600080fd5b818a0191508a601f83011261073057600080fd5b81358181111561073f57600080fd5b8b602082850101111561075157600080fd5b60208301945080935050505092959891949750929550565b60006020828403121561077b57600080fd5b61078482610629565b9392505050565b6000806040838503121561079e57600080fd5b823591506107ae60208401610629565b90509250929050565b600080600080608085870312156107cd57600080fd5b843593506107dd60208601610629565b92506107eb60408601610629565b9150606085013567ffffffffffffffff81111561080757600080fd5b610813878288016105ae565b91505092959194509250565b6000808335601e1984360301811261083657600080fd5b83018035915067ffffffffffffffff82111561085157600080fd5b60200191503681900382131561068a57600080fd5b60006020828403121561087857600080fd5b8135801515811461078457600080fd5b634e487b7160e01b600052603260045260246000fd5b600083516108b0818460208801610557565b60609390931b6001600160601b0319169190920190815260140192915050565b6000600182016108f057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e1984360301811261090e57600080fd5b83018035915067ffffffffffffffff82111561092957600080fd5b6020019150600581901b360382131561068a57600080fdfea26469706673582212204be6ac812165e85370020a115b6e65e4935b93602eb71b7c20e0bd265d1b784364736f6c63430008150033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80636a6278421161005b5780636a627842146100d25780636e553f65146101115780638bdb391314610151578063b95cac281461016457600080fd5b80632e1a7d4d1461008257806352bbbe29146100ac5780635c38449e146100bf575b600080fd5b61009661009036600461053e565b50606090565b6040516100a3919061057b565b60405180910390f35b6100966100ba3660046105c6565b610177565b6100966100cd366004610691565b6102a2565b6100966100e0366004610769565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b61009661011f36600461078b565b604051606082811b6001600160601b031916602083015290603401604051602081830303815290604052905092915050565b61009661015f3660046107b7565b610340565b6100966101723660046107b7565b610444565b6060600061018860a087018761081f565b905011156101a957604051634c560fcb60e01b815260040160405180910390fd5b6101b96040850160208601610866565b156101d757604051633a68367b60e01b815260040160405180910390fd5b6101e76080850160608601610866565b1561020557604051633a68367b60e01b815260040160405180910390fd5b843560601c61021a6060870160408801610769565b61022a6080880160608901610769565b6102376020880188610769565b6102476060890160408a01610769565b6040516001600160601b0319606096871b8116602083015294861b8516603482015292851b8416604884015290841b8316605c83015290921b1660708201526084016040516020818303038152906040529050949350505050565b604051606088811b6001600160601b031916602083015290603401604051602081830303815290604052905060005b8681101561033457818888838181106102ec576102ec610888565b90506020020160208101906103019190610769565b60405160200161031292919061089e565b60405160208183030381529060405291508061032d906108d0565b90506102d1565b50979650505050505050565b606061035160808301838301610866565b1561036f57604051633a68367b60e01b815260040160405180910390fd5b6103798560601c90565b6040516001600160601b0319606092831b8116602083015286831b811660348301529185901b9091166048820152605c0160408051601f19818403018152919052905060006103c883806108f7565b9050905060005b8181101561043a57826103e285806108f7565b838181106103f2576103f2610888565b90506020020160208101906104079190610769565b60405160200161041892919061089e565b604051602081830303815290604052925080610433906108d0565b90506103cf565b5050949350505050565b606061045560808301838301610866565b1561047357604051633a68367b60e01b815260040160405180910390fd5b61047d8560601c90565b6040516001600160601b0319606092831b8116602083015286831b811660348301529185901b9091166048820152605c0160408051601f19818403018152919052905060006104cc83806108f7565b9050905060005b8181101561043a57826104e685806108f7565b838181106104f6576104f6610888565b905060200201602081019061050b9190610769565b60405160200161051c92919061089e565b604051602081830303815290604052925080610537906108d0565b90506104d3565b60006020828403121561055057600080fd5b5035919050565b60005b8381101561057257818101518382015260200161055a565b50506000910152565b602081526000825180602084015261059a816040850160208701610557565b601f01601f19169190910160400192915050565b6000608082840312156105c057600080fd5b50919050565b60008060008060e085870312156105dc57600080fd5b843567ffffffffffffffff8111156105f357600080fd5b850160c0818803121561060557600080fd5b935061061486602087016105ae565b939693955050505060a08201359160c0013590565b80356001600160a01b038116811461064057600080fd5b919050565b60008083601f84011261065757600080fd5b50813567ffffffffffffffff81111561066f57600080fd5b6020830191508360208260051b850101111561068a57600080fd5b9250929050565b60008060008060008060006080888a0312156106ac57600080fd5b6106b588610629565b9650602088013567ffffffffffffffff808211156106d257600080fd5b6106de8b838c01610645565b909850965060408a01359150808211156106f757600080fd5b6107038b838c01610645565b909650945060608a013591508082111561071c57600080fd5b818a0191508a601f83011261073057600080fd5b81358181111561073f57600080fd5b8b602082850101111561075157600080fd5b60208301945080935050505092959891949750929550565b60006020828403121561077b57600080fd5b61078482610629565b9392505050565b6000806040838503121561079e57600080fd5b823591506107ae60208401610629565b90509250929050565b600080600080608085870312156107cd57600080fd5b843593506107dd60208601610629565b92506107eb60408601610629565b9150606085013567ffffffffffffffff81111561080757600080fd5b610813878288016105ae565b91505092959194509250565b6000808335601e1984360301811261083657600080fd5b83018035915067ffffffffffffffff82111561085157600080fd5b60200191503681900382131561068a57600080fd5b60006020828403121561087857600080fd5b8135801515811461078457600080fd5b634e487b7160e01b600052603260045260246000fd5b600083516108b0818460208801610557565b60609390931b6001600160601b0319169190920190815260140192915050565b6000600182016108f057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e1984360301811261090e57600080fd5b83018035915067ffffffffffffffff82111561092957600080fd5b6020019150600581901b360382131561068a57600080fdfea26469706673582212204be6ac812165e85370020a115b6e65e4935b93602eb71b7c20e0bd265d1b784364736f6c63430008150033
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.