Ts sdk address
Skill aptos-labs/aptos-agent-skills/skills/sdk/typescript/ts-sdk-address
AI skills for building secure, modern Aptos dApps — Move contracts, TypeScript SDK, and frontend integration for Claude Code, Cursor, and Copilot.
npx -y skills add aptos-labs/aptos-agent-skills --skill ts-sdk-addressAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 19 stars19 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.2 KB, as published. Nobody here has run it
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
- Use
AccountAddress.from()for flexible input – accepts string (with or without0x),Uint8Array, or existingAccountAddress. - Use addresses as
AccountAddressor string in API – SDK acceptsAccountAddressInput(string orAccountAddress) in most APIs. - Use
AccountAddress.fromStringStrict()/AccountAddress.fromStrict()when you need AIP-40 strict: LONG (0x + 64 hex chars) or SHORT only for special (0x0–0xf). - Use derived address helpers from the SDK for object/resource/token addresses – do not hand-roll hashing.
NEVER
- Do not use raw strings for comparison – use
addr.equals(other)or normalize withAccountAddress.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
Hexclass for account addresses – useAccountAddressonly (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
| 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 |
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
| 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