Solana Keychainは、複数のキー管理バックエンドにわたってSolanaトランザクションに署名するための統一インターフェースを提供します。 インメモリキーを使用してローカルで開発し、署名コードを書き直すことなく、本番環境ではエンタープライズキー管理、クラウドHSM、またはマネージドウォレットサービスに切り替えることができます。
なぜKeychainなのか?
- 単一インターフェース: すべてのバックエンドに共通の
SolanaSigner基本インターフェースに加え、バックエンドごとに1つの機能(署名、書き換えて署名、署名してブロードキャスト)を提供 - バックエンドの切り替え: コードではなく設定によってキー管理プロバイダーを変更できます。 呼び出し側の変更が必要になるのは、新しいバックエンドの機能が異なる場合(CrossmintおよびFordefiのネイティブモード)のみです
- 必要な分だけ利用: Rustのフィーチャーフラグ、バックエンドごとのnpmパッケージ、Pythonのextras、バックエンドごとのGoモジュールにより、必要なバックエンドだけを含められます
- 監査済み: Rust、TypeScript、Python、Goは OtterSecによる監査を受けています(オプトインのLedgerバックエンドは対象外)。以前のAccretionによる監査では、RustとTypeScriptが対象でした。 詳細は 監査状況をご覧ください。
アーキテクチャ
- 言語: Rust、TypeScript、Python、Go(機能は同等。LedgerバックエンドはRust専用)
- インターフェース:
SolanaSigner基本インターフェース(pubkey、sign_message、is_available)に加え、 バックエンドごとにTransactionSigner、ModifyingSigner、SendingSignerのいずれか1つ - バックエンド: Memory、Vault、AWS KMS、GCP KMS、Privy、Turnkey、Fireblocks、 CDP、Crossmint、Dfns、Openfort、Para、Utila、Fordefi、Ledger(Rustのみ、 オプトイン、未監査)
- 互換性:
@solana/kitおよび@solana/signers8.1以上(TypeScript)|sdk-v2/sdk-v3/sdk-v4フィーチャー経由でsolana-sdk2.x、3.x、4.x に対応 (Rust。v1トランザクションにはsdk-v4が必要)|solders(Python)|solana-gov2 (Go)
サポートされているバックエンド
バックエンドは、ローカル開発、セルフホストおよびクラウドキー管理、マネージドまたはMPCウォレットサービスにわたります。カストディモデルの比較と最適な選択については、バックエンドの選び方をご覧ください。
| バックエンド | ユースケース | Rust | TypeScript | Python | Go |
|---|---|---|---|---|---|
| Memory | 開発・テスト | ✓ | ✓ | ✓ | ✓ |
| HashiCorp Vault | セルフホストキー管理 | ✓ | ✓ | ✓ | ✓ |
| AWS KMS | クラウドネイティブ(AWS) | ✓ | ✓ | ✓ | ✓ |
| GCP KMS | クラウドネイティブ(GCP) | ✓ | ✓ | ✓ | ✓ |
| Privy | 埋め込みウォレット | ✓ | ✓ | ✓ | ✓ |
| Turnkey | ノンカストディアルキー管理 | ✓ | ✓ | ✓ | ✓ |
| Fireblocks | 機関向けカストディ | ✓ | ✓ | ✓ | ✓ |
| CDP | Coinbase Developer Platform | ✓ | ✓ | ✓ | ✓ |
| Crossmint | Crossmintマネージドウォレット | ✓ | ✓ | ✓ | ✓ |
| Dfns | Dfnsウォレットインフラ | ✓ | ✓ | ✓ | ✓ |
| Openfort | Openfortバックエンドウォレット | ✓ | ✓ | ✓ | ✓ |
| Para | Para MPCウォレット | ✓ | ✓ | ✓ | ✓ |
| Utila | Utila MPCカストディ | ✓ | ✓ | ✓ | ✓ |
| Fordefi | Fordefi MPCカストディ | ✓ | ✓ | ✓ | ✓ |
| Ledger | ハードウェアウォレット(オプトイン、未監査) | ✓ |
クイックスタート
Rust
Rust クレートをインストールします:
cargo add solana-keychain
基本的な使い方:
use solana_keychain::{Signer, SolanaSigner};// Create a signer from any backendlet signer = Signer::from_memory("base58_private_key")?;let pubkey = signer.pubkey();// Transaction signing is a capability; `tx` is a VersionedTransactionif let Some(tx_signer) = signer.as_transaction_signer() {let result = tx_signer.sign_transaction(&mut tx).await?;}// Or let the umbrella route any backend shape and supply the RPC hop yourselflet signature = signer.sign_and_send(&mut tx, |encoded| async move { broadcast(encoded).await }).await?;
TypeScript
TypeScript パッケージをインストールします:
pnpm add @solana/keychain
基本的な使い方:
import { createKeychainSigner } from "@solana/keychain";import { signTransactionWithSigners } from "@solana/signers";// Create any signer via the unified factoryconst signer = await createKeychainSigner({backend: "vault",vaultAddr: "https://vault.example.com:8200",vaultToken: "hvs.xxxxx",keyName: "my-solana-key",publicKey: "base58_public_key"});// Sign an already-compiled transactionconst signedTx = await signTransactionWithSigners([signer],compiledTransaction);
- TypeScript ガイド -
@solana/keychainパッケージ - npm パッケージ - npm パッケージ
Kit クライアントに Keychain シグナーを
payer または identity としてインストールするには、@solana/keychain-kit-plugin を使用します(Crossmint と
Fordefi のネイティブモードは、トランザクションを書き換えるため対象外です)。
Python
パッケージをインストールします(重めのバックエンドはextrasとして提供されます。例:
solana-keychain[aws-kms]):
pip install solana-keychain
基本的な使い方:
import osfrom solana_keychain import VaultSignerConfig, create_vault_signersigner = await create_vault_signer(VaultSignerConfig(api_base_url="https://vault.example.com:8200",token=os.environ["VAULT_TOKEN"],key_name="my-solana-key",public_key="base58_public_key",))# tx is a solders VersionedTransactionresult = await signer.sign_transaction(tx)
- Python ガイド - 完全なインストール、 extras、バックエンド設定
- PyPI - Pythonパッケージ
Go
各バックエンドは独立したGoモジュールなので、インポートしたバックエンドのみを取り込めます:
go get github.com/solana-foundation/solana-keychain/go/signers/vault/v2@latest
基本的な使い方:
import "github.com/solana-foundation/solana-keychain/go/signers/vault/v2"signer, err := vault.New(vault.Config{VaultAddr: "https://vault.example.com:8200",Token: os.Getenv("VAULT_TOKEN"),KeyName: "my-solana-key",Pubkey: "base58_public_key",})if err != nil {return err}// tx is a *solana.Transaction from solana-go v2res, err := signer.SignTransaction(ctx, tx)
- Go ガイド - モジュール、機能、 バックエンド設定
- pkg.go.dev - Goリファレンス
次のステップ
Rust ガイド
クレートをインストールして各バックエンドを設定します。
TypeScript ガイド
パッケージをインストールして各バックエンドを設定します。
Python ガイド
パッケージとextrasをインストールして、各バックエンドを設定します。
Go ガイド
バックエンドごとのモジュールを追加して、各バックエンドを設定します。
バックエンドの選択
カストディモデルを比較して適切な署名バックエンドを選択します。
本番環境のベストプラクティス
署名を安全に運用する:ホット/コールドの分離、ローテーション、モニタリング。
カスタム署名者の追加
新しいキー管理バックエンドを統合します。
ソース
Solana Foundation によって構築・維持されています。MIT ライセンスのもとで提供されています。
Is this page helpful?