mcpField
T
ts-sdk-address

ts-sdk-address

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

About ts-sdk-address

ts-sdk-address is a skill for developers using account addresses in @aptos-labs/ts-sdk. It explains AIP-40 parsing and formatting, validation, equality checks, and SDK helpers for deriving addresses.

Key features

  1. 01Parse flexible and strict address inputs
  2. 02Format addresses in AIP-40 forms
  3. 03Validate and compare addresses
  4. 04Derive object, resource, and token addresses
  5. 05Use AccountAddress constants and byte inputs

Use cases

  1. 01Parsing addresses in SDK applications
  2. 02Enforcing strict AIP-40 address formats
  3. 03Deriving Aptos object or resource addresses

Install

Copy the command and run it in a terminal.

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

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

Details

From the project README

TypeScript SDK: AccountAddress

Purpose

Guide correct creation, parsing, and formatting of account addresses in @aptos-labs/ts-sdk. Addresses are 32-byte values; string format follows AIP-40.

ALWAYS

  1. Use AccountAddress.from() for flexible input – accepts string (with or without 0x), Uint8Array, or existing AccountAddress.
  2. Use addresses as AccountAddress or string in API – SDK accepts AccountAddressInput (string or AccountAddress) in most APIs.
  3. Use AccountAddress.fromStringStrict() / AccountAddress.fromStrict() when you need AIP-40 strict: LONG (0x + 64 hex chars) or SHORT only for special (0x0–0xf).
  4. Use derived address helpers from the SDK for object/resource/token addresses – do not hand-roll hashing.

NEVER

  1. Do not use raw strings for comparison – use addr.equals(other) or normalize with AccountAddress.from().
  2. Do not assume SHORT form for non-special addresses – non-special addresses must be LONG (64 hex chars) in strict mode.
  3. Do not use the Hex class for account addresses – use AccountAddress only (per SDK docs).

Address format (AIP-40)

  • Length: 32 bytes (64 hex chars in LONG form).
  • String: Must start with 0x. LONG = 0x + 64 hex chars; SHORT = shortest form (e.g. 0x1, 0xf).
  • Special addresses: 0x0–0xf (last byte < 16, rest zero). These may be written in SHORT form (0x1, 0xa).
  • Reference: AIP-40.

Creating AccountAddress

From string (recommended: relaxed)
import { AccountAddress } from "@aptos-labs/ts-sdk";

// Relaxed: accepts with or without 0x, SHORT or LONG
const addr1 = AccountAddress.from("0x1");
const addr2 = AccountAddress.from("0xaa86fe99004361f747f91342ca13c426ca0cccb0c1217677180c9493bad6ef0c");
const addr3 = AccountAddress.from("1"); // no 0x ok
From string (strict AIP-40)
// Strict: LONG (0x + 64 chars) or SHORT only for special (0x0–0xf)
const addrStrict = AccountAddress.fromStringStrict(
  "0x0000000000000000000000000000000000000000000000000000000000000001"
);
// Or use fromStrict for any AccountAddressInput
const a = AccountAddress.fromStrict("0x1"); // ok: special address in SHORT form
From bytes
const bytes = new Uint8Array(32);
bytes[31] = 1;
const addr = new AccountAddress(bytes);
// or
const addrFrom = AccountAddress.from(bytes);
Built-in constants
AccountAddress.ZERO; // 0x0
AccountAddress.ONE; // 0x1
AccountAddress.TWO; // 0x2
AccountAddress.THREE; // 0x3
AccountAddress.FOUR; // 0x4
AccountAddress.A; // 0xa

String output

MethodUse case
addr.toString()AIP-40 default: SHORT for special, LONG for others
addr.toStringLong()Always 0x + 64 hex chars
addr.toStringShort()Shortest form (no leading zeros)
addr.toStringLongWithoutPrefix()64 hex chars, no 0x
const addr = AccountAddress.from("0x1");
addr.toString(); // "0x1"
addr.toStringLong(); // "0x0000...0001" (64 chars after 0x)

Validation

const result = AccountAddress.isValid({
  input: "0x1",
  strict: false
});
if (result.valid) {
  // use address
} else {
  console.log(result.invalidReason, result.invalidReasonMessage);
}

Derived addresses (object / resource / token / user-derived)

Import from @aptos-labs/ts-sdk (via core):

import {
  AccountAddress,
  createObjectAddress,
  createResourceAddress,
  createTokenAddress,
  createUserDerivedObjectAddress
} from "@aptos-labs/ts-sdk";
Object address (e.g. named object)
const creator = AccountAddress.from("0x120e79e45d21ef439963580c77a023e2729db799e96e61f878fac98fde5b9cc9");
const seed = "migration::migration_contract"; // or Uint8Array
const objectAddr = createObjectAddress(creator, seed);
// objectAddr.toString() => deterministic 0x... address
Resource account address
const creator = AccountAddress.from("0x41e724e1d4fce6472ffcb5c9886770893eb49489e3f531d0aa97bf951e66d70c");
const seed = "create_resource::create_resource";
const resourceAddr = createResourceAddress(creator, seed);
Token (NFT) object address
const creator = AccountAddress.from("0x9d518b9b84f327eafc5f6632200ea224a818a935ffd6be5d78ada250bbc44a6");
const collectionName = "SuperV Villains";
const tokenName = "Nami #5962";
const tokenAddr = createTokenAddress(creator, collectionName, tokenName);
// Internally: seed = `${collectionName}::${tokenName}` -> createObjectAddress(creator, seed)
User-derived object address
const sourceAddress = AccountAddress.from("0x653a60dab27fe8f3859414973d218e1b7551c778a8650a7055a85c0f8041b2a4");
const deriveFromAddress = AccountAddress.from("0xa");
const userDerivedAddr = createUserDerivedObjectAddress(sourceAddress, deriveFromAddress);

Equality and serialization

const a = AccountAddress.from("0x1");
const b = AccountAddress.from("0x0000000000000000000000000000000000000000000000000000000000000001");
a.equals(b); // true

// BCS: use serializer or SDK entry/script helpers in transaction building

Common mistakes

MistakeCorrect approach
Using Hex for account addressUse AccountAddress only
Comparing with === on stringsUse addr1.equals(addr2) or compare after AccountAddress.from()
Using SHORT for non-special in strictUse LONG (0x + 64 hex chars) or AccountAddress.from() (relaxed)
Hand-rolling object address hashUse createObjectAddress / createTokenAddress / createResourceAddress / createUserDerivedObjectAddress

References

Comments

Markdown supported