viem
Version:
1,506 lines • 56.3 kB
TypeScript
import type { Address } from 'abitype';
import { TokenId } from 'ox/tempo';
import type { Account } from '../../accounts/types.js';
import type { MulticallParameters } from '../../actions/public/multicall.js';
import type { ReadContractReturnType } from '../../actions/public/readContract.js';
import type { WatchContractEventParameters } from '../../actions/public/watchContractEvent.js';
import type { WriteContractReturnType } from '../../actions/wallet/writeContract.js';
import { writeContract } from '../../actions/wallet/writeContract.js';
import { writeContractSync } from '../../actions/wallet/writeContractSync.js';
import type { Client } from '../../clients/createClient.js';
import type { Transport } from '../../clients/transports/createTransport.js';
import type { Chain } from '../../types/chain.js';
import type { ExtractAbiItem, GetEventArgs } from '../../types/contract.js';
import type { Log, Log as viem_Log } from '../../types/log.js';
import type { Hex } from '../../types/misc.js';
import type { TransactionReceipt } from '../../types/transaction.js';
import type { Compute, OneOf, UnionOmit } from '../../types/utils.js';
import * as Abis from '../Abis.js';
import type { ReadParameters, WriteParameters } from '../internal/types.js';
/**
* Gets the reserves for a liquidity pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
*
* const client = createClient({
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const pool = await Actions.amm.getPool(client, {
* userToken: '0x...',
* validatorToken: '0x...',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The pool reserves.
*/
export declare function getPool<chain extends Chain | undefined>(client: Client<Transport, chain>, parameters: getPool.Parameters): Promise<getPool.ReturnValue>;
export declare namespace getPool {
type Parameters = UnionOmit<MulticallParameters, 'allowFailure' | 'contracts' | 'deployless'> & Args;
type Args = {
/** Address or ID of the user token. */
userToken: TokenId.TokenIdOrAddress;
/** Address or ID of the validator token. */
validatorToken: TokenId.TokenIdOrAddress;
};
type ReturnValue = Compute<{
/** Reserve of user token. */
reserveUserToken: bigint;
/** Reserve of validator token. */
reserveValidatorToken: bigint;
/** Total supply of LP tokens. */
totalSupply: bigint;
}>;
/**
* Defines calls to the `getPool` and `totalSupply` functions.
*
* @param args - Arguments.
* @returns The calls.
*/
function calls(args: Args): readonly [{
abi: [{
readonly name: "getPool";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}];
functionName: "getPool";
} & {
args: readonly [`0x${string}`, `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
}, {
abi: [{
readonly name: "totalSupply";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}];
functionName: "totalSupply";
} & {
args: readonly [poolId: `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
}];
}
/**
* Gets the LP token balance for an account in a specific pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
*
* const client = createClient({
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const poolId = await Actions.amm.getPoolId(client, {
* userToken: '0x...',
* validatorToken: '0x...',
* })
*
* const balance = await Actions.amm.getLiquidityBalance(client, {
* poolId,
* address: '0x...',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The LP token balance.
*/
export declare function getLiquidityBalance<chain extends Chain | undefined>(client: Client<Transport, chain>, parameters: getLiquidityBalance.Parameters): Promise<getLiquidityBalance.ReturnValue>;
export declare namespace getLiquidityBalance {
type Parameters = ReadParameters & Args;
type Args = {
/** Address to check balance for. */
address: Address;
} & OneOf<{
/** Pool ID. */
poolId: Hex;
} | {
/** User token. */
userToken: TokenId.TokenIdOrAddress;
/** Validator token. */
validatorToken: TokenId.TokenIdOrAddress;
}>;
type ReturnValue = ReadContractReturnType<typeof Abis.feeAmm, 'liquidityBalances', never>;
/**
* Defines a call to the `liquidityBalances` function.
*
* @param args - Arguments.
* @returns The call.
*/
function call(args: Args): {
abi: [{
readonly name: "liquidityBalances";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}, {
readonly type: "address";
readonly name: "user";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}];
functionName: "liquidityBalances";
} & {
args: readonly [poolId: `0x${string}`, user: `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
};
}
/**
* Performs a rebalance swap from validator token to user token.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const hash = await Actions.amm.rebalanceSwap(client, {
* userToken: '0x...',
* validatorToken: '0x...',
* amountOut: 100n,
* to: '0x...',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The transaction hash.
*/
export declare function rebalanceSwap<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: rebalanceSwap.Parameters<chain, account>): Promise<rebalanceSwap.ReturnValue>;
export declare namespace rebalanceSwap {
type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = WriteParameters<chain, account> & Args;
type Args = {
/** Amount of user token to receive. */
amountOut: bigint;
/** Address to send the user token to. */
to: Address;
/** Address or ID of the user token. */
userToken: TokenId.TokenIdOrAddress;
/** Address or ID of the validator token. */
validatorToken: TokenId.TokenIdOrAddress;
};
type ReturnValue = WriteContractReturnType;
/** @internal */
function inner<action extends typeof writeContract | typeof writeContractSync, chain extends Chain | undefined, account extends Account | undefined>(action: action, client: Client<Transport, chain, account>, parameters: rebalanceSwap.Parameters<chain, account>): Promise<ReturnType<action>>;
/**
* Defines a call to the `rebalanceSwap` function.
*
* Can be passed as a parameter to:
* - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call
* - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call
* - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls
*
* @example
* ```ts
* import { createClient, http, walletActions } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
*
* const client = createClient({
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* }).extend(walletActions)
*
* const { result } = await client.sendCalls({
* calls: [
* actions.amm.rebalanceSwap.call({
* userToken: '0x20c0...beef',
* validatorToken: '0x20c0...babe',
* amountOut: 100n,
* to: '0xfeed...fede',
* }),
* actions.amm.rebalanceSwap.call({
* userToken: '0x20c0...babe',
* validatorToken: '0x20c0...babe',
* amountOut: 100n,
* to: '0xfeed...fede',
* }),
* ]
* })
* ```
*
* @param args - Arguments.
* @returns The call.
*/
function call(args: Args): {
abi: [{
readonly name: "rebalanceSwap";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountIn";
}];
}];
functionName: "rebalanceSwap";
} & {
args: readonly [`0x${string}`, `0x${string}`, amountOut: bigint, to: `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
};
/**
* Extracts the `RebalanceSwap` event from logs.
*
* @param logs - The logs.
* @returns The `RebalanceSwap` event.
*/
function extractEvent(logs: Log[]): Log<bigint, number, false, undefined, true, readonly [{
readonly name: "M";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "N";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "SCALE";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "MIN_LIQUIDITY";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "getPoolId";
readonly type: "function";
readonly stateMutability: "pure";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "bytes32";
}];
}, {
readonly name: "getPool";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "pools";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "mint";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "burn";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}];
}, {
readonly name: "totalSupply";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "liquidityBalances";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}, {
readonly type: "address";
readonly name: "user";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "rebalanceSwap";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountIn";
}];
}, {
readonly name: "Mint";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
}, {
readonly type: "address";
readonly name: "to";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "Burn";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
}, {
readonly name: "RebalanceSwap";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "swapper";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountIn";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}];
}, {
readonly name: "IdenticalAddresses";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidToken";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientLiquidity";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientReserves";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidAmount";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "DivisionByZero";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidSwapCalculation";
readonly type: "error";
readonly inputs: readonly [];
}], "RebalanceSwap">;
}
/**
* Performs a rebalance swap from validator token to user token.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const result = await Actions.amm.rebalanceSwapSync(client, {
* userToken: '0x...',
* validatorToken: '0x...',
* amountOut: 100n,
* to: '0x...',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The transaction receipt and event data.
*/
export declare function rebalanceSwapSync<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: rebalanceSwapSync.Parameters<chain, account>): Promise<rebalanceSwapSync.ReturnValue>;
export declare namespace rebalanceSwapSync {
type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = rebalanceSwap.Parameters<chain, account>;
type Args = rebalanceSwap.Args;
type ReturnValue = Compute<GetEventArgs<typeof Abis.feeAmm, 'RebalanceSwap', {
IndexedOnly: false;
Required: true;
}> & {
/** Transaction receipt. */
receipt: TransactionReceipt;
}>;
}
/**
* Adds liquidity to a pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const hash = await Actions.amm.mint(client, {
* userTokenAddress: '0x20c0...beef',
* validatorTokenAddress: '0x20c0...babe',
* validatorTokenAmount: 100n,
* to: '0xfeed...fede',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The transaction hash.
*/
export declare function mint<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: mint.Parameters<chain, account>): Promise<mint.ReturnValue>;
export declare namespace mint {
type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = WriteParameters<chain, account> & Args;
type Args = {
/** Address to mint LP tokens to. */
to: Address;
/** User token address. */
userTokenAddress: TokenId.TokenIdOrAddress;
/** Validator token address. */
validatorTokenAddress: TokenId.TokenIdOrAddress;
/** Amount of validator token to add. */
validatorTokenAmount: bigint;
};
type ReturnValue = WriteContractReturnType;
/** @internal */
function inner<action extends typeof writeContract | typeof writeContractSync, chain extends Chain | undefined, account extends Account | undefined>(action: action, client: Client<Transport, chain, account>, parameters: mint.Parameters<chain, account>): Promise<ReturnType<action>>;
/**
* Defines a call to the `mint` function.
*
* Can be passed as a parameter to:
* - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call
* - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call
* - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls
*
* @example
* ```ts
* import { createClient, http, walletActions } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
*
* const client = createClient({
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* }).extend(walletActions)
*
* const { result } = await client.sendCalls({
* calls: [
* actions.amm.mint.call({
* userTokenAddress: '0x20c0...beef',
* validatorTokenAddress: '0x20c0...babe',
* validatorTokenAmount: 100n,
* to: '0xfeed...fede',
* }),
* actions.amm.mint.call({
* userTokenAddress: '0x20c0...babe',
* validatorTokenAddress: '0x20c0...babe',
* validatorTokenAmount: 100n,
* to: '0xfeed...fede',
* }),
* ]
* })
* ```
*
* @param args - Arguments.
* @returns The call.
*/
function call(args: Args): {
abi: [{
readonly name: "mint";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "liquidity";
}];
}];
functionName: "mint";
} & {
args: readonly [`0x${string}`, `0x${string}`, bigint, to: `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
};
/**
* Extracts the `Mint` event from logs.
*
* @param logs - The logs.
* @returns The `Mint` event.
*/
function extractEvent(logs: Log[]): Log<bigint, number, false, undefined, true, readonly [{
readonly name: "M";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "N";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "SCALE";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "MIN_LIQUIDITY";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "getPoolId";
readonly type: "function";
readonly stateMutability: "pure";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "bytes32";
}];
}, {
readonly name: "getPool";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "pools";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "mint";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "burn";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}];
}, {
readonly name: "totalSupply";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "liquidityBalances";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}, {
readonly type: "address";
readonly name: "user";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "rebalanceSwap";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountIn";
}];
}, {
readonly name: "Mint";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
}, {
readonly type: "address";
readonly name: "to";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "Burn";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
}, {
readonly name: "RebalanceSwap";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "swapper";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountIn";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}];
}, {
readonly name: "IdenticalAddresses";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidToken";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientLiquidity";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientReserves";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidAmount";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "DivisionByZero";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidSwapCalculation";
readonly type: "error";
readonly inputs: readonly [];
}], "Mint">;
}
/**
* Adds liquidity to a pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const hash = await Actions.amm.mint(client, {
* userTokenAddress: '0x20c0...beef',
* validatorTokenAddress: '0x20c0...babe',
* validatorTokenAmount: 100n,
* to: '0xfeed...fede',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The transaction receipt and event data.
*/
export declare function mintSync<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: mintSync.Parameters<chain, account>): Promise<mintSync.ReturnValue>;
export declare namespace mintSync {
type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = mint.Parameters<chain, account>;
type Args = mint.Args;
type ReturnValue = Compute<GetEventArgs<typeof Abis.feeAmm, 'Mint', {
IndexedOnly: false;
Required: true;
}> & {
/** Transaction receipt. */
receipt: TransactionReceipt;
}>;
}
/**
* Removes liquidity from a pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const hash = await Actions.amm.burn(client, {
* userToken: '0x20c0...beef',
* validatorToken: '0x20c0...babe',
* liquidity: 50n,
* to: '0xfeed...fede',
* })
* ```
*
* @param client - Client.
* @param parameters - Parameters.
* @returns The transaction hash.
*/
export declare function burn<chain extends Chain | undefined, account extends Account | undefined>(client: Client<Transport, chain, account>, parameters: burn.Parameters<chain, account>): Promise<burn.ReturnValue>;
export declare namespace burn {
type Parameters<chain extends Chain | undefined = Chain | undefined, account extends Account | undefined = Account | undefined> = WriteParameters<chain, account> & Args;
type Args = {
/** Amount of LP tokens to burn. */
liquidity: bigint;
/** Address to send tokens to. */
to: Address;
/** Address or ID of the user token. */
userToken: TokenId.TokenIdOrAddress;
/** Address or ID of the validator token. */
validatorToken: TokenId.TokenIdOrAddress;
};
type ReturnValue = WriteContractReturnType;
/** @internal */
function inner<action extends typeof writeContract | typeof writeContractSync, chain extends Chain | undefined, account extends Account | undefined>(action: action, client: Client<Transport, chain, account>, parameters: burn.Parameters<chain, account>): Promise<ReturnType<action>>;
/**
* Defines a call to the `burn` function.
*
* Can be passed as a parameter to:
* - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call
* - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call
* - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls
*
* @example
* ```ts
* import { createClient, http, walletActions } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
*
* const client = createClient({
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* }).extend(walletActions)
*
* const { result } = await client.sendCalls({
* calls: [
* actions.amm.burn.call({
* liquidity: 100n,
* to: '0xfeed...fede',
* userToken: '0x20c0...beef',
* validatorToken: '0x20c0...babe',
* }),
* actions.amm.burn.call({
* liquidity: 100n,
* to: '0xfeed...fede',
* userToken: '0x20c0...babe',
* validatorToken: '0x20c0...babe',
* }),
* ]
* })
* ```
*
* @param args - Arguments.
* @returns The call.
*/
function call(args: Args): {
abi: [{
readonly name: "burn";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}];
}];
functionName: "burn";
} & {
args: readonly [`0x${string}`, `0x${string}`, liquidity: bigint, to: `0x${string}`];
} & {
address: Address;
} & {
data: Hex;
to: Address;
};
/**
* Extracts the `Burn` event from logs.
*
* @param logs - The logs.
* @returns The `Burn` event.
*/
function extractEvent(logs: Log[]): Log<bigint, number, false, undefined, true, readonly [{
readonly name: "M";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "N";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "SCALE";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "MIN_LIQUIDITY";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "getPoolId";
readonly type: "function";
readonly stateMutability: "pure";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "bytes32";
}];
}, {
readonly name: "getPool";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "pools";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "tuple";
readonly components: readonly [{
readonly type: "uint128";
readonly name: "reserveUserToken";
}, {
readonly type: "uint128";
readonly name: "reserveValidatorToken";
}];
}];
}, {
readonly name: "mint";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "burn";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}];
}, {
readonly name: "totalSupply";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "liquidityBalances";
readonly type: "function";
readonly stateMutability: "view";
readonly inputs: readonly [{
readonly type: "bytes32";
readonly name: "poolId";
}, {
readonly type: "address";
readonly name: "user";
}];
readonly outputs: readonly [{
readonly type: "uint256";
}];
}, {
readonly name: "rebalanceSwap";
readonly type: "function";
readonly stateMutability: "nonpayable";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
}, {
readonly type: "address";
readonly name: "validatorToken";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}, {
readonly type: "address";
readonly name: "to";
}];
readonly outputs: readonly [{
readonly type: "uint256";
readonly name: "amountIn";
}];
}, {
readonly name: "Mint";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
}, {
readonly type: "address";
readonly name: "to";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}];
}, {
readonly name: "Burn";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "sender";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountUserToken";
}, {
readonly type: "uint256";
readonly name: "amountValidatorToken";
}, {
readonly type: "uint256";
readonly name: "liquidity";
}, {
readonly type: "address";
readonly name: "to";
}];
}, {
readonly name: "RebalanceSwap";
readonly type: "event";
readonly inputs: readonly [{
readonly type: "address";
readonly name: "userToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "validatorToken";
readonly indexed: true;
}, {
readonly type: "address";
readonly name: "swapper";
readonly indexed: true;
}, {
readonly type: "uint256";
readonly name: "amountIn";
}, {
readonly type: "uint256";
readonly name: "amountOut";
}];
}, {
readonly name: "IdenticalAddresses";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidToken";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientLiquidity";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InsufficientReserves";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidAmount";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "DivisionByZero";
readonly type: "error";
readonly inputs: readonly [];
}, {
readonly name: "InvalidSwapCalculation";
readonly type: "error";
readonly inputs: readonly [];
}], "Burn">;
}
/**
* Removes liquidity from a pool.
*
* @example
* ```ts
* import { createClient, http } from 'viem'
* import { tempo } from 'viem/chains'
* import { Actions } from 'viem/tempo'
* import { privateKeyToAccount } from 'viem/accounts'
*
* const client = createClient({
* account: privateKeyToAccount('0x...'),
* chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })
* transport: http(),
* })
*
* const result =