ソースを参照

Add proper messaging between CashierClient and CashierService

Janus 5 年 前
コミット
ff341ead9a
2 ファイル変更58 行追加33 行削除
  1. 57 32
      src/service/bitcoin_bridge.rs
  2. 1 1
      src/service/mod.rs

+ 57 - 32
src/service/bitcoin_bridge.rs

@@ -12,7 +12,19 @@ use crate::{serial::deserialize, serial::serialize, Error, Result};
 use std::net::SocketAddr;
 use std::net::SocketAddr;
 use async_std::sync::Arc;
 use async_std::sync::Arc;
 use async_executor::Executor;
 use async_executor::Executor;
+use log::*;
 
 
+#[repr(u8)]
+enum CashierError {
+    NoError,
+    UpdateIndex,
+}
+
+#[repr(u8)]
+enum CashierCommand {
+    GetDBTC,
+    GetBTC,
+}
 
 
 pub struct CashierKeys {
 pub struct CashierKeys {
     secret_key: SecretKey,
     secret_key: SecretKey,
@@ -133,6 +145,18 @@ impl CashierService {
         match request.get_command() {
         match request.get_command() {
             0 => {
             0 => {
                 // Exchange zk_pubkey for bitcoin address
                 // Exchange zk_pubkey for bitcoin address
+                let zkpub = request.get_payload();
+
+                // Generate bitcoin Address
+                let btc_keys = CashierKeys::new().unwrap();
+                let deposit_address = btc_keys.get_deposit_address();
+
+                let mut reply = Reply::from(&request, CashierError::NoError as u32, vec![]);
+                //if let None = error {
+                //    reply.set_error(CashierError::UpdateIndex as u32);
+                //}
+                // send reply
+                send_queue.send((peer, reply)).await?;
 
 
             }
             }
             1 => {
             1 => {
@@ -165,23 +189,23 @@ impl CashierClient {
 
 
     pub async fn start(&mut self) -> Result<()> {
     pub async fn start(&mut self) -> Result<()> {
         self.protocol.start().await?;
         self.protocol.start().await?;
-        self.sync().await?;
+        //self.sync().await?;
 
 
         Ok(())
         Ok(())
     }
     }
 
 
-    pub async fn get_keys(&mut self, index: u64) -> Result<Option<CashierKeypair>> {
+    pub async fn get_keys(&mut self, index: jubjub::SubgroupPoint) -> Result<Option<CashierKeypair>> {
         let rep = self
         let rep = self
             .protocol
             .protocol
             .request(
             .request(
-                //CashierCommand::GetKeys as u8,
+                CashierCommand::GetDBTC as u8,
                 serialize(&index),
                 serialize(&index),
                 &handle_error,
                 &handle_error,
             )
             )
             .await?;
             .await?;
 
 
         if let Some(keys) = rep {
         if let Some(keys) = rep {
-            let keys: CashierKeys = deserialize(&keys)?;
+            let keys: CashierKeypair = deserialize(&keys)?;
             //self.gateway_slabs_sub_s.send(slab.clone()).await?;
             //self.gateway_slabs_sub_s.send(slab.clone()).await?;
             self.cashierstore.put(keys.clone())?;
             self.cashierstore.put(keys.clone())?;
             return Ok(Some(keys));
             return Ok(Some(keys));
@@ -189,37 +213,38 @@ impl CashierClient {
         Ok(None)
         Ok(None)
     }
     }
 
 
-    pub async fn put_keys(&mut self, mut keys: CashierKeys) -> Result<()> {
-        loop {
-            let last_index = self.sync().await?;
-            //keys.set_index(last_index + 1);
-            let keys = serialize(&keys);
+    // pub async fn put_keys(&mut self, mut keys: CashierKeys) -> Result<()> {
+    //     loop {
+    //         let last_index = self.sync().await?;
+    //         //keys.set_index(last_index + 1);
+    //         let keys = serialize(&keys);
+
+    //         let rep = self
+    //             .protocol
+    //             .request(CashierCommand::PutSlab as u8, slab.clone(), &handle_error)
+    //             .await?;
+
+    //         if let Some(_) = rep {
+    //             break;
+    //         }
+    //     }
+    //     Ok(())
+    // }
+
+    pub fn get_cashierstore(&self) -> Arc<CashierStore> {
+        self.cashierstore.clone()
+    }
 
 
-            let rep = self
-                .protocol
-                .request(GatewayCommand::PutSlab as u8, slab.clone(), &handle_error)
-                .await?;
+}
 
 
-            if let Some(_) = rep {
-                break;
-            }
+fn handle_error(status_code: u32) {
+    match status_code {
+        1 => {
+            warn!("Reply has an Error: Index is not updated");
         }
         }
-        Ok(())
-    }
-
-    pub async fn get_last_index(&mut self) -> Result<u64> {
-        let rep = self
-            .protocol
-            .request(CashierCommand::GetLastIndex as u8, vec![], &handle_error)
-            .await?;
-        if let Some(index) = rep {
-            return Ok(deserialize(&index)?);
+        2 => {
+            warn!("Reply has an Error: Index Not Exist");
         }
         }
-        Ok(0)
+        _ => {}
     }
     }
-
-    pub fn get_cashierstore(&self) -> Arc<SlabStore> {
-        self.cashierstore.clone()
-    }
-
 }
 }

+ 1 - 1
src/service/mod.rs

@@ -4,4 +4,4 @@ pub mod bitcoin_bridge;
 
 
 pub use gateway::{GatewayClient, GatewayService, GatewaySlabsSubscriber};
 pub use gateway::{GatewayClient, GatewayService, GatewaySlabsSubscriber};
 
 
-pub use bitcoin_bridge::{CashierKeys, CashierService};
+pub use bitcoin_bridge::{CashierKeys, CashierService, CashierClient};