Εγκατάσταση
Εγκαταστήστε το ενιαίο πακέτο ή μεμονωμένους υπογράφοντες ανάλογα με τις ανάγκες σας:
# 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
Βασική Χρήση
Ενιαίο Factory (Συνιστάται για εφαρμογές που θέλουν να υποστηρίζουν πολλαπλούς υπογράφοντες)
Χρησιμοποιήστε το createKeychainSigner με μια διακριτή διαμόρφωση για να
δημιουργήσετε οποιοδήποτε backend:
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);
Ή εγκαταστήστε ένα μεμονωμένο πακέτο υπογράφοντος για μικρότερο footprint εξαρτήσεων:
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 Client (πρόσθετο keychainSigner)
Το @solana/keychain-kit-plugin εγκαθιστά απευθείας ένα keychain signer σε έναν
Kit client, συνδέοντάς το ως 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
Το πρόσθετο δέχεται την ίδια διαμόρφωση με ετικέτα backend όπως το
createKeychainSigner, και μόνο το backend στο οποίο αποστέλλει περιλαμβάνεται
στο πακέτο (τα πακέτα backend φορτώνουν μέσω δυναμικού import()).
Χρησιμοποιήστε keychainPayer ή keychainIdentity για να ορίσετε έναν μόνο
ρόλο και να συνδυάσετε backends σε έναν μόνο client:
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; Κάθε keychain signer είναι έγκυρο 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));
Διαμόρφωση 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 (Coinbase Developer Platform)
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[]>;}
Δημιουργία Προσαρμοσμένων Signers
Υλοποιήστε τη διεπαφή SolanaSigner για τη δημιουργία προσαρμοσμένων signers:
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);}}
Δείτε τον οδηγό Adding Signers για να ενσωματώσετε πρόσθετες υπηρεσίες διαχείρισης κλειδιών.
Is this page helpful?