{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cetus",
    "name": "cetus",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/k66inthesky/cetus",
    "canonicalUrl": "https://clawhub.ai/k66inthesky/cetus",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cetus",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cetus",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/cetus"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/cetus",
    "agentPageUrl": "https://openagent3.xyz/skills/cetus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cetus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cetus/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Cetus Protocol SDK v2 - OpenClaw Integration Guide",
        "body": "This guide covers all Cetus SDK v2 packages for building DeFi applications on Sui."
      },
      {
        "title": "Table of Contents",
        "body": "Common SDK\nCLMM SDK\nDLMM SDK\nVaults SDK\nFarms SDK\nxCETUS SDK\nLimit Order SDK\nBurn SDK\nDCA SDK\nZap SDK\nAggregator SDK"
      },
      {
        "title": "Common SDK",
        "body": "Foundational utility library shared across all Cetus SDKs.\n\nnpm install @cetusprotocol/common-sdk\n\nProvides essential utilities and shared functionality for protocol interactions. All other SDKs depend on this package."
      },
      {
        "title": "CLMM SDK",
        "body": "Concentrated Liquidity Market Maker - the core AMM of Cetus.\n\nnpm install @cetusprotocol/sui-clmm-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusClmmSDK } from '@cetusprotocol/sui-clmm-sdk'\n\n// Default mainnet\nconst sdk = CetusClmmSDK.createSDK()\n\n// Custom environment\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet' }) // or 'testnet'\n\n// Custom RPC\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet', full_rpc_url: 'YOUR_URL' })\n\n// Custom SuiClient\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet', sui_client: yourClient })\n\n// Set sender address (required before tx operations)\nsdk.setSenderAddress('YOUR_SUI_ADDRESS')"
      },
      {
        "title": "DLMM SDK",
        "body": "Dynamic Liquidity Market Maker - discrete bin-based AMM with dynamic fees.\n\nnpm install @cetusprotocol/dlmm-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusDlmmSDK } from '@cetusprotocol/dlmm-sdk'\n\nconst sdk = CetusDlmmSDK.createSDK()\n// or with options: CetusDlmmSDK.createSDK({ env, full_rpc_url, sui_client })\nsdk.setSenderAddress(walletAddress)"
      },
      {
        "title": "Pool Operations",
        "body": "// Get all pools\nconst pools = await sdk.Dlmm.getPoolList()\n\n// Get specific pool\nconst pool = await sdk.Dlmm.getPool(pool_id)\n\n// Get bin configuration\nconst binConfig = await sdk.Dlmm.getBinConfig(config_id)\n\n// Get pool transaction history\nconst history = await sdk.Dlmm.getPoolTransactionHistory(pool_id)"
      },
      {
        "title": "Position Management",
        "body": "Three liquidity distribution strategies:\n\nSpot - even distribution across bins\nBidAsk - concentrated at specific price levels\nCurve - smooth bell-curve distribution\n\n// Calculate optimal liquidity distribution\nconst addInfo = await sdk.Dlmm.calculateAddLiquidityInfo(params)\n\n// Add liquidity\nconst payload = await sdk.Dlmm.addLiquidityPayload(params)\n\n// Remove liquidity\nconst payload = await sdk.Dlmm.removeLiquidityPayload(params)\n\n// Close position\nconst payload = await sdk.Dlmm.closePositionPayload(params)"
      },
      {
        "title": "Swap Operations",
        "body": "// Get swap quote\nconst quote = await sdk.Dlmm.preSwapQuote(params)\n\n// Execute swap\nconst payload = await sdk.Dlmm.swapPayload(params)"
      },
      {
        "title": "Fee & Reward Operations",
        "body": "// Get total fee rate (base + variable)\nconst feeRate = await sdk.Dlmm.getTotalFeeRate(pool_id)\n\n// Collect fees\nconst payload = await sdk.Dlmm.collectFeePayload(params)\n\n// Collect rewards\nconst payload = await sdk.Dlmm.collectRewardPayload(params)"
      },
      {
        "title": "Pool Creation",
        "body": "// Create pool only\nconst payload = await sdk.Dlmm.createPoolPayload(params)\n\n// Create pool + add initial liquidity\nconst payload = await sdk.Dlmm.createPoolAndAddLiquidityPayload(params)"
      },
      {
        "title": "Utility: BinUtils",
        "body": "import { BinUtils } from '@cetusprotocol/dlmm-sdk'\n\n// Price-bin conversions\nBinUtils.getPriceFromBinId(binId, binStep)\nBinUtils.getBinIdFromPrice(price, binStep)\n\n// Liquidity calculations\nBinUtils.calculateLiquidity(params)"
      },
      {
        "title": "Vaults SDK",
        "body": "Automated liquidity management with fee reinvestment and rebalancing.\n\nnpm install @cetusprotocol/vaults-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusVaultsSDK } from '@cetusprotocol/vaults-sdk'\n\nconst sdk = CetusVaultsSDK.createSDK()\n// or: CetusVaultsSDK.createSDK({ env, sui_client })\n// or: CetusVaultsSDK.createSDK({ env, full_rpc_url })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Vault Queries",
        "body": "// Get all vaults for an owner\nconst vaults = await sdk.Vaults.getOwnerVaultsBalance(owner)\n\n// Get specific vault\nconst vault = await sdk.Vaults.getVault(vault_id)\n\n// Get LP token balance\nconst balance = await sdk.getOwnerCoinBalances(address, lp_token_type)"
      },
      {
        "title": "Deposit",
        "body": "// Calculate deposit amounts\nconst amounts = await sdk.Vaults.calculateDepositAmount(params)\n\n// Execute deposit\nconst tx = await sdk.Vaults.deposit(params, tx)"
      },
      {
        "title": "Withdraw",
        "body": "// Calculate withdrawal amounts\nconst amounts = await sdk.Vaults.calculateWithdrawAmount(params)\n\n// Execute withdrawal\nconst tx = await sdk.Vaults.withdraw(params, tx)"
      },
      {
        "title": "Vesting",
        "body": "// Get vest info for multiple vaults\nconst vestInfoList = await sdk.Vest.getVaultsVestInfoList([vaultId])\n\n// Get vest info for a single vault\nconst vestInfo = await sdk.Vest.getVaultsVestInfo(vault_id)\n\n// Get user's vest NFTs\nconst nfts = await sdk.Vest.getOwnerVaultVestNFT(senderAddress)\n\n// Redeem vested tokens\nconst payload = await sdk.Vest.buildRedeemPayload(options)"
      },
      {
        "title": "Farms SDK",
        "body": "Staking CLMM positions for additional reward farming.\n\nnpm install @cetusprotocol/farms-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusFarmsSDK } from '@cetusprotocol/farms-sdk'\n\nconst sdk = CetusFarmsSDK.createSDK()\n// or: CetusFarmsSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Pool Queries",
        "body": "// Get all farming pools\nconst pools = await sdk.Farms.getFarmsPoolList()\n\n// Get specific pool\nconst pool = await sdk.Farms.getFarmsPool(pool_id)\n\n// Get user's position NFTs\nconst nfts = await sdk.Farms.getOwnedFarmsPositionNFTList(wallet)\n\n// Get specific NFT details\nconst nft = await sdk.Farms.getFarmsPositionNFT(position_nft_id)"
      },
      {
        "title": "Staking Operations",
        "body": "// Stake a CLMM position into farm\nconst payload = await sdk.Farms.depositPayload({ pool_id, clmm_position_id })\n\n// Unstake position from farm\nconst payload = await sdk.Farms.withdrawPayload({ pool_id, position_nft_id })\n\n// Harvest rewards\nconst payload = await sdk.Farms.harvestPayload({ pool_id, position_nft_id })\n\n// Batch harvest + collect CLMM fees\nconst payload = await sdk.Farms.batchHarvestAndClmmFeePayload(farms_list, clmm_list)"
      },
      {
        "title": "Liquidity Operations (within Farm)",
        "body": "// Add liquidity with fixed coin amount\nconst payload = await sdk.Farms.addLiquidityFixCoinPayload(params)\n\n// Remove liquidity\nconst payload = await sdk.Farms.removeLiquidityPayload(params)\n\n// Claim fees and CLMM rewards\nconst payload = await sdk.Farms.claimFeeAndClmmReward({ pool_id, position_nft_id })"
      },
      {
        "title": "Error Codes",
        "body": "CodeDescription1Invalid CLMM Pool ID2Invalid Position NFT......15Amount Out Below Min Limit"
      },
      {
        "title": "xCETUS SDK",
        "body": "Platform equity token management - convert CETUS to non-transferable xCETUS for governance and rewards.\n\nnpm install @cetusprotocol/xcetus-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusXcetusSDK } from '@cetusprotocol/xcetus-sdk'\n\nconst sdk = CetusXcetusSDK.createSDK({ env: 'mainnet', sui_client })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Data Retrieval",
        "body": "// Get user's veNFT (holds xCETUS balance)\nconst veNFT = await sdk.Xcetus.getOwnerVeNFT()\n\n// Get user's active locks\nconst locks = await sdk.Xcetus.getOwnerRedeemLockList()\n\n// Get dividend manager info\nconst dividendMgr = await sdk.Xcetus.getDividendManager()\n\n// Get veNFT dividend info\nconst dividendInfo = await sdk.Xcetus.getVeNFTDividendInfo()\n\n// Get xCETUS manager (for ratio calculations)\nconst manager = await sdk.Xcetus.getXcetusManager()"
      },
      {
        "title": "Token Operations",
        "body": "// Convert CETUS -> xCETUS (1:1 ratio)\nconst payload = await sdk.Xcetus.convertPayload(params)\n\n// Start lock-up redemption (xCETUS -> CETUS, time-locked)\nconst payload = await sdk.Xcetus.redeemLockPayload(params)\n\n// Complete redemption after lock expires\nconst payload = await sdk.Xcetus.redeemPayload(params)\n\n// Cancel active lock\nconst payload = await sdk.Xcetus.cancelRedeemPayload(params)\n\n// Claim accumulated dividends\nconst payload = await sdk.Xcetus.redeemDividendV3Payload(params)"
      },
      {
        "title": "Utility Functions",
        "body": "// Calculate redeemable CETUS for given lock duration\nconst amount = sdk.Xcetus.redeemNum(lockDays, xCetusAmount)\n\n// Reverse calculation\nconst xAmount = sdk.Xcetus.reverseRedeemNum(lockDays, cetusAmount)\n\n// Get historical dividend data\nconst phaseInfo = await sdk.Xcetus.getPhaseDividendInfo(phase)\n\n// Check lock status\nimport { XCetusUtil } from '@cetusprotocol/xcetus-sdk'\nconst isLocked = XCetusUtil.isLocked(lockObj)"
      },
      {
        "title": "Limit Order SDK",
        "body": "Place limit orders with specified price and expiration.\n\nnpm install @cetusprotocol/limit-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusLimitSDK } from '@cetusprotocol/limit-sdk'\n\nconst sdk = CetusLimitSDK.createSDK()\n// or: CetusLimitSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Order Management",
        "body": "// Place a limit order\nconst payload = await sdk.Limit.placeLimitOrder(params)\n// params: coin types, amount, price, expiration\n\n// Cancel running orders\nconst payload = await sdk.Limit.cancelOrdersByOwner(params)\n\n// Claim completed order proceeds\nconst payload = await sdk.Limit.claimTargetCoin(params)"
      },
      {
        "title": "Order Queries",
        "body": "// Get order details\nconst order = await sdk.Limit.getLimitOrder(orderId)\n\n// Get all orders for a wallet\nconst orders = await sdk.Limit.getOwnerLimitOrderList(address)\n\n// Get order operation logs\nconst logs = await sdk.Limit.getLimitOrderLogs(orderId)\n\n// Get claim logs\nconst claimLogs = await sdk.Limit.getLimitOrderClaimLogs(orderId)"
      },
      {
        "title": "Pool Info",
        "body": "// Get supported tokens\nconst tokens = await sdk.Limit.getLimitOrderTokenList()\n\n// Get available pools\nconst pools = await sdk.Limit.getLimitOrderPoolList()\n\n// Get specific pool\nconst pool = await sdk.Limit.getLimitOrderPool(coinA, coinB)\n\n// Get pool indexer ID\nconst indexerId = await sdk.Limit.getPoolIndexerId(coinA, coinB)"
      },
      {
        "title": "Execution",
        "body": "// Execute transaction\nawait sdk.FullClient.executeTx(keyPair, payload, true)\n\nOrder statuses: Running | PartialCompleted | Completed | Cancelled"
      },
      {
        "title": "Burn SDK",
        "body": "Permanently lock liquidity positions while still earning fees and rewards.\n\nnpm install @cetusprotocol/burn-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusBurnSDK } from '@cetusprotocol/burn-sdk'\n\nconst sdk = CetusBurnSDK.createSDK()\n// or: CetusBurnSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Queries",
        "body": "// Get burn pool list\nconst pools = await sdk.Burn.getBurnPoolList()\n\n// Get burn positions for a pool\nconst positions = await sdk.Burn.getPoolBurnPositionList(pool_id)\n\n// Get burn positions for an account\nconst posIds = await sdk.Burn.getBurnPositionList(account_address)\n\n// Get position details\nconst pos = await sdk.Burn.getBurnPosition(pos_id)"
      },
      {
        "title": "Burn Operations",
        "body": "// Lock liquidity permanently (irreversible!)\nconst payload = await sdk.Burn.createBurnPayload(params)\n\n// Burn LP v2 (auto-validates, no pool object needed)\nconst payload = await sdk.Burn.createBurnLPV2Payload(pos_id)"
      },
      {
        "title": "Fee & Reward Collection (still works after burn)",
        "body": "// Collect fees for single position\nconst payload = await sdk.Burn.createCollectFeePayload(params)\n\n// Collect rewards for single position\nconst payload = await sdk.Burn.createCollectRewardPayload(params)\n\n// Batch collect fees for multiple positions\nconst payload = await sdk.Burn.createCollectFeesPayload(params)\n\n// Batch collect rewards for multiple positions\nconst payload = await sdk.Burn.createCollectRewardsPayload(params)"
      },
      {
        "title": "Vesting",
        "body": "// Redeem vested tokens\nconst payload = await sdk.Burn.redeemVestPayload(params)\n// params: versioned_id, vester_id, pool_data, period"
      },
      {
        "title": "DCA SDK",
        "body": "Dollar-Cost Averaging - automated periodic token purchases.\n\nnpm install @cetusprotocol/dca-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusDcaSDK } from '@cetusprotocol/dca-sdk'\n\nconst sdk = CetusDcaSDK.createSDK()\n// or: CetusDcaSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Order Management",
        "body": "// Create DCA order\nconst payload = await sdk.Dca.dcaOpenOrderPayload({\n  // coin types, total amount, per-cycle amount,\n  // cycle frequency, min/max price bounds\n})\n\n// Get order details\nconst order = await sdk.Dca.getDcaOrders(orderId)\n\n// Get order transaction history\nconst deals = await sdk.Dca.getDcaOrdersMakeDeal(orderId)\n\n// Withdraw from DCA order\nconst payload = await sdk.Dca.withdrawPayload(params)\n\n// Close one or multiple DCA orders\nconst payload = await sdk.Dca.dcaCloseOrderPayload(params)"
      },
      {
        "title": "Token Whitelist",
        "body": "// Get supported tokens\nconst whitelist = await sdk.Dca.getDcaCoinWhiteList()\n\nWhitelist modes:\n\nModeDescription0Disabled1in_coin only2out_coin only3Both coin types enabled"
      },
      {
        "title": "Execution",
        "body": "await sdk.FullClient.sendTransaction(keyPair, payload)"
      },
      {
        "title": "Zap SDK",
        "body": "One-click liquidity operations - add/remove liquidity with flexible input modes.\n\nnpm install @cetusprotocol/zap-sdk"
      },
      {
        "title": "Initialization",
        "body": "import { CetusZapSDK } from '@cetusprotocol/zap-sdk'\n\nconst sdk = CetusZapSDK.createSDK()\n// or: CetusZapSDK.createSDK({ env, sui_client, full_rpc_url })\nsdk.setSenderAddress(wallet)"
      },
      {
        "title": "Deposit (Add Liquidity)",
        "body": "Deposit modes: FixedOneSide | FlexibleBoth | OnlyCoinA | OnlyCoinB\n\n// Pre-calculate deposit amounts\nconst calcResult = await sdk.Zap.preCalculateDepositAmount({\n  pool_id,\n  tick_lower,\n  tick_upper,\n  current_sqrt_price,\n  slippage,\n  coin_type_a,\n  coin_type_b,\n  decimals_a,\n  decimals_b,\n  mode,\n  amount_a, // or amount_b depending on mode\n})\n\n// Build and execute deposit\nconst payload = await sdk.Zap.buildDepositPayload({\n  ...calcResult,\n  // optional: existing position_id to add to\n})"
      },
      {
        "title": "Withdraw (Remove Liquidity)",
        "body": "// Pre-calculate withdrawal amounts\nconst calcResult = await sdk.Zap.preCalculateWithdrawAmount(params)\n\n// Build withdrawal transaction\nconst payload = await sdk.Zap.buildWithdrawPayload({\n  ...calcResult,\n  collect_fee: true,    // optionally collect fees\n  collect_reward: true, // optionally collect rewards\n})"
      },
      {
        "title": "Aggregator SDK",
        "body": "Multi-DEX swap aggregator optimizing trades across Cetus, DeepBook, Kriya, FlowX, Aftermath, and more.\n\nnpm install @cetusprotocol/aggregator-sdk"
      },
      {
        "title": "Workflow",
        "body": "import { CetusAggregatorSDK } from '@cetusprotocol/aggregator-sdk'\n\n// Step 1: Initialize client\nconst client = CetusAggregatorSDK.createSDK({\n  env: 'mainnet',\n  // RPC and package config\n})\n\n// Step 2: Find optimal route\nconst routes = await client.findRouters({\n  coinTypeFrom,\n  coinTypeTo,\n  amount,\n})\n\n// Step 3a: Fast swap (simple)\nconst result = await client.fastRouterSwap({\n  routes,\n  slippage, // e.g. 0.01 for 1%\n  keyPair,\n})\n\n// Step 3b: Build PTB transaction (advanced)\nconst tx = await client.routerSwap({\n  routes,\n  slippage,\n  // manage coin transfers manually\n})"
      },
      {
        "title": "Supported DEXs",
        "body": "Cetus, DeepBook, Kriya, FlowX, Aftermath, Turbos, Bluefin, and more."
      },
      {
        "title": "Mainnet Contract Addresses",
        "body": "CetusAggregatorV2 - Primary aggregator\nCetusAggregatorV2ExtendV1 - Extended functionality\nCetusAggregatorV2ExtendV2 - Extended functionality v2"
      },
      {
        "title": "SDK Initialization (all packages follow this pattern)",
        "body": "// Default mainnet\nconst sdk = Cetus<Module>SDK.createSDK()\n\n// Custom env\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'testnet' })\n\n// Custom RPC\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'mainnet', full_rpc_url: 'YOUR_URL' })\n\n// Custom SuiClient\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'mainnet', sui_client: yourClient })\n\n// Always set sender before transactions\nsdk.setSenderAddress('0x...')\n\n// Update RPC at runtime\nsdk.updateFullRpcUrl('NEW_URL')"
      },
      {
        "title": "Transaction Execution",
        "body": "// Using FullClient\nawait sdk.FullClient.executeTx(keyPair, payload, true)\n\n// Or sendTransaction\nawait sdk.FullClient.sendTransaction(keyPair, payload)"
      },
      {
        "title": "Package Reference",
        "body": "PackagenpmPurposecommon@cetusprotocol/common-sdkShared utilitiesclmm@cetusprotocol/sui-clmm-sdkConcentrated liquidity AMMdlmm@cetusprotocol/dlmm-sdkDynamic liquidity (bin-based)vaults@cetusprotocol/vaults-sdkAutomated vault managementfarms@cetusprotocol/farms-sdkYield farmingxcetus@cetusprotocol/xcetus-sdkGovernance token (xCETUS)limit@cetusprotocol/limit-sdkLimit ordersburn@cetusprotocol/burn-sdkPermanent liquidity lockdca@cetusprotocol/dca-sdkDollar-cost averagingzap@cetusprotocol/zap-sdkOne-click liquidityaggregator@cetusprotocol/aggregator-sdkMulti-DEX swap routing"
      }
    ],
    "body": "Cetus Protocol SDK v2 - OpenClaw Integration Guide\n\nThis guide covers all Cetus SDK v2 packages for building DeFi applications on Sui.\n\nTable of Contents\nCommon SDK\nCLMM SDK\nDLMM SDK\nVaults SDK\nFarms SDK\nxCETUS SDK\nLimit Order SDK\nBurn SDK\nDCA SDK\nZap SDK\nAggregator SDK\nCommon SDK\n\nFoundational utility library shared across all Cetus SDKs.\n\nnpm install @cetusprotocol/common-sdk\n\n\nProvides essential utilities and shared functionality for protocol interactions. All other SDKs depend on this package.\n\nCLMM SDK\n\nConcentrated Liquidity Market Maker - the core AMM of Cetus.\n\nnpm install @cetusprotocol/sui-clmm-sdk\n\nInitialization\nimport { CetusClmmSDK } from '@cetusprotocol/sui-clmm-sdk'\n\n// Default mainnet\nconst sdk = CetusClmmSDK.createSDK()\n\n// Custom environment\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet' }) // or 'testnet'\n\n// Custom RPC\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet', full_rpc_url: 'YOUR_URL' })\n\n// Custom SuiClient\nconst sdk = CetusClmmSDK.createSDK({ env: 'mainnet', sui_client: yourClient })\n\n// Set sender address (required before tx operations)\nsdk.setSenderAddress('YOUR_SUI_ADDRESS')\n\nDLMM SDK\n\nDynamic Liquidity Market Maker - discrete bin-based AMM with dynamic fees.\n\nnpm install @cetusprotocol/dlmm-sdk\n\nInitialization\nimport { CetusDlmmSDK } from '@cetusprotocol/dlmm-sdk'\n\nconst sdk = CetusDlmmSDK.createSDK()\n// or with options: CetusDlmmSDK.createSDK({ env, full_rpc_url, sui_client })\nsdk.setSenderAddress(walletAddress)\n\nPool Operations\n// Get all pools\nconst pools = await sdk.Dlmm.getPoolList()\n\n// Get specific pool\nconst pool = await sdk.Dlmm.getPool(pool_id)\n\n// Get bin configuration\nconst binConfig = await sdk.Dlmm.getBinConfig(config_id)\n\n// Get pool transaction history\nconst history = await sdk.Dlmm.getPoolTransactionHistory(pool_id)\n\nPosition Management\n\nThree liquidity distribution strategies:\n\nSpot - even distribution across bins\nBidAsk - concentrated at specific price levels\nCurve - smooth bell-curve distribution\n// Calculate optimal liquidity distribution\nconst addInfo = await sdk.Dlmm.calculateAddLiquidityInfo(params)\n\n// Add liquidity\nconst payload = await sdk.Dlmm.addLiquidityPayload(params)\n\n// Remove liquidity\nconst payload = await sdk.Dlmm.removeLiquidityPayload(params)\n\n// Close position\nconst payload = await sdk.Dlmm.closePositionPayload(params)\n\nSwap Operations\n// Get swap quote\nconst quote = await sdk.Dlmm.preSwapQuote(params)\n\n// Execute swap\nconst payload = await sdk.Dlmm.swapPayload(params)\n\nFee & Reward Operations\n// Get total fee rate (base + variable)\nconst feeRate = await sdk.Dlmm.getTotalFeeRate(pool_id)\n\n// Collect fees\nconst payload = await sdk.Dlmm.collectFeePayload(params)\n\n// Collect rewards\nconst payload = await sdk.Dlmm.collectRewardPayload(params)\n\nPool Creation\n// Create pool only\nconst payload = await sdk.Dlmm.createPoolPayload(params)\n\n// Create pool + add initial liquidity\nconst payload = await sdk.Dlmm.createPoolAndAddLiquidityPayload(params)\n\nUtility: BinUtils\nimport { BinUtils } from '@cetusprotocol/dlmm-sdk'\n\n// Price-bin conversions\nBinUtils.getPriceFromBinId(binId, binStep)\nBinUtils.getBinIdFromPrice(price, binStep)\n\n// Liquidity calculations\nBinUtils.calculateLiquidity(params)\n\nVaults SDK\n\nAutomated liquidity management with fee reinvestment and rebalancing.\n\nnpm install @cetusprotocol/vaults-sdk\n\nInitialization\nimport { CetusVaultsSDK } from '@cetusprotocol/vaults-sdk'\n\nconst sdk = CetusVaultsSDK.createSDK()\n// or: CetusVaultsSDK.createSDK({ env, sui_client })\n// or: CetusVaultsSDK.createSDK({ env, full_rpc_url })\nsdk.setSenderAddress(wallet)\n\nVault Queries\n// Get all vaults for an owner\nconst vaults = await sdk.Vaults.getOwnerVaultsBalance(owner)\n\n// Get specific vault\nconst vault = await sdk.Vaults.getVault(vault_id)\n\n// Get LP token balance\nconst balance = await sdk.getOwnerCoinBalances(address, lp_token_type)\n\nDeposit\n// Calculate deposit amounts\nconst amounts = await sdk.Vaults.calculateDepositAmount(params)\n\n// Execute deposit\nconst tx = await sdk.Vaults.deposit(params, tx)\n\nWithdraw\n// Calculate withdrawal amounts\nconst amounts = await sdk.Vaults.calculateWithdrawAmount(params)\n\n// Execute withdrawal\nconst tx = await sdk.Vaults.withdraw(params, tx)\n\nVesting\n// Get vest info for multiple vaults\nconst vestInfoList = await sdk.Vest.getVaultsVestInfoList([vaultId])\n\n// Get vest info for a single vault\nconst vestInfo = await sdk.Vest.getVaultsVestInfo(vault_id)\n\n// Get user's vest NFTs\nconst nfts = await sdk.Vest.getOwnerVaultVestNFT(senderAddress)\n\n// Redeem vested tokens\nconst payload = await sdk.Vest.buildRedeemPayload(options)\n\nFarms SDK\n\nStaking CLMM positions for additional reward farming.\n\nnpm install @cetusprotocol/farms-sdk\n\nInitialization\nimport { CetusFarmsSDK } from '@cetusprotocol/farms-sdk'\n\nconst sdk = CetusFarmsSDK.createSDK()\n// or: CetusFarmsSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)\n\nPool Queries\n// Get all farming pools\nconst pools = await sdk.Farms.getFarmsPoolList()\n\n// Get specific pool\nconst pool = await sdk.Farms.getFarmsPool(pool_id)\n\n// Get user's position NFTs\nconst nfts = await sdk.Farms.getOwnedFarmsPositionNFTList(wallet)\n\n// Get specific NFT details\nconst nft = await sdk.Farms.getFarmsPositionNFT(position_nft_id)\n\nStaking Operations\n// Stake a CLMM position into farm\nconst payload = await sdk.Farms.depositPayload({ pool_id, clmm_position_id })\n\n// Unstake position from farm\nconst payload = await sdk.Farms.withdrawPayload({ pool_id, position_nft_id })\n\n// Harvest rewards\nconst payload = await sdk.Farms.harvestPayload({ pool_id, position_nft_id })\n\n// Batch harvest + collect CLMM fees\nconst payload = await sdk.Farms.batchHarvestAndClmmFeePayload(farms_list, clmm_list)\n\nLiquidity Operations (within Farm)\n// Add liquidity with fixed coin amount\nconst payload = await sdk.Farms.addLiquidityFixCoinPayload(params)\n\n// Remove liquidity\nconst payload = await sdk.Farms.removeLiquidityPayload(params)\n\n// Claim fees and CLMM rewards\nconst payload = await sdk.Farms.claimFeeAndClmmReward({ pool_id, position_nft_id })\n\nError Codes\nCode\tDescription\n1\tInvalid CLMM Pool ID\n2\tInvalid Position NFT\n...\t...\n15\tAmount Out Below Min Limit\nxCETUS SDK\n\nPlatform equity token management - convert CETUS to non-transferable xCETUS for governance and rewards.\n\nnpm install @cetusprotocol/xcetus-sdk\n\nInitialization\nimport { CetusXcetusSDK } from '@cetusprotocol/xcetus-sdk'\n\nconst sdk = CetusXcetusSDK.createSDK({ env: 'mainnet', sui_client })\nsdk.setSenderAddress(wallet)\n\nData Retrieval\n// Get user's veNFT (holds xCETUS balance)\nconst veNFT = await sdk.Xcetus.getOwnerVeNFT()\n\n// Get user's active locks\nconst locks = await sdk.Xcetus.getOwnerRedeemLockList()\n\n// Get dividend manager info\nconst dividendMgr = await sdk.Xcetus.getDividendManager()\n\n// Get veNFT dividend info\nconst dividendInfo = await sdk.Xcetus.getVeNFTDividendInfo()\n\n// Get xCETUS manager (for ratio calculations)\nconst manager = await sdk.Xcetus.getXcetusManager()\n\nToken Operations\n// Convert CETUS -> xCETUS (1:1 ratio)\nconst payload = await sdk.Xcetus.convertPayload(params)\n\n// Start lock-up redemption (xCETUS -> CETUS, time-locked)\nconst payload = await sdk.Xcetus.redeemLockPayload(params)\n\n// Complete redemption after lock expires\nconst payload = await sdk.Xcetus.redeemPayload(params)\n\n// Cancel active lock\nconst payload = await sdk.Xcetus.cancelRedeemPayload(params)\n\n// Claim accumulated dividends\nconst payload = await sdk.Xcetus.redeemDividendV3Payload(params)\n\nUtility Functions\n// Calculate redeemable CETUS for given lock duration\nconst amount = sdk.Xcetus.redeemNum(lockDays, xCetusAmount)\n\n// Reverse calculation\nconst xAmount = sdk.Xcetus.reverseRedeemNum(lockDays, cetusAmount)\n\n// Get historical dividend data\nconst phaseInfo = await sdk.Xcetus.getPhaseDividendInfo(phase)\n\n// Check lock status\nimport { XCetusUtil } from '@cetusprotocol/xcetus-sdk'\nconst isLocked = XCetusUtil.isLocked(lockObj)\n\nLimit Order SDK\n\nPlace limit orders with specified price and expiration.\n\nnpm install @cetusprotocol/limit-sdk\n\nInitialization\nimport { CetusLimitSDK } from '@cetusprotocol/limit-sdk'\n\nconst sdk = CetusLimitSDK.createSDK()\n// or: CetusLimitSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)\n\nOrder Management\n// Place a limit order\nconst payload = await sdk.Limit.placeLimitOrder(params)\n// params: coin types, amount, price, expiration\n\n// Cancel running orders\nconst payload = await sdk.Limit.cancelOrdersByOwner(params)\n\n// Claim completed order proceeds\nconst payload = await sdk.Limit.claimTargetCoin(params)\n\nOrder Queries\n// Get order details\nconst order = await sdk.Limit.getLimitOrder(orderId)\n\n// Get all orders for a wallet\nconst orders = await sdk.Limit.getOwnerLimitOrderList(address)\n\n// Get order operation logs\nconst logs = await sdk.Limit.getLimitOrderLogs(orderId)\n\n// Get claim logs\nconst claimLogs = await sdk.Limit.getLimitOrderClaimLogs(orderId)\n\nPool Info\n// Get supported tokens\nconst tokens = await sdk.Limit.getLimitOrderTokenList()\n\n// Get available pools\nconst pools = await sdk.Limit.getLimitOrderPoolList()\n\n// Get specific pool\nconst pool = await sdk.Limit.getLimitOrderPool(coinA, coinB)\n\n// Get pool indexer ID\nconst indexerId = await sdk.Limit.getPoolIndexerId(coinA, coinB)\n\nExecution\n// Execute transaction\nawait sdk.FullClient.executeTx(keyPair, payload, true)\n\n\nOrder statuses: Running | PartialCompleted | Completed | Cancelled\n\nBurn SDK\n\nPermanently lock liquidity positions while still earning fees and rewards.\n\nnpm install @cetusprotocol/burn-sdk\n\nInitialization\nimport { CetusBurnSDK } from '@cetusprotocol/burn-sdk'\n\nconst sdk = CetusBurnSDK.createSDK()\n// or: CetusBurnSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)\n\nQueries\n// Get burn pool list\nconst pools = await sdk.Burn.getBurnPoolList()\n\n// Get burn positions for a pool\nconst positions = await sdk.Burn.getPoolBurnPositionList(pool_id)\n\n// Get burn positions for an account\nconst posIds = await sdk.Burn.getBurnPositionList(account_address)\n\n// Get position details\nconst pos = await sdk.Burn.getBurnPosition(pos_id)\n\nBurn Operations\n// Lock liquidity permanently (irreversible!)\nconst payload = await sdk.Burn.createBurnPayload(params)\n\n// Burn LP v2 (auto-validates, no pool object needed)\nconst payload = await sdk.Burn.createBurnLPV2Payload(pos_id)\n\nFee & Reward Collection (still works after burn)\n// Collect fees for single position\nconst payload = await sdk.Burn.createCollectFeePayload(params)\n\n// Collect rewards for single position\nconst payload = await sdk.Burn.createCollectRewardPayload(params)\n\n// Batch collect fees for multiple positions\nconst payload = await sdk.Burn.createCollectFeesPayload(params)\n\n// Batch collect rewards for multiple positions\nconst payload = await sdk.Burn.createCollectRewardsPayload(params)\n\nVesting\n// Redeem vested tokens\nconst payload = await sdk.Burn.redeemVestPayload(params)\n// params: versioned_id, vester_id, pool_data, period\n\nDCA SDK\n\nDollar-Cost Averaging - automated periodic token purchases.\n\nnpm install @cetusprotocol/dca-sdk\n\nInitialization\nimport { CetusDcaSDK } from '@cetusprotocol/dca-sdk'\n\nconst sdk = CetusDcaSDK.createSDK()\n// or: CetusDcaSDK.createSDK({ env, sui_client })\nsdk.setSenderAddress(wallet)\n\nOrder Management\n// Create DCA order\nconst payload = await sdk.Dca.dcaOpenOrderPayload({\n  // coin types, total amount, per-cycle amount,\n  // cycle frequency, min/max price bounds\n})\n\n// Get order details\nconst order = await sdk.Dca.getDcaOrders(orderId)\n\n// Get order transaction history\nconst deals = await sdk.Dca.getDcaOrdersMakeDeal(orderId)\n\n// Withdraw from DCA order\nconst payload = await sdk.Dca.withdrawPayload(params)\n\n// Close one or multiple DCA orders\nconst payload = await sdk.Dca.dcaCloseOrderPayload(params)\n\nToken Whitelist\n// Get supported tokens\nconst whitelist = await sdk.Dca.getDcaCoinWhiteList()\n\n\nWhitelist modes:\n\nMode\tDescription\n0\tDisabled\n1\tin_coin only\n2\tout_coin only\n3\tBoth coin types enabled\nExecution\nawait sdk.FullClient.sendTransaction(keyPair, payload)\n\nZap SDK\n\nOne-click liquidity operations - add/remove liquidity with flexible input modes.\n\nnpm install @cetusprotocol/zap-sdk\n\nInitialization\nimport { CetusZapSDK } from '@cetusprotocol/zap-sdk'\n\nconst sdk = CetusZapSDK.createSDK()\n// or: CetusZapSDK.createSDK({ env, sui_client, full_rpc_url })\nsdk.setSenderAddress(wallet)\n\nDeposit (Add Liquidity)\n\nDeposit modes: FixedOneSide | FlexibleBoth | OnlyCoinA | OnlyCoinB\n\n// Pre-calculate deposit amounts\nconst calcResult = await sdk.Zap.preCalculateDepositAmount({\n  pool_id,\n  tick_lower,\n  tick_upper,\n  current_sqrt_price,\n  slippage,\n  coin_type_a,\n  coin_type_b,\n  decimals_a,\n  decimals_b,\n  mode,\n  amount_a, // or amount_b depending on mode\n})\n\n// Build and execute deposit\nconst payload = await sdk.Zap.buildDepositPayload({\n  ...calcResult,\n  // optional: existing position_id to add to\n})\n\nWithdraw (Remove Liquidity)\n// Pre-calculate withdrawal amounts\nconst calcResult = await sdk.Zap.preCalculateWithdrawAmount(params)\n\n// Build withdrawal transaction\nconst payload = await sdk.Zap.buildWithdrawPayload({\n  ...calcResult,\n  collect_fee: true,    // optionally collect fees\n  collect_reward: true, // optionally collect rewards\n})\n\nAggregator SDK\n\nMulti-DEX swap aggregator optimizing trades across Cetus, DeepBook, Kriya, FlowX, Aftermath, and more.\n\nnpm install @cetusprotocol/aggregator-sdk\n\nWorkflow\nimport { CetusAggregatorSDK } from '@cetusprotocol/aggregator-sdk'\n\n// Step 1: Initialize client\nconst client = CetusAggregatorSDK.createSDK({\n  env: 'mainnet',\n  // RPC and package config\n})\n\n// Step 2: Find optimal route\nconst routes = await client.findRouters({\n  coinTypeFrom,\n  coinTypeTo,\n  amount,\n})\n\n// Step 3a: Fast swap (simple)\nconst result = await client.fastRouterSwap({\n  routes,\n  slippage, // e.g. 0.01 for 1%\n  keyPair,\n})\n\n// Step 3b: Build PTB transaction (advanced)\nconst tx = await client.routerSwap({\n  routes,\n  slippage,\n  // manage coin transfers manually\n})\n\nSupported DEXs\n\nCetus, DeepBook, Kriya, FlowX, Aftermath, Turbos, Bluefin, and more.\n\nMainnet Contract Addresses\nCetusAggregatorV2 - Primary aggregator\nCetusAggregatorV2ExtendV1 - Extended functionality\nCetusAggregatorV2ExtendV2 - Extended functionality v2\nCommon Patterns\nSDK Initialization (all packages follow this pattern)\n// Default mainnet\nconst sdk = Cetus<Module>SDK.createSDK()\n\n// Custom env\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'testnet' })\n\n// Custom RPC\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'mainnet', full_rpc_url: 'YOUR_URL' })\n\n// Custom SuiClient\nconst sdk = Cetus<Module>SDK.createSDK({ env: 'mainnet', sui_client: yourClient })\n\n// Always set sender before transactions\nsdk.setSenderAddress('0x...')\n\n// Update RPC at runtime\nsdk.updateFullRpcUrl('NEW_URL')\n\nTransaction Execution\n// Using FullClient\nawait sdk.FullClient.executeTx(keyPair, payload, true)\n\n// Or sendTransaction\nawait sdk.FullClient.sendTransaction(keyPair, payload)\n\nPackage Reference\nPackage\tnpm\tPurpose\ncommon\t@cetusprotocol/common-sdk\tShared utilities\nclmm\t@cetusprotocol/sui-clmm-sdk\tConcentrated liquidity AMM\ndlmm\t@cetusprotocol/dlmm-sdk\tDynamic liquidity (bin-based)\nvaults\t@cetusprotocol/vaults-sdk\tAutomated vault management\nfarms\t@cetusprotocol/farms-sdk\tYield farming\nxcetus\t@cetusprotocol/xcetus-sdk\tGovernance token (xCETUS)\nlimit\t@cetusprotocol/limit-sdk\tLimit orders\nburn\t@cetusprotocol/burn-sdk\tPermanent liquidity lock\ndca\t@cetusprotocol/dca-sdk\tDollar-cost averaging\nzap\t@cetusprotocol/zap-sdk\tOne-click liquidity\naggregator\t@cetusprotocol/aggregator-sdk\tMulti-DEX swap routing"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/k66inthesky/cetus",
    "publisherUrl": "https://clawhub.ai/k66inthesky/cetus",
    "owner": "k66inthesky",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cetus",
    "downloadUrl": "https://openagent3.xyz/downloads/cetus",
    "agentUrl": "https://openagent3.xyz/skills/cetus/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cetus/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cetus/agent.md"
  }
}