Εγκατάσταση
Προσθέστε το solana-keychain στο Cargo.toml σας με μόνο τα backends που
χρειάζεστε:
[dependencies]# Memory signer only (default)solana-keychain = "1.2"# Or specify backends explicitlysolana-keychain = { version = "1.2", default-features = false, features = ["vault", "aws_kms"] }# All backendssolana-keychain = { version = "1.2", features = ["all"] }
Σημαίες Χαρακτηριστικών
| Χαρακτηριστικό | Περιγραφή |
|---|---|
memory | Τοπική υπογραφή keypair (προεπιλογή) |
vault | Μηχανή HashiCorp Vault Transit |
aws_kms | AWS KMS με Ed25519 |
gcp_kms | GCP Cloud KMS με Ed25519 |
privy | Ενσωματωμένα πορτοφόλια Privy |
turnkey | Turnkey API |
fireblocks | Fireblocks MPC |
cdp | Coinbase Developer Platform |
crossmint | Διαχειριζόμενα πορτοφόλια Crossmint |
dfns | Υποδομή πορτοφολιών Dfns |
openfort | Ενσωματωμένα πορτοφόλια Openfort |
para | Πορτοφόλια Para MPC |
utila | Φύλαξη Utila MPC |
fordefi | Θεματοφυλακή Fordefi MPC |
all | Ενεργοποίηση όλων των backends |
Βασική Χρήση
Όλοι οι υπογράφοντες υλοποιούν το
trait SolanaSigner:
use solana_keychain::{SolanaSigner, Signer, SignerError, SignTransactionResult};use solana_sdk::transaction::Transaction;async fn sign_transaction(signer: &impl SolanaSigner,tx: &mut Transaction,) -> Result<(), SignerError> {// Get the signer's public keylet pubkey = signer.pubkey();println!("Signing with: {}", pubkey);// Check availability (useful for remote signers)if !signer.is_available().await {return Err(SignerError::NotAvailable("Signer offline".into()));}// Sign the transaction — returns Complete or Partiallet result = signer.sign_transaction(tx).await?;let (base64_tx, signature) = result.into_signed_transaction();println!("Signature: {}", signature);Ok(())}
Διαμόρφωση Backend
Memory Signer
Για ανάπτυξη και δοκιμή με τοπικά keypairs:
use solana_keychain::Signer;// From base58 private keylet signer = Signer::from_memory("base58_private_key")?;// From JSON file pathlet signer = Signer::from_memory("/path/to/keypair.json")?;// From byte array stringlet signer = Signer::from_memory("[1,2,3,...]")?;
HashiCorp Vault
Για αυτο-φιλοξενούμενο HSM με μηχανή Transit:
use solana_keychain::Signer;let signer = Signer::from_vault("https://vault.example.com:8200".to_string(), // Vault address"hvs.xxxxx".to_string(), // Vault token"my-solana-key".to_string(), // Key name in Transit"base58_public_key".to_string(), // Expected public keyNone, // Default HTTP timeouts)?;
AWS KMS
Για υπογραφή βασισμένη σε cloud με κλειδιά AWS KMS Ed25519:
use solana_keychain::Signer;let signer = Signer::from_aws_kms("alias/my-solana-key".to_string(), // KMS key ID or alias"base58_public_key".to_string(), // Expected public keySome("us-east-1".to_string()), // Region (optional)).await?;
Privy
Για υπογραφή με ενσωματωμένο πορτοφόλι:
use solana_keychain::Signer;let signer = Signer::from_privy("app_id".to_string(), // Privy app ID"app_secret".to_string(), // Privy app secret"wallet_id".to_string(), // Wallet IDNone, // Default HTTP timeouts).await?;
Turnkey
Για μη-κηδεμονική υπογραφή:
use solana_keychain::Signer;let signer = Signer::from_turnkey("api_public_key".to_string(), // Turnkey API public key"api_private_key".to_string(), // Turnkey API private key"org_id".to_string(), // Organization ID"private_key_id".to_string(), // Private key ID in Turnkey"base58_public_key".to_string(),// Expected public keyNone, // Default HTTP timeouts)?;
Fireblocks
Για θεσμική υπογραφή MPC:
use solana_keychain::{Signer, FireblocksSignerConfig};let config = FireblocksSignerConfig {api_key: "api_key".to_string(),private_key_pem: "-----BEGIN RSA PRIVATE KEY-----\n...".to_string(),vault_account_id: "0".to_string(),asset_id: "SOL".to_string(), // or "SOL_TEST" for devnet};let signer = Signer::from_fireblocks(config).await?;
GCP KMS
Για cloud-native υπογραφή με κλειδιά GCP Cloud KMS Ed25519:
use solana_keychain::Signer;let signer = Signer::from_gcp_kms("projects/my-project/locations/us-east1/keyRings/my-ring/cryptoKeys/my-key/cryptoKeyVersions/1".to_string(),"base58_public_key".to_string(),).await?;
CDP (Coinbase Developer Platform)
Για υπογραφή με διαχειριζόμενο πορτοφόλι Coinbase:
use solana_keychain::Signer;let signer = Signer::from_cdp("api_key_id".to_string(), // CDP API key ID"api_key_secret".to_string(), // CDP API private key (base64 Ed25519)"wallet_secret".to_string(), // CDP wallet secret (base64 PKCS#8 DER)"base58_address".to_string(), // Solana account addressNone, // Default HTTP timeouts)?;
Crossmint
Για υπογραφή με διαχειριζόμενο πορτοφόλι Crossmint:
use solana_keychain::{Signer, CrossmintSignerConfig};let config = CrossmintSignerConfig {api_key: "api_key".to_string(),wallet_locator: "wallet_locator".to_string(),signer_secret: None,signer: None,api_base_url: None,poll_interval_ms: None,max_poll_attempts: None,};let signer = Signer::from_crossmint(config).await?;
Dfns
Για υπογραφή με υποδομή πορτοφολιού Dfns:
use solana_keychain::{Signer, DfnsSignerConfig};let config = DfnsSignerConfig {auth_token: "auth_token".to_string(),cred_id: "cred_id".to_string(),private_key_pem: "-----BEGIN EC PRIVATE KEY-----\n...".to_string(),app_id: "app_id".to_string(),wallet_id: "wallet_id".to_string(),api_base_url: None,http_client_config: None,};let signer = Signer::from_dfns(config).await?;
Para
Για υπογραφή με πορτοφόλι MPC Para:
use solana_keychain::Signer;let signer = Signer::from_para("api_key".to_string(), // Para API key"wallet_id".to_string(), // Para wallet IDNone, // Default API base URL).await?;
Fordefi
Για υπογραφή με θεματοφυλακή Fordefi MPC. Τα αιτήματα API πιστοποιούνται με υπογραφή αιτήματος ECDSA
P-256 που αναλύεται από το private_key_pem· για να διατηρήσετε αυτό το κλειδί σε
KMS/HSM, υλοποιήστε το FordefiRequestSigner και χρησιμοποιήστε
το Signer::from_fordefi_with_signer.
Το Fordefi διαθέτει δύο τρόπους υπογραφής. Ορίστε το chain για native λειτουργία Solana, όπου
το Fordefi μπορεί να αντικαταστήσει το blockhash ή τα τέλη και μεταδίδει το ίδιο την συναλλαγή.
Αφήστε το chain ως None για λειτουργία black box, όπου το Fordefi υπογράφει ακατέργαστα bytes
και εσείς μεταδίδετε την συναλλαγή μόνοι σας.
use solana_keychain::{Signer, FordefiSignerConfig, SolanaChainUniqueId, FordefiSolanaFee, FordefiPriorityLevel,};let config = FordefiSignerConfig {access_token: "api_token".to_string(),vault_id: "vault_uuid".to_string(),private_key_pem: std::fs::read_to_string("./secret/private.pem")?,public_key: "base58_public_key".to_string(), // Solana vault addresschain: Some(SolanaChainUniqueId::SolanaDevnet), // None for black box modefee: Some(FordefiSolanaFee::Priority {priority_level: FordefiPriorityLevel::Medium,}),api_base_url: None, // Default: https://api.fordefi.compoll_interval_ms: None, // Default: 2000max_poll_attempts: None, // Default: 50http_client_config: None, // Default HTTP timeouts};let signer = Signer::from_fordefi(config)?;
Ενοποιημένο Enum Υπογραφέα
Χρησιμοποιήστε το enum Signer για να επιλέξετε backends κατά το runtime:
use solana_keychain::{Signer, SolanaSigner, SignerError};async fn get_signer(backend: &str) -> Result<Signer, SignerError> {match backend {"memory" => Signer::from_memory("base58_key"),"vault" => Signer::from_vault(/* ... */),"kms" => Signer::from_aws_kms(/* ... */).await,_ => Err(SignerError::ConfigError("Unknown backend".into())),}}// Use it genericallylet signer = get_signer("kms").await?;let pubkey = signer.pubkey();
Προσθήκη Προσαρμοσμένων Υπογραφέων
Δείτε τον οδηγό Προσθήκης Υπογραφέων για να ενσωματώσετε πρόσθετες υπηρεσίες διαχείρισης κλειδιών.
Is this page helpful?