Kurulum
Şemsiye paketi veya gerektiğinde bireysel imzalayıcıları kurun:
# 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
Temel Kullanım
Birleşik Fabrika (Birden fazla imzalayıcıyı desteklemek isteyen uygulamalar için önerilir)
Herhangi bir arka uç oluşturmak için ayrımlaştırılmış yapılandırmayla
createKeychainSigner kullanın:
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);
Veya daha küçük bir bağımlılık ayak izi için bireysel bir imzalayıcı paketi kurun:
import { createPrivySigner } from "@solana/keychain-privy";const signer = await createPrivySigner({appId: "your-app-id",appSecret: "your-app-secret",walletId: "your-wallet-id"});
İşlem Mesajlarıyla Kullanımı
Tüm imzalayıcılar, @solana/kit ve @solana/signers ile uyumlu olan
SolanaSigner arayüzünü uygular:
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 İstemcisiyle Kullanım (keychainSigner eklentisi)
@solana/keychain-kit-plugin, bir keychain imzalayıcıyı doğrudan bir
Kit istemcisine yükler ve onu payer ile
identity olarak bağlayarak yukarıda gösterilen manuel pipe kurulumunu
atlamanızı sağlar:
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
Eklenti, createKeychainSigner ile aynı arka uç etiketli yapılandırmayı kabul
eder ve yalnızca yönlendirdiği arka uç paketlenir (arka uç paketleri dinamik
import() aracılığıyla yüklenir).
Yalnızca tek bir rol ayarlamak ve tek bir istemcide birden fazla arka ucu
birleştirmek için keychainPayer veya keychainIdentity kullanın:
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 }));
Zaten bir SolanaSigner var mı? Her keychain imzalayıcı geçerli bir Kit
TransactionSigner olduğundan, mevcut birini
@solana/kit-plugin-signer
ile kurabilirsiniz (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));
Arka Uç Yapılandırması
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 Geliştirici Platformu)
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"});
SolanaSigner Arayüzü
SolanaSigner arayüzü, tam uyumluluk için @solana/signers türlerini
genişletir:
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[]>;}
Özel İmzalayıcılar Oluşturma
Özel imzalayıcılar oluşturmak için SolanaSigner arayüzünü uygulayın:
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);}}
Ek anahtar yönetimi hizmetlerini entegre etmek için İmzalayıcı Ekleme rehberine bakın.
Is this page helpful?