@skate-org/amm-sui-v2
v2.0.0-beta.16
Published
Skate AMM v2 SDK — Sui periphery (readers, transaction builders, submitters)
Readme
@skate-org/amm-sui-v2
Sui periphery surface for the Skate AMM v2 SDK. Purely functional — readers, transaction builders, submitters, and an env-bound client class.
Surface
Connection
getSuiClient({ mode, transport? })—@mysten/suiSuiClient factory.
Readers
readPeripheryPool({ kernelPool, mode, client? })→PeripheryPoolState(kernel linkage, manager, fee, pool coin balances).readUserPoolBalances({ user, poolKey, mode, client? })→UserPoolBalances(BCS-deserialized user state with staged amounts andwithdrawAfterMs).
Builders → Promise<Transaction>
buildSwap(params)buildMint(params)buildBurn(params)— NFT-based burn (Move target::burn)buildIncreaseLiquidity(params)buildDecreaseLiquidity(params)
Submitters → Promise<string> (digest; build + sign + broadcast)
submitSwap(signer, params)—modetaken fromparams.modesubmitMint(signer, params)submitBurn(signer, params)submitIncreaseLiquidity(signer, params)submitDecreaseLiquidity(signer, params)
signer is a Signer from @mysten/sui/cryptography (e.g.
Ed25519Keypair).
SkateAmm class (headline entry point)
One object that composes AmmCore (pool catalog), AmmApi (quotes +
actions), and AmmSui (build/submit/read). Expose escape hatches via
.core, .api, .vm.
const amm = new SkateAmm("PRODUCTION");
// Quotes
const quote = await amm.quote.swap({ poolKey: "USDC_USDT", ... });
const ranges = await amm.quote.boostedRange();
// Actions
const action = await amm.actions.get({ srcChain: CHAIN.SUI, srcHash: "..." });
await amm.actions.waitForExecuted({ srcChain: CHAIN.SUI, srcHash: "..." });
// Build + submit
const tx = await amm.buildSwap({ poolKey: "USDC_USDT", ... });
const digest = await amm.submitSwap(signer, { poolKey: "USDC_USDT", ... });
// Pool catalog
const keys = amm.pools.keys();
const info = amm.pools.byKey("USDC_USDT");
// Sui extra
const client = amm.getSuiClient();Env-bound client
AmmSui wraps all of the above — construct with a fixed env, then call
without mode:
const sui = new AmmSui("PRODUCTION");
const tx = await sui.buildSwap({ poolKey: "USDC_USDT", ... });
const digest = await sui.submitSwap(signer, { poolKey: "USDC_USDT", ... });
const pool = await sui.readPeripheryPool({ kernelPool: "0x..." });
const user = await sui.readUserPoolBalances({ user: "0xUSER", poolKey: "USDC_USDT" });Helpers
swapAmountNormalized(n: number) → bigint(NORMALIZED_DECIMALS = 6)swapAmountNative(n: number, decimals: number) → bigintvalidateRecipientBytes32,validateSqrtPrice,validateTickRange,validateDeadline
Errors
SuiReadError,SuiWriteError— both extendSdkError.
Install
pnpm add @skate-org/amm-sui-v2 @skate-org/amm-core-v2Peer dep: @mysten/sui ^1.34.
Use via the umbrella
import { sui } from "@skate-org/amm-v2";
const tx = await sui.buildSwap({ ... });Direct package imports keep unprefixed names:
import { buildSwap } from "@skate-org/amm-sui-v2";
const tx = await buildSwap({ ... });Status
Live on Sui mainnet since 2026-05-18 (package 0x96e1d3…, USDC/USDT pool).
STAGING + PRODUCTION alias DEV as of 2.0.0-beta.10.
Move contract specifics:
- Deadline is a unix-MILLISECOND timestamp on the Move side; this package takes deadline as unix seconds and multiplies by 1000n before passing to the Move call.
- Every periphery
moveCallincludes theActionBoxConfigshared object and0x6Clock as the last two account arguments — handled transparently viaSUI_ENV[mode]andSUI_CLOCK_OBJECT_IDconstants.
See docs/superpowers/specs/2026-05-04-svm-sui-integration-design.md
for the design.
