Keychain

Solana Keychain предоставляет единый интерфейс для подписи транзакций Solana через несколько бэкендов управления ключами. Ведите локальную разработку с ключом в памяти, затем переключайтесь на корпоративное управление ключами, облачные HSM или управляемые кошельки в продакшене, без переписывания кода подписи.

Почему Keychain?

  • Единый интерфейс: Один базовый интерфейс SolanaSigner для всех бэкендов, плюс одна возможность на каждый бэкенд: подпись, изменение с подписью или подпись с отправкой в сеть
  • Замена бэкенда: Смена провайдеров управления ключами через конфигурацию; места вызова меняются, только если у нового бэкенда другая возможность (нативные режимы Crossmint и Fordefi)
  • Платите только за то, что используете: Feature-флаги Rust, отдельные npm-пакеты для каждого бэкенда, extras в Python и отдельные Go-модули для каждого бэкенда включают только нужные вам бэкенды
  • Аудит: Rust, TypeScript, Python и Go прошли аудит OtterSec (опциональный бэкенд Ledger в объём аудита не входил); более ранний аудит Accretion охватывал Rust и TypeScript. См. статус аудита.

Архитектура

  • Языки: Rust, TypeScript, Python и Go, с одинаковой функциональностью (бэкенд Ledger доступен только для Rust)
  • Интерфейс: базовый SolanaSigner (pubkey, sign_message, is_available) плюс ровно одна возможность на каждый бэкенд: TransactionSigner, ModifyingSigner или SendingSigner
  • Бэкенды: Memory, Vault, AWS KMS, GCP KMS, Privy, Turnkey, Fireblocks, CDP, Crossmint, Dfns, Openfort, Para, Utila, Fordefi, Ledger (только Rust, опционально, без аудита)
  • Совместимость: @solana/kit и @solana/signers 8.1+ (TypeScript) | solana-sdk 2.x, 3.x или 4.x через функции sdk-v2 / sdk-v3 / sdk-v4 (Rust; транзакции v1 требуют sdk-v4) | solders (Python) | solana-go v2 (Go)

Поддерживаемые системы

Бэкенды охватывают локальную разработку, автономное и облачное управление ключами, а также управляемые кошельки и сервисы MPC. См. Выбор бэкенда для сравнения моделей хранения и выбора подходящего варианта.

БэкендСценарий использованияRustTypeScriptPythonGo
MemoryРазработка, тестирование✓✓✓✓
HashiCorp VaultАвтономное управление ключами✓✓✓✓
AWS KMSОблачный (AWS)✓✓✓✓
GCP KMSОблачный (GCP)✓✓✓✓
PrivyВстроенные кошельки✓✓✓✓
TurnkeyНекастодиальное управление ключами✓✓✓✓
FireblocksИнституциональное хранение✓✓✓✓
CDPCoinbase Developer Platform✓✓✓✓
CrossmintУправляемые кошельки Crossmint✓✓✓✓
DfnsИнфраструктура кошельков Dfns✓✓✓✓
OpenfortБэкенд-кошельки Openfort✓✓✓✓
ParaMPC-кошельки Para✓✓✓✓
UtilaMPC-хранение Utila✓✓✓✓
FordefiFordefi MPC custody✓✓✓✓
LedgerАппаратный кошелёк (опционально, без аудита)✓

Быстрый старт

Rust

Установите Rust crate:

cargo add solana-keychain

Базовое использование:

use solana_keychain::{Signer, SolanaSigner};
// Create a signer from any backend
let signer = Signer::from_memory("base58_private_key")?;
let pubkey = signer.pubkey();
// Transaction signing is a capability; `tx` is a VersionedTransaction
if let Some(tx_signer) = signer.as_transaction_signer() {
let result = tx_signer.sign_transaction(&mut tx).await?;
}
// Or let the umbrella route any backend shape and supply the RPC hop yourself
let signature = signer
.sign_and_send(&mut tx, |encoded| async move { broadcast(encoded).await })
.await?;

TypeScript

Установите пакет TypeScript:

pnpm add @solana/keychain

Базовое использование:

import { createKeychainSigner } from "@solana/keychain";
import { signTransactionWithSigners } from "@solana/signers";
// Create any signer via the unified factory
const signer = await createKeychainSigner({
backend: "vault",
vaultAddr: "https://vault.example.com:8200",
vaultToken: "hvs.xxxxx",
keyName: "my-solana-key",
publicKey: "base58_public_key"
});
// Sign an already-compiled transaction
const signedTx = await signTransactionWithSigners(
[signer],
compiledTransaction
);

Чтобы установить подписанта Keychain на клиент Kit в качестве его payer или identity, используйте @solana/keychain-kit-plugin (нативные режимы Crossmint и Fordefi исключены, поскольку они переписывают транзакции).

Python

Установите пакет (более тяжёлые бэкенды поставляются как extras, например solana-keychain[aws-kms]):

pip install solana-keychain

Базовое использование:

import os
from solana_keychain import VaultSignerConfig, create_vault_signer
signer = await create_vault_signer(
VaultSignerConfig(
api_base_url="https://vault.example.com:8200",
token=os.environ["VAULT_TOKEN"],
key_name="my-solana-key",
public_key="base58_public_key",
)
)
# tx is a solders VersionedTransaction
result = await signer.sign_transaction(tx)

Go

Каждый бэкенд — это отдельный Go-модуль, поэтому подключаются только те бэкенды, которые вы импортируете:

go get github.com/solana-foundation/solana-keychain/go/signers/vault/v2@latest

Базовое использование:

import "github.com/solana-foundation/solana-keychain/go/signers/vault/v2"
signer, err := vault.New(vault.Config{
VaultAddr: "https://vault.example.com:8200",
Token: os.Getenv("VAULT_TOKEN"),
KeyName: "my-solana-key",
Pubkey: "base58_public_key",
})
if err != nil {
return err
}
// tx is a *solana.Transaction from solana-go v2
res, err := signer.SignTransaction(ctx, tx)

Следующие шаги

Исходный код

Разработано и поддерживается Solana Foundation. Распространяется под лицензией MIT.

Is this page helpful?

Содержание

Редактировать страницу