Τεκμηρίωση SolanaΞεκινώντας

TypeScript

Εγκατάσταση

Εγκαταστήστε το ενιαίο πακέτο ή μεμονωμένους υπογράφοντες ανάλογα με τις ανάγκες σας:

# Umbrella package (includes all signers)
pnpm add @solana/keychain
# Or install individual packages
pnpm add @solana/keychain-core # Core interfaces (required for custom signers)
pnpm add @solana/keychain-memory # Local keypair signer
pnpm add @solana/keychain-vault # HashiCorp Vault
pnpm add @solana/keychain-aws-kms # AWS KMS
pnpm add @solana/keychain-gcp-kms # GCP KMS
pnpm add @solana/keychain-privy # Privy
pnpm add @solana/keychain-turnkey # Turnkey
pnpm add @solana/keychain-fireblocks # Fireblocks
pnpm add @solana/keychain-cdp # Coinbase Developer Platform
pnpm add @solana/keychain-crossmint # Crossmint
pnpm add @solana/keychain-dfns # Dfns
pnpm add @solana/keychain-openfort # Openfort
pnpm add @solana/keychain-para # Para
pnpm 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.5
const signer = await createKeychainSigner({
backend: "privy",
appId: "your-app-id",
appSecret: "your-app-secret",
walletId: "your-wallet-id"
});
// Sign an already-compiled transaction
const 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 builder
const transaction = pipe(
createTransactionMessage({ version: 0 }),
(tx) => setTransactionMessageFeePayerSigner(signer, tx)
// ... add instructions
);
// Sign with the standard signers API
const 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 TransactionSigner
client.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 address
readonly address: Address<TAddress>;
// Health check for remote signers
isAvailable(): 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?

© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.