chore: rename bca->bda & externalize bda-types

This commit is contained in:
librelois 2021-05-20 00:36:03 +02:00
parent dc22ce63f9
commit 1b3c67f4e5
29 changed files with 237 additions and 468 deletions

97
Cargo.lock generated
View file

@ -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",

View file

@ -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",

View file

@ -1,20 +0,0 @@
[package]
name = "duniter-bca-types"
version = "0.1.0"
authors = ["librelois <elois@duniter.org>"]
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"]

View file

@ -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 <https://www.gnu.org/licenses/>.
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(),
)
}
}
}
}
}

View file

@ -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 <https://www.gnu.org/licenses/>.
use crate::*;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct Identity {
pub is_member: bool,
pub username: String,
}

View file

@ -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 <https://www.gnu.org/licenses/>.
#![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<PublicKey, 16>),
FirstUtxosOfPubkeys {
amount_target_opt: Option<Amount>,
pubkeys: ArrayVec<PublicKey, 16>,
},
LastBlockstampOutOfForkWindow,
MembersCount,
PrepareSimplePayment(PrepareSimplePayment),
ProofServerPubkey {
challenge: [u8; 16],
},
Ping,
SendTxs(Txs),
Identities(ArrayVec<PublicKey, 16>),
CurrentUd,
BalancesOfScripts(ArrayVec<WalletScriptV10, 16>),
}
// 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<Option<SourceAmount>, 16>),
FirstUtxosOfPubkeys(Vec<ArrayVec<Utxo, MAX_FIRST_UTXOS>>),
ProofServerPubkey {
challenge: [u8; 16],
server_pubkey: PublicKey,
sig: Signature,
},
LastBlockstampOutOfForkWindow(Blockstamp),
MembersCount(u64),
PrepareSimplePayment(PrepareSimplePaymentResp),
Pong,
RejectedTxs(Vec<rejected_tx::RejectedTx>),
Identities(ArrayVec<Option<Identity>, 16>),
CurrentUd(SourceAmount),
}
// Result and error
pub type BcaResult = Result<BcaResp, BcaReqExecError>;
#[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()
}

View file

@ -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 <https://www.gnu.org/licenses/>.
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<TransactionInputV10>,
pub inputs_sum: SourceAmount,
}

View file

@ -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 <https://www.gnu.org/licenses/>.
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,
}

View file

@ -1,5 +1,5 @@
[package]
name = "duniter-bca"
name = "duniter-bda"
version = "0.1.0"
authors = ["librelois <elois@duniter.org>"]
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" }

View file

@ -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<BcaRespTypeV0, ExecReqTypeError> {
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,
}
}

View file

@ -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<PublicKey, 16>,
) -> Result<BcaRespTypeV0, ExecReqTypeError> {
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<WalletScriptV10, 16>,
) -> Result<BcaRespTypeV0, ExecReqTypeError> {
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

View file

@ -16,9 +16,9 @@
use crate::*;
pub(super) async fn exec_req_current_ud(
bca_executor: &BcaExecutor,
bda_executor: &BdaExecutor,
) -> Result<BcaRespTypeV0, ExecReqTypeError> {
if let Some(current_ud) = bca_executor
if let Some(current_ud) = bda_executor
.cm_accessor
.get_current_meta(|cm| cm.current_ud)
.await

View file

@ -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<BcaRespTypeV0, ExecReqTypeError> {
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,

View file

@ -16,9 +16,9 @@
use crate::*;
pub(super) async fn exec_req_members_count(
bca_executor: &BcaExecutor,
bda_executor: &BdaExecutor,
) -> Result<BcaRespTypeV0, ExecReqTypeError> {
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)));
}

View file

@ -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<BcaRespTypeV0, ExecReqTypeError> {
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(),
))
}

View file

@ -14,20 +14,20 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
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<BcaRespTypeV0, ExecReqTypeError> {
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::<TxsMpV2Db<FileBackend>>()
.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::<TxsMpV2Db<FileBackend>>()
.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)),

View file

@ -14,20 +14,20 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
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<BcaRespTypeV0, ExecReqTypeError> {
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

View file

@ -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<Amount>,
pubkeys: ArrayVec<PublicKey, 16>,
) -> Result<BcaRespTypeV0, ExecReqTypeError> {
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<WalletScriptV10, 16> = 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??,

View file

@ -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<BcaExecutor> = OnceCell::new();
static BDA_EXECUTOR: OnceCell<BdaExecutor> = OnceCell::new();
pub fn set_bca_executor(
pub fn set_bda_executor(
currency: String,
cm_accessor: AsyncAccessor,
dbs_pool: fast_threadpool::ThreadPoolAsyncHandler<SharedDbs<FileBackend>>,
@ -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<Ok = B, Error = std::io::Error> + 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<SharedDbs<FileBackend>>,
@ -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<B, S>(&self, query_body_stream: S, is_whitelisted: bool) -> Vec<u8>
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<MockAsyncAccessor>;
pub type DbsReaderImpl = duniter_core::dbs::kv_typed::prelude::Arc<MockDbsReader>;
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<BcaExecutor> {
) -> KvResult<BdaExecutor> {
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::<u64>()
.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<Result<BcaResp, BcaReqExecError>> =
AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::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<Result<BcaResp, BcaReqExecError>> =
AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::from(&bytes_res[..])
@ -382,11 +382,11 @@ mod tests {
.expect_get_current_meta::<u64>()
.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<Result<BcaResp, BcaReqExecError>> =
AsyncBincodeReader::<_, Result<BcaResp, BcaReqExecError>>::from(&bytes_res[..])

View file

@ -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"] }

View file

@ -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"] }

View file

@ -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<Vec<BlockMetaV2>>;
fn get_some_peers<DB: 'static + NetworkV1DbReadable>(
&self,
dunp_db: &DB,
n: usize,
) -> KvResult<Vec<duniter_core::dbs::PeerCardDbV1>>;
fn get_txs_history_bc_received(
&self,
from: Option<u64>,
@ -281,6 +287,14 @@ impl DbsReader for DbsReaderImpl {
self.get_current_frame_(bc_db, current_block_meta)
}
fn get_some_peers<DB: 'static + NetworkV1DbReadable>(
&self,
dunp_db: &DB,
n: usize,
) -> KvResult<Vec<duniter_core::dbs::PeerCardDbV1>> {
self.get_some_peers_(dunp_db, n)
}
fn get_txs_history_bc_received(
&self,
from: Option<u64>,

View file

@ -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::<Result<Vec<String>, _>>()
})
}
pub(super) fn get_some_peers_<DB: NetworkV1DbReadable>(
&self,
dunp_db: &DB,
n: usize,
) -> KvResult<Vec<PeerCardDbV1>> {
let peers: Vec<PeerCardDbV1> = dunp_db
.peers_old()
.iter(.., |it| it.values().collect::<KvResult<_>>())?;
if n == 0 {
Ok(peers)
} else {
Ok(peers
.choose_multiple(&mut rand::thread_rng(), n)
.cloned()
.collect())
}
}
pub(super) fn peers_and_heads_<DB: NetworkV1DbReadable>(
&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![

View file

@ -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" }

View file

@ -28,16 +28,16 @@ pub struct PeerCardGva {
pub member: bool,
}
impl From<duniter_core::dbs::PeerCardDbV1> 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,
}
}
}

View file

@ -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};

View file

@ -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"

View file

@ -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(),

View file

@ -228,7 +228,7 @@ async fn process_bincode_batch_queries(
is_whitelisted: bool,
) -> Result<ServerResponse, warp::Rejection> {
Ok(ServerResponse::Bincode(
duniter_bca::execute(body_reader, is_whitelisted).await,
duniter_bda::execute(body_reader, is_whitelisted).await,
))
}