mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-10 07:08:05 -05:00
fix bugs in the process of withdrawing
This commit is contained in:
@@ -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
|
||||
);
|
||||
|
||||
@@ -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?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user