Keychain

**Solana Keychain 为跨多种密钥管理后端签署 Solana 交易提供了统一接口。**在本地开发时使用内存密钥,到生产环境再切换到企业级密钥管理、云 HSM 或托管钱包服务,无需重写签名代码。

为什么选择 Keychain?

  • 单一接口:所有后端共用一个 SolanaSigner 基础接口,并为每个后端提供一种能力:签名、改写并签名,或签名并广播
  • 灵活切换后端:通过配置即可更换密钥管理提供商;只有当新后端的能力不同时(Crossmint 和 Fordefi 原生模式),调用处才需要修改
  • 按需使用:Rust 特性标志(feature flags)、按后端拆分的 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
  • 后端:Memory、Vault、AWS KMS、GCP KMS、Privy、Turnkey、Fireblocks、CDP、Crossmint、Dfns、Openfort、Para、Utila、Fordefi、Ledger(仅限 Rust,可选启用,未经审计)
  • 兼容性:@solana/kit 和 @solana/signers 8.1+(TypeScript)| 通过 sdk-v2 / sdk-v3 / sdk-v4 特性使用 solana-sdk 2.x、3.x 或 4.x(Rust;v1 交易需要 sdk-v4)| solders(Python)| solana-go v2(Go)

支持的后端

后端涵盖本地开发、自托管与云端密钥管理,以及托管型或 MPC 钱包服务。请参阅 选择后端,对比各托管模式并选择最适合的方案。

后端使用场景RustTypeScriptPythonGo
Memory开发、测试✓✓✓✓
HashiCorp Vault自托管密钥管理✓✓✓✓
AWS KMS云原生(AWS)✓✓✓✓
GCP KMS云原生(GCP)✓✓✓✓
Privy嵌入式钱包✓✓✓✓
Turnkey非托管密钥管理✓✓✓✓
Fireblocks机构级托管✓✓✓✓
CDPCoinbase 开发者平台✓✓✓✓
CrossmintCrossmint 托管钱包✓✓✓✓
DfnsDfns 钱包基础设施✓✓✓✓
OpenfortOpenfort 后端钱包✓✓✓✓
ParaPara MPC 钱包✓✓✓✓
UtilaUtila MPC 托管✓✓✓✓
FordefiFordefi MPC 托管✓✓✓✓
Ledger硬件钱包(可选启用,未经审计)✓

快速入门

Rust

安装 Rust crate:

cargo add solana-keychain

基本用法:

use solana_keychain::{Signer, SolanaSigner};
// Create a signer from any backend
let signer = Signer::from_memory("base58_private_key")?;
let pubkey = signer.pubkey();
// Transaction signing is a capability; `tx` is a VersionedTransaction
if 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 yourself
let 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 factory
const 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 transaction
const signedTx = await signTransactionWithSigners(
[signer],
compiledTransaction
);

若要将 Keychain 签名器安装到 Kit 客户端作为其 payer 或 identity,请使用 @solana/keychain-kit-plugin(Crossmint 和 Fordefi 原生模式除外,因为它们会改写交易)。

Python

安装该包(较重的后端以 extras 形式提供,例如 solana-keychain[aws-kms]):

pip install solana-keychain

基本用法:

import os
from solana_keychain import VaultSignerConfig, create_vault_signer
signer = 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 VersionedTransaction
result = await signer.sign_transaction(tx)

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 v2
res, err := signer.SignTransaction(ctx, tx)

后续步骤

源码

由 Solana Foundation 构建和维护。基于 MIT 许可证授权。

Is this page helpful?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有