Solana 文档入门指南
安装
根据需要安装伞形包或单独的签名器:
# Umbrella package (includes all signers)pnpm add @solana/keychain# Or install individual packagespnpm add @solana/keychain-core # Core interfaces (required for custom signers)pnpm add @solana/keychain-memory # Local keypair signerpnpm add @solana/keychain-vault # HashiCorp Vaultpnpm add @solana/keychain-aws-kms # AWS KMSpnpm add @solana/keychain-gcp-kms # GCP KMSpnpm add @solana/keychain-privy # Privypnpm add @solana/keychain-turnkey # Turnkeypnpm add @solana/keychain-fireblocks # Fireblockspnpm add @solana/keychain-cdp # Coinbase Developer Platformpnpm add @solana/keychain-crossmint # Crossmintpnpm add @solana/keychain-dfns # Dfnspnpm add @solana/keychain-openfort # Openfortpnpm add @solana/keychain-para # Parapnpm add @solana/keychain-utila # Utila# Kit client plugins (keychainSigner / keychainPayer / keychainIdentity)pnpm add @solana/keychain-kit-plugin
基本用法
统一工厂(推荐用于希望支持多个签名器的应用程序)
使用 createKeychainSigner 配合可辨识的配置来创建任何后端:
import { createKeychainSigner } from "@solana/keychain";import { signTransactionWithSigners } from "@solana/signers"; // requires @solana/signers ≥ 6.5const signer = await createKeychainSigner({backend: "privy",appId: "your-app-id",appSecret: "your-app-secret",walletId: "your-wallet-id"});// Sign an already-compiled transactionconst signedTx = await signTransactionWithSigners([signer],compiledTransaction);
或者安装单独的签名器包以减少依赖占用:
import { createPrivySigner } from "@solana/keychain-privy";const signer = await createPrivySigner({appId: "your-app-id",appSecret: "your-app-secret",walletId: "your-wallet-id"});
与交易消息配合使用
所有签名器都实现了 SolanaSigner 接口,该接口与 @solana/kit 和
@solana/signers 兼容:
import { signTransactionMessageWithSigners } from "@solana/signers";import {createTransactionMessage,setTransactionMessageFeePayerSigner,pipe} from "@solana/kit";async function signWithKeychain(signer: SolanaSigner) {// Check availability (useful for remote signers)if (!(await signer.isAvailable())) {throw new Error("Signer offline");}// Use with @solana/kit transaction builderconst transaction = pipe(createTransactionMessage({ version: 0 }),(tx) => setTransactionMessageFeePayerSigner(signer, tx)// ... add instructions);// Sign with the standard signers APIconst signedTx = await signTransactionMessageWithSigners(transaction);return signedTx;}
与 Kit 客户端配合使用(keychainSigner 插件)
@solana/keychain-kit-plugin 可直接在
Kit 客户端 上安装一个密钥链签名器,将其配置为
payer 和 identity,从而跳过上述手动 pipe 设置步骤:
import { createClient } from "@solana/kit";import { keychainSigner } from "@solana/keychain-kit-plugin";const client = await createClient().use(keychainSigner({backend: "privy",appId: process.env.PRIVY_APP_ID!,appSecret: process.env.PRIVY_APP_SECRET!,walletId: process.env.PRIVY_WALLET_ID!}));client.payer; // SolanaSigner — also a Kit TransactionSignerclient.identity; // same signer instance
该插件与 createKeychainSigner
接受相同的带后端标签的配置,且仅打包其调度目标后端(后端包通过动态 import()
加载)。
使用 keychainPayer 或 keychainIdentity
仅设置单一角色,并在同一客户端上混用多个后端:
import { createClient } from "@solana/kit";import { keychainIdentity, keychainPayer } from "@solana/keychain-kit-plugin";const client = await createClient().use(keychainPayer({backend: "memory",privateKeyPath: "~/.config/solana/id.json"})).use(keychainIdentity({ backend: "turnkey", ...turnkeyConfig }));
已有 SolanaSigner?每个密钥链签名器都是有效的 Kit
TransactionSigner,因此您可以改用
@solana/kit-plugin-signer
安装已有的签名器(pnpm add @solana/kit-plugin-signer):
import { signer } from "@solana/kit-plugin-signer";import { createKeychainSigner } from "@solana/keychain";const mySigner = await createKeychainSigner({backend: "vault",...vaultConfig});const client = createClient().use(signer(mySigner));
后端配置
HashiCorp Vault
import { createVaultSigner } from "@solana/keychain-vault";const signer = createVaultSigner({vaultAddr: "https://vault.example.com:8200",vaultToken: "hvs.xxxxx",keyName: "my-solana-key",publicKey: "base58_public_key"});
AWS KMS
import { createAwsKmsSigner } from "@solana/keychain-aws-kms";const signer = createAwsKmsSigner({keyId: "alias/my-solana-key",publicKey: "base58_public_key",region: "us-east-1" // optional});
Privy
import { createPrivySigner } from "@solana/keychain-privy";const signer = await createPrivySigner({appId: "app_id",appSecret: "app_secret",walletId: "wallet_id"});
Turnkey
import { createTurnkeySigner } from "@solana/keychain-turnkey";const signer = createTurnkeySigner({apiPublicKey: "api_public_key",apiPrivateKey: "api_private_key",organizationId: "org_id",privateKeyId: "private_key_id",publicKey: "base58_public_key"});
Fireblocks
import { createFireblocksSigner } from "@solana/keychain-fireblocks";const signer = await createFireblocksSigner({apiKey: "api_key",privateKeyPem: "-----BEGIN RSA PRIVATE KEY-----\n...",vaultAccountId: "0",assetId: "SOL" // or "SOL_TEST" for devnet});
CDP(Coinbase 开发者平台)
import { createCdpSigner } from "@solana/keychain-cdp";const signer = await createCdpSigner({apiKeyId: "api_key_id",apiKeySecret: "api_key_secret",walletSecret: "wallet_secret",address: "base58_address"});
Crossmint
import { createCrossmintSigner } from "@solana/keychain-crossmint";const signer = await createCrossmintSigner({apiKey: "api_key",walletLocator: "wallet_locator"});
Dfns
import { createDfnsSigner } from "@solana/keychain-dfns";const signer = await createDfnsSigner({authToken: "auth_token",credId: "cred_id",privateKeyPem: "-----BEGIN EC PRIVATE KEY-----\n...",appId: "app_id",walletId: "wallet_id"});
参数
import { createParaSigner } from "@solana/keychain-para";const signer = await createParaSigner({apiKey: "api_key",walletId: "wallet_id"});
SolanaSigner 接口
SolanaSigner 接口扩展了 @solana/signers 类型以实现完整兼容性:
interface SolanaSigner<TAddress extends string = string>extends TransactionPartialSigner<TAddress>,MessagePartialSigner<TAddress> {// Public key addressreadonly address: Address<TAddress>;// Health check for remote signersisAvailable(): Promise<boolean>;// Sign messages (@solana/kit compatible)signMessages(messages: readonly SignableMessage[]): Promise<readonly SignatureDictionary[]>;// Sign transactions (@solana/kit compatible)signTransactions(transactions: readonly Transaction[]): Promise<readonly SignatureDictionary[]>;}
构建自定义签名器
实现 SolanaSigner 接口以创建自定义签名器:
import { SolanaSigner } from "@solana/keychain-core";import type { Address } from "@solana/addresses";class MyCustomSigner implements SolanaSigner {readonly address: Address;constructor(address: Address) {this.address = address;}async isAvailable(): Promise<boolean> {return await myBackend.healthCheck();}async signMessages(messages) {return await myBackend.signMessages(messages);}async signTransactions(transactions) {return await myBackend.signTransactions(transactions);}}
请参阅添加签名器指南,以集成额外的密钥管理服务。
Is this page helpful?