Installation
Ajoutez solana-keychain à votre Cargo.toml avec uniquement les backends dont
vous avez besoin :
[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"] }
Indicateurs de fonctionnalités
| Fonctionnalité | Description |
|---|---|
memory | Signature de paire de clés locale (par défaut) |
vault | Moteur Transit HashiCorp Vault |
aws_kms | AWS KMS avec Ed25519 |
gcp_kms | GCP Cloud KMS avec Ed25519 |
privy | Portefeuilles intégrés Privy |
turnkey | API Turnkey |
fireblocks | MPC Fireblocks |
cdp | Plateforme développeur Coinbase |
crossmint | Portefeuilles gérés Crossmint |
dfns | Infrastructure de portefeuilles Dfns |
openfort | Portefeuilles intégrés Openfort |
para | Portefeuilles MPC Para |
all | Activer tous les backends |
Utilisation de base
Tous les signataires implémentent le
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(())}
Configuration des backends
Signataire en mémoire
Pour le développement et les tests avec des paires de clés locales :
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
Pour HSM auto-hébergé avec moteur 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
Pour signature cloud-native avec clés Ed25519 AWS KMS :
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
Pour signature de portefeuille intégré :
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
Pour signature non-custodiale :
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
Pour la signature MPC institutionnelle :
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
Pour la signature native cloud avec les clés Ed25519 de GCP Cloud KMS :
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)
Pour la signature de portefeuille géré par 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
Pour la signature de portefeuille géré par 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
Pour la signature de l'infrastructure de portefeuille 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
Pour la signature de portefeuille 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?;
Énumération unifiée des signataires
Utilisez l'énumération Signer pour sélectionner les backends à l'exécution :
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();
Ajout de signataires personnalisés
Consultez le guide d'ajout de signataires pour intégrer des services supplémentaires de gestion de clés.
Is this page helpful?