ts-sdk-account について
ts-sdk-accountは、@aptos-labs/ts-sdkでAccount署名者を作成・利用するためのリファレンススキルです。署名方式、鍵の扱い、導出、シリアライズ、署名検証を扱い、秘密鍵の操作をサーバーやスクリプトに限定する指針も示します。
主な機能
- 01アカウントを生成、または秘密鍵から構築
- 02複数の署名方式を利用
- 03ニーモニックとパスからアカウントを導出
- 04アカウントをシリアライズし認証キーを導出
- 05メッセージやトランザクションに署名・検証
- 06署名者が所有するオンチェーンアカウントを検索
活用シーン
- 01サーバーサイドスクリプト用の署名者を作成
- 02署名方式に応じたアカウント型を選択
- 03メッセージやトランザクションに署名・検証
- 04鍵に関連するオンチェーンアカウントを検索
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ aptos-labs/ aptos-agent-skills --skill ts-sdk-accountインストール後、Claude Code で/ts-sdk-accountを入力して読み込まれたか確認します。
詳細
TypeScript SDK:Account(署名者)
目的
@aptos-labs/ts-sdk で Account(署名者)を作成して使用する方法を説明します。Account はアドレスと鍵の情報を保持し、トランザクションやメッセージに署名できます。Account を作成しても、アカウントがオンチェーンに作成されるわけではありません。資金を入れるには、ファウセットまたは送金を使用してください。
必ず守ること
Account.generate()またはAccount.fromPrivateKey()はサーバー/スクリプトでのみ使用してください。フロントエンドでは決して使用せず、エンドユーザーにはウォレットアダプターを使用してください。- サーバーでは秘密鍵を環境変数(例:
process.env.PRIVATE_KEY)から読み込んでください。ハードコードしないでください。 - トランザクションの作成時には
account.accountAddressを使用してください。送信者/セカンダリー署名者として渡します。 - 鍵を保持する同じ Account インスタンスを使って、
aptos.signAndSubmitTransaction({ signer: account, transaction })を呼び出してください。
決してしないこと
- ブラウザー/フロントエンドで
Account.generate()や生の秘密鍵を使用しないでください。ウォレットアダプターを使用してください。 - ソースコードに秘密鍵をハードコードしたり、Git にコミットしたりしないでください。
Account(API 名前空間)とAccount(署名者クラス)を混同しないでください。API はaptos.account.*、署名者はAccountモジュールのクラスです(例:Account.fromPrivateKey)。
Account の種類(署名方式)
| 種類 | クラス | 用途 |
|---|---|---|
| Ed25519(レガシー) | Ed25519Account | 単一の Ed25519 鍵、レガシー認証 |
| SingleKey | SingleKeyAccount | Ed25519 または Secp256k1、統合認証 |
| MultiKey | MultiKeyAccount | マルチシグ |
| Keyless | KeylessAccount | Keyless(例:OIDC) |
| Federated Keyless | FederatedKeylessAccount | フェデレーション Keyless |
新しいアカウントを生成する(サーバー/スクリプトのみ)
import { Account, SigningSchemeInput } from "@aptos-labs/ts-sdk";
// Default: Ed25519 legacy
const ed25519Account = Account.generate();
// SingleKey (unified) with Ed25519
const singleKeyAccount = Account.generate({ scheme: SigningSchemeInput.Ed25519, legacy: false });
// SingleKey with Secp256k1
const secpAccount = Account.generate({ scheme: SigningSchemeInput.Secp256k1 });
// Access address and public key
const address = ed25519Account.accountAddress;
const pubKey = ed25519Account.publicKey;
秘密鍵から作成する
import { Account, Ed25519PrivateKey, Secp256k1PrivateKey } from "@aptos-labs/ts-sdk";
// Ed25519 legacy (default)
const privateKeyHex = process.env.PRIVATE_KEY!; // e.g. "0x..." or AIP-80 prefixed
const privateKey = new Ed25519PrivateKey(privateKeyHex);
const account = Account.fromPrivateKey({ privateKey });
// Ed25519 SingleKey (unified)
const accountSingle = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(privateKeyHex),
legacy: false
});
// Secp256k1 (always SingleKey)
const secpKey = new Secp256k1PrivateKey(process.env.SECP_KEY!);
const accountSecp = Account.fromPrivateKey({ privateKey: secpKey });
// Optional: fixed address (e.g. after key rotation)
const accountWithAddr = Account.fromPrivateKey({
privateKey,
address: "0x..."
});
ニーモニックから作成する(導出パス)
import { Account } from "@aptos-labs/ts-sdk";
const mnemonic = "word1 word2 ... word12";
const path = "m/44'/637'/0'/0'/0'"; // Aptos BIP-44 path
// Ed25519 legacy
const acc = Account.fromDerivationPath({ mnemonic, path });
// Ed25519 SingleKey
const accSingle = Account.fromDerivationPath({ mnemonic, path, legacy: false });
// Secp256k1
const accSecp = Account.fromDerivationPath({
scheme: SigningSchemeInput.Secp256k1,
mnemonic,
path
});
認証キー(ローテーション/検索用)
const authKey = Account.authKey({ publicKey: account.publicKey });
// Use authKey.derivedAddress() for address derivation; useful for multi-account lookup
シリアライズ(toHex / fromHex)
アカウントを永続化または送信する場合に使用します(例:サーバーのみ。秘密鍵をフロントエンドに決して公開しないでください)。
import { Account, AccountUtils } from "@aptos-labs/ts-sdk";
const account = Account.generate();
// Serialize to hex (includes private key – treat as secret)
const hex = AccountUtils.toHexString(account);
// Deserialize back
const restored = AccountUtils.fromHex(hex);
// Typed deserialize
const edAccount = AccountUtils.ed25519AccountFromHex(hex);
const singleAccount = AccountUtils.singleKeyAccountFromHex(hex);
const multiAccount = AccountUtils.multiKeyAccountFromHex(hex);
const keylessAccount = AccountUtils.keylessAccountFromHex(hex);
署名
// Sign message (returns Signature)
const sig = account.sign(messageHex);
// Sign transaction (returns Signature; for submit use aptos.transaction.sign + submit)
const txSig = account.signTransaction(rawTransaction);
// With authenticator (used by SDK internally for submit)
const auth = account.signWithAuthenticator(messageHex);
署名を検証する
const ok = account.verifySignature({ message: messageHex, signature: sig });
// Async (if key type needs on-chain state)
const okAsync = await account.verifySignatureAsync({
aptosConfig: aptos.config,
message: messageHex,
signature: sig
});
秘密鍵からアカウントを導出する(オンチェーン検索)
同じ鍵に複数のオンチェーンアカウントが紐づいている可能性がある場合(例:ローテーション後)は、内部的な導出と検索を使用します。
// Returns list of accounts owned by this key on chain
const accounts = await aptos.deriveOwnedAccountsFromSigner({
signer: account
});
// Prefer wallet or explicit address for production; this is for scripts/tooling
よくある間違い
| 間違い | 正しい方法 |
|---|---|
フロントエンドで Account.generate() を使用する | ウォレットアダプターを使用し、生成はサーバー/スクリプトでのみ行う |
| 秘密鍵をハードコードする | process.env から読み込み(サーバー)、決してコミットしない |
aptos.account を署名者として使用する | aptos.account は API 名前空間です。署名者は Account.fromPrivateKey() / Account.generate() です |
| 生成後、アカウントがオンチェーンに存在すると想定する | まずファウセットまたは送金で資金を入れる |
参考資料
- SDK:
src/account/Account.ts、src/account/Ed25519Account.ts、src/account/AccountUtils.ts、src/api/account.ts - パターン:TYPESCRIPT_SDK.md
- 関連:ts-sdk-client、ts-sdk-transactions、 use-ts-sdk
コメント
Markdown 対応