diff --git a/src/service/bitcoin_bridge.rs b/src/service/bitcoin_bridge.rs index 0da04f0ac..159d4727c 100644 --- a/src/service/bitcoin_bridge.rs +++ b/src/service/bitcoin_bridge.rs @@ -12,7 +12,19 @@ use crate::{serial::deserialize, serial::serialize, Error, Result}; use std::net::SocketAddr; use async_std::sync::Arc; use async_executor::Executor; +use log::*; +#[repr(u8)] +enum CashierError { + NoError, + UpdateIndex, +} + +#[repr(u8)] +enum CashierCommand { + GetDBTC, + GetBTC, +} pub struct CashierKeys { secret_key: SecretKey, @@ -133,6 +145,18 @@ impl CashierService { match request.get_command() { 0 => { // 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 => { @@ -165,23 +189,23 @@ impl CashierClient { pub async fn start(&mut self) -> Result<()> { self.protocol.start().await?; - self.sync().await?; + //self.sync().await?; Ok(()) } - pub async fn get_keys(&mut self, index: u64) -> Result> { + pub async fn get_keys(&mut self, index: jubjub::SubgroupPoint) -> Result> { let rep = self .protocol .request( - //CashierCommand::GetKeys as u8, + CashierCommand::GetDBTC as u8, serialize(&index), &handle_error, ) .await?; 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.cashierstore.put(keys.clone())?; return Ok(Some(keys)); @@ -189,37 +213,38 @@ impl CashierClient { 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(GatewayCommand::PutSlab as u8, slab.clone(), &handle_error) - .await?; + // let rep = self + // .protocol + // .request(CashierCommand::PutSlab as u8, slab.clone(), &handle_error) + // .await?; - if let Some(_) = rep { - break; - } - } - Ok(()) - } + // if let Some(_) = rep { + // break; + // } + // } + // Ok(()) + // } - pub async fn get_last_index(&mut self) -> Result { - let rep = self - .protocol - .request(CashierCommand::GetLastIndex as u8, vec![], &handle_error) - .await?; - if let Some(index) = rep { - return Ok(deserialize(&index)?); - } - Ok(0) - } - - pub fn get_cashierstore(&self) -> Arc { + pub fn get_cashierstore(&self) -> Arc { self.cashierstore.clone() } } + +fn handle_error(status_code: u32) { + match status_code { + 1 => { + warn!("Reply has an Error: Index is not updated"); + } + 2 => { + warn!("Reply has an Error: Index Not Exist"); + } + _ => {} + } +} diff --git a/src/service/mod.rs b/src/service/mod.rs index 59e589735..64e593676 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -4,4 +4,4 @@ pub mod bitcoin_bridge; pub use gateway::{GatewayClient, GatewayService, GatewaySlabsSubscriber}; -pub use bitcoin_bridge::{CashierKeys, CashierService}; +pub use bitcoin_bridge::{CashierKeys, CashierService, CashierClient};