ts-sdk-address
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTypeScript SDK: AccountAddress
TypeScript SDK:AccountAddress
Purpose
用途
Guide correct creation, parsing, and formatting of account addresses in . Addresses are 32-byte values; string format follows AIP-40.
@aptos-labs/ts-sdk指导在中正确创建、解析和格式化账户地址。地址为32字节值;字符串格式遵循AIP-40标准。
@aptos-labs/ts-sdkALWAYS
必须遵循的规范
- Use for flexible input – accepts string (with or without
AccountAddress.from()),0x, or existingUint8Array.AccountAddress - Use addresses as or string in API – SDK accepts
AccountAddress(string orAccountAddressInput) in most APIs.AccountAddress - Use /
AccountAddress.fromStringStrict()when you need AIP-40 strict: LONG (0x + 64 hex chars) or SHORT only for special (0x0–0xf).AccountAddress.fromStrict() - Use derived address helpers from the SDK for object/resource/token addresses – do not hand-roll hashing.
- 使用处理灵活输入——接受带或不带
AccountAddress.from()的字符串、0x或已有的Uint8Array对象。AccountAddress - 在API中使用对象或字符串作为地址——SDK的大多数API接受
AccountAddress类型(字符串或AccountAddressInput对象)。AccountAddress - 当需要严格遵循AIP-40标准时,使用/
AccountAddress.fromStringStrict()——长格式(0x + 64个十六进制字符)或仅特殊地址(0x0–0xf)允许使用短格式。AccountAddress.fromStrict() - 使用SDK提供的派生地址工具函数生成对象/资源/代币地址——不要手动实现哈希逻辑。
NEVER
禁止操作
- Do not use raw strings for comparison – use or normalize with
addr.equals(other).AccountAddress.from() - Do not assume SHORT form for non-special addresses – non-special addresses must be LONG (64 hex chars) in strict mode.
- Do not use the class for account addresses – use
Hexonly (per SDK docs).AccountAddress
- 不要使用原始字符串进行比较——使用或通过
addr.equals(other)标准化后再比较。AccountAddress.from() - 不要假设非特殊地址可以使用短格式——在严格模式下,非特殊地址必须使用长格式(64个十六进制字符)。
- 不要使用类处理账户地址——仅使用
Hex(符合SDK文档要求)。AccountAddress
Address format (AIP-40)
地址格式(AIP-40)
- Length: 32 bytes (64 hex chars in LONG form).
- String: Must start with . LONG =
0x+ 64 hex chars; SHORT = shortest form (e.g.0x,0x1).0xf - Special addresses: –
0x0(last byte < 16, rest zero). These may be written in SHORT form (0xf,0x1).0xa - Reference: AIP-40.
- 长度:32字节(长格式为64个十六进制字符)。
- 字符串格式:必须以开头。长格式为
0x+ 64个十六进制字符;短格式为最简形式(例如0x、0x1)。0xf - 特殊地址:–
0x0(最后一个字节<16,其余字节为0)。这些地址可以用短格式书写(0xf、0x1)。0xa - 参考文档:AIP-40。
Creating AccountAddress
创建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 oktypescript
import { AccountAddress } from "@aptos-labs/ts-sdk";
// 宽松模式:接受带或不带0x的字符串、短格式或长格式
const addr1 = AccountAddress.from("0x1");
const addr2 = AccountAddress.from("0xaa86fe99004361f747f91342ca13c426ca0cccb0c1217677180c9493bad6ef0c");
const addr3 = AccountAddress.from("1"); // 不带0x也可From string (strict AIP-40)
从字符串创建(严格遵循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 formtypescript
// 严格模式:长格式(0x + 64个字符)或仅特殊地址(0x0–0xf)允许使用短格式
const addrStrict = AccountAddress.fromStringStrict(
"0x0000000000000000000000000000000000000000000000000000000000000001"
);
// 或使用fromStrict处理任意AccountAddressInput类型
const a = AccountAddress.fromStrict("0x1"); // 合法:特殊地址的短格式From bytes
从字节创建
typescript
const bytes = new Uint8Array(32);
bytes[31] = 1;
const addr = new AccountAddress(bytes);
// or
const addrFrom = AccountAddress.from(bytes);typescript
const bytes = new Uint8Array(32);
bytes[31] = 1;
const addr = new AccountAddress(bytes);
// 或者
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; // 0xatypescript
AccountAddress.ZERO; // 0x0
AccountAddress.ONE; // 0x1
AccountAddress.TWO; // 0x2
AccountAddress.THREE; // 0x3
AccountAddress.FOUR; // 0x4
AccountAddress.A; // 0xaString output
字符串输出
| Method | Use case |
|---|---|
| AIP-40 default: SHORT for special, LONG for others |
| Always 0x + 64 hex chars |
| Shortest form (no leading zeros) |
| 64 hex chars, no |
typescript
const addr = AccountAddress.from("0x1");
addr.toString(); // "0x1"
addr.toStringLong(); // "0x0000...0001" (64 chars after 0x)| 方法 | 使用场景 |
|---|---|
| AIP-40默认格式:特殊地址用短格式,其他地址用长格式 |
| 始终输出0x + 64个十六进制字符 |
| 输出最简形式(无前导零) |
| 输出64个十六进制字符,不带 |
typescript
const addr = AccountAddress.from("0x1");
addr.toString(); // "0x1"
addr.toStringLong(); // "0x0000...0001"(0x后接64个字符)Validation
验证地址
typescript
const result = AccountAddress.isValid({
input: "0x1",
strict: false
});
if (result.valid) {
// use address
} else {
console.log(result.invalidReason, result.invalidReasonMessage);
}typescript
const result = AccountAddress.isValid({
input: "0x1",
strict: false
});
if (result.valid) {
// 使用该地址
} else {
console.log(result.invalidReason, result.invalidReasonMessage);
}Derived addresses (object / resource / token / user-derived)
派生地址(对象/资源/代币/用户派生)
Import from (via core):
@aptos-labs/ts-sdktypescript
import {
AccountAddress,
createObjectAddress,
createResourceAddress,
createTokenAddress,
createUserDerivedObjectAddress,
} from "@aptos-labs/ts-sdk";从(core模块)导入:
@aptos-labs/ts-sdktypescript
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... addresstypescript
const creator = AccountAddress.from("0x120e79e45d21ef439963580c77a023e2729db799e96e61f878fac98fde5b9cc9");
const seed = "migration::migration_contract"; // 或Uint8Array类型
const objectAddr = createObjectAddress(creator, seed);
// objectAddr.toString() => 确定性的0x...地址Resource account address
资源账户地址
typescript
const creator = AccountAddress.from("0x41e724e1d4fce6472ffcb5c9886770893eb49489e3f531d0aa97bf951e66d70c");
const seed = "create_resource::create_resource";
const resourceAddr = createResourceAddress(creator, seed);typescript
const creator = AccountAddress.from("0x41e724e1d4fce6472ffcb5c9886770893eb49489e3f531d0aa97bf951e66d70c");
const seed = "create_resource::create_resource";
const resourceAddr = createResourceAddress(creator, seed);Token (NFT) object address
代币(NFT)对象地址
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)typescript
const creator = AccountAddress.from("0x9d518b9b84f327eafc5f6632200ea224a818a935ffd6be5d78ada250bbc44a6");
const collectionName = "SuperV Villains";
const tokenName = "Nami #5962";
const tokenAddr = createTokenAddress(creator, collectionName, tokenName);
// 内部逻辑: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);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 buildingtypescript
const a = AccountAddress.from("0x1");
const b = AccountAddress.from("0x0000000000000000000000000000000000000000000000000000000000000001");
a.equals(b); // 返回true
// BCS序列化:在构建交易时使用序列化器或SDK的入口/脚本工具函数Common mistakes
常见错误
| Mistake | Correct approach |
|---|---|
Using | Use |
Comparing with | Use |
| Using SHORT for non-special in strict | Use LONG (0x + 64 hex chars) or |
| Hand-rolling object address hash | Use |
| 错误做法 | 正确方式 |
|---|---|
使用 | 仅使用 |
使用 | 使用 |
| 在严格模式下为非特殊地址使用短格式 | 使用长格式(0x + 64个十六进制字符)或 |
| 手动实现对象地址的哈希逻辑 | 使用 |
References
参考资料
- SDK: ,
src/core/accountAddress.tssrc/core/account/utils/address.ts - AIP-40: https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-40.md
- Pattern: TYPESCRIPT_SDK.md
- SDK源码:、
src/core/accountAddress.tssrc/core/account/utils/address.ts - AIP-40:https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-40.md
- 模式文档:TYPESCRIPT_SDK.md