v0.2.5-pre.008
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-wallet-lib/src/wallet.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! In-memory native Wallet V1 create/open orchestration.
|
||||
|
||||
@@ -50,6 +50,30 @@ impl OwnerStateV1 {
|
||||
return;
|
||||
}
|
||||
|
||||
pub(crate) fn export_transfer(&self, format: crate::WalletTransferFormat) -> ksp_core_lib::Result<std::vec::Vec<u8>> {
|
||||
let keypair = match self.solana_keypair.as_ref() {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return std::result::Result::Err(key_material_error()),
|
||||
};
|
||||
return match format {
|
||||
crate::WalletTransferFormat::SolanaCliJson => {
|
||||
let mut keypair_bytes = keypair.to_bytes();
|
||||
let encoded = serde_json::to_vec(keypair_bytes.as_slice());
|
||||
keypair_bytes.zeroize();
|
||||
match encoded {
|
||||
std::result::Result::Ok(value) => std::result::Result::Ok(value),
|
||||
std::result::Result::Err(_) => std::result::Result::Err(key_material_error()),
|
||||
}
|
||||
},
|
||||
crate::WalletTransferFormat::SolanaKeypairBase58 => {
|
||||
let mut encoded = keypair.to_base58_string();
|
||||
let output = encoded.as_bytes().to_vec();
|
||||
encoded.zeroize();
|
||||
std::result::Result::Ok(output)
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) fn sign_message(&self, message: &[u8]) -> ksp_core_lib::Result<[u8; crate::KSPWALLET_SOLANA_SIGNATURE_BYTES]> {
|
||||
let keypair = match self.solana_keypair.as_ref() {
|
||||
std::option::Option::Some(value) => value,
|
||||
@@ -395,6 +419,21 @@ pub async fn create_wallet_v1(
|
||||
owner_password: crate::OwnerPassword,
|
||||
view_password: std::option::Option<crate::ViewPassword>,
|
||||
metadata: crate::WalletCreateMetadataV1,
|
||||
) -> ksp_core_lib::Result<crate::WalletOwner> {
|
||||
let mut solana_secret = match crate::crypto::random_bytes::<32>() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let solana_keypair = solana_keypair::Keypair::new_from_array(solana_secret);
|
||||
solana_secret.zeroize();
|
||||
return crate::create_wallet_v1_from_keypair(owner_password, view_password, metadata, solana_keypair).await;
|
||||
}
|
||||
|
||||
pub(crate) async fn create_wallet_v1_from_keypair(
|
||||
owner_password: crate::OwnerPassword,
|
||||
view_password: std::option::Option<crate::ViewPassword>,
|
||||
metadata: crate::WalletCreateMetadataV1,
|
||||
solana_keypair: solana_keypair::Keypair,
|
||||
) -> ksp_core_lib::Result<crate::WalletOwner> {
|
||||
let owner_root = match crate::crypto::SecretKeyV1::random() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -416,15 +455,6 @@ pub async fn create_wallet_v1(
|
||||
let admin_signing_key = ed25519_dalek::SigningKey::from_bytes(&admin_secret);
|
||||
let owner_auth_public_key = admin_signing_key.verifying_key().to_bytes();
|
||||
|
||||
let mut solana_secret = match crate::crypto::random_bytes::<32>() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => {
|
||||
admin_secret.zeroize();
|
||||
return std::result::Result::Err(error);
|
||||
},
|
||||
};
|
||||
let solana_keypair = solana_keypair::Keypair::new_from_array(solana_secret);
|
||||
solana_secret.zeroize();
|
||||
let mut solana_keypair_bytes = solana_keypair.to_bytes();
|
||||
let pubkey_result = pubkey_from_keypair_bytes(&solana_keypair_bytes);
|
||||
let pubkey = match pubkey_result {
|
||||
|
||||
Reference in New Issue
Block a user