Janus 5 лет назад
Родитель
Сommit
0816bada60
5 измененных файлов с 88 добавлено и 70 удалено
  1. 0 1
      src/bin/cashierd.rs
  2. 3 2
      src/rpc/adapter.rs
  3. 74 0
      src/service/btc.rs
  4. 6 66
      src/service/cashier.rs
  5. 5 1
      src/service/mod.rs

+ 0 - 1
src/bin/cashierd.rs

@@ -4,7 +4,6 @@ use std::sync::Arc;
 use std::{path::Path, path::PathBuf};
 //use toml;
 
-use drk::blockchain::{rocks::columns, Rocks, RocksColumn};
 use drk::cli::{CashierdCli, CashierdConfig, Config};
 use drk::service::CashierService;
 use drk::wallet::{CashierDb, CashierDbPtr};

+ 3 - 2
src/rpc/adapter.rs

@@ -1,9 +1,10 @@
 use crate::blockchain::{rocks::columns, RocksColumn};
 use crate::service::cashier::CashierClient;
+use crate::service::btc::PubAddress;
 use crate::wallet::WalletDb;
 use crate::{Error, Result};
 use async_std::sync::Arc;
-use bitcoin::util::address::Address;
+
 use log::*;
 use std::net::SocketAddr;
 //use std::sync::Arc;
@@ -79,7 +80,7 @@ impl RpcAdapter {
         Ok(())
     }
 
-    pub async fn deposit(&mut self) -> Result<Address> {
+    pub async fn deposit(&mut self) -> Result<PubAddress> {
         debug!(target: "deposit", "deposit: START");
         let (public, private) = self.wallet.key_gen();
         self.wallet.put_keypair(public, private)?;

+ 74 - 0
src/service/btc.rs

@@ -0,0 +1,74 @@
+use crate::{serial::deserialize, serial::serialize, Error, Result};
+
+use rand::{thread_rng, Rng};
+use rand::distributions::Alphanumeric;
+
+use secp256k1::key::SecretKey;
+use bitcoin::util::ecdsa::{PrivateKey, PublicKey};
+use bitcoin::util::address::Address;
+
+use bitcoin::network::constants::Network;
+
+use bitcoin::hash_types::PubkeyHash;
+
+pub type PubAddress = Address;
+
+pub struct BitcoinKeys {
+    secret_key: SecretKey,
+    bitcoin_private_key: PrivateKey,
+    pub bitcoin_public_key: PublicKey,
+    pub pub_address: Address,
+}
+
+impl BitcoinKeys {
+    pub fn new(
+
+    ) -> Result<BitcoinKeys> {
+
+        let context = secp256k1::Secp256k1::new();
+
+        // Probably not good enough for release
+        let rand: String = thread_rng()
+            .sample_iter(&Alphanumeric)
+            .take(32)
+            .map(char::from)
+            .collect();
+
+        let rand_hex = hex::encode(rand);
+
+        // Generate simple byte array from rand
+        let data_slice: &[u8] = rand_hex.as_bytes();
+
+        let secret_key = SecretKey::from_slice(&hex::decode(data_slice).unwrap()).unwrap();
+
+        // Use Testnet
+        let bitcoin_private_key = PrivateKey::new(secret_key, Network::Testnet);
+
+        let bitcoin_public_key = PublicKey::from_private_key(&context, &bitcoin_private_key);
+        //let pubkey_serialized = bitcoin_public_key.to_bytes();
+
+        let pub_address = Address::p2pkh(&bitcoin_public_key, Network::Testnet);
+
+        Ok(Self {
+            secret_key,
+            bitcoin_private_key,
+            bitcoin_public_key,
+            pub_address,
+        })
+    }
+    // This should do a db lookup to return the same obj
+    pub fn address_from_slice(key: &[u8]) -> Result<Address> {
+        let pub_key = PublicKey::from_slice(key).unwrap();
+        let address = Address::p2pkh(&pub_key, Network::Testnet);
+
+        Ok(address)
+    }
+
+    pub fn get_deposit_address(&self) -> Result<&Address> {
+        Ok(&self.pub_address)
+    }
+    pub fn get_pubkey(&self) -> &PublicKey {
+        &self.bitcoin_public_key
+    }
+
+}

+ 6 - 66
src/service/cashier.rs

@@ -1,16 +1,8 @@
-use rand::{thread_rng, Rng};
-use rand::distributions::Alphanumeric;
-use secp256k1::key::SecretKey;
-use bitcoin::util::ecdsa::{PrivateKey, PublicKey as BitcoinPubKey};
-use bitcoin::util::address::Address;
-
-use bitcoin::network::constants::Network;
-
-use bitcoin::hash_types::PubkeyHash;
 use super::reqrep::{PeerId, RepProtocol, Reply, ReqProtocol, Request};
 
-use crate::{serial::deserialize, serial::serialize, Error, Result};
+use super::btc::{BitcoinKeys, PubAddress};
 
+use crate::{serial::deserialize, serial::serialize, Error, Result};
 use crate::wallet::{CashierDb, CashierDbPtr};
 
 use std::net::SocketAddr;
@@ -30,58 +22,6 @@ enum CashierCommand {
     GetBTC,
 }
 
-// Move to bitcoin.rs
-pub struct BitcoinKeys {
-    secret_key: SecretKey,
-    bitcoin_private_key: PrivateKey,
-    pub bitcoin_public_key: BitcoinPubKey,
-    pub pub_address: Address,
-}
-
-impl BitcoinKeys {
-    pub fn new(
-
-    ) -> Result<BitcoinKeys> {
-
-        let context = secp256k1::Secp256k1::new();
-
-        // Probably not good enough for release
-        let rand: String = thread_rng()
-            .sample_iter(&Alphanumeric)
-            .take(32)
-            .map(char::from)
-            .collect();
-
-        let rand_hex = hex::encode(rand);
-
-        // Generate simple byte array from rand
-        let data_slice: &[u8] = rand_hex.as_bytes();
-
-        let secret_key = SecretKey::from_slice(&hex::decode(data_slice).unwrap()).unwrap();
-
-        // Use Testnet
-        let bitcoin_private_key = PrivateKey::new(secret_key, Network::Testnet);
-
-        let bitcoin_public_key = BitcoinPubKey::from_private_key(&context, &bitcoin_private_key);
-        //let pubkey_serialized = bitcoin_public_key.to_bytes();
-
-        let pub_address = Address::p2pkh(&bitcoin_public_key, Network::Testnet);
-
-        Ok(Self {
-            secret_key,
-            bitcoin_private_key,
-            bitcoin_public_key,
-            pub_address,
-        })
-    }
-    pub fn get_deposit_address(&self) -> Result<&Address> {
-        Ok(&self.pub_address)
-    }
-    pub fn get_pubkey(&self) -> &BitcoinPubKey {
-        &self.bitcoin_public_key
-    }
-}
-
 pub struct CashierService {
     addr: SocketAddr,
     wallet: Arc<CashierDb>,
@@ -202,7 +142,7 @@ impl CashierClient {
         Ok(())
     }
 
-    pub async fn get_address(&mut self, index: jubjub::SubgroupPoint) -> Result<Option<Address>> {
+    pub async fn get_address(&mut self, index: jubjub::SubgroupPoint) -> Result<Option<PubAddress>> {
         let handle_error = Arc::new(handle_error);
         let rep = self
             .protocol
@@ -214,9 +154,9 @@ impl CashierClient {
             .await?;
 
         if let Some(key) = rep {
-            let pubkey = BitcoinPubKey::from_slice(&key).unwrap();
-            let address: Address = Address::p2pkh(&pubkey, Network::Testnet);
-
+            //let pubkey = BitcoinPubKey::from_slice(&key).unwrap();
+            //let address: Address = Address::p2pkh(&pubkey, Network::Testnet);
+            let address = BitcoinKeys::address_from_slice(&key).unwrap();
             return Ok(Some(address));
         }
         Ok(None)

+ 5 - 1
src/service/mod.rs

@@ -2,6 +2,10 @@ pub mod cashier;
 pub mod gateway;
 pub mod reqrep;
 
+pub mod btc;
+
 pub use gateway::{GatewayClient, GatewayService, GatewaySlabsSubscriber};
 
-pub use cashier::{BitcoinKeys, CashierClient, CashierService};
+pub use cashier::{CashierClient, CashierService};
+
+pub use btc::{BitcoinKeys, PubAddress};