Source Code
Overview
MON Balance
MON Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ZAMM
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
/**
* @title ZAMM - Simplified CPMM for PAMM prediction markets
* @notice A minimal constant product AMM that supports ERC6909 tokens
*/
contract ZAMM {
struct PoolKey {
uint256 id0;
uint256 id1;
address token0;
address token1;
uint256 feeOrHook;
}
struct Pool {
uint112 reserve0;
uint112 reserve1;
uint32 blockTimestampLast;
uint256 price0CumulativeLast;
uint256 price1CumulativeLast;
uint256 kLast;
uint256 supply;
}
mapping(uint256 => Pool) public pools;
mapping(uint256 => mapping(address => uint256)) public liquidityOf;
// Transient balance storage for atomic operations
mapping(address => mapping(uint256 => uint256)) private _transientBalances;
mapping(address => mapping(uint256 => address)) private _transientFrom;
event Mint(uint256 indexed poolId, address indexed to, uint256 liquidity);
event Burn(uint256 indexed poolId, address indexed to, uint256 amount0, uint256 amount1);
event Swap(uint256 indexed poolId, address indexed to, uint256 amountIn, uint256 amountOut, bool zeroForOne);
error InsufficientLiquidity();
error InsufficientInput();
error InvalidPool();
error Expired();
error InsufficientAmount();
error TransferFailed();
function getPoolId(PoolKey calldata key) public pure returns (uint256) {
return uint256(keccak256(abi.encode(key.id0, key.id1, key.token0, key.token1, key.feeOrHook)));
}
function deposit(address token, uint256 id, uint256 amount) external payable {
// Transfer tokens from caller to this contract
IERC6909(token).transferFrom(msg.sender, address(this), id, amount);
// Store in transient balance
_transientBalances[token][id] += amount;
_transientFrom[token][id] = msg.sender;
}
function recoverTransientBalance(address token, uint256 id, address to) external returns (uint256 amount) {
amount = _transientBalances[token][id];
if (amount > 0) {
_transientBalances[token][id] = 0;
IERC6909(token).transfer(to, id, amount);
}
}
function addLiquidity(
PoolKey calldata poolKey,
uint256 amount0Desired,
uint256 amount1Desired,
uint256 amount0Min,
uint256 amount1Min,
address to,
uint256 deadline
) external payable returns (uint256 amount0, uint256 amount1, uint256 liquidity) {
require(block.timestamp <= deadline, Expired());
uint256 poolId = getPoolId(poolKey);
Pool storage pool = pools[poolId];
// Consume from transient balances
uint256 bal0 = _transientBalances[poolKey.token0][poolKey.id0];
uint256 bal1 = _transientBalances[poolKey.token1][poolKey.id1];
require(bal0 >= amount0Desired && bal1 >= amount1Desired, InsufficientAmount());
if (pool.supply == 0) {
// First liquidity provision
amount0 = amount0Desired;
amount1 = amount1Desired;
liquidity = _sqrt(amount0 * amount1);
require(liquidity > 0, InsufficientLiquidity());
} else {
// Calculate optimal amounts
uint256 optimal1 = (amount0Desired * pool.reserve1) / pool.reserve0;
if (optimal1 <= amount1Desired) {
require(optimal1 >= amount1Min, InsufficientAmount());
amount0 = amount0Desired;
amount1 = optimal1;
} else {
uint256 optimal0 = (amount1Desired * pool.reserve0) / pool.reserve1;
require(optimal0 <= amount0Desired && optimal0 >= amount0Min, InsufficientAmount());
amount0 = optimal0;
amount1 = amount1Desired;
}
liquidity = _min(
(amount0 * pool.supply) / pool.reserve0,
(amount1 * pool.supply) / pool.reserve1
);
}
// Consume transient balances
_transientBalances[poolKey.token0][poolKey.id0] = bal0 - amount0;
_transientBalances[poolKey.token1][poolKey.id1] = bal1 - amount1;
// Update pool state
pool.reserve0 = uint112(uint256(pool.reserve0) + amount0);
pool.reserve1 = uint112(uint256(pool.reserve1) + amount1);
pool.supply += liquidity;
pool.kLast = uint256(pool.reserve0) * uint256(pool.reserve1);
pool.blockTimestampLast = uint32(block.timestamp);
liquidityOf[poolId][to] += liquidity;
emit Mint(poolId, to, liquidity);
}
function swapExactOut(
PoolKey calldata poolKey,
uint256 amountOut,
uint256 amountInMax,
bool zeroForOne,
address to,
uint256 deadline
) external payable returns (uint256 amountIn) {
require(block.timestamp <= deadline, Expired());
uint256 poolId = getPoolId(poolKey);
Pool storage pool = pools[poolId];
require(pool.supply > 0, InvalidPool());
uint256 reserveIn;
uint256 reserveOut;
uint256 idIn;
uint256 idOut;
address tokenIn;
address tokenOut;
if (zeroForOne) {
reserveIn = pool.reserve0;
reserveOut = pool.reserve1;
idIn = poolKey.id0;
idOut = poolKey.id1;
tokenIn = poolKey.token0;
tokenOut = poolKey.token1;
} else {
reserveIn = pool.reserve1;
reserveOut = pool.reserve0;
idIn = poolKey.id1;
idOut = poolKey.id0;
tokenIn = poolKey.token1;
tokenOut = poolKey.token0;
}
require(amountOut < reserveOut, InsufficientLiquidity());
// Calculate amountIn with fee
uint256 feeBps = poolKey.feeOrHook;
uint256 numerator = reserveIn * amountOut * 10000;
uint256 denominator = (reserveOut - amountOut) * (10000 - feeBps);
amountIn = (numerator / denominator) + 1;
require(amountIn <= amountInMax, InsufficientInput());
// Consume from transient balance
uint256 bal = _transientBalances[tokenIn][idIn];
require(bal >= amountIn, InsufficientAmount());
_transientBalances[tokenIn][idIn] = bal - amountIn;
// Update reserves
if (zeroForOne) {
pool.reserve0 = uint112(reserveIn + amountIn);
pool.reserve1 = uint112(reserveOut - amountOut);
} else {
pool.reserve1 = uint112(reserveIn + amountIn);
pool.reserve0 = uint112(reserveOut - amountOut);
}
pool.kLast = uint256(pool.reserve0) * uint256(pool.reserve1);
pool.blockTimestampLast = uint32(block.timestamp);
// Transfer output
IERC6909(tokenOut).transfer(to, idOut, amountOut);
emit Swap(poolId, to, amountIn, amountOut, zeroForOne);
}
function _sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function _min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
}
interface IERC6909 {
function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);
function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);
function balanceOf(address owner, uint256 id) external view returns (uint256);
}{
"remappings": [
"forge-std/=lib/forge-std/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": false
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"Expired","type":"error"},{"inputs":[],"name":"InsufficientAmount","type":"error"},{"inputs":[],"name":"InsufficientInput","type":"error"},{"inputs":[],"name":"InsufficientLiquidity","type":"error"},{"inputs":[],"name":"InvalidPool","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"bool","name":"zeroForOne","type":"bool"}],"name":"Swap","type":"event"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"poolKey","type":"tuple"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"key","type":"tuple"}],"name":"getPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"liquidityOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"uint112","name":"reserve0","type":"uint112"},{"internalType":"uint112","name":"reserve1","type":"uint112"},{"internalType":"uint32","name":"blockTimestampLast","type":"uint32"},{"internalType":"uint256","name":"price0CumulativeLast","type":"uint256"},{"internalType":"uint256","name":"price1CumulativeLast","type":"uint256"},{"internalType":"uint256","name":"kLast","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverTransientBalance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"id0","type":"uint256"},{"internalType":"uint256","name":"id1","type":"uint256"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"feeOrHook","type":"uint256"}],"internalType":"struct ZAMM.PoolKey","name":"poolKey","type":"tuple"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}]Contract Creation Code
60808060405234601557610b47908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630efe6a8b146108fe575080630f79fca5146108af57806338c3f8db146105c15780633b50aaf21461059e578063a647fc2a1461049c578063ac4afa38146104245763c42957a814610069575f80fd5b366003190161016081126104205760a01361042057610124356001600160a01b0381169060c4359060a4359083900361042057610144354211610411576100ae610ade565b90815f525f60205260405f209360018060a01b036100ca610a53565b165f52600260205260405f209260043593845f5260205260405f20549560018060a01b036100f6610a3d565b165f52600260205260405f209060243591825f5260205260405f2054918589101580610407575b156103aa576004820190815480155f14610319575061013e87998098610a69565b975f60038a111561030a5750888060011c600181018091116102f657905b8a82106102d75750505b88156102c85787610269956101ae926101818d60609f610a7c565b906001600160a01b03610192610a53565b165f52600260205260405f20905f5260205260405f2055610a7c565b906001600160a01b036101bf610a3d565b165f52600260205260405f20905f5260205260405f20556001600160701b03806101ec8a82865416610a30565b16166001600160701b031983541617825561021f6001600160701b036102188882865460701c16610a30565b1683610aa7565b61022a878254610a30565b905561024681546001600160701b03808260701c169116610a69565b600382015580546001600160e01b03164260e01b6001600160e01b031916179055565b805f52600160205260405f20825f5260205260405f2061028a858254610a30565b90557f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f66020604051868152a360405192835260208301526040820152f35b63bb55fd2760e01b5f5260045ffd5b9099506102ed8a6102e88184610a89565b610a30565b60011c9061015c565b634e487b7160e01b5f52601160045260245ffd5b98156101665760019850610166565b9399979683546001600160701b038160701c169161034b6001600160701b036103428584610a69565b93168093610a89565b9b808d116103b95750610104358c106103aa579b8c9b9961018160609e610269996103936101ae978f9761038c610387915b6103878688610a69565b610a89565b9389610a69565b808210156103a357505b9d610a7c565b905061039d565b632ca2f52b60e11b5f5260045ffd5b9b506103c983610387848f610a69565b90811115806103fb575b156103aa579b8c9b9961018160609e610269996103936101ae978f9761038c6103879161037d565b5060e4358110156103d3565b508783101561011d565b630407b05b60e31b5f5260045ffd5b5f80fd5b34610420576020366003190112610420576004355f525f60205260e060405f2080549060018101549060028101546004600383015492015492604051946001600160701b03811686526001600160701b038160701c166020870152861c60408601526060850152608084015260a083015260c0820152f35b34610420576060366003190112610420576104b56109cc565b60243590604435906001600160a01b03821682036104205760018060a01b031691825f52600260205260405f20815f5260205260405f205491826104ff575b602083604051908152f35b5f8481526002602090815260408083208584528252808320839055516304ade6db60e11b81526001600160a01b03939093166004840152602483019390935260448201849052909384916064918391905af191821561059357602092610566575b806104f4565b61058590833d851161058c575b61057d81836109e2565b810190610a18565b5082610560565b503d610573565b6040513d5f823e3d90fd5b346104205760a03660031901126104205760206105b9610ade565b604051908152f35b366003190161014081126104205760a0136104205760a43560e43590811515918281036104205761010435916001600160a01b038316918284036104205761012435421161041157610611610ade565b91825f525f60205260405f20916004830154156108a157801561086f5782546001600160701b038082169160701c16936004359060243590610651610a53565b9961065a610a3d565b935b888810156102c85761066e8887610a69565b61271081029080820461271014901517156102f65761068d898b610a7c565b90608435612710039161271083116102f6576106b2926106ac91610a69565b90610a89565b9b60018d01809d116102f65760c4358d116108605760018060a01b031692835f52600260205260405f20825f5260205260405f2054998d8b106103aa57898e819960209b5f986107ac9f9761070a856107719a610a7c565b918b5260028f5260408b20908b528e5260408a205588146108225791610757936001600160701b0380610741610750958297610a30565b16168419875416178655610a7c565b1682610aa7565b61024681546001600160701b03808260701c169116610a69565b6040516304ade6db60e11b81526001600160a01b03909116600482015260248101929092526044820193909352948592839182906064820190565b03926001600160a01b03165af1908115610593576020967fdace89c50ea322ac562ed27e157745225c0f0601f5f48a21e14d21fb5737fa0793606093610807575b5060405191878352888301526040820152a3604051908152f35b61081d90893d8b1161058c5761057d81836109e2565b6107ed565b916001600160701b03936108458561083e61084a958297610a30565b1687610aa7565b610a7c565b16166001600160701b0319825416178155610757565b63f8b3bb6160e01b5f5260045ffd5b82546001600160701b03808260701c169116936024359060043590610892610a3d565b9961089b610a53565b9361065c565b62820f3560e61b5f5260045ffd5b34610420576040366003190112610420576024356001600160a01b0381168103610420576004355f52600160205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b6060366003190112610420576109126109cc565b90602435916044359060018060a01b031691637f4c824d60e11b81523360048201523060248201528360448201528160648201526020816084815f875af18015610593576109af575b50815f52600260205260405f20835f5260205261097d60405f20918254610a30565b90555f52600360205260405f20905f5260205260405f20336bffffffffffffffffffffffff60a01b8254161790555f80f35b6109c79060203d60201161058c5761057d81836109e2565b61095b565b600435906001600160a01b038216820361042057565b90601f8019910116810190811067ffffffffffffffff821117610a0457604052565b634e487b7160e01b5f52604160045260245ffd5b90816020910312610420575180151581036104205790565b919082018092116102f657565b6064356001600160a01b03811681036104205790565b6044356001600160a01b03811681036104205790565b818102929181159184041417156102f657565b919082039182116102f657565b8115610a93570490565b634e487b7160e01b5f52601260045260245ffd5b80546dffffffffffffffffffffffffffff60701b191660709290921b6dffffffffffffffffffffffffffff60701b16919091179055565b6044356001600160a01b0381169081810361042057506064356001600160a01b038116908181036104205750604051906020820192600435845260243560408401526060830152608082015260843560a082015260a08152610b4160c0826109e2565b5190209056
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c9081630efe6a8b146108fe575080630f79fca5146108af57806338c3f8db146105c15780633b50aaf21461059e578063a647fc2a1461049c578063ac4afa38146104245763c42957a814610069575f80fd5b366003190161016081126104205760a01361042057610124356001600160a01b0381169060c4359060a4359083900361042057610144354211610411576100ae610ade565b90815f525f60205260405f209360018060a01b036100ca610a53565b165f52600260205260405f209260043593845f5260205260405f20549560018060a01b036100f6610a3d565b165f52600260205260405f209060243591825f5260205260405f2054918589101580610407575b156103aa576004820190815480155f14610319575061013e87998098610a69565b975f60038a111561030a5750888060011c600181018091116102f657905b8a82106102d75750505b88156102c85787610269956101ae926101818d60609f610a7c565b906001600160a01b03610192610a53565b165f52600260205260405f20905f5260205260405f2055610a7c565b906001600160a01b036101bf610a3d565b165f52600260205260405f20905f5260205260405f20556001600160701b03806101ec8a82865416610a30565b16166001600160701b031983541617825561021f6001600160701b036102188882865460701c16610a30565b1683610aa7565b61022a878254610a30565b905561024681546001600160701b03808260701c169116610a69565b600382015580546001600160e01b03164260e01b6001600160e01b031916179055565b805f52600160205260405f20825f5260205260405f2061028a858254610a30565b90557f4e3883c75cc9c752bb1db2e406a822e4a75067ae77ad9a0a4d179f2709b9e1f66020604051868152a360405192835260208301526040820152f35b63bb55fd2760e01b5f5260045ffd5b9099506102ed8a6102e88184610a89565b610a30565b60011c9061015c565b634e487b7160e01b5f52601160045260245ffd5b98156101665760019850610166565b9399979683546001600160701b038160701c169161034b6001600160701b036103428584610a69565b93168093610a89565b9b808d116103b95750610104358c106103aa579b8c9b9961018160609e610269996103936101ae978f9761038c610387915b6103878688610a69565b610a89565b9389610a69565b808210156103a357505b9d610a7c565b905061039d565b632ca2f52b60e11b5f5260045ffd5b9b506103c983610387848f610a69565b90811115806103fb575b156103aa579b8c9b9961018160609e610269996103936101ae978f9761038c6103879161037d565b5060e4358110156103d3565b508783101561011d565b630407b05b60e31b5f5260045ffd5b5f80fd5b34610420576020366003190112610420576004355f525f60205260e060405f2080549060018101549060028101546004600383015492015492604051946001600160701b03811686526001600160701b038160701c166020870152861c60408601526060850152608084015260a083015260c0820152f35b34610420576060366003190112610420576104b56109cc565b60243590604435906001600160a01b03821682036104205760018060a01b031691825f52600260205260405f20815f5260205260405f205491826104ff575b602083604051908152f35b5f8481526002602090815260408083208584528252808320839055516304ade6db60e11b81526001600160a01b03939093166004840152602483019390935260448201849052909384916064918391905af191821561059357602092610566575b806104f4565b61058590833d851161058c575b61057d81836109e2565b810190610a18565b5082610560565b503d610573565b6040513d5f823e3d90fd5b346104205760a03660031901126104205760206105b9610ade565b604051908152f35b366003190161014081126104205760a0136104205760a43560e43590811515918281036104205761010435916001600160a01b038316918284036104205761012435421161041157610611610ade565b91825f525f60205260405f20916004830154156108a157801561086f5782546001600160701b038082169160701c16936004359060243590610651610a53565b9961065a610a3d565b935b888810156102c85761066e8887610a69565b61271081029080820461271014901517156102f65761068d898b610a7c565b90608435612710039161271083116102f6576106b2926106ac91610a69565b90610a89565b9b60018d01809d116102f65760c4358d116108605760018060a01b031692835f52600260205260405f20825f5260205260405f2054998d8b106103aa57898e819960209b5f986107ac9f9761070a856107719a610a7c565b918b5260028f5260408b20908b528e5260408a205588146108225791610757936001600160701b0380610741610750958297610a30565b16168419875416178655610a7c565b1682610aa7565b61024681546001600160701b03808260701c169116610a69565b6040516304ade6db60e11b81526001600160a01b03909116600482015260248101929092526044820193909352948592839182906064820190565b03926001600160a01b03165af1908115610593576020967fdace89c50ea322ac562ed27e157745225c0f0601f5f48a21e14d21fb5737fa0793606093610807575b5060405191878352888301526040820152a3604051908152f35b61081d90893d8b1161058c5761057d81836109e2565b6107ed565b916001600160701b03936108458561083e61084a958297610a30565b1687610aa7565b610a7c565b16166001600160701b0319825416178155610757565b63f8b3bb6160e01b5f5260045ffd5b82546001600160701b03808260701c169116936024359060043590610892610a3d565b9961089b610a53565b9361065c565b62820f3560e61b5f5260045ffd5b34610420576040366003190112610420576024356001600160a01b0381168103610420576004355f52600160205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b6060366003190112610420576109126109cc565b90602435916044359060018060a01b031691637f4c824d60e11b81523360048201523060248201528360448201528160648201526020816084815f875af18015610593576109af575b50815f52600260205260405f20835f5260205261097d60405f20918254610a30565b90555f52600360205260405f20905f5260205260405f20336bffffffffffffffffffffffff60a01b8254161790555f80f35b6109c79060203d60201161058c5761057d81836109e2565b61095b565b600435906001600160a01b038216820361042057565b90601f8019910116810190811067ffffffffffffffff821117610a0457604052565b634e487b7160e01b5f52604160045260245ffd5b90816020910312610420575180151581036104205790565b919082018092116102f657565b6064356001600160a01b03811681036104205790565b6044356001600160a01b03811681036104205790565b818102929181159184041417156102f657565b919082039182116102f657565b8115610a93570490565b634e487b7160e01b5f52601260045260245ffd5b80546dffffffffffffffffffffffffffff60701b191660709290921b6dffffffffffffffffffffffffffff60701b16919091179055565b6044356001600160a01b0381169081810361042057506064356001600160a01b038116908181036104205750604051906020820192600435845260243560408401526060830152608082015260843560a082015260a08152610b4160c0826109e2565b5190209056
Deployed Bytecode Sourcemap
198:7172:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;-1:-1:-1;198:7172:0;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;2563:15;:27;198:7172;;2630:18;;:::i;:::-;198:7172;;;;;;;;;;;;;;;;2779:14;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;;;;;;;;;;;2851:14;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;2867:11;198:7172;;;;;;;;;;;2898:22;;;;;:48;;;198:7172;;;;;2984:11;;198:7172;;;2984:16;;2980:1052;2984:16;;;3057:24;3151:17;3057:24;3095;;3151:17;;:::i;:::-;3145:24;198:7172;7033:1;7029:5;;7033:1;;;7050:5;;198:7172;;;;;;;;;;;7104:89;7111:5;;;;;;7025:226;;;3133:36;3191:13;198:7172;;2980:1052;4496:49;2980:1052;4204:14;2980:1052;4130:14;2980:1052;2851:14;2980:1052;4130:14;:::i;:::-;198:7172;-1:-1:-1;;;;;4099:14:0;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;4204:14;:::i;:::-;198:7172;-1:-1:-1;;;;;4173:14:0;;:::i;:::-;198:7172;;;2760:18;198:7172;;;;;;;;;;;;;;-1:-1:-1;;;;;198:7172:0;4282:32;198:7172;;;;;4282:32;:::i;:::-;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;4325:57;-1:-1:-1;;;;;4349:32:0;198:7172;;;;;;;4349:32;:::i;:::-;198:7172;4325:57;;:::i;:::-;4392:24;198:7172;;;4392:24;:::i;:::-;198:7172;;4439:47;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;4439:47;:::i;:::-;4426:10;;;198:7172;;;-1:-1:-1;;;;;198:7172:0;2563:15;198:7172;;-1:-1:-1;;;;;;198:7172:0;;;;;4496:49;198:7172;;;;;;;;;;-1:-1:-1;198:7172:0;;;;-1:-1:-1;198:7172:0;4556:36;198:7172;;;4556:36;:::i;:::-;198:7172;;4608:27;198:7172;;;;;;4608:27;198:7172;;;;;;;;;;;;;;;;;;;;;;;7104:89;7136:5;;;7164:9;7136:5;7164;;;;:::i;:::-;:9;:::i;:::-;198:7172;;7104:89;;;198:7172;;;;;;;;;2867:11;198:7172;;7025:226;7213:6;7209:42;7025:226;7209:42;198:7172;;-1:-1:-1;7025:226:0;;2980:1052;198:7172;;;;;;-1:-1:-1;;;;;198:7172:0;;;;3322:30;3321:48;-1:-1:-1;;;;;3322:30:0;;;;:::i;:::-;198:7172;;3321:48;;;:::i;:::-;3387:26;;;;;;198:7172;;;3441:22;;198:7172;;3546:18;;;3383:481;4130:14;2851;3383:481;4496:49;3383:481;3968:39;4204:14;3383:481;;;3911:39;3969:21;3383:481;;3912:21;;;;:::i;:::-;3911:39;:::i;:::-;3969:21;;;:::i;3968:39::-;7348:5;;;;;;:13;;2980:1052;4130:14;:::i;7348:13::-;;;;;198:7172;;;;;;;;;3383:481;3623:30;;3622:48;3623:30;;;;;:::i;3622:48::-;3696:26;;;;:52;;;3383:481;198:7172;;;3825:24;;;3383:481;4130:14;2851;3383:481;4496:49;3383:481;3968:39;4204:14;3383:481;;;3911:39;3969:21;3383:481;;;3696:52;198:7172;;;3726:22;;;3696:52;;2898:48;2924:22;;;;;2898:48;;198:7172;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;;;;;;;;;;;598:37;198:7172;598:37;;198:7172;598:37;;;;198:7172;;598:37;;;198:7172;598:37;;198:7172;;;;;-1:-1:-1;;;;;198:7172:0;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;2059:18;198:7172;;;;;;;;;;;;;;2102:10;;2098:128;;198:7172;;;;;;;;;2098:128;198:7172;;;;2059:18;198:7172;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2175:40:0;;-1:-1:-1;;;;;198:7172:0;;;;;2175:40;;198:7172;;;;;;;;;;;;;;;;;;;;;;;2175:40;;;;;;;198:7172;2175:40;;;2098:128;;;;2175:40;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;198:7172;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;4899:15;:27;198:7172;;4966:18;;:::i;:::-;198:7172;;;;;;;;;;5046:11;198:7172;5046:11;;198:7172;5046:15;198:7172;;5240:486;;;;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;5389:11;198:7172;5424:14;;;:::i;:::-;5463;;;:::i;:::-;5240:486;;5744:22;;;198:7172;;;5906:21;;;;:::i;:::-;5930:5;198:7172;;;;;;5930:5;198:7172;;;;;;;5968:22;;;;:::i;:::-;198:7172;5859:17;198:7172;5930:5;198:7172;;5930:5;198:7172;;;;6032:23;5967:43;;;;:::i;:::-;6032:23;;:::i;:::-;198:7172;;;;;;;;;;;6079:23;;198:7172;;;;;;;;;;;;6191:18;198:7172;;;;;;;;;;;;;;6242:15;;;;198:7172;;6326:14;;;;198:7172;6326:14;198:7172;6326:14;6828:49;6326:14;;;;6741:49;6326:14;;:::i;:::-;198:7172;;;6191:18;198:7172;;;;;;;;;;;;;;6378:284;;;;6432:20;6467:47;6432:20;-1:-1:-1;;;;;6432:20:0;;6491:22;6432:20;;;;:::i;:::-;198:7172;;;;;;;;;;6491:22;:::i;:::-;198:7172;6467:47;;:::i;:::-;6684;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;6684:47;:::i;6741:49::-;198:7172;;-1:-1:-1;;;6828:49:0;;-1:-1:-1;;;;;198:7172:0;;;;6828:49;;198:7172;;;;;;;;;;;;;;;;;;;;;;;;;;;6828:49;;;-1:-1:-1;;;;;198:7172:0;6828:49;;;;;;;198:7172;6828:49;6893;6828;198:7172;6828:49;;;6378:284;198:7172;;;;;;;;;;;;;;;6893:49;198:7172;;;;;;6828:49;;;;;;;;;;;;;:::i;:::-;;;6378:284;6569:20;-1:-1:-1;;;;;6569:20:0;6545:45;6569:20;;6628:22;6569:20;;;;:::i;:::-;198:7172;6545:45;;:::i;:::-;6628:22;:::i;:::-;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;6378:284;;198:7172;;;;;;;;;5240:486;198:7172;;-1:-1:-1;;;;;198:7172:0;;;;;;;;5594:11;198:7172;;;;5662:14;;;:::i;:::-;5701;;;:::i;:::-;5240:486;;;198:7172;;;;;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;-1:-1:-1;;;;;198:7172:0;;;;;;;;;;;;;;;;641:66;198:7172;;;;;;-1:-1:-1;198:7172:0;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;-1:-1:-1;;198:7172:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1718:67;;1747:10;198:7172;1718:67;;198:7172;1767:4;198:7172;;;;;;;;;;;;;;;1718:67;;;198:7172;1718:67;;;;;;;;;198:7172;;;;;1834:18;198:7172;;;;;;;;;;1834:39;198:7172;;;;;;1834:39;:::i;:::-;198:7172;;;;1883:14;198:7172;;;;;;;;;;;;;1747:10;198:7172;;;;;;;;;;;;1718:67;;;198:7172;1718:67;198:7172;1718:67;;;;;;;:::i;:::-;;;198:7172;;;;-1:-1:-1;;;;;198:7172:0;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;198:7172:0;;;;;-1:-1:-1;198:7172:0;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;5662:14;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;:::o;:::-;5701:14;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;198:7172:0;;;;;;-1:-1:-1;;;198:7172:0;;;;;;;:::o;1387:182::-;1522:10;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;;-1:-1:-1;1534:10:0;198:7172;-1:-1:-1;;;;;198:7172:0;;;;;;;;;1522:10;198:7172;1493:67;1513:7;1493:67;;198:7172;;;;;1513:7;198:7172;1522:10;198:7172;;;1534:10;198:7172;;;1546:13;198:7172;;;1546:13;198:7172;;;;;;1493:67;;;;;;:::i;:::-;198:7172;1483:78;;1387:182;:::o
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.