介绍如何在 @aptos-labs/ts-sdk 中创建和使用 AccountAddress。包括地址格式(AIP-40)、from/fromString/fromStrict 方法、特殊地址、LONG 与 SHORT 形式的区别。
TypeScript SDK: Account Address.Purpose. 指南正确创建,解析,并格式化了以 @aptos-labs/ts-sdk 的账户
功能概述
TypeScript SDK: Account Address.Purpose. 指南正确创建,解析,并格式化了以 @aptos-labs/ts-sdk 的账户是一项面向实际任务的技能,主要用于Addresses是32字节的1值;字符串格式遵循 AIP-40.。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
结果检查与注意事项
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
TypeScript SDK:AccountAddress
目的
指导在 @aptos-labs/ts-sdk 中正确创建、解析和格式化 账户地址(account addresses)。地址为 32 字节值;字符串格式遵循 AIP-40。
务必遵守
- 使用
AccountAddress.from()处理灵活输入 —— 支持字符串(含或不含0x前缀)、Uint8Array或已存在的AccountAddress实例。 - 在 API 中将地址作为
AccountAddress或字符串使用 —— SDK 大多数 API 接受AccountAddressInput类型(即字符串或AccountAddress)。 - 当需要严格遵循 AIP-40 规范时,使用
AccountAddress.fromStringStrict()或AccountAddress.fromStrict()—— 仅允许 LONG 格式(0x+ 64 位十六进制字符)或特殊地址(0x0–0xf)的 SHORT 格式。 - 使用 SDK 提供的派生地址辅助函数 生成对象/资源/代币地址 —— 切勿手动实现哈希逻辑。
严禁行为
- 禁止直接用原始字符串进行地址比较 —— 应使用
addr.equals(other),或先通过AccountAddress.from()归一化后再比较。 - 禁止对非特殊地址假设 SHORT 格式 —— 在严格模式下,非特殊地址必须采用 LONG 格式(64 位十六进制字符)。
- 禁止对账户地址使用
Hex类 —— 仅应使用AccountAddress(依据 SDK 文档要求)。
地址格式(AIP-40)
- 长度:32 字节(LONG 格式下为 64 位十六进制字符)。
- 字符串表示:必须以
0x开头;LONG 格式为0x+ 64 位十六进制字符;SHORT 格式为最短合法形式(例如0x1、0xf)。 - 特殊地址:
0x0–0xf(仅最后 1 字节小于 16,其余字节全为零)。此类地址可采用 SHORT 格式书写(如0x1、0xa)。 - 参考规范:AIP-40。
创建 AccountAddress
从字符串创建(推荐:宽松模式)
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 前缀亦可
从字符串创建(严格遵循 AIP-40)
// 严格模式:仅接受 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);
代币(NFT)对象地址
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 |
参考资料
- 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
- 设计模式文档:
TYPESCRIPT_SDK.md
热门AI工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习
最新文章