返回顶部
t

ts-sdk-address

How to create and use AccountAddress in @aptos-labs/ts-sdk. Covers address format (AIP-40),

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
110
下载量
0
收藏
概述
安装方式
版本历史

ts-sdk-address

# 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](https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-40.md). --- ## Creating AccountAddress ### From string (recommended: relaxed) ```typescript 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) ```typescript // 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 ```typescript const bytes = new Uint8Array(32); bytes[31] = 1; const addr = new AccountAddress(bytes); // or const addrFrom = AccountAddress.from(bytes); ``` ### Built-in constants ```typescript AccountAddress.ZERO; // 0x0 AccountAddress.ONE; // 0x1 AccountAddress.TWO; // 0x2 AccountAddress.THREE; // 0x3 AccountAddress.FOUR; // 0x4 AccountAddress.A; // 0xa ``` --- ## String output | Method | Use 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` | ```typescript const addr = AccountAddress.from("0x1"); addr.toString(); // "0x1" addr.toStringLong(); // "0x0000...0001" (64 chars after 0x) ``` --- ## Validation ```typescript 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): ```typescript import { AccountAddress, createObjectAddress, createResourceAddress, createTokenAddress, createUserDerivedObjectAddress } from "@aptos-labs/ts-sdk"; ``` ### Object address (e.g. named object) ```typescript 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 ```typescript const creator = AccountAddress.from("0x41e724e1d4fce6472ffcb5c9886770893eb49489e3f531d0aa97bf951e66d70c"); const seed = "create_resource::create_resource"; const resourceAddr = createResourceAddress(creator, seed); ``` ### Token (NFT) object address ```typescript 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 ```typescript const sourceAddress = AccountAddress.from("0x653a60dab27fe8f3859414973d218e1b7551c778a8650a7055a85c0f8041b2a4"); const deriveFromAddress = AccountAddress.from("0xa"); const userDerivedAddr = createUserDerivedObjectAddress(sourceAddress, deriveFromAddress); ``` --- ## Equality and serialization ```typescript 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 | Mistake | Correct approach | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | Using `Hex` for account address | Use `AccountAddress` only | | Comparing with `===` on strings | Use `addr1.equals(addr2)` or compare after `AccountAddress.from()` | | Using SHORT for non-special in strict | Use LONG (0x + 64 hex chars) or `AccountAddress.from()` (relaxed) | | Hand-rolling object address hash | Use `createObjectAddress` / `createTokenAddress` / `createResourceAddress` / `createUserDerivedObjectAddress` | --- ## References - SDK: `src/core/accountAddress.ts`, `src/core/account/utils/address.ts` - AIP-40: https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-40.md - Pattern: [TYPESCRIPT_SDK.md](../../../../patterns/fullstack/TYPESCRIPT_SDK.md)

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 ts-sdk-address-1776172562 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 ts-sdk-address-1776172562 技能

通过命令行安装

skillhub install ts-sdk-address-1776172562

下载 Zip 包

⬇ 下载 ts-sdk-address v1.0.0

文件大小: 3.13 KB | 发布时间: 2026-4-17 16:24

v1.0.0 最新 2026-4-17 16:24
Initial release of ts-sdk-address: a guide for creating and using AccountAddress in @aptos-labs/ts-sdk.

- Documents AIP-40 address formats, input validation, and best practices.
- Details relaxed vs strict address creation, conversion, and output methods.
- Explains safe use of derived address helpers: object, resource, token, and user-derived.
- Lists common mistakes and recommends correct approaches for comparison, normalization, and serialization.
- Includes sample code and references for SDK usage.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部