mcpField
T
ts-sdk-account

ts-sdk-account

github.com/aptos-labs開発2070 回インストール24 週間前に更新
リポジトリ

ts-sdk-account について

ts-sdk-accountは、@aptos-labs/ts-sdkでAccount署名者を作成・利用するためのリファレンススキルです。署名方式、鍵の扱い、導出、シリアライズ、署名検証を扱い、秘密鍵の操作をサーバーやスクリプトに限定する指針も示します。

主な機能

  1. 01アカウントを生成、または秘密鍵から構築
  2. 02複数の署名方式を利用
  3. 03ニーモニックとパスからアカウントを導出
  4. 04アカウントをシリアライズし認証キーを導出
  5. 05メッセージやトランザクションに署名・検証
  6. 06署名者が所有するオンチェーンアカウントを検索

活用シーン

  1. 01サーバーサイドスクリプト用の署名者を作成
  2. 02署名方式に応じたアカウント型を選択
  3. 03メッセージやトランザクションに署名・検証
  4. 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 を作成しても、アカウントがオンチェーンに作成されるわけではありません。資金を入れるには、ファウセットまたは送金を使用してください。

必ず守ること

  1. Account.generate() または Account.fromPrivateKey() はサーバー/スクリプトでのみ使用してください。フロントエンドでは決して使用せず、エンドユーザーにはウォレットアダプターを使用してください。
  2. サーバーでは秘密鍵を環境変数(例:process.env.PRIVATE_KEY)から読み込んでください。ハードコードしないでください。
  3. トランザクションの作成時には account.accountAddress を使用してください。送信者/セカンダリー署名者として渡します。
  4. 鍵を保持する同じ Account インスタンスを使って、aptos.signAndSubmitTransaction({ signer: account, transaction }) を呼び出してください。

決してしないこと

  1. ブラウザー/フロントエンドで Account.generate() や生の秘密鍵を使用しないでください。ウォレットアダプターを使用してください。
  2. ソースコードに秘密鍵をハードコードしたり、Git にコミットしたりしないでください。
  3. Account(API 名前空間)と Account(署名者クラス)を混同しないでください。API は aptos.account.*、署名者は Account モジュールのクラスです(例:Account.fromPrivateKey)。

Account の種類(署名方式)

種類クラス用途
Ed25519(レガシー)Ed25519Account単一の Ed25519 鍵、レガシー認証
SingleKeySingleKeyAccountEd25519 または Secp256k1、統合認証
MultiKeyMultiKeyAccountマルチシグ
KeylessKeylessAccountKeyless(例:OIDC)
Federated KeylessFederatedKeylessAccountフェデレーション 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() です
生成後、アカウントがオンチェーンに存在すると想定するまずファウセットまたは送金で資金を入れる

参考資料

コメント