介绍如何在 @aptos-labs/ts-sdk 中创建和使用 AccountAddress。包括地址格式(AIP-40)、from/fromString/fromStrict 方法、特殊地址、LONG 与 SHORT 形式的区别。
TypeScript SDK: Account Address.Purpose. 指南正确创建,解析,并格式化了以 @aptos-labs/ts-sdk 的账户是一项面向实际任务的技能,主要用于Addresses是32字节的1值;字符串格式遵循 AIP-40.。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
指导在 @aptos-labs/ts-sdk 中正确创建、解析和格式化 账户地址(account addresses)。地址为 32 字节值;字符串格式遵循 AIP-40。
AccountAddress.from() 处理灵活输入 —— 支持字符串(含或不含 0x 前缀)、Uint8Array 或已存在的 AccountAddress 实例。AccountAddress 或字符串使用 —— SDK 大多数 API 接受 AccountAddressInput 类型(即字符串或 AccountAddress)。AccountAddress.fromStringStrict() 或 AccountAddress.fromStrict() —— 仅允许 LONG 格式(0x + 64 位十六进制字符)或特殊地址(0x0–0xf)的 SHORT 格式。addr.equals(other),或先通过 AccountAddress.from() 归一化后再比较。Hex 类 —— 仅应使用 AccountAddress(依据 SDK 文档要求)。0x 开头;LONG 格式为 0x + 64 位十六进制字符;SHORT 格式为最短合法形式(例如 0x1、0xf)。0x0–0xf(仅最后 1 字节小于 16,其余字节全为零)。此类地址可采用 SHORT 格式书写(如 0x1、0xa)。import { AccountAddress } from "@aptos-labs/ts-sdk";
// 宽松模式:支持带或不带 0x 前缀、SHORT 或 LONG 格式
const addr1 = AccountAddress.from("0x1");
const addr2 = AccountAddress.from("0xaa86fe99004361f747f91342ca13c426ca0cccb0c1217677180c9493bad6ef0c");
const addr3 = AccountAddress.from("1"); // 不带 0x 前缀亦可
// 严格模式:仅接受 LONG 格式(0x + 64 字符)或特殊地址(0x0–0xf)的 SHORT 格式
const addrStrict = AccountAddress.fromStringStrict(
"0x0000000000000000000000000000000000000000000000000000000000000001"
);
// 或使用 fromStrict 处理任意 AccountAddressInput
const a = AccountAddress.fromStrict("0x1"); // 合法:特殊地址以 SHORT 格式传入
const bytes = new Uint8Array(32); bytes[31] = 1; const addr = new AccountAddress(bytes); // 或 const addrFrom = AccountAddress.from(bytes);
AccountAddress.ZERO; // 0x0 AccountAddress.ONE; // 0x1 AccountAddress.TWO; // 0x2 AccountAddress.THREE; // 0x3 AccountAddress.FOUR; // 0x4 AccountAddress.A; // 0xa
| 方法 | 适用场景 |
|---|---|
addr.toString() |
AIP-40 默认行为:特殊地址输出 SHORT 格式,其余输出 LONG 格式 |
addr.toStringLong() |
始终输出 0x + 64 位十六进制字符 |
addr.toStringShort() |
最短合法形式(无前导零) |
addr.toStringLongWithoutPrefix() |
64 位十六进制字符,不含 0x 前缀 |
const addr = AccountAddress.from("0x1");
addr.toString(); // "0x1"
addr.toStringLong(); // "0x0000...0001"(0x 后共 64 位十六进制字符)
const result = AccountAddress.isValid({
input: "0x1",
strict: false
});
if (result.valid) {
// 使用该地址
} else {
console.log(result.invalidReason, result.invalidReasonMessage);
}
从 @aptos-labs/ts-sdk(通过 core 模块)导入:
import {
AccountAddress,
createObjectAddress,
createResourceAddress,
createTokenAddress,
createUserDerivedObjectAddress
} from "@aptos-labs/ts-sdk";
const creator = AccountAddress.from("0x120e79e45d21ef439963580c77a023e2729db799e96e61f878fac98fde5b9cc9");
const seed = "migration::migration_contract"; // 或 Uint8Array
const objectAddr = createObjectAddress(creator, seed);
// objectAddr.toString() => 确定性的 0x... 地址
const creator = AccountAddress.from("0x41e724e1d4fce6472ffcb5c9886770893eb49489e3f531d0aa97bf951e66d70c");
const seed = "create_resource::create_resource";
const resourceAddr = createResourceAddress(creator, seed);
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)
const sourceAddress = AccountAddress.from("0x653a60dab27fe8f3859414973d218e1b7551c778a8650a7055a85c0f8041b2a4");
const deriveFromAddress = AccountAddress.from("0xa");
const userDerivedAddr = createUserDerivedObjectAddress(sourceAddress, deriveFromAddress);
const a = AccountAddress.from("0x1");
const b = AccountAddress.from("0x0000000000000000000000000000000000000000000000000000000000000001");
a.equals(b); // true
// BCS 序列化:在构造交易时使用序列化器或 SDK 提供的 entry/script 辅助函数
| 错误做法 | 正确做法 |
|---|---|
对账户地址使用 Hex 类 |
仅使用 AccountAddress |
用 === 直接比较字符串 |
使用 addr1.equals(addr2),或先调用 AccountAddress.from() 归一化再比较 |
| 在严格模式下对非特殊地址使用 SHORT 格式 | 使用 LONG 格式(0x + 64 位十六进制字符),或改用 AccountAddress.from()(宽松模式) |
| 手动实现对象地址哈希逻辑 | 使用 createObjectAddress / createTokenAddress / createResourceAddress / createUserDerivedObjectAddress |
src/core/accountAddress.ts、src/core/account/utils/address.tsTYPESCRIPT_SDK.md相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章