mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-04-28 03:00:18 -04:00
handle transfer command from darkfid
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use drk::blockchain::{rocks::columns, Rocks, RocksColumn};
|
||||
use drk::cli::{DarkfidCli, DarkfidConfig, Config};
|
||||
use drk::blockchain::{rocks::columns, Rocks, RocksColumn, Slab};
|
||||
use drk::cli::{Config, DarkfidCli, DarkfidConfig};
|
||||
use drk::crypto::{
|
||||
load_params,
|
||||
merkle::{CommitmentTree, IncrementalWitness},
|
||||
@@ -31,7 +31,6 @@ use std::net::SocketAddr;
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub struct State {
|
||||
// The entire merkle tree state
|
||||
tree: CommitmentTree<MerkleNode>,
|
||||
@@ -40,7 +39,6 @@ pub struct State {
|
||||
merkle_roots: RocksColumn<columns::MerkleRoots>,
|
||||
// Nullifiers prevent double spending
|
||||
nullifiers: RocksColumn<columns::Nullifiers>,
|
||||
// All received coins
|
||||
// Mint verifying key used by ZK
|
||||
mint_pvk: groth16::PreparedVerifyingKey<Bls12>,
|
||||
// Spend verifying key used by ZK
|
||||
@@ -156,7 +154,6 @@ async fn start(executor: Arc<Executor<'_>>, config: Arc<&DarkfidConfig>) -> Resu
|
||||
|
||||
let rocks2 = rocks.clone();
|
||||
let slabstore = RocksColumn::<columns::Slabs>::new(rocks2.clone());
|
||||
let rocks3 = rocks2.clone();
|
||||
|
||||
// Auto create trusted ceremony parameters if they don't exist
|
||||
if !Path::new("mint.params").exists() {
|
||||
@@ -210,7 +207,26 @@ async fn start(executor: Arc<Executor<'_>>, config: Arc<&DarkfidConfig>) -> Resu
|
||||
debug!(target: "fn::start client", "start() Client started");
|
||||
client.start().await?;
|
||||
|
||||
let adapter = RpcAdapter::new(wallet.clone(), config.connect_url.clone())?;
|
||||
let (publish_tx_send, publish_tx_recv) = async_channel::unbounded::<drk::rpc::TransferParams>();
|
||||
|
||||
let adapter = RpcAdapter::new(wallet.clone(), config.connect_url.clone(), publish_tx_send)?;
|
||||
|
||||
executor
|
||||
.spawn(async move {
|
||||
loop {
|
||||
let _transfer_params = publish_tx_recv
|
||||
.recv()
|
||||
.await
|
||||
.expect("receive transfer params");
|
||||
|
||||
let tx_data = vec![];
|
||||
|
||||
let slab = Slab::new(tx_data);
|
||||
client.put_slab(slab).await.expect("put slab");
|
||||
}
|
||||
})
|
||||
.detach();
|
||||
|
||||
// start the rpc server
|
||||
jsonserver::start(ex.clone(), config.clone(), adapter).await?;
|
||||
|
||||
@@ -272,4 +288,3 @@ fn main() -> Result<()> {
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@ use crate::service::btc::PubAddress;
|
||||
use crate::service::cashier::CashierClient;
|
||||
use crate::wallet::WalletDb;
|
||||
use crate::{Error, Result};
|
||||
use crate::tx;
|
||||
|
||||
use super::TransferParams;
|
||||
|
||||
use log::*;
|
||||
|
||||
@@ -15,18 +16,23 @@ pub struct RpcAdapter {
|
||||
pub wallet: Arc<WalletDb>,
|
||||
pub cashier_client: CashierClient,
|
||||
pub connect_url: String,
|
||||
|
||||
publish_tx_send: async_channel::Sender<TransferParams>,
|
||||
}
|
||||
|
||||
impl RpcAdapter {
|
||||
pub fn new(wallet: Arc<WalletDb>, connect_url: String) -> Result<Self> {
|
||||
pub fn new(
|
||||
wallet: Arc<WalletDb>,
|
||||
connect_url: String,
|
||||
publish_tx_send: async_channel::Sender<TransferParams>,
|
||||
) -> Result<Self> {
|
||||
debug!(target: "ADAPTER", "new() [CREATING NEW WALLET]");
|
||||
let connect_addr: SocketAddr = connect_url.parse().unwrap();
|
||||
let connect_addr: SocketAddr = connect_url.parse()?;
|
||||
let cashier_client = CashierClient::new(connect_addr)?;
|
||||
Ok(Self {
|
||||
wallet,
|
||||
cashier_client,
|
||||
connect_url,
|
||||
publish_tx_send
|
||||
})
|
||||
}
|
||||
|
||||
@@ -89,7 +95,10 @@ impl RpcAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub async fn transfer(&self, transfer_params: TransferParams) -> Result<()> {
|
||||
self.publish_tx_send.send(transfer_params).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get_info(&self) {}
|
||||
|
||||
|
||||
@@ -2,28 +2,19 @@ use crate::cli::DarkfidConfig;
|
||||
use crate::rpc::adapter::RpcAdapter;
|
||||
use crate::{Error, Result};
|
||||
|
||||
use super::{TransferParams, WithdrawParams};
|
||||
|
||||
use async_executor::Executor;
|
||||
use async_native_tls::TlsAcceptor;
|
||||
use async_std::sync::Mutex;
|
||||
use http_types::{Request, Response, StatusCode};
|
||||
use log::*;
|
||||
use serde::Deserialize;
|
||||
use smol::Async;
|
||||
|
||||
use std::net::TcpListener;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct TransferParams {
|
||||
address: String,
|
||||
amount: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct WithdrawParams {
|
||||
address: String,
|
||||
amount: String,
|
||||
}
|
||||
|
||||
/// Listens for incoming connections and serves them.
|
||||
pub async fn listen(
|
||||
@@ -254,10 +245,15 @@ impl RpcInterface {
|
||||
}
|
||||
});
|
||||
|
||||
io.add_method("transfer", |params: jsonrpc_core::Params| async move {
|
||||
let parsed: TransferParams = params.parse().unwrap();
|
||||
println!("test transfer params: {:?}", parsed);
|
||||
Ok(jsonrpc_core::Value::String("Transfer To... ".into()))
|
||||
let self1 = self.clone();
|
||||
io.add_method("transfer", move |params: jsonrpc_core::Params| {
|
||||
let self2 = self1.clone();
|
||||
async move {
|
||||
let parsed: TransferParams = params.parse().unwrap();
|
||||
let address = parsed.address.clone();
|
||||
self2.adapter.transfer(parsed).await?;
|
||||
Ok(jsonrpc_core::Value::String(format!("Transfer To: {}", address)))
|
||||
}
|
||||
});
|
||||
|
||||
io.add_method("withdraw", |params: jsonrpc_core::Params| async move {
|
||||
|
||||
@@ -2,4 +2,18 @@ pub mod adapter;
|
||||
pub mod jsonserver;
|
||||
pub mod test;
|
||||
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct TransferParams {
|
||||
pub address: String,
|
||||
pub amount: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
pub struct WithdrawParams {
|
||||
address: String,
|
||||
amount: String,
|
||||
}
|
||||
|
||||
pub use adapter::{AdapterPtr, RpcAdapter};
|
||||
|
||||
Reference in New Issue
Block a user