Cài đặt
Cài đặt gói umbrella hoặc các signer riêng lẻ tùy theo nhu cầu:
# 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
Cách sử dụng cơ bản
Unified Factory (Khuyến nghị cho các ứng dụng muốn hỗ trợ nhiều signer)
Sử dụng createKeychainSigner với config phân biệt để tạo bất kỳ backend nào:
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);
Hoặc cài đặt gói signer riêng lẻ để giảm kích thước dependencies:
import { createPrivySigner } from "@solana/keychain-privy";const signer = await createPrivySigner({appId: "your-app-id",appSecret: "your-app-secret",walletId: "your-wallet-id"});
Sử dụng với Transaction Messages
Tất cả các signer đều implement interface SolanaSigner, tương thích với
@solana/kit và @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;}
Sử dụng với Kit Client (plugin keychainSigner)
@solana/keychain-kit-plugin cài đặt một keychain signer trực tiếp trên
Kit client, kết nối nó như payer và
identity để bạn bỏ qua bước thiết lập thủ công pipe như trên:
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
Plugin này chấp nhận cùng cấu hình backend-tagged như createKeychainSigner, và
chỉ backend mà nó điều phối tới mới được đóng gói (các gói backend được tải qua
import() động).
Dùng keychainPayer hoặc keychainIdentity để chỉ thiết lập một vai trò, và
kết hợp nhiều backend trên một client duy nhất:
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 }));
Đã có sẵn SolanaSigner? Mọi keychain signer đều là một Kit TransactionSigner
hợp lệ, vì vậy bạn có thể cài đặt một signer hiện có bằng
@solana/kit-plugin-signer
thay thế (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));
Cấu hình Backend
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 (Nền tảng Nhà phát triển 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"});
Para
import { createParaSigner } from "@solana/keychain-para";const signer = await createParaSigner({apiKey: "api_key",walletId: "wallet_id"});
Giao Diện SolanaSigner
Giao diện SolanaSigner mở rộng các kiểu @solana/signers để đảm bảo khả năng
tương thích đầy đủ:
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[]>;}
Xây Dựng Trình Ký Tùy Chỉnh
Triển khai giao diện SolanaSigner để tạo các trình ký tùy chỉnh:
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);}}
Xem Hướng dẫn Thêm Trình Ký để tích hợp các dịch vụ quản lý khóa bổ sung.
Is this page helpful?