Developers
Contracts
Every contract an integrator calls on GIWA Sepolia (chain ID 91342), with the functions and events you are most likely to need. Signatures name struct parameters by their Solidity struct (PoolKey, PermitSingle, …); the full definitions are in each ABI.
Core
The Vault holds every pool's tokens and enforces flash accounting; CLPoolManager holds the state of every CL pool and emits the events an indexer follows. You read from both, but trades and liquidity changes reach them through the periphery, never directly.
| Contract | Address | ABI |
|---|---|---|
| Vault | ||
| CLPoolManager |
Vault
Holds every pool's tokens and runs flash accounting: inside a lock, each balance change is recorded as a per-currency delta, and the lock only closes once every delta is back to zero.
Functions
- lock(bytes data)
- Opens a lock and calls back lockAcquired(data) on the caller. The periphery contracts do this for you; call it directly only from your own contract.
- sync(address currency)
- Checkpoints the Vault's balance of an ERC-20 before you transfer it in, so the following settle() can measure the payment.
- settle()
- Credits the tokens paid since sync() (or msg.value for native ETH) against the caller's delta.
- take(address currency, address to, uint256 amount)
- Sends tokens out of the Vault, adding the amount to the caller's debt for that currency.
- currencyDelta(address settler, address currency)
- The open delta of one currency for one settler in the current lock. Non-zero at the end of a lock reverts the transaction.
- balanceOf(address owner, address currency)
- Balance an account holds inside the Vault (minted claims), separate from its ERC-20 wallet balance.
Events
- Transfer(address caller, address indexed from, address indexed to, address indexed currency, uint256 amount)
- Movements of Vault-held balances. Ordinary swaps and liquidity changes settle in ERC-20s and do not emit it.
All functions / All events
Read (12)
- allowance(address owner, address spender, address currency) view returns (uint256 amount)
- balanceOf(address owner, address currency) view returns (uint256 balance)
- currencyDelta(address settler, address currency) view returns (int256)
- getLocker() view returns (address)
- getUnsettledDeltasCount() view returns (uint256)
- getVaultReserve() view returns (address, uint256)
- isAppRegistered(address app) view returns (bool isRegistered)
- isOperator(address owner, address operator) view returns (bool isOperator)
- owner() view returns (address)
- pendingOwner() view returns (address)
- reservesOfApp(address app, address currency) view returns (uint256 reserve)
- supportsInterface(bytes4 interfaceId) view returns (bool)
Write (20)
- acceptOwnership()
- accountAppBalanceDelta(address currency, int128 delta, address settler)
- accountAppBalanceDelta(address currency0, address currency1, int256 delta, address settler, int256 hookDelta, address hook)
- accountAppBalanceDelta(address currency0, address currency1, int256 delta, address settler)
- approve(address spender, address currency, uint256 amount) returns (bool)
- burn(address from, address currency, uint256 amount)
- clear(address currency, uint256 amount)
- collectFee(address currency, uint256 amount, address recipient)
- lock(bytes data) returns (bytes result)
- mint(address to, address currency, uint256 amount)
- registerApp(address app)
- renounceOwnership()
- setOperator(address operator, bool approved) returns (bool)
- settle() payable returns (uint256)
- settleFor(address recipient) payable returns (uint256)
- sync(address currency)
- take(address currency, address to, uint256 amount)
- transfer(address receiver, address currency, uint256 amount) returns (bool)
- transferFrom(address sender, address receiver, address currency, uint256 amount) returns (bool)
- transferOwnership(address newOwner)
Events (6)
- AppRegistered(address app)
- Approval(address owner, address spender, address currency, uint256 amount)
- OperatorSet(address owner, address operator, bool approved)
- OwnershipTransferred(address previousOwner, address newOwner)
- OwnershipTransferStarted(address previousOwner, address newOwner)
- Transfer(address caller, address from, address to, address currency, uint256 amount)
CLPoolManager
Owns the state of every concentrated-liquidity pool — price, ticks, liquidity, fee growth — and emits the events an indexer follows. Pools are addressed by id = keccak256(abi.encode(PoolKey)).
Functions
- getSlot0(bytes32 id)
- Current sqrtPriceX96, tick, protocol fee and LP fee of a pool.
- getLiquidity(bytes32 id)
- Liquidity active at the current tick.
- getPoolTickInfo(bytes32 id, int24 tick)
- Gross and net liquidity and fee growth outside one initialized tick.
- getFeeGrowthGlobals(bytes32 id)
- Cumulative fees per unit of liquidity for each currency, as Q128 values.
- poolIdToPoolKey(bytes32 id)
- Recovers the PoolKey (currencies, hooks, fee, parameters) from a pool id.
- getPosition(bytes32 id, address owner, int24 tickLower, int24 tickUpper, bytes32 salt)
- Raw position state. For a position NFT, owner is CLPositionManager and salt is the token id as bytes32.
Events
- Initialize(bytes32 indexed id, address indexed currency0, address indexed currency1, address hooks, uint24 fee, bytes32 parameters, uint160 sqrtPriceX96, int24 tick)
- A pool was created. parameters packs the tick spacing (bits 16–39) and the hook permission bitmap (bits 0–15).
- Swap(bytes32 indexed id, address indexed sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee, uint16 protocolFee)
- One swap step in one pool, with the price and liquidity after it. sender is the contract that called the pool — the router — not the trader's wallet.
- ModifyLiquidity(bytes32 indexed id, address indexed sender, int24 tickLower, int24 tickUpper, int256 liquidityDelta, bytes32 salt)
- Liquidity added (positive delta) or removed (negative). For position NFTs, sender is CLPositionManager and salt is the token id.
- Donate(bytes32 indexed id, address indexed sender, uint256 amount0, uint256 amount1, int24 tick)
- Tokens donated to in-range liquidity providers.
All functions / All events
Read (15)
- extsload(bytes32 slot) view returns (bytes32)
- extsload(bytes32[] slots) view returns (bytes32[])
- getFeeGrowthGlobals(bytes32 id) view returns (uint256 feeGrowthGlobal0x128, uint256 feeGrowthGlobal1x128)
- getLiquidity(bytes32 id, address _owner, int24 tickLower, int24 tickUpper, bytes32 salt) view returns (uint128 liquidity)
- getLiquidity(bytes32 id) view returns (uint128 liquidity)
- getPoolBitmapInfo(bytes32 id, int16 word) view returns (uint256 tickBitmap)
- getPoolTickInfo(bytes32 id, int24 tick) view returns ((uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128))
- getPosition(bytes32 id, address owner, int24 tickLower, int24 tickUpper, bytes32 salt) view returns ((uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128))
- getSlot0(bytes32 id) view returns (uint160 sqrtPriceX96, int24 tick, uint24 protocolFee, uint24 lpFee)
- owner() view returns (address)
- paused() view returns (bool res)
- poolIdToPoolKey(bytes32 id) view returns (address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters)
- protocolFeeController() view returns (address)
- protocolFeesAccrued(address currency) view returns (uint256 amount)
- vault() view returns (address)
Write (11)
- collectProtocolFees(address recipient, address currency, uint256 amount) returns (uint256 amountCollected)
- donate((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint256 amount0, uint256 amount1, bytes hookData) returns (int256 delta)
- initialize((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint160 sqrtPriceX96) returns (int24 tick)
- modifyLiquidity((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), (int24 tickLower, int24 tickUpper, int256 liquidityDelta, bytes32 salt), bytes hookData) returns (int256 delta, int256 feeDelta)
- pause()
- setProtocolFee((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint24 newProtocolFee)
- setProtocolFeeController(address controller)
- swap((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), (bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96), bytes hookData) returns (int256 delta)
- transferOwnership(address newOwner)
- unpause()
- updateDynamicLPFee((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint24 newDynamicLPFee)
Events (10)
- Donate(bytes32 id, address sender, uint256 amount0, uint256 amount1, int24 tick)
- DynamicLPFeeUpdated(bytes32 id, uint24 dynamicLPFee)
- Initialize(bytes32 id, address currency0, address currency1, address hooks, uint24 fee, bytes32 parameters, uint160 sqrtPriceX96, int24 tick)
- ModifyLiquidity(bytes32 id, address sender, int24 tickLower, int24 tickUpper, int256 liquidityDelta, bytes32 salt)
- OwnershipTransferred(address previousOwner, address newOwner)
- Paused(address account)
- ProtocolFeeControllerUpdated(address protocolFeeController)
- ProtocolFeeUpdated(bytes32 id, uint24 protocolFee)
- Swap(bytes32 id, address sender, int128 amount0, int128 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick, uint24 fee, uint16 protocolFee)
- Unpaused(address account)
Periphery
The contracts you send transactions to. UniversalRouter executes swaps, CLPositionManager mints and changes liquidity positions, and CLQuoter and CLTickLens answer read-only questions about prices and ticks.
| Contract | Address | ABI |
|---|---|---|
| CLPositionManager | ||
| CLQuoter | ||
| CLTickLens | ||
| UniversalRouter |
CLPositionManager
Mints liquidity positions as ERC-721 NFTs and changes them through batched actions. Pulls tokens through Permit2, with itself as the Permit2 spender.
Functions
- modifyLiquidities(bytes payload, uint256 deadline)
- Runs an action plan: payload = abi.encode(bytes actions, bytes[] params). Mint 0x02, increase 0x00, decrease 0x01, burn 0x03, then settle/take or CLOSE_CURRENCY 0x12 per currency.
- initializePool(PoolKey key, uint160 sqrtPriceX96)
- Creates a pool at a starting price. Batch it with the first mint through multicall.
- permitBatch(address owner, PermitBatch _permitBatch, bytes signature)
- Submits a signed Permit2 allowance for both pool currencies, usually as the first call of a multicall.
- multicall(bytes[] data)
- Runs several calls in one transaction, e.g. permitBatch + modifyLiquidities, or initializePool + mint.
- positions(uint256 tokenId)
- PoolKey, tick range, liquidity and fee-growth checkpoints of a position.
- getPoolAndPositionInfo(uint256 tokenId)
- PoolKey plus a packed info word (tick range, subscriber flag) — cheaper than positions().
- ownerOf(uint256 id)
- Current owner of a position NFT.
Events
- MintPosition(uint256 indexed tokenId)
- A new position NFT was minted.
- ModifyLiquidity(uint256 indexed tokenId, int256 liquidityChange, int256 feesAccrued)
- A position's liquidity changed. feesAccrued is a packed BalanceDelta: amount0 in the upper 128 bits, amount1 in the lower.
- Transfer(address indexed from, address indexed to, uint256 indexed id)
- ERC-721 transfer; from is the zero address on mint and to on burn.
All functions / All events
Read (24)
- balanceOf(address owner) view returns (uint256)
- clPoolManager() view returns (address)
- DOMAIN_SEPARATOR() view returns (bytes32)
- getApproved(uint256) view returns (address)
- getPoolAndPositionInfo(uint256 tokenId) view returns ((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint256 info)
- getPositionLiquidity(uint256 tokenId) view returns (uint128 liquidity)
- isApprovedForAll(address, address) view returns (bool)
- msgSender() view returns (address)
- name() view returns (string)
- nextTokenId() view returns (uint256)
- nonces(address owner, uint256 word) view returns (uint256 bitmap)
- ownerOf(uint256 id) view returns (address owner)
- permit2() view returns (address)
- poolKeys(bytes25 poolId) view returns (address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters)
- positionInfo(uint256 tokenId) view returns (uint256 info)
- positions(uint256 tokenId) view returns ((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, address _subscriber)
- subscriber(uint256 tokenId) view returns (address subscriber)
- supportsInterface(bytes4 interfaceId) view returns (bool)
- symbol() view returns (string)
- tokenDescriptor() view returns (address)
- tokenURI(uint256 tokenId) view returns (string)
- unsubscribeGasLimit() view returns (uint256)
- vault() view returns (address)
- WETH9() view returns (address)
Write (17)
- approve(address spender, uint256 id)
- initializePool((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), uint160 sqrtPriceX96) payable returns (int24)
- lockAcquired(bytes data) returns (bytes)
- modifyLiquidities(bytes payload, uint256 deadline) payable
- modifyLiquiditiesWithoutLock(bytes actions, bytes[] params) payable
- multicall(bytes[] data) payable returns (bytes[] results)
- permit(address owner, ((address token, uint160 amount, uint48 expiration, uint48 nonce), address spender, uint256 sigDeadline), bytes signature) payable returns (bytes err)
- permit(address spender, uint256 tokenId, uint256 deadline, uint256 nonce, bytes signature) payable
- permitBatch(address owner, ((address token, uint160 amount, uint48 expiration, uint48 nonce)[], address spender, uint256 sigDeadline), bytes signature) payable returns (bytes err)
- permitForAll(address owner, address operator, bool approved, uint256 deadline, uint256 nonce, bytes signature) payable
- revokeNonce(uint256 nonce) payable
- safeTransferFrom(address from, address to, uint256 id, bytes data)
- safeTransferFrom(address from, address to, uint256 id)
- setApprovalForAll(address operator, bool approved)
- subscribe(uint256 tokenId, address newSubscriber, bytes data) payable
- transferFrom(address from, address to, uint256 id)
- unsubscribe(uint256 tokenId) payable
Events (7)
- Approval(address owner, address spender, uint256 id)
- ApprovalForAll(address owner, address operator, bool approved)
- MintPosition(uint256 tokenId)
- ModifyLiquidity(uint256 tokenId, int256 liquidityChange, int256 feesAccrued)
- Subscription(uint256 tokenId, address subscriber)
- Transfer(address from, address to, uint256 id)
- Unsubscription(uint256 tokenId, address subscriber)
CLQuoter
Simulates swaps to price them. The quote functions are non-view — they run the swap and revert internally — so call them with eth_call, never in a transaction.
Functions
- quoteExactInputSingle(QuoteExactSingleParams params)
- Output amount and gas estimate for an exact input in one pool. params = (PoolKey poolKey, bool zeroForOne, uint128 exactAmount, bytes hookData).
- quoteExactInput(QuoteExactParams params)
- Output amount and gas estimate for an exact input along a multi-pool path. params = (address exactCurrency, PathKey[] path, uint128 exactAmount).
- quoteExactOutputSingle(QuoteExactSingleParams params)
- Input amount required for an exact output in one pool.
- quoteExactOutput(QuoteExactParams params)
- Input amount required for an exact output along a path; exactCurrency is the output currency and the path runs backwards.
All functions / All events
Read (2)
- poolManager() view returns (address)
- vault() view returns (address)
Write (11)
- _quoteExactInput((address exactCurrency, (address intermediateCurrency, uint24 fee, address hooks, address poolManager, bytes hookData, bytes32 parameters)[], uint128 exactAmount)) returns (bytes)
- _quoteExactInputSingle(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)) returns (bytes)
- _quoteExactInputSingleList(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)[]) returns (bytes)
- _quoteExactOutput((address exactCurrency, (address intermediateCurrency, uint24 fee, address hooks, address poolManager, bytes hookData, bytes32 parameters)[], uint128 exactAmount)) returns (bytes)
- _quoteExactOutputSingle(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)) returns (bytes)
- lockAcquired(bytes data) returns (bytes)
- quoteExactInput((address exactCurrency, (address intermediateCurrency, uint24 fee, address hooks, address poolManager, bytes hookData, bytes32 parameters)[], uint128 exactAmount)) returns (uint256 amountOut, uint256 gasEstimate)
- quoteExactInputSingle(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)) returns (uint256 amountOut, uint256 gasEstimate)
- quoteExactInputSingleList(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)[]) returns (uint256 amountIn, uint256 gasEstimate)
- quoteExactOutput((address exactCurrency, (address intermediateCurrency, uint24 fee, address hooks, address poolManager, bytes hookData, bytes32 parameters)[], uint128 exactAmount)) returns (uint256 amountIn, uint256 gasEstimate)
- quoteExactOutputSingle(((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), bool zeroForOne, uint128 exactAmount, bytes hookData)) returns (uint256 amountIn, uint256 gasEstimate)
CLTickLens
Read-only helper that lists a pool's initialized ticks, for drawing liquidity depth or simulating swaps off-chain.
Functions
- getPopulatedTicksInWord(bytes32 id, int16 tickBitmapIndex)
- Every initialized tick in one 256-tick bitmap word, with liquidityNet and liquidityGross.
- getPopulatedTicksInWord(PoolKey key, int16 tickBitmapIndex)
- Same, addressed by PoolKey instead of pool id.
All functions / All events
Read (3)
- getPopulatedTicksInWord(bytes32 id, int16 tickBitmapIndex) view returns ((int24 tick, int128 liquidityNet, uint128 liquidityGross)[])
- getPopulatedTicksInWord((address currency0, address currency1, address hooks, address poolManager, uint24 fee, bytes32 parameters), int16 tickBitmapIndex) view returns ((int24 tick, int128 liquidityNet, uint128 liquidityGross)[])
- poolManager() view returns (address)
UniversalRouter
Entry point for swaps. Executes a list of commands — Permit2 permit, wrap/unwrap, Infinity swap, sweep — in one transaction. This deployment supports Infinity CL pools only.
Functions
- execute(bytes commands, bytes[] inputs, uint256 deadline)
- One command byte per input. Swaps use INFI_SWAP 0x10, whose input is an action plan like modifyLiquidities' (swap 0x07/0x09, then settle and take). Also PERMIT2_PERMIT 0x0a, WRAP_ETH 0x0b, UNWRAP_WETH 0x0c, SWEEP 0x04.
- execute(bytes commands, bytes[] inputs)
- Same without a deadline. Prefer the deadline overload for user transactions.
All functions / All events
Read (12)
- binPoolManager() view returns (address)
- clPoolManager() view returns (address)
- INFI_BIN_POSITION_MANAGER() view returns (address)
- INFI_CL_POSITION_MANAGER() view returns (address)
- msgSender() view returns (address)
- owner() view returns (address)
- paused() view returns (bool)
- pendingOwner() view returns (address)
- stableSwapFactory() view returns (address)
- stableSwapInfo() view returns (address)
- V3_POSITION_MANAGER() view returns (address)
- vault() view returns (address)
Write (10)
- acceptOwnership()
- execute(bytes commands, bytes[] inputs, uint256 deadline) payable
- execute(bytes commands, bytes[] inputs) payable
- lockAcquired(bytes data) returns (bytes)
- pancakeV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
- pause()
- renounceOwnership()
- setStableSwap(address _factory, address _info)
- transferOwnership(address newOwner)
- unpause()
Events (5)
- OwnershipTransferred(address previousOwner, address newOwner)
- OwnershipTransferStarted(address previousOwner, address newOwner)
- Paused(address account)
- SetStableSwap(address factory, address info)
- Unpaused(address account)
Shared
Standard contracts at their canonical addresses, the same as on other chains: Permit2 for token approvals, WETH9 at the OP Stack predeploy address, and Multicall3 for batching reads.
| Contract | Address | ABI |
|---|---|---|
| Permit2 | ||
| WETH9 | ||
| Multicall3 |
Permit2
Token approval manager at its canonical address. Approve an ERC-20 to Permit2 once; Permit2 then grants time-limited allowances to UniversalRouter and CLPositionManager.
Functions
- approve(address token, address spender, uint160 amount, uint48 expiration)
- On-chain allowance from the caller to a spender (e.g. UniversalRouter) until expiration.
- allowance(address, address, address)
- (owner, token, spender) → amount, expiration and the next nonce for a signed permit.
- permit(address owner, PermitSingle permitSingle, bytes signature)
- Sets an allowance from an EIP-712 signature instead of a transaction. Usually relayed by the spender (router command 0x0a).
Events
- Approval(address indexed owner, address indexed token, address indexed spender, uint160 amount, uint48 expiration)
- An allowance was set with approve().
- Permit(address indexed owner, address indexed token, address indexed spender, uint160 amount, uint48 expiration, uint48 nonce)
- An allowance was set from a signature.
All functions / All events
Read (3)
- allowance(address, address, address) view returns (uint160 amount, uint48 expiration, uint48 nonce)
- DOMAIN_SEPARATOR() view returns (bytes32)
- nonceBitmap(address, uint256) view returns (uint256)
Write (12)
- approve(address token, address spender, uint160 amount, uint48 expiration)
- invalidateNonces(address token, address spender, uint48 newNonce)
- invalidateUnorderedNonces(uint256 wordPos, uint256 mask)
- lockdown((address token, address spender)[])
- permit(address owner, ((address token, uint160 amount, uint48 expiration, uint48 nonce)[], address spender, uint256 sigDeadline), bytes signature)
- permit(address owner, ((address token, uint160 amount, uint48 expiration, uint48 nonce), address spender, uint256 sigDeadline), bytes signature)
- permitTransferFrom(((address token, uint256 amount)[], uint256 nonce, uint256 deadline), (address to, uint256 requestedAmount)[], address owner, bytes signature)
- permitTransferFrom(((address token, uint256 amount), uint256 nonce, uint256 deadline), (address to, uint256 requestedAmount), address owner, bytes signature)
- permitWitnessTransferFrom(((address token, uint256 amount)[], uint256 nonce, uint256 deadline), (address to, uint256 requestedAmount)[], address owner, bytes32 witness, string witnessTypeString, bytes signature)
- permitWitnessTransferFrom(((address token, uint256 amount), uint256 nonce, uint256 deadline), (address to, uint256 requestedAmount), address owner, bytes32 witness, string witnessTypeString, bytes signature)
- transferFrom(address from, address to, uint160 amount, address token)
- transferFrom((address from, address to, uint160 amount, address token)[])
Events (5)
- Approval(address owner, address token, address spender, uint160 amount, uint48 expiration)
- Lockdown(address owner, address token, address spender)
- NonceInvalidation(address owner, address token, address spender, uint48 newNonce, uint48 oldNonce)
- Permit(address owner, address token, address spender, uint160 amount, uint48 expiration, uint48 nonce)
- UnorderedNonceInvalidation(address owner, uint256 word, uint256 mask)
WETH9
Wrapped ETH at the OP Stack predeploy address. Pools may hold native ETH (address zero) or WETH; the router wraps and unwraps as needed.
Functions
- deposit()
- Wraps the ETH sent as msg.value into WETH.
- withdraw(uint256 wad)
- Unwraps WETH back to ETH.
Events
- Deposit(address indexed dst, uint256 wad)
- ETH wrapped.
- Withdrawal(address indexed src, uint256 wad)
- WETH unwrapped.
All functions / All events
Read (6)
- allowance(address owner, address spender) view returns (uint256)
- balanceOf(address account) view returns (uint256)
- decimals() view returns (uint8)
- name() view returns (string)
- symbol() view returns (string)
- totalSupply() view returns (uint256)
Write (5)
- approve(address spender, uint256 amount) returns (bool)
- deposit() payable
- transfer(address recipient, uint256 amount) returns (bool)
- transferFrom(address sender, address recipient, uint256 amount) returns (bool)
- withdraw(uint256 wad)
Events (4)
- Approval(address owner, address spender, uint256 value)
- Deposit(address dst, uint256 wad)
- Transfer(address from, address to, uint256 value)
- Withdrawal(address src, uint256 wad)
Multicall3
Batches read calls into one RPC request at its canonical address. The app reads pool state and runs quotes through it.
Functions
- aggregate3((address,bool,bytes)[] calls)
- Runs each (target, allowFailure, callData) and returns (success, returnData) per call.
- getEthBalance(address addr)
- Native ETH balance, batchable with token reads.
All functions / All events
Read (3)
- aggregate3((address target, bool allowFailure, bytes callData)[]) view returns ((bool success, bytes returnData)[])
- getCurrentBlockTimestamp() view returns (uint256 timestamp)
- getEthBalance(address addr) view returns (uint256 balance)
ABIs
The copy button in each table's ABI column copies the contract's full ABI as JSON. The same ABI is served as a static file at /docs/abis/<key>.json, where <key> is one of vault, clPoolManager, clPositionManager, clQuoter, clTickLens, universalRouter, permit2, weth9 and multicall3 — for example /docs/abis/clQuoter.json.
Addresses and ABIs are generated from the deployment manifest for chain 91342, so this page always matches the contracts the app itself uses. WETH9 and Multicall3 are predeploys outside that build: the WETH9 file is the standard ERC-20 ABI plus deposit, withdraw and their events, and the Multicall3 file covers the members viem uses (aggregate3, getEthBalance, getCurrentBlockTimestamp).
This is a testnet deployment. Contracts may be redeployed to new addresses, and pools and positions do not carry over when that happens. Keep addresses in configuration rather than scattered through code, recheck them here after a redeploy, and check the chain ID before sending transactions.