Source Code
Overview
MON Balance
MON Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CurvePoolConnector
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { ICurvePool } from "contracts/interfaces/external/curve/ICurvePool.sol";
import {
ILiquidityConnector,
AddLiquidityParams,
RemoveLiquidityParams
} from "contracts/interfaces/ILiquidityConnector.sol";
import { IFarmConnector, Farm } from "contracts/interfaces/IFarmConnector.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
struct CurveAddLiquidityExtraData {
uint256 minMintAmount;
}
interface IERC20Decimals {
function decimals() external view returns (uint8);
}
contract CurvePoolConnector is ILiquidityConnector, IFarmConnector {
error NotSupported();
function addLiquidity(
AddLiquidityParams memory addLiquidityParams
) external override {
CurveAddLiquidityExtraData memory extraData = abi.decode(
addLiquidityParams.extraData, (CurveAddLiquidityExtraData)
);
ICurvePool(addLiquidityParams.router).add_liquidity(
addLiquidityParams.desiredAmounts, extraData.minMintAmount
);
}
function removeLiquidity(
RemoveLiquidityParams memory removeLiquidityParams
) external override {
ICurvePool(removeLiquidityParams.router).remove_liquidity(
removeLiquidityParams.lpAmountIn,
removeLiquidityParams.minAmountsOut
);
}
function getPoolPrice(
address lpToken,
uint256 baseTokenIndex,
uint256 quoteTokenIndex
) external view override returns (uint256 price) {
address baseToken = ICurvePool(lpToken).coins(baseTokenIndex);
uint256 baseTokenDecimals = IERC20Decimals(baseToken).decimals();
address quoteToken = ICurvePool(lpToken).coins(quoteTokenIndex);
uint256 quoteTokenDecimals = IERC20Decimals(quoteToken).decimals();
uint256 amountOut0 = ICurvePool(lpToken).get_dy(
int128(uint128(baseTokenIndex)),
int128(uint128(quoteTokenIndex)),
10 ** baseTokenDecimals
);
// We swap e.g. 1e18 DAI for USDC. This will return 1e6 USDC.
// The price is 1e-12 USDC wei for wei or 1e18 normalized (1e6 USDC per
// 1e18 DAI, price is 1e18).
// We swap e.g. 1e6 USDC for DAI. This will return 1e12 DAI.
// The price is 1e12 DAI wei for wei or 1e18 normalized (1e18 DAI per
// 1e6 USDC, price is 1e18).
if (amountOut0 > 0) {
price = amountOut0 * 10 ** (18 - quoteTokenDecimals);
} else {
// e.g. 1e18 of base token is < 1 wei of quote token
uint256 amountOut1 = ICurvePool(lpToken).get_dy(
int128(uint128(quoteTokenIndex)),
int128(uint128(baseTokenIndex)),
10 ** quoteTokenDecimals
);
if (amountOut1 == 0) {
revert InvalidPrice();
}
price = 1e36 / (amountOut1 * 10 ** (18 - baseTokenDecimals));
}
if (price == 0) {
revert InvalidPrice();
}
}
function getReserves(
address lpToken
) external view override returns (uint256[] memory reserves) {
reserves = ICurvePool(lpToken).get_balances();
}
function getTokens(
address lpToken
) external view override returns (address[] memory tokens) {
tokens = new address[](ICurvePool(lpToken).N_COINS());
for (uint256 i = 0; i < tokens.length; i++) {
tokens[i] = ICurvePool(lpToken).coins(i);
}
}
// IFarmConnector implementation - no-op for pools without gauges
// LP tokens stay in the caller's wallet (Sickle)
function deposit(
Farm calldata, // farm
address, // token
bytes memory // _extraData
) external pure override {
// No-op: LP tokens stay in the caller's wallet
}
function withdraw(
Farm calldata, // farm
uint256, // amount
bytes memory // _extraData
) external pure override {
// No-op: LP tokens are already in the caller's wallet
}
function claim(
Farm calldata, // farm
bytes memory // extraData
) external pure override {
// No-op: No rewards to claim for pools without gauges
}
function balanceOf(
Farm calldata farm,
address user
) external view override returns (uint256) {
// Return the LP token balance directly from the pool
return IERC20(farm.stakingContract).balanceOf(user);
}
function earned(
Farm calldata, // farm
address, // user
address[] calldata rewardTokens
) external pure override returns (uint256[] memory) {
// No rewards for pools without gauges
uint256[] memory rewards = new uint256[](rewardTokens.length);
return rewards;
}
function isStaked(
Farm calldata, // farm
address // user
) external pure override returns (bool) {
// LP tokens are held but not staked
return false;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ICurvePool {
// Events
event Transfer(
address indexed sender, address indexed receiver, uint256 value
);
event Approval(
address indexed owner, address indexed spender, uint256 value
);
event TokenExchange(
address indexed buyer,
int128 sold_id,
uint256 tokens_sold,
int128 bought_id,
uint256 tokens_bought
);
event TokenExchangeUnderlying(
address indexed buyer,
int128 sold_id,
uint256 tokens_sold,
int128 bought_id,
uint256 tokens_bought
);
event AddLiquidity(
address indexed provider,
uint256[] token_amounts,
uint256[] fees,
uint256 invariant,
uint256 token_supply
);
event RemoveLiquidity(
address indexed provider,
uint256[] token_amounts,
uint256[] fees,
uint256 token_supply
);
event RemoveLiquidityOne(
address indexed provider,
int128 token_id,
uint256 token_amount,
uint256 coin_amount,
uint256 token_supply
);
event RemoveLiquidityImbalance(
address indexed provider,
uint256[] token_amounts,
uint256[] fees,
uint256 invariant,
uint256 token_supply
);
event RampA(
uint256 old_A, uint256 new_A, uint256 initial_time, uint256 future_time
);
event StopRampA(uint256 A, uint256 t);
event ApplyNewFee(uint256 fee, uint256 offpeg_fee_multiplier);
event SetNewMATime(uint256 ma_exp_time, uint256 D_ma_time);
// Exchange functions
function exchange(
int128 i,
int128 j,
uint256 _dx,
uint256 _min_dy
) external returns (uint256);
function exchange(
int128 i,
int128 j,
uint256 _dx,
uint256 _min_dy,
address _receiver
) external returns (uint256);
function exchange_received(
int128 i,
int128 j,
uint256 _dx,
uint256 _min_dy
) external returns (uint256);
function exchange_received(
int128 i,
int128 j,
uint256 _dx,
uint256 _min_dy,
address _receiver
) external returns (uint256);
// Liquidity functions
function add_liquidity(
uint256[] calldata _amounts,
uint256 _min_mint_amount
) external returns (uint256);
function add_liquidity(
uint256[] calldata _amounts,
uint256 _min_mint_amount,
address _receiver
) external returns (uint256);
function remove_liquidity_one_coin(
uint256 _burn_amount,
int128 i,
uint256 _min_received
) external returns (uint256);
function remove_liquidity_one_coin(
uint256 _burn_amount,
int128 i,
uint256 _min_received,
address _receiver
) external returns (uint256);
function remove_liquidity_imbalance(
uint256[] calldata _amounts,
uint256 _max_burn_amount
) external returns (uint256);
function remove_liquidity_imbalance(
uint256[] calldata _amounts,
uint256 _max_burn_amount,
address _receiver
) external returns (uint256);
function remove_liquidity(
uint256 _burn_amount,
uint256[] calldata _min_amounts
) external returns (uint256[] memory);
function remove_liquidity(
uint256 _burn_amount,
uint256[] calldata _min_amounts,
address _receiver
) external returns (uint256[] memory);
function remove_liquidity(
uint256 _burn_amount,
uint256[] calldata _min_amounts,
address _receiver,
bool _claim_admin_fees
) external returns (uint256[] memory);
// Admin functions
function withdraw_admin_fees() external;
function ramp_A(uint256 _future_A, uint256 _future_time) external;
function stop_ramp_A() external;
function set_new_fee(
uint256 _new_fee,
uint256 _new_offpeg_fee_multiplier
) external;
function set_ma_exp_time(
uint256 _ma_exp_time,
uint256 _D_ma_time
) external;
// View functions
function last_price(
uint256 i
) external view returns (uint256);
function ema_price(
uint256 i
) external view returns (uint256);
function get_p(
uint256 i
) external view returns (uint256);
function price_oracle(
uint256 i
) external view returns (uint256);
function D_oracle() external view returns (uint256);
function get_dx(
int128 i,
int128 j,
uint256 dy
) external view returns (uint256);
function get_dy(
int128 i,
int128 j,
uint256 dx
) external view returns (uint256);
function calc_withdraw_one_coin(
uint256 _burn_amount,
int128 i
) external view returns (uint256);
function calc_token_amount(
uint256[] calldata _amounts,
bool _is_deposit
) external view returns (uint256);
function get_virtual_price() external view returns (uint256);
function get_balances() external view returns (uint256[] memory);
function stored_rates() external view returns (uint256[] memory);
function dynamic_fee(int128 i, int128 j) external view returns (uint256);
// ERC20 functions
function transfer(address _to, uint256 _value) external returns (bool);
function transferFrom(
address _from,
address _to,
uint256 _value
) external returns (bool);
function approve(
address _spender,
uint256 _value
) external returns (bool);
function permit(
address _owner,
address _spender,
uint256 _value,
uint256 _deadline,
uint8 _v,
bytes32 _r,
bytes32 _s
) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(
address arg0
) external view returns (uint256);
function allowance(
address arg0,
address arg1
) external view returns (uint256);
// Additional view functions
function A() external view returns (uint256);
function A_precise() external view returns (uint256);
function version() external view returns (string memory);
function N_COINS() external view returns (uint256);
function coins(
uint256 arg0
) external view returns (address);
function fee() external view returns (uint256);
function offpeg_fee_multiplier() external view returns (uint256);
function admin_fee() external view returns (uint256);
function initial_A() external view returns (uint256);
function future_A() external view returns (uint256);
function initial_A_time() external view returns (uint256);
function future_A_time() external view returns (uint256);
function admin_balances(
uint256 arg0
) external view returns (uint256);
function ma_exp_time() external view returns (uint256);
function D_ma_time() external view returns (uint256);
function ma_last_time() external view returns (uint256);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function nonces(
address arg0
) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function salt() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {
AddLiquidityParams,
RemoveLiquidityParams
} from "contracts/structs/LiquidityStructs.sol";
interface ILiquidityConnector {
error InvalidPrice();
function addLiquidity(
AddLiquidityParams memory addLiquidityParams
) external;
function removeLiquidity(
RemoveLiquidityParams memory removeLiquidityParams
) external;
function getPoolPrice(
address lpToken,
uint256 baseTokenIndex,
uint256 quoteTokenIndex
) external view returns (uint256);
function getReserves(
address lpToken
) external view returns (uint256[] memory reserves);
function getTokens(
address lpToken
) external view returns (address[] memory tokens);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { Farm } from "contracts/structs/FarmStrategyStructs.sol";
interface IFarmConnector {
function deposit(
Farm calldata farm,
address token,
bytes memory extraData
) external;
function withdraw(
Farm calldata farm,
uint256 amount,
bytes memory extraData
) external;
function claim(Farm calldata farm, bytes memory extraData) external;
function balanceOf(
Farm calldata farm,
address user
) external view returns (uint256);
function earned(
Farm calldata farm,
address user,
address[] calldata rewardTokens
) external view returns (uint256[] memory);
function isStaked(
Farm calldata farm,
address user
) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
struct AddLiquidityParams {
address router;
address lpToken;
address[] tokens;
uint256[] desiredAmounts;
uint256[] minAmounts;
bytes extraData;
}
struct RemoveLiquidityParams {
address router;
address lpToken;
address[] tokens;
uint256 lpAmountIn;
uint256[] minAmountsOut;
bytes extraData;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import { ZapIn, ZapOut } from "contracts/structs/ZapStructs.sol";
import { SwapParams } from "contracts/structs/SwapStructs.sol";
struct Farm {
address stakingContract;
uint256 poolIndex;
}
struct DepositParams {
Farm farm;
address[] tokensIn;
uint256[] amountsIn;
ZapIn zap;
bytes extraData;
}
struct WithdrawParams {
bytes extraData;
ZapOut zap;
address[] tokensOut;
}
struct HarvestParams {
SwapParams[] swaps;
bytes extraData;
address[] tokensOut;
}
struct CompoundParams {
Farm claimFarm;
bytes claimExtraData;
address[] rewardTokens;
ZapIn zap;
Farm depositFarm;
bytes depositExtraData;
}
struct SimpleDepositParams {
Farm farm;
address lpToken;
uint256 amountIn;
bytes extraData;
}
struct SimpleHarvestParams {
address[] rewardTokens;
bytes extraData;
}
struct SimpleWithdrawParams {
address lpToken;
uint256 amountOut;
bytes extraData;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { SwapParams } from "contracts/structs/SwapStructs.sol";
import {
AddLiquidityParams,
RemoveLiquidityParams
} from "contracts/structs/LiquidityStructs.sol";
struct ZapIn {
SwapParams[] swaps;
AddLiquidityParams addLiquidityParams;
}
struct ZapOut {
RemoveLiquidityParams removeLiquidityParams;
SwapParams[] swaps;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
struct SwapParams {
address tokenApproval;
address router;
uint256 amountIn;
uint256 desiredAmountOut;
uint256 minAmountOut;
address tokenIn;
address tokenOut;
bytes extraData;
}{
"remappings": [
"solmate/=lib/solmate/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@morpho-blue/=lib/morpho-blue/src/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"morpho-blue/=lib/morpho-blue/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"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":"InvalidPrice","type":"error"},{"inputs":[],"name":"NotSupported","type":"error"},{"inputs":[{"components":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"desiredAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"minAmounts","type":"uint256[]"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"addLiquidityParams","type":"tuple"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"farm","type":"tuple"},{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"","type":"tuple"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"claim","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"address[]","name":"rewardTokens","type":"address[]"}],"name":"earned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"uint256","name":"baseTokenIndex","type":"uint256"},{"internalType":"uint256","name":"quoteTokenIndex","type":"uint256"}],"name":"getPoolPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpToken","type":"address"}],"name":"getReserves","outputs":[{"internalType":"uint256[]","name":"reserves","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpToken","type":"address"}],"name":"getTokens","outputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"lpToken","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"lpAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"removeLiquidityParams","type":"tuple"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"stakingContract","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"internalType":"struct Farm","name":"","type":"tuple"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"withdraw","outputs":[],"stateMutability":"pure","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50611263806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063450efe2111610071578063450efe211461013f5780638bddf1871461015f5780639a47bf0814610171578063dd89e3d214610184578063dd9e02cd14610192578063fb986deb146101a557600080fd5b8063195ac61e146100ae5780631b89f200146100d65780633941dc18146100eb5780633e99c1e41461010c57806341d07dc01461012c575b600080fd5b6100c16100bc366004610939565b6101b8565b60405190151581526020015b60405180910390f35b6100e96100e4366004610a4e565b505050565b005b6100fe6100f9366004610aa5565b6101c1565b6040519081526020016100cd565b61011f61011a366004610ada565b610552565b6040516100cd9190610b32565b6100e961013a366004610c2c565b6105ba565b61015261014d366004610ada565b61063a565b6040516100cd9190610d0c565b6100e961016d366004610d59565b5050565b61011f61017f366004610da7565b610798565b6100e96100e4366004610e3a565b6100fe6101a0366004610939565b6107e8565b6100e96101b3366004610e84565b61086a565b60005b92915050565b60405163c661065760e01b81526004810183905260009081906001600160a01b0386169063c661065790602401602060405180830381865afa15801561020b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022f9190610f3f565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610f5c565b60ff1690506000866001600160a01b031663c6610657866040518263ffffffff1660e01b81526004016102ca91815260200190565b602060405180830381865afa1580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b9190610f3f565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103719190610f5c565b60ff16905060006001600160a01b038916635e0d443f898961039488600a611079565b6040516001600160e01b031960e086901b168152600f93840b60048201529190920b60248201526044810191909152606401602060405180830381865afa1580156103e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104079190611085565b905080156104365761041a82601261109e565b61042590600a611079565b61042f90826110b1565b9550610526565b60006001600160a01b038a16635e0d443f898b61045487600a611079565b6040516001600160e01b031960e086901b168152600f93840b60048201529190920b60248201526044810191909152606401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c79190611085565b9050806000036104e95760405162bfc92160e01b815260040160405180910390fd5b6104f485601261109e565b6104ff90600a611079565b61050990826110b1565b610522906ec097ce7bc90715b34b9f10000000006110c8565b9650505b856000036105465760405162bfc92160e01b815260040160405180910390fd5b50505050509392505050565b6060816001600160a01b03166314f059796040518163ffffffff1660e01b8152600401600060405180830381865afa158015610592573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101bb91908101906110ea565b80516060820151608083015160405163350376e360e21b81526001600160a01b039093169263d40ddb8c926105f392909160040161117a565b6000604051808303816000875af1158015610612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261016d91908101906110ea565b6060816001600160a01b031663293577506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190611085565b6001600160401b038111156106b5576106b5610971565b6040519080825280602002602001820160405280156106de578160200160208202803683370190505b50905060005b81518110156107925760405163c661065760e01b8152600481018290526001600160a01b0384169063c661065790602401602060405180830381865afa158015610732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107569190610f3f565b8282815181106107685761076861119b565b6001600160a01b03909216602092830291909101909101528061078a816111b1565b9150506106e4565b50919050565b60606000826001600160401b038111156107b4576107b4610971565b6040519080825280602002602001820160405280156107dd578160200160208202803683370190505b509695505050505050565b60006107f76020840184610ada565b6040516370a0823160e01b81526001600160a01b03848116600483015291909116906370a0823190602401602060405180830381865afa15801561083f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108639190611085565b9392505050565b60008160a0015180602001905181019061088491906111ca565b825160608401518251604051635b96faef60e11b81529394506001600160a01b039092169263b72df5de926108bc929160040161120b565b6020604051808303816000875af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e49190611085565b60006040828403121561079257600080fd5b6001600160a01b038116811461092657600080fd5b50565b803561093481610911565b919050565b6000806060838503121561094c57600080fd5b61095684846108ff565b9150604083013561096681610911565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156109a9576109a9610971565b60405290565b604051601f8201601f191681016001600160401b03811182821017156109d7576109d7610971565b604052919050565b600082601f8301126109f057600080fd5b81356001600160401b03811115610a0957610a09610971565b610a1c601f8201601f19166020016109af565b818152846020838601011115610a3157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060808486031215610a6357600080fd5b610a6d85856108ff565b92506040840135915060608401356001600160401b03811115610a8f57600080fd5b610a9b868287016109df565b9150509250925092565b600080600060608486031215610aba57600080fd5b8335610ac581610911565b95602085013595506040909401359392505050565b600060208284031215610aec57600080fd5b813561086381610911565b600081518084526020808501945080840160005b83811015610b2757815187529582019590820190600101610b0b565b509495945050505050565b6020815260006108636020830184610af7565b60006001600160401b03821115610b5e57610b5e610971565b5060051b60200190565b600082601f830112610b7957600080fd5b81356020610b8e610b8983610b45565b6109af565b82815260059290921b84018101918181019086841115610bad57600080fd5b8286015b848110156107dd578035610bc481610911565b8352918301918301610bb1565b600082601f830112610be257600080fd5b81356020610bf2610b8983610b45565b82815260059290921b84018101918181019086841115610c1157600080fd5b8286015b848110156107dd5780358352918301918301610c15565b600060208284031215610c3e57600080fd5b81356001600160401b0380821115610c5557600080fd5b9083019060c08286031215610c6957600080fd5b610c71610987565b610c7a83610929565b8152610c8860208401610929565b6020820152604083013582811115610c9f57600080fd5b610cab87828601610b68565b60408301525060608301356060820152608083013582811115610ccd57600080fd5b610cd987828601610bd1565b60808301525060a083013582811115610cf157600080fd5b610cfd878286016109df565b60a08301525095945050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d4d5783516001600160a01b031683529284019291840191600101610d28565b50909695505050505050565b60008060608385031215610d6c57600080fd5b610d7684846108ff565b915060408301356001600160401b03811115610d9157600080fd5b610d9d858286016109df565b9150509250929050565b60008060008060808587031215610dbd57600080fd5b610dc786866108ff565b93506040850135610dd781610911565b925060608501356001600160401b0380821115610df357600080fd5b818701915087601f830112610e0757600080fd5b813581811115610e1657600080fd5b8860208260051b8501011115610e2b57600080fd5b95989497505060200194505050565b600080600060808486031215610e4f57600080fd5b610e5985856108ff565b92506040840135610e6981610911565b915060608401356001600160401b03811115610a8f57600080fd5b600060208284031215610e9657600080fd5b81356001600160401b0380821115610ead57600080fd5b9083019060c08286031215610ec157600080fd5b610ec9610987565b610ed283610929565b8152610ee060208401610929565b6020820152604083013582811115610ef757600080fd5b610f0387828601610b68565b604083015250606083013582811115610f1b57600080fd5b610f2787828601610bd1565b606083015250608083013582811115610ccd57600080fd5b600060208284031215610f5157600080fd5b815161086381610911565b600060208284031215610f6e57600080fd5b815160ff8116811461086357600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610fd0578160001904821115610fb657610fb6610f7f565b80851615610fc357918102915b93841c9390800290610f9a565b509250929050565b600082610fe7575060016101bb565b81610ff4575060006101bb565b816001811461100a576002811461101457611030565b60019150506101bb565b60ff84111561102557611025610f7f565b50506001821b6101bb565b5060208310610133831016604e8410600b8410161715611053575081810a6101bb565b61105d8383610f95565b806000190482111561107157611071610f7f565b029392505050565b60006108638383610fd8565b60006020828403121561109757600080fd5b5051919050565b818103818111156101bb576101bb610f7f565b80820281158282048414176101bb576101bb610f7f565b6000826110e557634e487b7160e01b600052601260045260246000fd5b500490565b600060208083850312156110fd57600080fd5b82516001600160401b0381111561111357600080fd5b8301601f8101851361112457600080fd5b8051611132610b8982610b45565b81815260059190911b8201830190838101908783111561115157600080fd5b928401925b8284101561116f57835182529284019290840190611156565b979650505050505050565b8281526040602082015260006111936040830184610af7565b949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016111c3576111c3610f7f565b5060010190565b6000602082840312156111dc57600080fd5b604051602081018181106001600160401b03821117156111fe576111fe610971565b6040529151825250919050565b60408152600061121e6040830185610af7565b9050826020830152939250505056fea26469706673582212205f8742c51e0b10041535ee5125fe2980092cebffe3de2ea08c1938043dcf219a64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063450efe2111610071578063450efe211461013f5780638bddf1871461015f5780639a47bf0814610171578063dd89e3d214610184578063dd9e02cd14610192578063fb986deb146101a557600080fd5b8063195ac61e146100ae5780631b89f200146100d65780633941dc18146100eb5780633e99c1e41461010c57806341d07dc01461012c575b600080fd5b6100c16100bc366004610939565b6101b8565b60405190151581526020015b60405180910390f35b6100e96100e4366004610a4e565b505050565b005b6100fe6100f9366004610aa5565b6101c1565b6040519081526020016100cd565b61011f61011a366004610ada565b610552565b6040516100cd9190610b32565b6100e961013a366004610c2c565b6105ba565b61015261014d366004610ada565b61063a565b6040516100cd9190610d0c565b6100e961016d366004610d59565b5050565b61011f61017f366004610da7565b610798565b6100e96100e4366004610e3a565b6100fe6101a0366004610939565b6107e8565b6100e96101b3366004610e84565b61086a565b60005b92915050565b60405163c661065760e01b81526004810183905260009081906001600160a01b0386169063c661065790602401602060405180830381865afa15801561020b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022f9190610f3f565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610f5c565b60ff1690506000866001600160a01b031663c6610657866040518263ffffffff1660e01b81526004016102ca91815260200190565b602060405180830381865afa1580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b9190610f3f565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103719190610f5c565b60ff16905060006001600160a01b038916635e0d443f898961039488600a611079565b6040516001600160e01b031960e086901b168152600f93840b60048201529190920b60248201526044810191909152606401602060405180830381865afa1580156103e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104079190611085565b905080156104365761041a82601261109e565b61042590600a611079565b61042f90826110b1565b9550610526565b60006001600160a01b038a16635e0d443f898b61045487600a611079565b6040516001600160e01b031960e086901b168152600f93840b60048201529190920b60248201526044810191909152606401602060405180830381865afa1580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c79190611085565b9050806000036104e95760405162bfc92160e01b815260040160405180910390fd5b6104f485601261109e565b6104ff90600a611079565b61050990826110b1565b610522906ec097ce7bc90715b34b9f10000000006110c8565b9650505b856000036105465760405162bfc92160e01b815260040160405180910390fd5b50505050509392505050565b6060816001600160a01b03166314f059796040518163ffffffff1660e01b8152600401600060405180830381865afa158015610592573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101bb91908101906110ea565b80516060820151608083015160405163350376e360e21b81526001600160a01b039093169263d40ddb8c926105f392909160040161117a565b6000604051808303816000875af1158015610612573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261016d91908101906110ea565b6060816001600160a01b031663293577506040518163ffffffff1660e01b8152600401602060405180830381865afa15801561067a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069e9190611085565b6001600160401b038111156106b5576106b5610971565b6040519080825280602002602001820160405280156106de578160200160208202803683370190505b50905060005b81518110156107925760405163c661065760e01b8152600481018290526001600160a01b0384169063c661065790602401602060405180830381865afa158015610732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107569190610f3f565b8282815181106107685761076861119b565b6001600160a01b03909216602092830291909101909101528061078a816111b1565b9150506106e4565b50919050565b60606000826001600160401b038111156107b4576107b4610971565b6040519080825280602002602001820160405280156107dd578160200160208202803683370190505b509695505050505050565b60006107f76020840184610ada565b6040516370a0823160e01b81526001600160a01b03848116600483015291909116906370a0823190602401602060405180830381865afa15801561083f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108639190611085565b9392505050565b60008160a0015180602001905181019061088491906111ca565b825160608401518251604051635b96faef60e11b81529394506001600160a01b039092169263b72df5de926108bc929160040161120b565b6020604051808303816000875af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e49190611085565b60006040828403121561079257600080fd5b6001600160a01b038116811461092657600080fd5b50565b803561093481610911565b919050565b6000806060838503121561094c57600080fd5b61095684846108ff565b9150604083013561096681610911565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156109a9576109a9610971565b60405290565b604051601f8201601f191681016001600160401b03811182821017156109d7576109d7610971565b604052919050565b600082601f8301126109f057600080fd5b81356001600160401b03811115610a0957610a09610971565b610a1c601f8201601f19166020016109af565b818152846020838601011115610a3157600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060808486031215610a6357600080fd5b610a6d85856108ff565b92506040840135915060608401356001600160401b03811115610a8f57600080fd5b610a9b868287016109df565b9150509250925092565b600080600060608486031215610aba57600080fd5b8335610ac581610911565b95602085013595506040909401359392505050565b600060208284031215610aec57600080fd5b813561086381610911565b600081518084526020808501945080840160005b83811015610b2757815187529582019590820190600101610b0b565b509495945050505050565b6020815260006108636020830184610af7565b60006001600160401b03821115610b5e57610b5e610971565b5060051b60200190565b600082601f830112610b7957600080fd5b81356020610b8e610b8983610b45565b6109af565b82815260059290921b84018101918181019086841115610bad57600080fd5b8286015b848110156107dd578035610bc481610911565b8352918301918301610bb1565b600082601f830112610be257600080fd5b81356020610bf2610b8983610b45565b82815260059290921b84018101918181019086841115610c1157600080fd5b8286015b848110156107dd5780358352918301918301610c15565b600060208284031215610c3e57600080fd5b81356001600160401b0380821115610c5557600080fd5b9083019060c08286031215610c6957600080fd5b610c71610987565b610c7a83610929565b8152610c8860208401610929565b6020820152604083013582811115610c9f57600080fd5b610cab87828601610b68565b60408301525060608301356060820152608083013582811115610ccd57600080fd5b610cd987828601610bd1565b60808301525060a083013582811115610cf157600080fd5b610cfd878286016109df565b60a08301525095945050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d4d5783516001600160a01b031683529284019291840191600101610d28565b50909695505050505050565b60008060608385031215610d6c57600080fd5b610d7684846108ff565b915060408301356001600160401b03811115610d9157600080fd5b610d9d858286016109df565b9150509250929050565b60008060008060808587031215610dbd57600080fd5b610dc786866108ff565b93506040850135610dd781610911565b925060608501356001600160401b0380821115610df357600080fd5b818701915087601f830112610e0757600080fd5b813581811115610e1657600080fd5b8860208260051b8501011115610e2b57600080fd5b95989497505060200194505050565b600080600060808486031215610e4f57600080fd5b610e5985856108ff565b92506040840135610e6981610911565b915060608401356001600160401b03811115610a8f57600080fd5b600060208284031215610e9657600080fd5b81356001600160401b0380821115610ead57600080fd5b9083019060c08286031215610ec157600080fd5b610ec9610987565b610ed283610929565b8152610ee060208401610929565b6020820152604083013582811115610ef757600080fd5b610f0387828601610b68565b604083015250606083013582811115610f1b57600080fd5b610f2787828601610bd1565b606083015250608083013582811115610ccd57600080fd5b600060208284031215610f5157600080fd5b815161086381610911565b600060208284031215610f6e57600080fd5b815160ff8116811461086357600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115610fd0578160001904821115610fb657610fb6610f7f565b80851615610fc357918102915b93841c9390800290610f9a565b509250929050565b600082610fe7575060016101bb565b81610ff4575060006101bb565b816001811461100a576002811461101457611030565b60019150506101bb565b60ff84111561102557611025610f7f565b50506001821b6101bb565b5060208310610133831016604e8410600b8410161715611053575081810a6101bb565b61105d8383610f95565b806000190482111561107157611071610f7f565b029392505050565b60006108638383610fd8565b60006020828403121561109757600080fd5b5051919050565b818103818111156101bb576101bb610f7f565b80820281158282048414176101bb576101bb610f7f565b6000826110e557634e487b7160e01b600052601260045260246000fd5b500490565b600060208083850312156110fd57600080fd5b82516001600160401b0381111561111357600080fd5b8301601f8101851361112457600080fd5b8051611132610b8982610b45565b81815260059190911b8201830190838101908783111561115157600080fd5b928401925b8284101561116f57835182529284019290840190611156565b979650505050505050565b8281526040602082015260006111936040830184610af7565b949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016111c3576111c3610f7f565b5060010190565b6000602082840312156111dc57600080fd5b604051602081018181106001600160401b03821117156111fe576111fe610971565b6040529151825250919050565b60408152600061121e6040830185610af7565b9050826020830152939250505056fea26469706673582212205f8742c51e0b10041535ee5125fe2980092cebffe3de2ea08c1938043dcf219a64736f6c63430008130033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.