mcpField
T
ts-sdk-types

ts-sdk-types

github.com/aptos-labsDevelopment2068 installsUpdated 24w ago
Repository

About ts-sdk-types

A reference skill for TypeScript developers using `@aptos-labs/ts-sdk` to map Move types and form function payloads. It highlights precision-safe bigint use, address strings, generic type arguments, and TypeTag parsing.

Key features

  1. 01Move-to-TypeScript type mapping
  2. 02bigint guidance for large integers
  3. 03Address and function argument formats
  4. 04Generic typeArguments usage
  5. 05TypeTag parsing examples

Use cases

  1. 01Building Aptos transaction payloads
  2. 02Handling u128 or u256 values safely
  3. 03Calling generic Move functions
  4. 04Interpreting view results and type tags

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/aptos-labs/aptos-agent-skills --skill ts-sdk-types

After installing, type/ts-sdk-typesin Claude Code to confirm it loaded.

Details

From the project README

TypeScript SDK: Types (Move ↔ TypeScript)

Purpose

Guide type mapping between Move and TypeScript when using @aptos-labs/ts-sdk: numeric types (especially u128/u256), address, TypeTag, and functionArguments / typeArguments.

ALWAYS

  1. Use bigint for u128 and u256 – in both view results and functionArguments; JavaScript number loses precision above 2^53.
  2. Use string for address in payloads – e.g. "0x1" or accountAddress.toString(); SDK accepts AccountAddressInput (string or AccountAddress).
  3. Use typeArguments for generic Move functions – e.g. coin type ["0x1::aptos_coin::AptosCoin"] for coin::balance or coin::transfer.
  4. Cast view results explicitly when you know the Move return type – e.g. BigInt(result[0] as string) for u128.

NEVER

  1. Do not use number for u128/u256 – precision loss; use bigint.
  2. Do not pass raw number for large u64 in entry/view – use bigint if value can exceed Number.MAX_SAFE_INTEGER.
  3. Do not omit typeArguments when the Move function has type parameters (e.g. balance<CoinType>).

Move → TypeScript (summary)

Move typeTypeScript typeExample
u8, u16, u32number255, 65535
u64number | bigintPrefer bigint for large values
u128, u256bigintBigInt("340282366920938463463374607431768211455")
i8..i64 (Move 2.3+)number | bigintUse bigint for i64 when large
i128, i256bigintBigInt("-...")
boolbooleantrue
addressstring"0x1"
signer—Not passed from TS; signer is the transaction sender
vectorUint8Array | string (hex)new Uint8Array([1,2,3]) or hex
vectorT[][1, 2, 3]
Stringstring"hello"
Objectstring (object address)objectAddress.toString()
OptionT | nullValue or null

functionArguments

Order and types must match the Move entry/view function parameters:

// Move: public fun transfer<CoinType>(to: address, amount: u64)
await aptos.transaction.build.simple({
  sender: account.accountAddress,
  data: {
    function: "0x1::coin::transfer",
    typeArguments: ["0x1::aptos_coin::AptosCoin"],
    functionArguments: [
      "0xrecipient...", // address as string
      1000n // u64 as bigint (or number if small)
    ]
  }
});

typeArguments

For generic Move functions, pass full type strings (address::module::StructName):

// Move: balance<CoinType>(addr): u64
typeArguments: ["0x1::aptos_coin::AptosCoin"];

// Move: transfer<CoinType>(to, amount)
typeArguments: ["0x1::aptos_coin::AptosCoin"];

View return types

const result = await aptos.view({
  payload: {
    function: "0x1::coin::balance",
    typeArguments: ["0x1::aptos_coin::AptosCoin"],
    functionArguments: [accountAddress]
  }
});
// result is an array; u128 often returned as string in JSON
const balance = BigInt(result[0] as string);

TypeTag (advanced)

When building payloads programmatically or parsing type strings:

import { TypeTag } from "@aptos-labs/ts-sdk";

// Parser for type tag strings
import { parseTypeTag } from "@aptos-labs/ts-sdk";
const tag = parseTypeTag("0x1::aptos_coin::AptosCoin");

Use typeArguments as string array in simple cases; use TypeTag when the SDK API expects it.


Object / resource address in arguments

Pass object address as string (LONG or SHORT per AIP-40):

functionArguments: [
  nftObjectAddress.toString(), // or "0x..."
  price
];

Common mistakes

MistakeCorrect approach
Passing number for u128 amountUse 1000000n or BigInt("...")
Omitting typeArguments for coin::balanceAdd typeArguments: ["0x1::aptos_coin::AptosCoin"]
Using result[0] as number for u128Use BigInt(result[0] as string)
Wrong order of functionArgumentsMatch Move parameter order exactly

References

Comments

Markdown supported