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/signers8.1+ (TypeScript) |solana-sdk2.x, 3.x или 4.x через функцииsdk-v2/sdk-v3/sdk-v4(Rust; транзакции v1 требуютsdk-v4) |solders(Python) |solana-gov2 (Go)
Поддерживаемые системы
Бэкенды охватывают локальную разработку, автономное и облачное управление ключами, а также управляемые кошельки и сервисы MPC. См. Выбор бэкенда для сравнения моделей хранения и выбора подходящего варианта.
| Бэкенд | Сценарий использования | Rust | TypeScript | Python | Go |
|---|---|---|---|---|---|
| Memory | Разработка, тестирование | ✓ | ✓ | ✓ | ✓ |
| HashiCorp Vault | Автономное управление ключами | ✓ | ✓ | ✓ | ✓ |
| AWS KMS | Облачный (AWS) | ✓ | ✓ | ✓ | ✓ |
| GCP KMS | Облачный (GCP) | ✓ | ✓ | ✓ | ✓ |
| Privy | Встроенные кошельки | ✓ | ✓ | ✓ | ✓ |
| Turnkey | Некастодиальное управление ключами | ✓ | ✓ | ✓ | ✓ |
| Fireblocks | Институциональное хранение | ✓ | ✓ | ✓ | ✓ |
| CDP | Coinbase Developer Platform | ✓ | ✓ | ✓ | ✓ |
| Crossmint | Управляемые кошельки Crossmint | ✓ | ✓ | ✓ | ✓ |
| Dfns | Инфраструктура кошельков Dfns | ✓ | ✓ | ✓ | ✓ |
| Openfort | Бэкенд-кошельки Openfort | ✓ | ✓ | ✓ | ✓ |
| Para | MPC-кошельки Para | ✓ | ✓ | ✓ | ✓ |
| Utila | MPC-хранение Utila | ✓ | ✓ | ✓ | ✓ |
| Fordefi | Fordefi MPC custody | ✓ | ✓ | ✓ | ✓ |
| Ledger | Аппаратный кошелёк (опционально, без аудита) | ✓ |
Быстрый старт
Rust
Установите Rust crate:
cargo add solana-keychain
Базовое использование:
use solana_keychain::{Signer, SolanaSigner};// Create a signer from any backendlet signer = Signer::from_memory("base58_private_key")?;let pubkey = signer.pubkey();// Transaction signing is a capability; `tx` is a VersionedTransactionif 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 yourselflet signature = signer.sign_and_send(&mut tx, |encoded| async move { broadcast(encoded).await }).await?;
- Руководство по Rust - Полная установка и настройка бэкенда
- Crates.io - Rust crate
TypeScript
Установите пакет TypeScript:
pnpm add @solana/keychain
Базовое использование:
import { createKeychainSigner } from "@solana/keychain";import { signTransactionWithSigners } from "@solana/signers";// Create any signer via the unified factoryconst 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 transactionconst signedTx = await signTransactionWithSigners([signer],compiledTransaction);
- Руководство по TypeScript -
пакеты
@solana/keychain - npm Package - npm-пакет
Чтобы установить подписанта Keychain на клиент Kit
в качестве его payer или identity, используйте @solana/keychain-kit-plugin
(нативные режимы Crossmint и Fordefi исключены, поскольку они переписывают
транзакции).
Python
Установите пакет (более тяжёлые бэкенды поставляются как extras, например
solana-keychain[aws-kms]):
pip install solana-keychain
Базовое использование:
import osfrom solana_keychain import VaultSignerConfig, create_vault_signersigner = 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 VersionedTransactionresult = await signer.sign_transaction(tx)
- Руководство по Python - Полная установка, extras и настройка бэкенда
- PyPI - пакет Python
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 v2res, err := signer.SignTransaction(ctx, tx)
- Руководство по Go - Модули, возможности и настройка бэкенда
- pkg.go.dev - справочник по Go
Следующие шаги
Руководство по Rust
Установите crate и настройте каждый бэкенд.
Руководство по TypeScript
Установите пакеты и настройте каждый бэкенд.
Руководство по Python
Установите пакет с extras и настройте каждый бэкенд.
Руководство по Go
Добавьте модули для нужных бэкендов и настройте каждый из них.
Выбор бэкенда
Сравните модели хранения и выберите подходящий бэкенд для подписи.
Лучшие практики для продакшена
Безопасная работа с подписями: разделение горячих/холодных ключей, ротация, мониторинг.
Добавление пользовательских подписантов
Интегрируйте новый бэкенд управления ключами.
Исходный код
Разработано и поддерживается Solana Foundation. Распространяется под лицензией MIT.
Is this page helpful?