From 949b2a3f799c6f940e10cae48e44d2c20442337d Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Wed, 17 Mar 2021 15:55:11 +0100 Subject: [PATCH] [feat] gva:bca: add server meta data in BcaExecutor --- neon/native/src/server.rs | 4 ++-- rust-libs/modules/gva/bca/src/lib.rs | 29 +++++++++++++++++++++++----- rust-libs/modules/gva/src/lib.rs | 19 ++++++++++++------ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/neon/native/src/server.rs b/neon/native/src/server.rs index 745780387..438687493 100644 --- a/neon/native/src/server.rs +++ b/neon/native/src/server.rs @@ -41,7 +41,7 @@ declare_types! { let gva_conf = rust_server_conf_stringified.gva; let currency = rust_server_conf_stringified.currency; - let server_pubkey = if let Some(self_keypair_str) = rust_server_conf_stringified.self_keypair { + let self_key_pair = if let Some(self_keypair_str) = rust_server_conf_stringified.self_keypair { into_neon_res(&mut cx, crate::crypto::keypair_from_expanded_base58_secret_key(&self_keypair_str))? } else { Ed25519KeyPair::generate_random().expect("fail to gen random keyypair") @@ -49,7 +49,7 @@ declare_types! { let txs_mempool_size = rust_server_conf_stringified.txs_mempool_size as usize; let conf = DuniterConf { gva: gva_conf, - self_key_pair: server_pubkey, + self_key_pair, txs_mempool_size }; diff --git a/rust-libs/modules/gva/bca/src/lib.rs b/rust-libs/modules/gva/bca/src/lib.rs index 0d34ff6c7..45119cfdc 100644 --- a/rust-libs/modules/gva/bca/src/lib.rs +++ b/rust-libs/modules/gva/bca/src/lib.rs @@ -32,6 +32,7 @@ use crate::exec_req_type::ExecReqTypeError; use crate::utils::AsyncReader; use async_bincode::AsyncBincodeReader; use bincode::Options as _; +use dubp::crypto::keys::ed25519::Ed25519KeyPair; use duniter_bca_types::{BcaReq, BcaReqTypeV0, BcaResp, BcaRespTypeV0, BcaRespV0, ReqExecError}; use duniter_dbs::{FileBackend, SharedDbs}; use futures::{prelude::stream::FuturesUnordered, StreamExt, TryStream, TryStreamExt}; @@ -47,13 +48,19 @@ use duniter_gva_dbs_reader::DbsReader; static BCA_EXECUTOR: OnceCell<BcaExecutor> = OnceCell::new(); pub fn set_bca_executor( + currency: String, dbs_pool: fast_threadpool::ThreadPoolAsyncHandler<SharedDbs<FileBackend>>, dbs_reader: DbsReader, + self_keypair: Ed25519KeyPair, + software_version: &'static str, ) { BCA_EXECUTOR .set(BcaExecutor { + currency, dbs_pool, dbs_reader, + self_keypair, + software_version, }) .unwrap_or_else(|_| panic!("BCA_EXECUTOR already set !")) } @@ -73,8 +80,11 @@ pub async fn execute<R: 'static + futures::AsyncRead + Send + Unpin>( #[derive(Clone)] struct BcaExecutor { + currency: String, dbs_pool: fast_threadpool::ThreadPoolAsyncHandler<SharedDbs<FileBackend>>, dbs_reader: DbsReader, + self_keypair: Ed25519KeyPair, + software_version: &'static str, } use uninit::extension_traits::VecCapacity; impl BcaExecutor { @@ -200,11 +210,15 @@ pub(crate) fn bincode_opts() -> impl bincode::Options { #[cfg(test)] mod tests { use super::*; - pub use dubp::block::prelude::*; - pub use dubp::crypto::hashs::Hash; - pub use dubp::crypto::keys::ed25519::PublicKey; - pub use dubp::documents::transaction::TransactionInputV10; - pub use dubp::wallet::prelude::*; + pub use dubp::{ + block::prelude::*, + crypto::{ + hashs::Hash, + keys::{ed25519::PublicKey, KeyPair, Seed32}, + }, + documents::transaction::TransactionInputV10, + wallet::prelude::*, + }; pub use duniter_bca_types::BcaReqV0; pub use duniter_dbs::databases::bc_v2::{BcV2DbReadable, BcV2DbRo}; pub use duniter_dbs::databases::cm_v1::{CmV1Db, CmV1DbReadable}; @@ -248,8 +262,13 @@ mod tests { let threadpool = fast_threadpool::ThreadPool::start(fast_threadpool::ThreadPoolConfig::low(), dbs); Ok(BcaExecutor { + currency: "g1".to_owned(), dbs_pool: threadpool.into_async_handler(), dbs_reader: duniter_dbs::kv_typed::prelude::Arc::new(mock_dbs_reader), + self_keypair: Ed25519KeyPair::from_seed( + Seed32::random().expect("fail to gen random seed"), + ), + software_version: "test", }) } diff --git a/rust-libs/modules/gva/src/lib.rs b/rust-libs/modules/gva/src/lib.rs index fbc44ce7e..fdda6a321 100644 --- a/rust-libs/modules/gva/src/lib.rs +++ b/rust-libs/modules/gva/src/lib.rs @@ -28,10 +28,13 @@ mod warp_; pub use duniter_conf::gva_conf::GvaConf; use async_graphql::http::GraphQLPlaygroundConfig; -use dubp::common::crypto::keys::{ed25519::PublicKey, KeyPair as _}; use dubp::common::prelude::*; use dubp::documents::transaction::TransactionDocumentV10; use dubp::{block::DubpBlockV10, crypto::hashs::Hash}; +use dubp::{ + common::crypto::keys::{ed25519::PublicKey, KeyPair as _}, + crypto::keys::ed25519::Ed25519KeyPair, +}; use duniter_conf::DuniterMode; use duniter_dbs::databases::txs_mp_v2::TxsMpV2DbReadable; use duniter_dbs::prelude::*; @@ -52,7 +55,7 @@ pub struct GvaModule { gva_db_ro: &'static GvaV1DbRo<FileBackend>, mempools: Mempools, mode: DuniterMode, - self_pubkey: PublicKey, + self_keypair: Ed25519KeyPair, software_version: &'static str, } @@ -119,7 +122,7 @@ impl duniter_module::DuniterModule for GvaModule { gva_db_ro: get_gva_db_ro(profile_path_opt), mempools, mode, - self_pubkey: conf.self_key_pair.public_key(), + self_keypair: conf.self_key_pair.clone(), software_version, }, endpoints, @@ -136,7 +139,7 @@ impl duniter_module::DuniterModule for GvaModule { gva_db_ro, mempools, mode, - self_pubkey, + self_keypair, software_version, } = self; @@ -148,7 +151,7 @@ impl duniter_module::DuniterModule for GvaModule { dbs_pool, gva_db_ro, mempools, - self_pubkey, + self_keypair, software_version, ) .await @@ -231,13 +234,17 @@ impl GvaModule { dbs_pool: fast_threadpool::ThreadPoolAsyncHandler<SharedDbs<FileBackend>>, gva_db_ro: &'static GvaV1DbRo<FileBackend>, mempools: Mempools, - self_pubkey: PublicKey, + self_keypair: Ed25519KeyPair, software_version: &'static str, ) { log::info!("GvaServer::start: conf={:?}", conf); + let self_pubkey = self_keypair.public_key(); duniter_bca::set_bca_executor( + currency.clone(), dbs_pool.clone(), duniter_gva_dbs_reader::create_dbs_reader(gva_db_ro), + self_keypair, + software_version, ); let gva_schema = duniter_gva_gql::build_schema_with_data( duniter_gva_gql::GvaSchemaData { -- GitLab