|
@@ -5,7 +5,6 @@ use async_std::sync::{Arc, Mutex};
|
|
|
use async_trait::async_trait;
|
|
use async_trait::async_trait;
|
|
|
use easy_parallel::Parallel;
|
|
use easy_parallel::Parallel;
|
|
|
use futures_lite::future;
|
|
use futures_lite::future;
|
|
|
-use lazy_init::Lazy;
|
|
|
|
|
use log::{error, info};
|
|
use log::{error, info};
|
|
|
use serde_derive::Deserialize;
|
|
use serde_derive::Deserialize;
|
|
|
use simplelog::{ColorChoice, TermLogger, TerminalMode};
|
|
use simplelog::{ColorChoice, TermLogger, TerminalMode};
|
|
@@ -14,9 +13,7 @@ use structopt_toml::StructOptToml;
|
|
|
use url::Url;
|
|
use url::Url;
|
|
|
|
|
|
|
|
use darkfi::{
|
|
use darkfi::{
|
|
|
- async_daemonize,
|
|
|
|
|
- blockchain::{NullifierStore, RootStore},
|
|
|
|
|
- cli_desc,
|
|
|
|
|
|
|
+ async_daemonize, cli_desc,
|
|
|
consensus::{
|
|
consensus::{
|
|
|
proto::{
|
|
proto::{
|
|
|
ProtocolParticipant, ProtocolProposal, ProtocolSync, ProtocolSyncConsensus, ProtocolTx,
|
|
ProtocolParticipant, ProtocolProposal, ProtocolSync, ProtocolSyncConsensus, ProtocolTx,
|
|
@@ -30,7 +27,7 @@ use darkfi::{
|
|
|
crypto::token_list::{DrkTokenList, TokenList},
|
|
crypto::token_list::{DrkTokenList, TokenList},
|
|
|
net,
|
|
net,
|
|
|
net::P2pPtr,
|
|
net::P2pPtr,
|
|
|
- node::{Client, State},
|
|
|
|
|
|
|
+ node::Client,
|
|
|
rpc::{
|
|
rpc::{
|
|
|
jsonrpc,
|
|
jsonrpc,
|
|
|
jsonrpc::{
|
|
jsonrpc::{
|
|
@@ -44,7 +41,7 @@ use darkfi::{
|
|
|
expand_path,
|
|
expand_path,
|
|
|
path::get_config_path,
|
|
path::get_config_path,
|
|
|
},
|
|
},
|
|
|
- wallet::walletdb::{init_wallet, WalletPtr},
|
|
|
|
|
|
|
+ wallet::walletdb::init_wallet,
|
|
|
Error, Result,
|
|
Error, Result,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -137,11 +134,10 @@ struct Args {
|
|
|
|
|
|
|
|
pub struct Darkfid {
|
|
pub struct Darkfid {
|
|
|
synced: Mutex<bool>, // AtomicBool is weird in Arc
|
|
synced: Mutex<bool>, // AtomicBool is weird in Arc
|
|
|
- client: Client,
|
|
|
|
|
consensus_p2p: Option<P2pPtr>,
|
|
consensus_p2p: Option<P2pPtr>,
|
|
|
sync_p2p: Option<P2pPtr>,
|
|
sync_p2p: Option<P2pPtr>,
|
|
|
|
|
+ client: Arc<Client>,
|
|
|
validator_state: ValidatorStatePtr,
|
|
validator_state: ValidatorStatePtr,
|
|
|
- state: Arc<Mutex<State>>,
|
|
|
|
|
drk_tokenlist: DrkTokenList,
|
|
drk_tokenlist: DrkTokenList,
|
|
|
btc_tokenlist: TokenList,
|
|
btc_tokenlist: TokenList,
|
|
|
eth_tokenlist: TokenList,
|
|
eth_tokenlist: TokenList,
|
|
@@ -180,8 +176,6 @@ impl RequestHandler for Darkfid {
|
|
|
|
|
|
|
|
impl Darkfid {
|
|
impl Darkfid {
|
|
|
pub async fn new(
|
|
pub async fn new(
|
|
|
- db: &sled::Db,
|
|
|
|
|
- wallet: WalletPtr,
|
|
|
|
|
validator_state: ValidatorStatePtr,
|
|
validator_state: ValidatorStatePtr,
|
|
|
consensus_p2p: Option<P2pPtr>,
|
|
consensus_p2p: Option<P2pPtr>,
|
|
|
sync_p2p: Option<P2pPtr>,
|
|
sync_p2p: Option<P2pPtr>,
|
|
@@ -195,30 +189,14 @@ impl Darkfid {
|
|
|
TokenList::new(include_bytes!("../../../contrib/token/solana_token_list.min.json"))?;
|
|
TokenList::new(include_bytes!("../../../contrib/token/solana_token_list.min.json"))?;
|
|
|
let drk_tokenlist = DrkTokenList::new(&sol_tokenlist, ð_tokenlist, &btc_tokenlist)?;
|
|
let drk_tokenlist = DrkTokenList::new(&sol_tokenlist, ð_tokenlist, &btc_tokenlist)?;
|
|
|
|
|
|
|
|
- // Initialize Client
|
|
|
|
|
- let client = Client::new(wallet).await?;
|
|
|
|
|
- let tree = client.get_tree().await?;
|
|
|
|
|
- let merkle_roots = RootStore::new(db)?;
|
|
|
|
|
- let nullifiers = NullifierStore::new(db)?;
|
|
|
|
|
-
|
|
|
|
|
- // Initialize State
|
|
|
|
|
- let state = Arc::new(Mutex::new(State {
|
|
|
|
|
- tree,
|
|
|
|
|
- merkle_roots,
|
|
|
|
|
- nullifiers,
|
|
|
|
|
- cashier_pubkeys: vec![],
|
|
|
|
|
- faucet_pubkeys: vec![],
|
|
|
|
|
- mint_vk: Lazy::new(),
|
|
|
|
|
- burn_vk: Lazy::new(),
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ let client = validator_state.read().await.client.clone();
|
|
|
|
|
|
|
|
Ok(Self {
|
|
Ok(Self {
|
|
|
synced: Mutex::new(false),
|
|
synced: Mutex::new(false),
|
|
|
- client,
|
|
|
|
|
consensus_p2p,
|
|
consensus_p2p,
|
|
|
sync_p2p,
|
|
sync_p2p,
|
|
|
|
|
+ client,
|
|
|
validator_state,
|
|
validator_state,
|
|
|
- state,
|
|
|
|
|
drk_tokenlist,
|
|
drk_tokenlist,
|
|
|
btc_tokenlist,
|
|
btc_tokenlist,
|
|
|
eth_tokenlist,
|
|
eth_tokenlist,
|
|
@@ -258,11 +236,12 @@ async fn realmain(args: Args, ex: Arc<Executor<'_>>) -> Result<()> {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// TODO: sqldb init cleanup
|
|
// TODO: sqldb init cleanup
|
|
|
- Client::new(wallet.clone()).await?;
|
|
|
|
|
- let address = wallet.get_default_address().await?;
|
|
|
|
|
|
|
+ // Initialize Client
|
|
|
|
|
+ let client = Arc::new(Client::new(wallet).await?);
|
|
|
|
|
|
|
|
// Initialize validator state
|
|
// Initialize validator state
|
|
|
- let state = ValidatorState::new(&sled_db, address, genesis_ts, genesis_data)?;
|
|
|
|
|
|
|
+ let state =
|
|
|
|
|
+ ValidatorState::new(&sled_db, genesis_ts, genesis_data, client, vec![], vec![]).await?;
|
|
|
|
|
|
|
|
let sync_p2p = {
|
|
let sync_p2p = {
|
|
|
info!("Registering block sync P2P protocols...");
|
|
info!("Registering block sync P2P protocols...");
|
|
@@ -357,9 +336,7 @@ async fn realmain(args: Args, ex: Arc<Executor<'_>>) -> Result<()> {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// Initialize program state
|
|
// Initialize program state
|
|
|
- let darkfid =
|
|
|
|
|
- Darkfid::new(&sled_db, wallet, state.clone(), consensus_p2p.clone(), sync_p2p.clone())
|
|
|
|
|
- .await?;
|
|
|
|
|
|
|
+ let darkfid = Darkfid::new(state.clone(), consensus_p2p.clone(), sync_p2p.clone()).await?;
|
|
|
let darkfid = Arc::new(darkfid);
|
|
let darkfid = Arc::new(darkfid);
|
|
|
|
|
|
|
|
// JSON-RPC server
|
|
// JSON-RPC server
|