fix bugs in the process of withdrawing

This commit is contained in:
ghassmo
2021-09-03 03:13:00 +03:00
parent 133cd13654
commit 59436a1197
5 changed files with 36 additions and 30 deletions

View File

@@ -10,8 +10,7 @@ CREATE TABLE IF NOT EXISTS keypairs(
txid BLOB
);
CREATE TABLE IF NOT EXISTS withdraw_keypairs(
btc_key_id INTEGER PRIMARY KEY NOT NULL,
btc_key_id BLOB PRIMARY KEY NOT NULL,
d_key_private BLOB NOT NULL,
d_key_public BLOB NOT NULL,
txid BLOB
d_key_public BLOB NOT NULL
);

View File

@@ -198,7 +198,7 @@ impl Client {
if let Some(drk_addr) = drk_public? {
withdraw_rep.send(Ok(drk_addr)).await?;
}else {
withdraw_rep.send(Err(ClientFailed::UnableToGetDepositAddress)).await?;
withdraw_rep.send(Err(ClientFailed::UnableToGetWithdrawAddress)).await?;
}
}
}

View File

@@ -8,7 +8,6 @@ use crate::{Error, Result};
use log::*;
use async_std::sync::Arc;
use std::string::ToString;
pub type UserAdapterPtr = Arc<UserAdapter>;
@@ -144,11 +143,10 @@ impl UserAdapter {
let self2 = self1.clone();
async move {
let parsed: WithdrawParams = params.parse().unwrap();
let amount = parsed.amount.clone();
let address = parsed.pub_key.clone();
self2.withdraw(parsed).await?;
let amount = parsed.amount;
let address = self2.withdraw(parsed).await?;
Ok(jsonrpc_core::Value::String(format!(
"withdrawing {} BTC to {}...",
"sending {} dbtc to provided address for withdrawing: {} ",
amount, address
)))
}
@@ -187,7 +185,7 @@ impl UserAdapter {
}
pub async fn deposit(&self) -> Result<PubAddress> {
debug!(target: "deposit", "deposit: START");
debug!(target: "adapter", "deposit: START");
let (public, private) = self.wallet.key_gen();
self.wallet.put_keypair(public, private)?;
let dkey = self.wallet.get_public()?;
@@ -209,26 +207,35 @@ impl UserAdapter {
.map_err(|err| Error::from(err))
}
async fn withdraw(&self, withdraw_params: WithdrawParams) -> Result<()> {
debug!(target: "withdraw", "withdraw: START");
// do the key exchange
async fn withdraw(&self, withdraw_params: WithdrawParams) -> Result<String> {
debug!(target: "adapter", "withdraw: START");
self.withdraw_channel
.0
.send(withdraw_params.pub_key)
.await?;
// send the drk
if let Ok(key) = self.withdraw_channel.1.recv().await? {
let mut transfer_params = TransferParams::new();
transfer_params.pub_key = key.to_string();
transfer_params.amount = withdraw_params.amount;
self.transfer_channel.0.send(transfer_params).await?;
self.transfer_channel
.1
.recv()
.await?
.map_err(|err| Error::from(err))?;
}
Ok(())
// receive dbtc address
let key = self
.withdraw_channel
.1
.recv()
.await?
.map_err(|err| Error::from(err))?;
// transfer the dbtc
let key = bs58::encode(serialize(&key)).into_string();
let mut transfer_params = TransferParams::new();
transfer_params.pub_key = key.clone();
transfer_params.amount = withdraw_params.amount;
self.transfer_channel.0.send(transfer_params).await?;
self.transfer_channel
.1
.recv()
.await?
.map_err(|err| Error::from(err))?;
Ok(key)
}
pub fn get_info(&self) {}

View File

@@ -10,7 +10,6 @@ use ff::Field;
use rand::rngs::OsRng;
use async_executor::Executor;
use electrum_client::Client as ElectrumClient;
use log::*;
@@ -234,6 +233,7 @@ impl CashierService {
let cashier_secret = jubjub::Fr::random(&mut OsRng);
cashier_public =
zcash_primitives::constants::SPENDING_KEY_GENERATOR * cashier_secret;
cashier_wallet.put_withdraw_keys(
btc_address,
serialize(&cashier_secret),
@@ -287,8 +287,8 @@ impl CashierClient {
.await?;
if let Some(key) = rep {
let address = deserialize(&key)?;
return Ok(address);
let address: jubjub::SubgroupPoint = deserialize(&key)?;
return Ok(Some(address));
}
Ok(None)
}

View File

@@ -150,7 +150,7 @@ impl CashierDb {
conn.pragma_update(None, "key", &self.password)?;
conn.execute(
"INSERT withdraw_keypairs(btc_key_id, d_key_private, d_key_public)
"INSERT INTO withdraw_keypairs(btc_key_id, d_key_private, d_key_public)
VALUES (:btc_key_id, :d_key_private, :d_key_public)",
named_params! {
":btc_key_id": btc_key_id,