Solana Keychain cung cấp một giao diện thống nhất để ký các giao dịch Solana trên nhiều backend quản lý khóa. Phát triển cục bộ với khóa lưu trong bộ nhớ, sau đó chuyển sang hệ thống quản lý khóa doanh nghiệp, HSM trên đám mây hoặc các dịch vụ ví được quản lý trong môi trường production mà không cần viết lại mã ký của bạn.
Tại sao nên dùng Keychain?
- Giao diện duy nhất: Một giao diện cơ sở
SolanaSignercho tất cả các backend, cùng một khả năng (capability) cho mỗi backend: ký, viết lại rồi ký, hoặc ký và phát sóng - Hoán đổi backend: Thay đổi nhà cung cấp quản lý khóa thông qua cấu hình; các vị trí gọi chỉ thay đổi khi backend mới có khả năng khác (chế độ native của Crossmint và Fordefi)
- Chỉ trả cho những gì bạn dùng: Rust feature flag, các gói npm theo từng backend, Python extras và các module Go theo từng backend chỉ bao gồm những backend bạn cần
- Đã được kiểm toán: Rust, TypeScript, Python và Go đã được OtterSec kiểm toán (backend Ledger tùy chọn nằm ngoài phạm vi); một cuộc kiểm toán trước đó của Accretion đã bao gồm Rust và TypeScript. Xem trạng thái kiểm toán.
Kiến trúc
- Ngôn ngữ: Rust, TypeScript, Python và Go, tương đương nhau (backend Ledger chỉ có trên Rust)
- Giao diện: Cơ sở
SolanaSigner(pubkey,sign_message,is_available) cùng đúng một khả năng cho mỗi backend:TransactionSigner,ModifyingSignerhoặcSendingSigner - Backend: Memory, Vault, AWS KMS, GCP KMS, Privy, Turnkey, Fireblocks, CDP, Crossmint, Dfns, Openfort, Para, Utila, Fordefi, Ledger (chỉ Rust, tùy chọn, chưa được kiểm toán)
- Khả năng tương thích:
@solana/kitvà@solana/signers8.1+ (TypeScript) |solana-sdk2.x, 3.x hoặc 4.x thông qua các featuresdk-v2/sdk-v3/sdk-v4(Rust; giao dịch v1 cầnsdk-v4) |solders(Python) |solana-gov2 (Go)
Các Backend được hỗ trợ
Các backend bao gồm môi trường phát triển cục bộ, quản lý khóa tự lưu trữ và trên đám mây, cũng như các dịch vụ ví được quản lý hoặc MPC. Xem Chọn backend để so sánh các mô hình lưu ký và chọn mô hình phù hợp.
| Backend | Trường hợp sử dụng | Rust | TypeScript | Python | Go |
|---|---|---|---|---|---|
| Memory | Phát triển, kiểm thử | ✓ | ✓ | ✓ | ✓ |
| HashiCorp Vault | Quản lý khóa tự lưu trữ | ✓ | ✓ | ✓ | ✓ |
| AWS KMS | Cloud-native (AWS) | ✓ | ✓ | ✓ | ✓ |
| GCP KMS | Cloud-native (GCP) | ✓ | ✓ | ✓ | ✓ |
| Privy | Ví nhúng | ✓ | ✓ | ✓ | ✓ |
| Turnkey | Quản lý khóa không lưu ký | ✓ | ✓ | ✓ | ✓ |
| Fireblocks | Lưu ký tổ chức | ✓ | ✓ | ✓ | ✓ |
| CDP | Coinbase Developer Platform | ✓ | ✓ | ✓ | ✓ |
| Crossmint | Ví được quản lý bởi Crossmint | ✓ | ✓ | ✓ | ✓ |
| Dfns | Hạ tầng ví Dfns | ✓ | ✓ | ✓ | ✓ |
| Openfort | Ví backend Openfort | ✓ | ✓ | ✓ | ✓ |
| Para | Ví MPC Para | ✓ | ✓ | ✓ | ✓ |
| Utila | Lưu ký MPC Utila | ✓ | ✓ | ✓ | ✓ |
| Fordefi | Fordefi MPC custody | ✓ | ✓ | ✓ | ✓ |
| Ledger | Ví phần cứng (tùy chọn, chưa được kiểm toán) | ✓ |
Bắt Đầu Nhanh
Rust
Cài đặt Rust crate:
cargo add solana-keychain
Cách sử dụng cơ bản:
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?;
- Hướng Dẫn Rust - Cài đặt đầy đủ và cấu hình backend
- Crates.io - Rust crate
TypeScript
Cài đặt gói TypeScript:
pnpm add @solana/keychain
Cách sử dụng cơ bản:
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);
- Hướng Dẫn TypeScript - Các
gói
@solana/keychain - Gói npm - gói npm
Để cài đặt một signer Keychain trên client Kit
làm payer hoặc identity, hãy dùng @solana/keychain-kit-plugin (chế độ native của Crossmint và
Fordefi bị loại trừ, vì chúng viết lại giao dịch).
Python
Cài đặt gói (các backend nặng hơn được phát hành dưới dạng extras, ví dụ
solana-keychain[aws-kms]):
pip install solana-keychain
Cách sử dụng cơ bản:
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)
- Hướng dẫn Python - Cài đặt đầy đủ, extras và cấu hình backend
- PyPI - Gói Python
Go
Mỗi backend là một module Go riêng, nên bạn chỉ kéo về những backend mà bạn import:
go get github.com/solana-foundation/solana-keychain/go/signers/vault/v2@latest
Cách sử dụng cơ bản:
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)
- Hướng dẫn Go - Module, khả năng và cấu hình backend
- pkg.go.dev - Tài liệu tham khảo Go
Các Bước Tiếp Theo
Hướng dẫn Rust
Cài đặt crate và cấu hình từng backend.
Hướng dẫn TypeScript
Cài đặt các gói và cấu hình từng backend.
Hướng dẫn Python
Cài đặt gói cùng các extras, và cấu hình từng backend.
Hướng dẫn Go
Thêm các module theo từng backend và cấu hình từng backend.
Chọn backend
So sánh các mô hình lưu ký và chọn backend ký phù hợp.
Các phương pháp hay nhất cho môi trường production
Vận hành ký an toàn: phân tách hot/cold, xoay vòng khóa, giám sát.
Thêm các signer tùy chỉnh
Tích hợp backend quản lý khóa mới.
Nguồn
Được xây dựng và duy trì bởi Solana Foundation. Được cấp phép theo MIT.
Is this page helpful?