التثبيت
أضف solana-keychain إلى Cargo.toml مع الواجهات الخلفية التي تحتاجها فقط:
[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 للمطورين |
crossmint | محافظ Crossmint المُدارة |
dfns | بنية تحتية لمحافظ Dfns |
openfort | محافظ Openfort المدمجة |
para | محافظ Para MPC |
utila | حضانة Utila MPC |
fordefi | حضانة Fordefi MPC |
all | تفعيل جميع الخلفيات |
الاستخدام الأساسي
جميع الموقعين ينفذون
سمة 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(())}
تكوين الواجهة الخلفية
موقع الذاكرة
للتطوير والاختبار باستخدام أزواج المفاتيح المحلية:
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
للتوقيع السحابي الأصلي باستخدام مفاتيح 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
للتوقيع السحابي الأصلي باستخدام مفاتيح Ed25519 في 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 للمطورين)
للتوقيع عبر المحفظة المُدارة من 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
للتوقيع عبر محفظة Para MPC:
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 لـوضع سولانا الأصلي، حيث
قد يستبدل Fordefi blockhash أو الرسوم ويُذيع المعاملة بنفسه.
aترك chain كـNone لـوضع الصندوق الأسود، حيث يوقّع Fordefi البايتات الخام
وتُذيع المعاملة بنفسك.
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)?;
تعداد الموقّع الموحد
استخدم تعداد Signer لاختيار الخلفيات في وقت التشغيل:
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?