← 返回
未分类 中文

Use Ts Sdk

Orchestrates TypeScript SDK integration for Aptos dApps. Routes to granular skills for specific tasks (client setup, accounts, transactions, view functions,...
协调 Aptos dApp 的 TypeScript SDK 集成。路由至细粒度技能以处理特定任务(客户端设置、账户、交易、视图函数、...)。
iskysun96 iskysun96 来源
未分类 clawhub v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 382
下载
💾 0
安装
1
版本
#latest

概述

Use TypeScript SDK (Orchestrator)

Purpose

Orchestrates @aptos-labs/ts-sdk integration for Aptos dApps. For specific tasks, route to the appropriate granular

skill. For composite tasks (e.g., "build me a fullstack dApp"), follow the workflow below.

Core Rules

  1. ALWAYS use @aptos-labs/ts-sdk (the current official SDK, NOT the deprecated aptos package)
  2. NEVER hardcode private keys in source code or frontend bundles
  3. NEVER expose private keys in client-side code or logs
  4. NEVER store private keys in environment variables accessible to the browser (use VITE_ prefix only for public

config)

  1. ALWAYS load private keys from environment variables in server-side scripts only, using process.env

Important: Boilerplate Template

If the project was scaffolded with npx create-aptos-dapp (boilerplate template), **wallet adapter and SDK setup are

already done.** Before writing new code, check what already exists:

  • frontend/components/WalletProvider.tsx — wallet adapter setup with auto-connect
  • frontend/constants.tsNETWORK, MODULE_ADDRESS, APTOS_API_KEY from env vars
  • frontend/entry-functions/ — existing entry function patterns (follow these for new ones)
  • frontend/view-functions/ — existing view function patterns (follow these for new ones)

Do NOT recreate wallet provider, client setup, or constants if they already exist. Instead, **follow the existing

patterns** to add new entry/view functions for your Move contracts.

Skill Routing

Route to the appropriate granular skill based on the task:

TaskSkill
--------------------------------------------------------------------------------------------------------
Set up Aptos client / configure networkts-sdk-client
Create accounts/signers (server-side)ts-sdk-account
Parse, format, or derive addressests-sdk-address
Build, sign, submit, simulate transactionsts-sdk-transactions
Read on-chain data (view, balances, resources)ts-sdk-view-and-query
Map Move types to TypeScript typests-sdk-types
Connect wallet in React frontendts-sdk-wallet-adapter

Fullstack dApp Workflow

When building a complete frontend integration:

  1. Set up client → read ts-sdk-client
  2. Create view function wrappers → read ts-sdk-view-and-query
  3. Create entry function payloads → read ts-sdk-transactions
  4. Wire up wallet connection → read ts-sdk-wallet-adapter
  5. Handle types correctly → read ts-sdk-types (as needed)

File Organization Pattern

src/
  lib/
    aptos.ts                    # Singleton Aptos client + MODULE_ADDRESS
  view-functions/
    getCount.ts                 # One file per view function
    getListing.ts
  entry-functions/
    increment.ts                # One file per entry function
    createListing.ts
  hooks/
    useCounter.ts               # React hooks wrapping view functions
    useListing.ts
  components/
    WalletProvider.tsx           # AptosWalletAdapterProvider wrapper
    IncrementButton.tsx          # Components calling entry functions

Error Handling Pattern

async function submitTransaction(
  aptos: Aptos,
  signer: Account,
  payload: InputGenerateTransactionPayloadData
): Promise<string> {
  try {
    const transaction = await aptos.transaction.build.simple({
      sender: signer.accountAddress,
      data: payload
    });

    const pendingTx = await aptos.signAndSubmitTransaction({
      signer,
      transaction
    });

    const committed = await aptos.waitForTransaction({
      transactionHash: pendingTx.hash
    });

    if (!committed.success) {
      throw new Error(`Transaction failed: ${committed.vm_status}`);
    }

    return pendingTx.hash;
  } catch (error) {
    if (error instanceof Error) {
      if (error.message.includes("RESOURCE_NOT_FOUND")) {
        throw new Error("Resource does not exist at the specified address");
      }
      if (error.message.includes("MODULE_NOT_FOUND")) {
        throw new Error("Contract is not deployed at the specified address");
      }
      if (error.message.includes("ABORTED")) {
        const match = error.message.match(/code: (\d+)/);
        const code = match ? match[1] : "unknown";
        throw new Error(`Contract error (code ${code})`);
      }
    }
    throw error;
  }
}

Edge Cases

ScenarioCheckAction
-------------------------------------------------------------------------------------------------------------------
Resource not founderror.message.includes("RESOURCE_NOT_FOUND")Return default value or null
Module not deployederror.message.includes("MODULE_NOT_FOUND")Show "contract not deployed" message
Function not founderror.message.includes("FUNCTION_NOT_FOUND")Check function name and module address
Move aborterror.message.includes("ABORTED")Parse abort code, map to user-friendly error
Out of gaserror.message.includes("OUT_OF_GAS")Increase maxGasAmount and retry
Sequence number errorerror.message.includes("SEQUENCE_NUMBER")Retry after fetching fresh sequence number
Network timeouterror.message.includes("timeout")Retry with exponential backoff
Account does not existerror.message.includes("ACCOUNT_NOT_FOUND")Fund account or prompt user to create one
Insufficient balanceerror.message.includes("INSUFFICIENT_BALANCE")Show balance and required amount
User rejected in walletWallet-specific rejection errorShow "transaction cancelled" message

Anti-patterns

  1. NEVER use the deprecated aptos npm package — use @aptos-labs/ts-sdk
  2. NEVER skip waitForTransaction after submitting — transaction may not be committed yet
  3. NEVER hardcode module addresses — use environment variables (VITE_MODULE_ADDRESS)
  4. NEVER create multiple Aptos client instances — create one singleton and share it
  5. NEVER use Account.generate() in frontend code for real users — use wallet adapter
  6. NEVER use scriptComposer — removed in v6.0; use separate transactions instead
  7. NEVER use getAccountCoinAmount or getAccountAPTAmount — deprecated; use getBalance()

SDK Version Notes

AIP-80 Private Key Format (v2.0+)

Ed25519 and Secp256k1 private keys now use an AIP-80 prefixed format when serialized with toString():

const key = new Ed25519PrivateKey("0x...");
key.toString(); // Returns AIP-80 prefixed format, NOT raw hex

Fungible Asset Transfers (v1.39+)

await aptos.transferFungibleAssetBetweenStores({
  sender: account,
  fungibleAssetMetadataAddress: metadataAddr,
  senderStoreAddress: fromStore,
  recipientStoreAddress: toStore,
  amount: 1000n
});

Account Abstraction (v1.34+, AIP-104)

// Check if AA is enabled for an account
const isEnabled = await aptos.abstraction.isAccountAbstractionEnabled({
  accountAddress: "0x...",
  authenticationFunction: `${MODULE_ADDRESS}::auth::authenticate`
});

// Enable AA on an account
const enableTxn = await aptos.abstraction.enableAccountAbstractionTransaction({
  accountAddress: account.accountAddress,
  authenticationFunction: `${MODULE_ADDRESS}::auth::authenticate`
});

// Use AbstractedAccount for signing with custom auth logic
import { AbstractedAccount } from "@aptos-labs/ts-sdk";

References

Pattern Documentation:

Official Documentation:

  • TypeScript SDK: https://aptos.dev/build/sdks/ts-sdk
  • API Reference: https://aptos-labs.github.io/aptos-ts-sdk/
  • Wallet Adapter: https://aptos.dev/build/sdks/wallet-adapter/dapp
  • GitHub: https://github.com/aptos-labs/aptos-ts-sdk

Granular Skills:

Related Skills:

  • write-contracts — Write the Move contracts that this SDK interacts with
  • deploy-contracts — Deploy contracts before calling them from TypeScript

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-03-31 01:37 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

it-ops-security

Security Audit

iskysun96
在部署前使用7类安全清单对Move合约进行安全漏洞审计。触发词:'审计合约'、'安全检查'、'安全审查'等。
★ 0 📥 563
dev-programming

CodeConductor.ai

larsonreever
AI驱动平台,提供快速全栈开发、智能体、工作流自动化及低代码AI集成的可扩展产品创建。
★ 72 📥 181,882
dev-programming

Mcporter

steipete
使用 mcporter CLI 直接列出、配置、认证及调用 MCP 服务器/工具(支持 HTTP 或 stdio),涵盖临时服务器、配置编辑及 CLI/类型生成功能。
★ 195 📥 67,667