Τεκμηρίωση SolanaΞεκινώντας

Rust

Εγκατάσταση

Προσθέστε το solana-keychain στο Cargo.toml σας με μόνο τα backends που χρειάζεστε:

Cargo.toml
[dependencies]
# Memory signer only (default)
solana-keychain = "1.2"
# Or specify backends explicitly
solana-keychain = { version = "1.2", default-features = false, features = ["vault", "aws_kms"] }
# All backends
solana-keychain = { version = "1.2", features = ["all"] }

Σημαίες Χαρακτηριστικών

ΧαρακτηριστικόΠεριγραφή
memoryΤοπική υπογραφή keypair (προεπιλογή)
vaultΜηχανή HashiCorp Vault Transit
aws_kmsAWS KMS με Ed25519
gcp_kmsGCP Cloud KMS με Ed25519
privyΕνσωματωμένα πορτοφόλια Privy
turnkeyAPI Turnkey
fireblocksFireblocks MPC
cdpΠλατφόρμα Προγραμματιστών Coinbase
crossmintΔιαχειριζόμενα πορτοφόλια Crossmint
dfnsΥποδομή πορτοφολιών Dfns
openfortΕνσωματωμένα πορτοφόλια Openfort
paraΠορτοφόλια Para 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 key
let 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 Partial
let 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 key
let signer = Signer::from_memory("base58_private_key")?;
// From JSON file path
let signer = Signer::from_memory("/path/to/keypair.json")?;
// From byte array string
let 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 key
None, // 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 key
Some("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 ID
None, // 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 key
None, // 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 address
None, // 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 ID
None, // Default API base URL
).await?;

Ενοποιημένο 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 generically
let signer = get_signer("kms").await?;
let pubkey = signer.pubkey();

Προσθήκη Προσαρμοσμένων Υπογραφέων

Δείτε τον οδηγό Προσθήκης Υπογραφέων για να ενσωματώσετε πρόσθετες υπηρεσίες διαχείρισης κλειδιών.

Is this page helpful?

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε