التثبيت
قم بتثبيت الحزمة الشاملة أو الموقعين الفرديين حسب الحاجة:
# 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 بالفعل؟ كل موقّع سلسلة مفاتيح هو TransactionSigner صالح
لـ Kit، لذا يمكنك تثبيت موقّع موجود باستخدام
@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?