From 1b3c67f4e536ddc604eeb179fb043c0b22271dc0 Mon Sep 17 00:00:00 2001 From: librelois Date: Thu, 20 May 2021 00:36:03 +0200 Subject: [PATCH] chore: rename bca->bda & externalize bda-types --- Cargo.lock | 97 ++++++------ Cargo.toml | 6 +- bca/types/Cargo.toml | 20 --- bca/types/src/amount.rs | 46 ------ bca/types/src/identity.rs | 22 --- bca/types/src/lib.rs | 144 ------------------ bca/types/src/prepare_payment.rs | 32 ---- bca/types/src/utxo.rs | 23 --- {bca => bda}/Cargo.toml | 5 +- {bca => bda}/src/exec_req_type.rs | 28 ++-- {bca => bda}/src/exec_req_type/balances.rs | 12 +- {bca => bda}/src/exec_req_type/current_ud.rs | 4 +- .../last_blockstamp_out_of_fork_window.rs | 20 +-- .../src/exec_req_type/members_count.rs | 10 +- .../src/exec_req_type/peers.rs | 25 +-- .../exec_req_type/prepare_simple_payment.rs | 34 ++--- {bca => bda}/src/exec_req_type/send_txs.rs | 14 +- {bca => bda}/src/exec_req_type/utxos.rs | 10 +- {bca => bda}/src/lib.rs | 44 +++--- db/Cargo.toml | 2 +- dbs-reader/Cargo.toml | 4 +- dbs-reader/src/lib.rs | 18 ++- dbs-reader/src/network.rs | 54 +++++-- gql/Cargo.toml | 3 +- gql/src/entities/network.rs | 18 +-- gql/src/lib.rs | 2 +- indexer/Cargo.toml | 2 +- src/lib.rs | 4 +- src/warp_.rs | 2 +- 29 files changed, 237 insertions(+), 468 deletions(-) delete mode 100644 bca/types/Cargo.toml delete mode 100644 bca/types/src/amount.rs delete mode 100644 bca/types/src/identity.rs delete mode 100644 bca/types/src/lib.rs delete mode 100644 bca/types/src/prepare_payment.rs delete mode 100644 bca/types/src/utxo.rs rename {bca => bda}/Cargo.toml (87%) rename {bca => bda}/src/exec_req_type.rs (82%) rename {bca => bda}/src/exec_req_type/balances.rs (91%) rename {bca => bda}/src/exec_req_type/current_ud.rs (93%) rename {bca => bda}/src/exec_req_type/last_blockstamp_out_of_fork_window.rs (88%) rename {bca => bda}/src/exec_req_type/members_count.rs (86%) rename bca/types/src/rejected_tx.rs => bda/src/exec_req_type/peers.rs (61%) rename {bca => bda}/src/exec_req_type/prepare_simple_payment.rs (90%) rename {bca => bda}/src/exec_req_type/send_txs.rs (89%) rename {bca => bda}/src/exec_req_type/utxos.rs (91%) rename {bca => bda}/src/lib.rs (94%) diff --git a/Cargo.lock b/Cargo.lock index 5500a07..5908de9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -694,23 +694,25 @@ checksum = "4bb454f0228b18c7f4c3b0ebbee346ed9c52e7443b0999cd543ff3571205701d" [[package]] name = "dubp" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5dca084e135ee5ea38d64e5e665cac6fc23570a66ed22ce5021b5d14c4f9443" +checksum = "c30ebc00a1c88df81a8f15d35fb785a934bafb81bdb53e0a50a77531b79d01ff" dependencies = [ "dubp-block", "dubp-common", "dubp-documents", "dubp-documents-parser", "dubp-wallet", + "duniter-bda-types", + "duniter-peer", "dup-crypto", ] [[package]] name = "dubp-block" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa8e2b1d9728832dd4696f9eff1348085d162d5f98fe025e9c9a2caeffd9c89" +checksum = "3608ef622ea82856b2dfdef0bb8c1da7ef25e125279aa4f3b672d24729ef2b18" dependencies = [ "dubp-documents", "dubp-documents-parser", @@ -723,9 +725,9 @@ dependencies = [ [[package]] name = "dubp-common" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a12c0842c7c4e61e75755476b782d09e282275cab187376b3cc0da405b6afb" +checksum = "196cce73d8ae0cff80bdd9d8d95f6f33f6af0103aeaac1e87fa70e12748c79d7" dependencies = [ "dup-crypto", "serde", @@ -736,9 +738,9 @@ dependencies = [ [[package]] name = "dubp-documents" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450f2b268c979264ef098f00532faf0015d281d9c8ebabf227f57ecc35d0076c" +checksum = "78bb43886be2293ecae9abc5a709869a8a828a2ddc471c478e407aa450e436ea" dependencies = [ "beef", "dubp-wallet", @@ -750,9 +752,9 @@ dependencies = [ [[package]] name = "dubp-documents-parser" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067bba5a1e34566871128b7157642a643264e4aeaba1db5034634ef6461f797b" +checksum = "8dcc86531972ec0c17cafa069691f40ea5e2bd3060592bbf257b661d4d885116" dependencies = [ "dubp-documents", "json-pest-parser", @@ -764,9 +766,9 @@ dependencies = [ [[package]] name = "dubp-wallet" -version = "0.54.1" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7552a1c1cca8498dc9266fdb6b10ee98ef841e363a1e3c0cd319ead3fa2aeef4" +checksum = "081ac73321da67f2de891cc26126f539ea336d84abb16e8fe47592b1adaf3fe2" dependencies = [ "byteorder", "dubp-common", @@ -779,7 +781,7 @@ dependencies = [ [[package]] name = "dubp-wot" version = "0.11.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "log", "once_cell", @@ -791,7 +793,7 @@ dependencies = [ [[package]] name = "duniter-bc-reader" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "anyhow", "dubp", @@ -800,7 +802,7 @@ dependencies = [ ] [[package]] -name = "duniter-bca" +name = "duniter-bda" version = "0.1.0" dependencies = [ "anyhow", @@ -809,7 +811,6 @@ dependencies = [ "async_io_stream", "bincode", "dubp", - "duniter-bca-types", "duniter-core", "duniter-gva-db", "duniter-gva-dbs-reader", @@ -823,12 +824,15 @@ dependencies = [ ] [[package]] -name = "duniter-bca-types" -version = "0.1.0" +name = "duniter-bda-types" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7f80e789db68f1831ca51ed27f9568c3e1750b9cd95d97a3b6096e492024f7a" dependencies = [ "arrayvec 0.7.0", "bincode", - "dubp", + "dubp-documents", + "duniter-peer", "serde", "smallvec", "thiserror", @@ -837,7 +841,7 @@ dependencies = [ [[package]] name = "duniter-conf" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "anyhow", "dubp", @@ -851,8 +855,9 @@ dependencies = [ [[package]] name = "duniter-core" version = "1.8.1" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ + "dubp", "dubp-wot", "duniter-bc-reader", "duniter-conf", @@ -865,7 +870,7 @@ dependencies = [ [[package]] name = "duniter-dbs" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "arrayvec 0.7.0", "bincode", @@ -888,7 +893,7 @@ dependencies = [ [[package]] name = "duniter-dbs-write-ops" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "chrono", "dubp", @@ -903,7 +908,7 @@ dependencies = [ [[package]] name = "duniter-global" version = "1.8.1" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "async-rwlock", "dubp", @@ -925,7 +930,7 @@ dependencies = [ "async-trait", "bytes 1.0.1", "dubp", - "duniter-bca", + "duniter-bda", "duniter-core", "duniter-gva-conf", "duniter-gva-db", @@ -983,12 +988,12 @@ dependencies = [ "anyhow", "arrayvec 0.7.0", "dubp", - "duniter-bca-types", "duniter-core", "duniter-gva-db", "flate2", "maplit", "mockall", + "rand 0.8.3", "resiter", "smallvec", "unwrap", @@ -1003,7 +1008,6 @@ dependencies = [ "async-graphql", "async-trait", "dubp", - "duniter-bca-types", "duniter-core", "duniter-gva-db", "duniter-gva-dbs-reader", @@ -1042,7 +1046,7 @@ dependencies = [ [[package]] name = "duniter-mempools" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "dubp", "duniter-bc-reader", @@ -1055,7 +1059,7 @@ dependencies = [ [[package]] name = "duniter-module" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "anyhow", "async-mutex", @@ -1073,21 +1077,33 @@ dependencies = [ ] [[package]] -name = "dup-crypto" -version = "0.54.1" +name = "duniter-peer" +version = "0.55.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4b9746489f2564086fffce1cc67de3b867a098eaf4dbcce15dc85f85542c9c" +checksum = "c2ece2a69df5cc4ef0a3460b8e5159ae4d8c6acd3b57ddae1e9c5b6b083a647c" +dependencies = [ + "beef", + "dubp-common", + "log", + "serde", + "serde_json", + "smallvec", + "thiserror", +] + +[[package]] +name = "dup-crypto" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9fbff8a0a8449f195a9d41f89043a54eb0d0d3b6f97ae2ef32de5378aa4ffc7" dependencies = [ - "arrayvec 0.5.2", "base64", "blake3", "bs58", "byteorder", "cryptoxide", - "ed25519-bip32", "getrandom 0.2.2", "hex", - "once_cell", "ring", "serde", "thiserror", @@ -1095,15 +1111,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ed25519-bip32" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8827180a2b511141fbe49141e50b31a8d542465e0fb572f81f36feea2addfe92" -dependencies = [ - "cryptoxide", -] - [[package]] name = "either" version = "1.6.1" @@ -1639,7 +1646,7 @@ dependencies = [ [[package]] name = "kv_typed" version = "0.1.0" -source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef" +source = "git+https://git.duniter.org/nodes/rust/duniter-core#5f6d6b1a4a6f3da9e87f511b3967dc19fe5c4076" dependencies = [ "byteorder", "cfg-if 0.1.10", diff --git a/Cargo.toml b/Cargo.toml index 333a51c..a1fe609 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,8 +13,8 @@ async-graphql = { version = "2.8", features = ["log"] } async-mutex = "1.4.0" async-trait = "0.1.41" bytes = "1.0" -dubp = { version = "0.54.1", features = ["duniter"] } -duniter-bca = { path = "./bca" } +dubp = { version = "0.55.1", features = ["duniter"] } +duniter-bda = { path = "./bda" } duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } duniter-gva-conf = { path = "./conf" } duniter-gva-db = { path = "./db" } @@ -43,7 +43,7 @@ unwrap = "1.2.1" [workspace] members = [ - "bca", + "bda", "conf", "db", "dbs-reader", diff --git a/bca/types/Cargo.toml b/bca/types/Cargo.toml deleted file mode 100644 index a151398..0000000 --- a/bca/types/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "duniter-bca-types" -version = "0.1.0" -authors = ["librelois "] -license = "AGPL-3.0" -edition = "2018" - -[dependencies] -arrayvec = { version = "0.7", features = ["serde"] } -bincode = "1.3" -dubp = { version = "0.54.1" } -serde = { version = "1.0.105", features = ["derive"] } -smallvec = { version = "1.4.0", features = ["serde"] } -thiserror = "1.0.20" - -[features] -default = ["duniter"] - -client = ["dubp/client"] -duniter = ["dubp/duniter"] diff --git a/bca/types/src/amount.rs b/bca/types/src/amount.rs deleted file mode 100644 index 1682a31..0000000 --- a/bca/types/src/amount.rs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -use crate::*; - -#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] -pub enum Amount { - Cents(SourceAmount), - Uds(f64), -} - -impl Default for Amount { - fn default() -> Self { - Self::Cents(SourceAmount::ZERO) - } -} - -impl Amount { - pub fn to_cents(self, ud_amount: SourceAmount) -> SourceAmount { - match self { - Amount::Cents(sa) => sa, - Amount::Uds(f64_) => { - if !f64_.is_finite() || f64_ <= 0f64 { - SourceAmount::ZERO - } else { - SourceAmount::new( - f64::round(ud_amount.amount() as f64 * f64_) as i64, - ud_amount.base(), - ) - } - } - } - } -} diff --git a/bca/types/src/identity.rs b/bca/types/src/identity.rs deleted file mode 100644 index e2302a9..0000000 --- a/bca/types/src/identity.rs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -use crate::*; - -#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] -pub struct Identity { - pub is_member: bool, - pub username: String, -} diff --git a/bca/types/src/lib.rs b/bca/types/src/lib.rs deleted file mode 100644 index 0b9beda..0000000 --- a/bca/types/src/lib.rs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -#![deny( - clippy::unwrap_used, - missing_copy_implementations, - trivial_casts, - trivial_numeric_casts, - unstable_features, - unused_import_braces -)] - -pub mod amount; -pub mod identity; -pub mod prepare_payment; -pub mod rejected_tx; -pub mod utxo; - -use crate::amount::Amount; -use crate::identity::Identity; -use crate::prepare_payment::{PrepareSimplePayment, PrepareSimplePaymentResp}; -use crate::utxo::Utxo; - -use arrayvec::ArrayVec; -use bincode::Options as _; -use dubp::crypto::keys::ed25519::{PublicKey, Signature}; -use dubp::wallet::prelude::*; -use dubp::{common::prelude::Blockstamp, crypto::hashs::Hash}; -use serde::{Deserialize, Serialize}; -use smallvec::SmallVec; -use thiserror::Error; - -// Constants - -pub const MAX_FIRST_UTXOS: usize = 40; - -// Request - -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub enum BcaReq { - V0(BcaReqV0), - _V1, -} - -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct BcaReqV0 { - pub req_id: usize, - pub req_type: BcaReqTypeV0, -} - -#[allow(clippy::large_enum_variant)] -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub enum BcaReqTypeV0 { - BalancesOfPubkeys(ArrayVec), - FirstUtxosOfPubkeys { - amount_target_opt: Option, - pubkeys: ArrayVec, - }, - LastBlockstampOutOfForkWindow, - MembersCount, - PrepareSimplePayment(PrepareSimplePayment), - ProofServerPubkey { - challenge: [u8; 16], - }, - Ping, - SendTxs(Txs), - Identities(ArrayVec), - CurrentUd, - BalancesOfScripts(ArrayVec), -} - -// Request types helpers - -pub type Txs = SmallVec<[dubp::documents::transaction::TransactionDocumentV10; 1]>; - -// Response - -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub enum BcaResp { - V0(BcaRespV0), - UnsupportedVersion, -} - -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub struct BcaRespV0 { - pub req_id: usize, - pub resp_type: BcaRespTypeV0, -} - -#[allow(clippy::large_enum_variant)] -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub enum BcaRespTypeV0 { - Error(String), - Balances(ArrayVec, 16>), - FirstUtxosOfPubkeys(Vec>), - ProofServerPubkey { - challenge: [u8; 16], - server_pubkey: PublicKey, - sig: Signature, - }, - LastBlockstampOutOfForkWindow(Blockstamp), - MembersCount(u64), - PrepareSimplePayment(PrepareSimplePaymentResp), - Pong, - RejectedTxs(Vec), - Identities(ArrayVec, 16>), - CurrentUd(SourceAmount), -} - -// Result and error - -pub type BcaResult = Result; - -#[derive(Clone, Debug, Deserialize, Error, PartialEq, Eq, Serialize)] -pub enum BcaReqExecError { - #[error("task cancelled")] - Cancelled, - #[error("Invalid request: {0}")] - InvalidReq(String), - #[error("task panicked")] - Panic, - #[error("Unknown error")] - Unknown, -} - -// Bincode configuration - -pub fn bincode_opts() -> impl bincode::Options { - bincode::options() - .with_limit(u32::max_value() as u64) - .allow_trailing_bytes() -} diff --git a/bca/types/src/prepare_payment.rs b/bca/types/src/prepare_payment.rs deleted file mode 100644 index 2de5d62..0000000 --- a/bca/types/src/prepare_payment.rs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -use crate::*; -use dubp::documents::transaction::TransactionInputV10; - -#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] -pub struct PrepareSimplePayment { - pub issuer: PublicKey, - pub amount: Amount, -} - -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub struct PrepareSimplePaymentResp { - pub current_block_number: u32, - pub current_block_hash: Hash, - pub current_ud: SourceAmount, - pub inputs: Vec, - pub inputs_sum: SourceAmount, -} diff --git a/bca/types/src/utxo.rs b/bca/types/src/utxo.rs deleted file mode 100644 index d7716a8..0000000 --- a/bca/types/src/utxo.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -use crate::*; - -#[derive(Clone, Copy, Debug, Default, Deserialize, PartialEq, Eq, Serialize)] -pub struct Utxo { - pub amount: SourceAmount, - pub tx_hash: Hash, - pub output_index: u8, -} diff --git a/bca/Cargo.toml b/bda/Cargo.toml similarity index 87% rename from bca/Cargo.toml rename to bda/Cargo.toml index 0d98bfa..bd7864e 100644 --- a/bca/Cargo.toml +++ b/bda/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "duniter-bca" +name = "duniter-bda" version = "0.1.0" authors = ["librelois "] license = "AGPL-3.0" @@ -11,8 +11,7 @@ arrayvec = { version = "0.7", features = ["serde"] } async-bincode = "0.6.1" async_io_stream = { version = "0.3.1", features = [ "tokio_io"] } bincode = "1.3" -dubp = { version = "0.54.1", features = ["duniter"] } -duniter-bca-types = { path = "types", features = ["duniter"] } +dubp = { version = "0.55.1", features = ["duniter"] } duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } duniter-gva-db = { path = "../db" } duniter-gva-dbs-reader = { path = "../dbs-reader" } diff --git a/bca/src/exec_req_type.rs b/bda/src/exec_req_type.rs similarity index 82% rename from bca/src/exec_req_type.rs rename to bda/src/exec_req_type.rs index fc60c1b..b33cef2 100644 --- a/bca/src/exec_req_type.rs +++ b/bda/src/exec_req_type.rs @@ -17,6 +17,7 @@ mod balances; mod current_ud; mod last_blockstamp_out_of_fork_window; mod members_count; +mod peers; mod prepare_simple_payment; mod send_txs; mod utxos; @@ -38,42 +39,42 @@ where } pub(super) async fn execute_req_type( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, req_type: BcaReqTypeV0, _is_whitelisted: bool, ) -> Result { match req_type { BcaReqTypeV0::BalancesOfPubkeys(pubkeys) => { - balances::exec_req_balances_of_pubkeys(bca_executor, pubkeys).await + balances::exec_req_balances_of_pubkeys(bda_executor, pubkeys).await } BcaReqTypeV0::FirstUtxosOfPubkeys { amount_target_opt, pubkeys, - } => utxos::exec_req_first_utxos_of_pubkeys(bca_executor, amount_target_opt, pubkeys).await, + } => utxos::exec_req_first_utxos_of_pubkeys(bda_executor, amount_target_opt, pubkeys).await, BcaReqTypeV0::LastBlockstampOutOfForkWindow => { last_blockstamp_out_of_fork_window::exec_req_last_blockstamp_out_of_fork_window( - bca_executor, + bda_executor, ) .await } - BcaReqTypeV0::MembersCount => members_count::exec_req_members_count(bca_executor).await, + BcaReqTypeV0::MembersCount => members_count::exec_req_members_count(bda_executor).await, BcaReqTypeV0::PrepareSimplePayment(params) => { - prepare_simple_payment::exec_req_prepare_simple_payment(bca_executor, params).await + prepare_simple_payment::exec_req_prepare_simple_payment(bda_executor, params).await } BcaReqTypeV0::ProofServerPubkey { challenge } => Ok(BcaRespTypeV0::ProofServerPubkey { challenge, - server_pubkey: bca_executor.self_keypair.public_key(), - sig: bca_executor + server_pubkey: bda_executor.self_keypair.public_key(), + sig: bda_executor .self_keypair .generate_signator() .sign(&challenge), }), BcaReqTypeV0::Ping => Ok(BcaRespTypeV0::Pong), - BcaReqTypeV0::SendTxs(txs) => send_txs::send_txs(bca_executor, txs).await, + BcaReqTypeV0::SendTxs(txs) => send_txs::send_txs(bda_executor, txs).await, BcaReqTypeV0::Identities(pubkeys) => { - let dbs_reader = bca_executor.dbs_reader(); + let dbs_reader = bda_executor.dbs_reader(); Ok(BcaRespTypeV0::Identities( - bca_executor + bda_executor .dbs_pool .execute(move |dbs| { pubkeys @@ -91,9 +92,10 @@ pub(super) async fn execute_req_type( .await??, )) } - BcaReqTypeV0::CurrentUd => current_ud::exec_req_current_ud(bca_executor).await, + BcaReqTypeV0::CurrentUd => current_ud::exec_req_current_ud(bda_executor).await, BcaReqTypeV0::BalancesOfScripts(scripts) => { - balances::exec_req_balances_of_scripts(bca_executor, scripts).await + balances::exec_req_balances_of_scripts(bda_executor, scripts).await } + BcaReqTypeV0::PeersV10 { n } => peers::exec_req_peers_v1(bda_executor, n).await, } } diff --git a/bca/src/exec_req_type/balances.rs b/bda/src/exec_req_type/balances.rs similarity index 91% rename from bca/src/exec_req_type/balances.rs rename to bda/src/exec_req_type/balances.rs index 05b1fab..5b6ee11 100644 --- a/bca/src/exec_req_type/balances.rs +++ b/bda/src/exec_req_type/balances.rs @@ -17,12 +17,12 @@ use crate::*; use dubp::{crypto::keys::ed25519::PublicKey, wallet::prelude::WalletScriptV10}; pub(super) async fn exec_req_balances_of_pubkeys( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, pubkeys: ArrayVec, ) -> Result { - let dbs_reader = bca_executor.dbs_reader(); + let dbs_reader = bda_executor.dbs_reader(); Ok(BcaRespTypeV0::Balances( - bca_executor + bda_executor .dbs_pool .execute(move |_| { pubkeys @@ -39,12 +39,12 @@ pub(super) async fn exec_req_balances_of_pubkeys( } pub(super) async fn exec_req_balances_of_scripts( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, scripts: ArrayVec, ) -> Result { - let dbs_reader = bca_executor.dbs_reader(); + let dbs_reader = bda_executor.dbs_reader(); Ok(BcaRespTypeV0::Balances( - bca_executor + bda_executor .dbs_pool .execute(move |_| { scripts diff --git a/bca/src/exec_req_type/current_ud.rs b/bda/src/exec_req_type/current_ud.rs similarity index 93% rename from bca/src/exec_req_type/current_ud.rs rename to bda/src/exec_req_type/current_ud.rs index 02823db..c7d77e4 100644 --- a/bca/src/exec_req_type/current_ud.rs +++ b/bda/src/exec_req_type/current_ud.rs @@ -16,9 +16,9 @@ use crate::*; pub(super) async fn exec_req_current_ud( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, ) -> Result { - if let Some(current_ud) = bca_executor + if let Some(current_ud) = bda_executor .cm_accessor .get_current_meta(|cm| cm.current_ud) .await diff --git a/bca/src/exec_req_type/last_blockstamp_out_of_fork_window.rs b/bda/src/exec_req_type/last_blockstamp_out_of_fork_window.rs similarity index 88% rename from bca/src/exec_req_type/last_blockstamp_out_of_fork_window.rs rename to bda/src/exec_req_type/last_blockstamp_out_of_fork_window.rs index 4152956..d071cb8 100644 --- a/bca/src/exec_req_type/last_blockstamp_out_of_fork_window.rs +++ b/bda/src/exec_req_type/last_blockstamp_out_of_fork_window.rs @@ -17,15 +17,15 @@ use crate::*; use dubp::common::prelude::*; pub(super) async fn exec_req_last_blockstamp_out_of_fork_window( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, ) -> Result { - if let Some(current_block_number) = bca_executor + if let Some(current_block_number) = bda_executor .cm_accessor .get_current_meta(|cm| cm.current_block_meta.number) .await { - let dbs_reader = bca_executor.dbs_reader(); - bca_executor + let dbs_reader = bda_executor.dbs_reader(); + bda_executor .dbs_pool .execute(move |dbs| { let block_ref_number = if current_block_number < 101 { @@ -63,10 +63,10 @@ mod tests { .times(1) .returning(|_| None); let dbs_reader = MockDbsReader::new(); - let bca_executor = - create_bca_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); - let resp_res = exec_req_last_blockstamp_out_of_fork_window(&bca_executor).await; + let resp_res = exec_req_last_blockstamp_out_of_fork_window(&bda_executor).await; assert_eq!(resp_res, Err(ExecReqTypeError("no blockchain".into()))); } @@ -84,10 +84,10 @@ mod tests { .times(1) .returning(|_, _| Ok(Some(BlockMetaV2::default()))); - let bca_executor = - create_bca_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); - let resp = exec_req_last_blockstamp_out_of_fork_window(&bca_executor).await?; + let resp = exec_req_last_blockstamp_out_of_fork_window(&bda_executor).await?; assert_eq!( resp, diff --git a/bca/src/exec_req_type/members_count.rs b/bda/src/exec_req_type/members_count.rs similarity index 86% rename from bca/src/exec_req_type/members_count.rs rename to bda/src/exec_req_type/members_count.rs index 71b85c6..0353934 100644 --- a/bca/src/exec_req_type/members_count.rs +++ b/bda/src/exec_req_type/members_count.rs @@ -16,9 +16,9 @@ use crate::*; pub(super) async fn exec_req_members_count( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, ) -> Result { - if let Some(members_count) = bca_executor + if let Some(members_count) = bda_executor .cm_accessor .get_current_meta(|cm| cm.current_block_meta.members_count) .await @@ -42,10 +42,10 @@ mod tests { .times(1) .returning(|f| Some(f(&CurrentMeta::default()))); let dbs_reader = MockDbsReader::new(); - let bca_executor = - create_bca_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(cm_mock, dbs_reader).expect("fail to create bca executor"); - let resp_res = exec_req_members_count(&bca_executor).await; + let resp_res = exec_req_members_count(&bda_executor).await; assert_eq!(resp_res, Ok(BcaRespTypeV0::MembersCount(0))); } diff --git a/bca/types/src/rejected_tx.rs b/bda/src/exec_req_type/peers.rs similarity index 61% rename from bca/types/src/rejected_tx.rs rename to bda/src/exec_req_type/peers.rs index 14b06e5..91535a6 100644 --- a/bca/types/src/rejected_tx.rs +++ b/bda/src/exec_req_type/peers.rs @@ -15,16 +15,19 @@ use crate::*; -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub struct RejectedTx { - pub tx_index: u16, - pub reason: RejectedTxReason, -} +pub(super) async fn exec_req_peers_v1( + bda_executor: &BdaExecutor, + n: usize, +) -> Result { + let dbs_reader = bda_executor.dbs_reader(); -#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Serialize)] -pub enum RejectedTxReason { - DbError(String), - InvalidTx(String), - MempoolFull, - TxAlreadyWritten, + Ok(BcaRespTypeV0::PeersV10( + bda_executor + .dbs_pool + .execute(move |shared_dbs| dbs_reader.get_some_peers(&shared_dbs.dunp_db, n)) + .await?? + .into_iter() + .map(|peer_db| peer_db.peer) + .collect(), + )) } diff --git a/bca/src/exec_req_type/prepare_simple_payment.rs b/bda/src/exec_req_type/prepare_simple_payment.rs similarity index 90% rename from bca/src/exec_req_type/prepare_simple_payment.rs rename to bda/src/exec_req_type/prepare_simple_payment.rs index a23a776..7a5130a 100644 --- a/bca/src/exec_req_type/prepare_simple_payment.rs +++ b/bda/src/exec_req_type/prepare_simple_payment.rs @@ -14,20 +14,20 @@ // along with this program. If not, see . use crate::*; +use dubp::bda_types::prepare_payment::{PrepareSimplePayment, PrepareSimplePaymentResp}; use dubp::wallet::prelude::*; -use duniter_bca_types::prepare_payment::{PrepareSimplePayment, PrepareSimplePaymentResp}; pub(super) async fn exec_req_prepare_simple_payment( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, params: PrepareSimplePayment, ) -> Result { let issuer = params.issuer; - if let Some(current_meta) = bca_executor.cm_accessor.get_current_meta(|cm| *cm).await { + if let Some(current_meta) = bda_executor.cm_accessor.get_current_meta(|cm| *cm).await { let current_block_meta = current_meta.current_block_meta; let current_ud = current_meta.current_ud; - let dbs_reader = bca_executor.dbs_reader(); - let (amount, block_ref_number, block_ref_hash, (inputs, inputs_sum)) = bca_executor + let dbs_reader = bda_executor.dbs_reader(); + let (amount, block_ref_number, block_ref_hash, (inputs, inputs_sum)) = bda_executor .dbs_pool .execute(move |dbs| { let mut amount = params.amount.to_cents(current_ud); @@ -95,11 +95,11 @@ mod tests { .times(1) .returning(|_| None); let dbs_reader = MockDbsReader::new(); - let bca_executor = - create_bca_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); let resp_res = exec_req_prepare_simple_payment( - &bca_executor, + &bda_executor, PrepareSimplePayment { issuer: PublicKey::default(), amount: Amount::Cents(SourceAmount::new(42, 0)), @@ -122,11 +122,11 @@ mod tests { .expect_block() .times(1) .returning(|_, _| Ok(Some(BlockMetaV2::default()))); - let bca_executor = - create_bca_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); let resp_res = exec_req_prepare_simple_payment( - &bca_executor, + &bda_executor, PrepareSimplePayment { issuer: PublicKey::default(), amount: Amount::Cents(SourceAmount::new(42, 1)), @@ -153,11 +153,11 @@ mod tests { .expect_find_inputs::>() .times(1) .returning(|_, _, _, _, _| Ok((vec![], SourceAmount::default()))); - let bca_executor = - create_bca_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); let resp_res = exec_req_prepare_simple_payment( - &bca_executor, + &bda_executor, PrepareSimplePayment { issuer: PublicKey::default(), amount: Amount::Cents(SourceAmount::new(42, 0)), @@ -195,11 +195,11 @@ mod tests { .expect_find_inputs::>() .times(1) .returning(move |_, _, _, _, _| Ok((vec![input], SourceAmount::with_base0(57)))); - let bca_executor = - create_bca_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); + let bda_executor = + create_bda_executor(mock_cm, dbs_reader).expect("fail to create bca executor"); let resp = exec_req_prepare_simple_payment( - &bca_executor, + &bda_executor, PrepareSimplePayment { issuer: PublicKey::default(), amount: Amount::Cents(SourceAmount::new(42, 0)), diff --git a/bca/src/exec_req_type/send_txs.rs b/bda/src/exec_req_type/send_txs.rs similarity index 89% rename from bca/src/exec_req_type/send_txs.rs rename to bda/src/exec_req_type/send_txs.rs index bb1ede1..73aae21 100644 --- a/bca/src/exec_req_type/send_txs.rs +++ b/bda/src/exec_req_type/send_txs.rs @@ -14,20 +14,20 @@ // along with this program. If not, see . use crate::*; -use dubp::{crypto::keys::KeyPair, documents::transaction::TransactionDocumentTrait}; -use duniter_bca_types::{ +use dubp::bda_types::{ rejected_tx::{RejectedTx, RejectedTxReason}, Txs, }; +use dubp::{crypto::keys::KeyPair, documents::transaction::TransactionDocumentTrait}; pub(super) async fn send_txs( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, txs: Txs, ) -> Result { - let expected_currency = bca_executor.currency.clone(); + let expected_currency = bda_executor.currency.clone(); - let server_pubkey = bca_executor.self_keypair.public_key(); - let txs_mempool = bca_executor.txs_mempool; + let server_pubkey = bda_executor.self_keypair.public_key(); + let txs_mempool = bda_executor.txs_mempool; let mut rejected_txs = Vec::new(); for (i, tx) in txs.into_iter().enumerate() { @@ -36,7 +36,7 @@ pub(super) async fn send_txs( tx_index: i as u16, reason: RejectedTxReason::InvalidTx(e.to_string()), }); - } else if let Err(rejected_tx) = bca_executor + } else if let Err(rejected_tx) = bda_executor .dbs_pool .execute(move |dbs| { txs_mempool diff --git a/bca/src/exec_req_type/utxos.rs b/bda/src/exec_req_type/utxos.rs similarity index 91% rename from bca/src/exec_req_type/utxos.rs rename to bda/src/exec_req_type/utxos.rs index 6187464..9c3678f 100644 --- a/bca/src/exec_req_type/utxos.rs +++ b/bda/src/exec_req_type/utxos.rs @@ -17,23 +17,23 @@ use crate::*; use dubp::{crypto::keys::ed25519::PublicKey, wallet::prelude::WalletScriptV10}; pub(super) async fn exec_req_first_utxos_of_pubkeys( - bca_executor: &BcaExecutor, + bda_executor: &BdaExecutor, amount_target_opt: Option, pubkeys: ArrayVec, ) -> Result { - if let Some(current_ud) = bca_executor + if let Some(current_ud) = bda_executor .cm_accessor .get_current_meta(|cm| cm.current_ud) .await { - let dbs_reader = bca_executor.dbs_reader(); + let dbs_reader = bda_executor.dbs_reader(); let scripts: ArrayVec = pubkeys .into_iter() .map(WalletScriptV10::single_sig) .collect(); if let Some(amount_target) = amount_target_opt { Ok(BcaRespTypeV0::FirstUtxosOfPubkeys( - bca_executor + bda_executor .dbs_pool .execute(move |_| { Ok::<_, ExecReqTypeError>(dbs_reader.first_scripts_utxos( @@ -46,7 +46,7 @@ pub(super) async fn exec_req_first_utxos_of_pubkeys( )) } else { Ok(BcaRespTypeV0::FirstUtxosOfPubkeys( - bca_executor + bda_executor .dbs_pool .execute(move |_| dbs_reader.first_scripts_utxos(None, 40, &scripts)) .await??, diff --git a/bca/src/lib.rs b/bda/src/lib.rs similarity index 94% rename from bca/src/lib.rs rename to bda/src/lib.rs index d077779..fd964a9 100644 --- a/bca/src/lib.rs +++ b/bda/src/lib.rs @@ -35,11 +35,11 @@ use arrayvec::ArrayVec; use async_bincode::AsyncBincodeReader; use async_io_stream::IoStream; use bincode::Options as _; -use dubp::crypto::keys::{ed25519::Ed25519KeyPair, Signator}; -use duniter_bca_types::{ +use dubp::bda_types::{ amount::Amount, bincode_opts, identity::Identity, BcaReq, BcaReqExecError, BcaReqTypeV0, BcaResp, BcaRespTypeV0, BcaRespV0, }; +use dubp::crypto::keys::{ed25519::Ed25519KeyPair, Signator}; pub use duniter_core::dbs::kv_typed::prelude::*; use duniter_core::dbs::{FileBackend, SharedDbs}; #[cfg(not(test))] @@ -56,9 +56,9 @@ use crate::tests::DbsReaderImpl; #[cfg(not(test))] use duniter_gva_dbs_reader::DbsReaderImpl; -static BCA_EXECUTOR: OnceCell = OnceCell::new(); +static BDA_EXECUTOR: OnceCell = OnceCell::new(); -pub fn set_bca_executor( +pub fn set_bda_executor( currency: String, cm_accessor: AsyncAccessor, dbs_pool: fast_threadpool::ThreadPoolAsyncHandler>, @@ -67,8 +67,8 @@ pub fn set_bca_executor( software_version: &'static str, txs_mempool: duniter_core::mempools::TxsMempool, ) { - BCA_EXECUTOR - .set(BcaExecutor { + BDA_EXECUTOR + .set(BdaExecutor { currency, cm_accessor, dbs_pool, @@ -77,7 +77,7 @@ pub fn set_bca_executor( software_version, txs_mempool, }) - .unwrap_or_else(|_| panic!("BCA_EXECUTOR already set !")) + .unwrap_or_else(|_| panic!("bda_executor already set !")) } #[cfg(not(test))] @@ -87,7 +87,7 @@ where S: 'static + TryStream + Send + Unpin, { unsafe { - BCA_EXECUTOR + BDA_EXECUTOR .get_unchecked() .execute(query_body_stream, is_whitelisted) .await @@ -95,7 +95,7 @@ where } #[derive(Clone)] -struct BcaExecutor { +struct BdaExecutor { cm_accessor: AsyncAccessor, currency: String, dbs_pool: fast_threadpool::ThreadPoolAsyncHandler>, @@ -105,7 +105,7 @@ struct BcaExecutor { txs_mempool: duniter_core::mempools::TxsMempool, } use uninit::extension_traits::VecCapacity; -impl BcaExecutor { +impl BdaExecutor { pub async fn execute(&self, query_body_stream: S, is_whitelisted: bool) -> Vec where B: AsRef<[u8]>, @@ -214,7 +214,7 @@ impl BcaExecutor { } #[cfg(not(test))] -impl BcaExecutor { +impl BdaExecutor { #[inline(always)] pub fn dbs_reader(&self) -> DbsReaderImpl { self.dbs_reader @@ -224,6 +224,7 @@ impl BcaExecutor { #[cfg(test)] mod tests { use super::*; + pub use dubp::bda_types::BcaReqV0; pub use dubp::{ block::prelude::*, crypto::{ @@ -233,7 +234,6 @@ mod tests { documents::transaction::TransactionInputV10, wallet::prelude::*, }; - pub use duniter_bca_types::BcaReqV0; pub use duniter_core::dbs::databases::bc_v2::{BcV2DbReadable, BcV2DbRo}; pub use duniter_core::dbs::databases::cm_v1::{CmV1Db, CmV1DbReadable}; pub use duniter_core::dbs::databases::txs_mp_v2::{TxsMpV2Db, TxsMpV2DbReadable}; @@ -245,21 +245,21 @@ mod tests { pub type AsyncAccessor = duniter_core::dbs::kv_typed::prelude::Arc; pub type DbsReaderImpl = duniter_core::dbs::kv_typed::prelude::Arc; - impl BcaExecutor { + impl BdaExecutor { #[inline(always)] pub fn dbs_reader(&self) -> DbsReaderImpl { self.dbs_reader.clone() } } - pub(crate) fn create_bca_executor( + pub(crate) fn create_bda_executor( mock_cm: MockAsyncAccessor, mock_dbs_reader: MockDbsReader, - ) -> KvResult { + ) -> KvResult { let dbs = SharedDbs::mem()?; let threadpool = fast_threadpool::ThreadPool::start(fast_threadpool::ThreadPoolConfig::low(), dbs); - Ok(BcaExecutor { + Ok(BdaExecutor { cm_accessor: duniter_core::dbs::kv_typed::prelude::Arc::new(mock_cm), currency: "g1".to_owned(), dbs_pool: threadpool.into_async_handler(), @@ -299,11 +299,11 @@ mod tests { .expect_get_current_meta::() .times(1) .returning(|f| Some(f(&CurrentMeta::default()))); - let bca_executor = create_bca_executor(mock_cm, MockDbsReader::new()) + let bda_executor = create_bda_executor(mock_cm, MockDbsReader::new()) .expect("fail to create bca executor"); //println!("bytes={:?}", bytes); - let bytes_res = bca_executor.execute(io_stream(bytes), false).await; + let bytes_res = bda_executor.execute(io_stream(bytes), false).await; //println!("bytes_res={:?}", bytes_res); let bca_res: Vec> = AsyncBincodeReader::<_, Result>::from(&bytes_res[..]) @@ -337,11 +337,11 @@ mod tests { //println!("bytes_for_bincode={:?}", &bytes[4..]); assert_eq!(req, bincode_opts().deserialize(&bytes[4..])?); - let bca_executor = create_bca_executor(MockAsyncAccessor::new(), MockDbsReader::new()) + let bda_executor = create_bda_executor(MockAsyncAccessor::new(), MockDbsReader::new()) .expect("fail to create bca executor"); //println!("bytes={:?}", bytes); - let bytes_res = bca_executor.execute(io_stream(bytes), false).await; + let bytes_res = bda_executor.execute(io_stream(bytes), false).await; //println!("bytes_res={:?}", bytes_res); let bca_res: Vec> = AsyncBincodeReader::<_, Result>::from(&bytes_res[..]) @@ -382,11 +382,11 @@ mod tests { .expect_get_current_meta::() .times(1) .returning(|f| Some(f(&CurrentMeta::default()))); - let bca_executor = create_bca_executor(mock_cm, MockDbsReader::new()) + let bda_executor = create_bda_executor(mock_cm, MockDbsReader::new()) .expect("fail to create bca executor"); //println!("bytes={:?}", bytes); - let bytes_res = bca_executor.execute(io_stream(bytes), false).await; + let bytes_res = bda_executor.execute(io_stream(bytes), false).await; //println!("bytes_res={:?}", bytes_res); let bca_res: Vec> = AsyncBincodeReader::<_, Result>::from(&bytes_res[..]) diff --git a/db/Cargo.toml b/db/Cargo.toml index 24e4e92..8458834 100644 --- a/db/Cargo.toml +++ b/db/Cargo.toml @@ -14,7 +14,7 @@ path = "src/lib.rs" bincode = "1.3" chrono = { version = "0.4.15", optional = true } duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } -dubp = { version = "0.54.1", features = ["duniter"] } +dubp = { version = "0.55.1", features = ["duniter"] } parking_lot = "0.11.0" paste = "1.0.2" serde = { version = "1.0.105", features = ["derive"] } diff --git a/dbs-reader/Cargo.toml b/dbs-reader/Cargo.toml index 791231e..7e1d130 100644 --- a/dbs-reader/Cargo.toml +++ b/dbs-reader/Cargo.toml @@ -17,13 +17,13 @@ mock = ["mockall"] [dependencies] anyhow = "1.0.34" arrayvec = { version = "0.7", features = ["serde"] } -duniter-bca-types = { path = "../bca/types" } duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } duniter-gva-db = { path = "../db" } -dubp = { version = "0.54.1", features = ["duniter"] } +dubp = { version = "0.55.1", features = ["duniter"] } flate2 = { version = "1.0", features = ["zlib-ng-compat"], default-features = false } mockall = { version = "0.9.1", optional = true } resiter = "0.4.0" +rand = "0.8" [dev-dependencies] duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core", features = ["mem"] } diff --git a/dbs-reader/src/lib.rs b/dbs-reader/src/lib.rs index ba6d79e..0573737 100644 --- a/dbs-reader/src/lib.rs +++ b/dbs-reader/src/lib.rs @@ -34,15 +34,15 @@ pub mod uds_of_pubkey; pub mod utxos; pub use crate::pagination::{PageInfo, PagedData}; -pub use duniter_bca_types::MAX_FIRST_UTXOS; +pub use dubp::bda_types::MAX_FIRST_UTXOS; use crate::pagination::{has_next_page, has_previous_page}; use arrayvec::ArrayVec; +use dubp::bda_types::utxo::Utxo; use dubp::common::crypto::keys::ed25519::PublicKey; use dubp::documents::transaction::TransactionDocumentV10; use dubp::{block::DubpBlockV10, common::crypto::hashs::Hash}; use dubp::{common::prelude::BlockNumber, wallet::prelude::*}; -use duniter_bca_types::utxo::Utxo; use duniter_core::dbs::{databases::network_v1::NetworkV1DbReadable, FileBackend}; use duniter_core::dbs::{ databases::{ @@ -56,6 +56,7 @@ use duniter_core::dbs::{ kv_typed::prelude::*, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, UtxoIdDbV2, }; use duniter_gva_db::{GvaIdtyDbV1, GvaTxDbV1, GvaUtxoIdDbV1, GvaV1DbReadable, GvaV1DbRo}; +use rand::seq::SliceRandom; use resiter::filter::Filter; use resiter::filter_map::FilterMap; use resiter::flatten::Flatten; @@ -134,6 +135,11 @@ pub trait DbsReader { bc_db: &BcDb, current_block_meta: &BlockMetaV2, ) -> anyhow::Result>; + fn get_some_peers( + &self, + dunp_db: &DB, + n: usize, + ) -> KvResult>; fn get_txs_history_bc_received( &self, from: Option, @@ -281,6 +287,14 @@ impl DbsReader for DbsReaderImpl { self.get_current_frame_(bc_db, current_block_meta) } + fn get_some_peers( + &self, + dunp_db: &DB, + n: usize, + ) -> KvResult> { + self.get_some_peers_(dunp_db, n) + } + fn get_txs_history_bc_received( &self, from: Option, diff --git a/dbs-reader/src/network.rs b/dbs-reader/src/network.rs index b144c7e..fc0aab7 100644 --- a/dbs-reader/src/network.rs +++ b/dbs-reader/src/network.rs @@ -31,8 +31,8 @@ impl DbsReaderImpl { } network_db.peers_old().iter(.., |it| { it.values() - .map_ok(|peer| { - peer.endpoints.into_iter().filter(|endpoint| { + .map_ok(|peer_db| { + peer_db.peer.endpoints.into_iter().filter(|endpoint| { api_list .iter() .any(|api| endpoint.starts_with(api.as_str())) @@ -42,6 +42,24 @@ impl DbsReaderImpl { .collect::, _>>() }) } + pub(super) fn get_some_peers_( + &self, + dunp_db: &DB, + n: usize, + ) -> KvResult> { + let peers: Vec = dunp_db + .peers_old() + .iter(.., |it| it.values().collect::>())?; + + if n == 0 { + Ok(peers) + } else { + Ok(peers + .choose_multiple(&mut rand::thread_rng(), n) + .cloned() + .collect()) + } + } pub(super) fn peers_and_heads_( &self, dunp_db: &DB, @@ -49,11 +67,12 @@ impl DbsReaderImpl { Ok(dunp_db.peers_old().iter(.., |it| { it.values() .filter_map(|peer_res| { - if let Ok(peer) = peer_res { - let k_min = duniter_core::dbs::DunpNodeIdV1Db::new(0, peer.pubkey); - let k_max = duniter_core::dbs::DunpNodeIdV1Db::new(u32::MAX, peer.pubkey); + if let Ok(peer_db) = peer_res { + let k_min = duniter_core::dbs::DunpNodeIdV1Db::new(0, peer_db.peer.pubkey); + let k_max = + duniter_core::dbs::DunpNodeIdV1Db::new(u32::MAX, peer_db.peer.pubkey); Some(( - peer, + peer_db, dunp_db.heads_old().iter(k_min..k_max, |it| { it.values().filter_map(|head| head.ok()).collect() }), @@ -70,9 +89,10 @@ impl DbsReaderImpl { #[cfg(test)] mod tests { use super::*; - use dubp::crypto::keys::PublicKey as _; + use dubp::{crypto::keys::PublicKey as _, peer::PeerV10}; use duniter_core::dbs::databases::network_v1::NetworkV1DbWritable; use duniter_core::dbs::PeerCardDbV1; + use smallvec::smallvec; #[test] fn test_empty_endpoints() -> KvResult<()> { @@ -105,7 +125,10 @@ mod tests { let db_reader = DbsReaderImpl::mem(); let pk = PublicKey::default(); let peer = PeerCardDbV1 { - endpoints: vec![dummy_endpoint.to_owned()], + peer: PeerV10 { + endpoints: smallvec![dummy_endpoint.to_owned()], + ..Default::default() + }, ..Default::default() }; @@ -130,7 +153,10 @@ mod tests { let db_reader = DbsReaderImpl::mem(); let pk = PublicKey::default(); let peer = PeerCardDbV1 { - endpoints: vec![dummy_endpoint.to_owned()], + peer: PeerV10 { + endpoints: smallvec![dummy_endpoint.to_owned()], + ..Default::default() + }, ..Default::default() }; @@ -156,7 +182,10 @@ mod tests { dunp_db.peers_old_write().upsert( PubKeyKeyV2(pubkey), PeerCardDbV1 { - pubkey, + peer: PeerV10 { + pubkey, + ..Default::default() + }, ..Default::default() }, )?; @@ -177,7 +206,10 @@ mod tests { db_reader.peers_and_heads(&dunp_db)?, vec![( PeerCardDbV1 { - pubkey, + peer: PeerV10 { + pubkey, + ..Default::default() + }, ..Default::default() }, vec![ diff --git a/gql/Cargo.toml b/gql/Cargo.toml index 68a1401..d8e30d6 100644 --- a/gql/Cargo.toml +++ b/gql/Cargo.toml @@ -10,8 +10,7 @@ anyhow = "1.0.33" arrayvec = { version = "0.7", features = ["serde"] } async-graphql = { version = "2.8", features = ["log"] } async-trait = "0.1.41" -dubp = { version = "0.54.1", features = ["duniter"] } -duniter-bca-types = { path = "../bca/types" } +dubp = { version = "0.55.1", features = ["duniter"] } duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } duniter-gva-db = { path = "../db" } duniter-gva-dbs-reader = { path = "../dbs-reader" } diff --git a/gql/src/entities/network.rs b/gql/src/entities/network.rs index 094821c..7f532a7 100644 --- a/gql/src/entities/network.rs +++ b/gql/src/entities/network.rs @@ -28,16 +28,16 @@ pub struct PeerCardGva { pub member: bool, } impl From for PeerCardGva { - fn from(peer: duniter_core::dbs::PeerCardDbV1) -> Self { + fn from(peer_db: duniter_core::dbs::PeerCardDbV1) -> Self { Self { - version: peer.version, - currency: peer.currency, - pubkey: peer.pubkey.to_base58(), - blockstamp: peer.blockstamp.to_string(), - endpoints: peer.endpoints, - status: if peer.status { "UP" } else { "DOWN" }.to_owned(), - signature: peer.signature.to_base64(), - member: peer.member, + version: 10, + currency: peer_db.peer.currency, + pubkey: peer_db.peer.pubkey.to_base58(), + blockstamp: peer_db.peer.blockstamp.to_string(), + endpoints: peer_db.peer.endpoints.to_vec(), + status: if peer_db.status { "UP" } else { "DOWN" }.to_owned(), + signature: peer_db.peer.signature.to_base64(), + member: peer_db.member, } } } diff --git a/gql/src/lib.rs b/gql/src/lib.rs index edb2e45..6948264 100644 --- a/gql/src/lib.rs +++ b/gql/src/lib.rs @@ -54,6 +54,7 @@ use crate::tests::AsyncAccessor; use crate::tests::DbsReaderImpl; use async_graphql::connection::{Connection, Edge, EmptyFields}; use async_graphql::validators::{IntGreaterThan, IntRange, ListMaxLength, ListMinLength}; +use dubp::bda_types::MAX_FIRST_UTXOS; use dubp::common::crypto::keys::{ed25519::PublicKey, PublicKey as _}; use dubp::common::prelude::*; use dubp::crypto::hashs::Hash; @@ -61,7 +62,6 @@ use dubp::documents::prelude::*; use dubp::documents::transaction::{TransactionDocumentTrait, TransactionDocumentV10}; use dubp::documents_parser::prelude::*; use dubp::wallet::prelude::*; -use duniter_bca_types::MAX_FIRST_UTXOS; use duniter_core::dbs::databases::txs_mp_v2::TxsMpV2DbReadable; use duniter_core::dbs::prelude::*; use duniter_core::dbs::{kv_typed::prelude::*, FileBackend}; diff --git a/indexer/Cargo.toml b/indexer/Cargo.toml index 6b15dbc..f6bc0f7 100644 --- a/indexer/Cargo.toml +++ b/indexer/Cargo.toml @@ -17,7 +17,7 @@ bincode = "1.3" duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" } duniter-gva-db = { path = "../db" } duniter-gva-dbs-reader = { path = "../dbs-reader" } -dubp = { version = "0.54.1", features = ["duniter"] } +dubp = { version = "0.55.1", features = ["duniter"] } flate2 = { version = "1.0", features = ["zlib-ng-compat"], default-features = false } log = "0.4" once_cell = "1.7" diff --git a/src/lib.rs b/src/lib.rs index 3d57c50..f6d1b27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -243,9 +243,9 @@ impl GvaModule { ) { log::info!("GvaServer::start: conf={:?}", conf); - // Create BcaExecutor and GvaSchema + // Create BdaExecutor and GvaSchema let self_pubkey = self_keypair.public_key(); - duniter_bca::set_bca_executor( + duniter_bda::set_bda_executor( currency.clone(), AsyncAccessor::new(), dbs_pool.clone(), diff --git a/src/warp_.rs b/src/warp_.rs index 92ddd61..bcde9d5 100644 --- a/src/warp_.rs +++ b/src/warp_.rs @@ -228,7 +228,7 @@ async fn process_bincode_batch_queries( is_whitelisted: bool, ) -> Result { Ok(ServerResponse::Bincode( - duniter_bca::execute(body_reader, is_whitelisted).await, + duniter_bda::execute(body_reader, is_whitelisted).await, )) }