From 0b2d3f68d713e959e197beb5ce0cbbf053f7caf1 Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:17:06 +0200 Subject: [PATCH 1/9] Bump bitflags to 2.4.0 --- Cargo.lock | 24 +++++++++++++++---- .../minotari_console_wallet/Cargo.toml | 2 +- base_layer/core/Cargo.toml | 3 ++- comms/core/Cargo.toml | 3 ++- comms/dht/Cargo.toml | 3 ++- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 05ef979dc0..f2f19be3ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -441,6 +441,19 @@ name = "bitflags" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags-serde-legacy" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b64e60c28b6d25ad92e8b367801ff9aa12b41d05fc8798055d296bace4a60cc" +dependencies = [ + "bitflags 2.4.0", + "serde", +] [[package]] name = "bitstring" @@ -3084,7 +3097,7 @@ dependencies = [ name = "minotari_console_wallet" version = "0.52.0-pre.1" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "blake2", "chrono", "clap 3.2.25", @@ -5508,7 +5521,8 @@ version = "0.52.0-pre.1" dependencies = [ "anyhow", "async-trait", - "bitflags 1.3.2", + "bitflags 2.4.0", + "bitflags-serde-legacy", "blake2", "bytes 1.4.0", "chrono", @@ -5557,7 +5571,8 @@ name = "tari_comms_dht" version = "0.52.0-pre.1" dependencies = [ "anyhow", - "bitflags 1.3.2", + "bitflags 2.4.0", + "bitflags-serde-legacy", "chacha20 0.7.3", "chacha20poly1305 0.10.1", "chrono", @@ -5650,7 +5665,8 @@ version = "0.52.0-pre.1" dependencies = [ "async-trait", "bincode", - "bitflags 1.3.2", + "bitflags 2.4.0", + "bitflags-serde-legacy", "blake2", "borsh", "bytes 0.5.6", diff --git a/applications/minotari_console_wallet/Cargo.toml b/applications/minotari_console_wallet/Cargo.toml index c657a98338..15ff22dd4a 100644 --- a/applications/minotari_console_wallet/Cargo.toml +++ b/applications/minotari_console_wallet/Cargo.toml @@ -28,7 +28,7 @@ console-subscriber = "0.1.8" # Uncomment for normal use (non tokio-console tracing) tokio = { version = "1.23", features = ["signal"] } -bitflags = "1.3.2" +bitflags = { version = "2.4.0", features = ["serde"] } chrono = { version = "0.4.19", default-features = false } clap = { version = "3.2", features = ["derive", "env"] } config = "0.13.0" diff --git a/base_layer/core/Cargo.toml b/base_layer/core/Cargo.toml index dfa0e43730..361a269436 100644 --- a/base_layer/core/Cargo.toml +++ b/base_layer/core/Cargo.toml @@ -38,7 +38,8 @@ tari_common_sqlite = { path = "../../common_sqlite" } async-trait = {version = "0.1.50"} bincode = "1.1.4" -bitflags = "1" +bitflags = { version = "2.4.0", features = ["serde"] } +bitflags-serde-legacy = "0.1.1" blake2 = "0.10" borsh = { version = "0.10", features = ["const-generics"] } bytes = "0.5" diff --git a/comms/core/Cargo.toml b/comms/core/Cargo.toml index 969aa04ee8..77ab657de2 100644 --- a/comms/core/Cargo.toml +++ b/comms/core/Cargo.toml @@ -18,7 +18,8 @@ tari_utilities = { version = "0.5" } anyhow = "1.0.53" async-trait = "0.1.36" -bitflags = "1" +bitflags = { version = "2.4.0", features = ["serde"] } +bitflags-serde-legacy = "0.1.1" blake2 = "0.10" bytes = { version = "1", features = ["serde"] } chrono = { version = "0.4.19", default-features = false, features = ["serde", "clock"] } diff --git a/comms/dht/Cargo.toml b/comms/dht/Cargo.toml index e7f0fae427..58c2900c1f 100644 --- a/comms/dht/Cargo.toml +++ b/comms/dht/Cargo.toml @@ -20,7 +20,8 @@ tari_storage = { path = "../../infrastructure/storage" } tari_common_sqlite = { path = "../../common_sqlite" } anyhow = "1.0.53" -bitflags = "1" +bitflags = { version = "2.4.0", features = ["serde"] } +bitflags-serde-legacy = "0.1.1" chacha20 = "0.7.1" chacha20poly1305 = "0.10.1" chrono = { version = "0.4.19", default-features = false } From 88e754fd95c59ed5031981a23947177cc2538f43 Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:20:51 +0200 Subject: [PATCH 2/9] Add explicit derivations as bitflags no longer does --- applications/minotari_console_wallet/src/ui/state/app_state.rs | 1 + .../src/transactions/transaction_components/kernel_features.rs | 2 +- comms/core/src/peer_manager/peer.rs | 2 +- comms/core/src/peer_manager/peer_features.rs | 3 +-- comms/core/src/protocol/negotiation.rs | 1 + comms/core/src/protocol/rpc/message.rs | 1 + comms/dht/src/envelope.rs | 2 +- 7 files changed, 7 insertions(+), 5 deletions(-) diff --git a/applications/minotari_console_wallet/src/ui/state/app_state.rs b/applications/minotari_console_wallet/src/ui/state/app_state.rs index 55eec71c64..823b0f25de 100644 --- a/applications/minotari_console_wallet/src/ui/state/app_state.rs +++ b/applications/minotari_console_wallet/src/ui/state/app_state.rs @@ -1345,6 +1345,7 @@ pub enum UiTransactionBurnStatus { } bitflags! { + #[derive(Clone)] pub struct TransactionFilter: u8 { const NONE = 0b0000_0000; const ABANDONED_COINBASES = 0b0000_0001; diff --git a/base_layer/core/src/transactions/transaction_components/kernel_features.rs b/base_layer/core/src/transactions/transaction_components/kernel_features.rs index 80916f907b..d2095d7f9e 100644 --- a/base_layer/core/src/transactions/transaction_components/kernel_features.rs +++ b/base_layer/core/src/transactions/transaction_components/kernel_features.rs @@ -25,7 +25,7 @@ use serde::{Deserialize, Serialize}; bitflags! { /// Options for a kernel's structure or use. - #[derive(Deserialize, Serialize, BorshSerialize, BorshDeserialize)] + #[derive(Deserialize, Serialize, BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Eq, PartialEq)] pub struct KernelFeatures: u8 { /// Coinbase transaction const COINBASE_KERNEL = 1u8; diff --git a/comms/core/src/peer_manager/peer.rs b/comms/core/src/peer_manager/peer.rs index a7ab165a42..3ec13afe13 100644 --- a/comms/core/src/peer_manager/peer.rs +++ b/comms/core/src/peer_manager/peer.rs @@ -49,7 +49,7 @@ use crate::{ bitflags! { /// Miscellaneous Peer flags - #[derive(Default, Deserialize, Serialize)] + #[derive(Default, Deserialize, Serialize, Eq, PartialEq, Debug, Clone, Copy)] pub struct PeerFlags: u8 { const NONE = 0x00; const SEED = 0x01; diff --git a/comms/core/src/peer_manager/peer_features.rs b/comms/core/src/peer_manager/peer_features.rs index 70bff86df4..e6483814eb 100644 --- a/comms/core/src/peer_manager/peer_features.rs +++ b/comms/core/src/peer_manager/peer_features.rs @@ -23,11 +23,10 @@ use std::fmt; use bitflags::bitflags; -use serde::{Deserialize, Serialize}; bitflags! { /// Peer feature flags. These advertised the capabilities of peer nodes. - #[derive(Serialize, Deserialize)] + #[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, PartialEq)] pub struct PeerFeatures: u32 { /// No capabilities const NONE = 0b0000_0000; diff --git a/comms/core/src/protocol/negotiation.rs b/comms/core/src/protocol/negotiation.rs index a5a85294b2..141002487f 100644 --- a/comms/core/src/protocol/negotiation.rs +++ b/comms/core/src/protocol/negotiation.rs @@ -63,6 +63,7 @@ pub struct ProtocolNegotiation<'a, TSocket> { } bitflags! { + #[derive(Debug)] struct Flags: u8 { const NONE = 0x00; const OPTIMISTIC = 0x01; diff --git a/comms/core/src/protocol/rpc/message.rs b/comms/core/src/protocol/rpc/message.rs index b701c89d1a..4722b1e065 100644 --- a/comms/core/src/protocol/rpc/message.rs +++ b/comms/core/src/protocol/rpc/message.rs @@ -196,6 +196,7 @@ impl Into for RpcMethod { } bitflags! { + #[derive(Debug, Clone, Copy)] pub struct RpcMessageFlags: u8 { /// Message stream has completed const FIN = 0x01; diff --git a/comms/dht/src/envelope.rs b/comms/dht/src/envelope.rs index 28c87e5be1..e14162b245 100644 --- a/comms/dht/src/envelope.rs +++ b/comms/dht/src/envelope.rs @@ -100,7 +100,7 @@ impl fmt::Display for DhtMessageType { bitflags! { /// Used to indicate characteristics of the incoming or outgoing message, such /// as whether the message is encrypted. - #[derive(Deserialize, Serialize, Default)] + #[derive(Deserialize, Serialize, Default, Copy, Clone, Debug, Eq, PartialEq)] pub struct DhtMessageFlags: u32 { const NONE = 0x00; /// Set if the message is encrypted From e861e1c5e5c3cc049ae2e3ec3c676d98e6f06abd Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:21:40 +0200 Subject: [PATCH 3/9] Update interface usage --- comms/core/src/peer_manager/peer_features.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/comms/core/src/peer_manager/peer_features.rs b/comms/core/src/peer_manager/peer_features.rs index e6483814eb..e19ee6c26a 100644 --- a/comms/core/src/peer_manager/peer_features.rs +++ b/comms/core/src/peer_manager/peer_features.rs @@ -36,9 +36,9 @@ bitflags! { const DHT_STORE_FORWARD = 0b0000_0010; /// Node is a communication node (typically a base layer node) - const COMMUNICATION_NODE = Self::MESSAGE_PROPAGATION.bits | Self::DHT_STORE_FORWARD.bits; + const COMMUNICATION_NODE = Self::MESSAGE_PROPAGATION.bits() | Self::DHT_STORE_FORWARD.bits(); /// Node is a network client - const COMMUNICATION_CLIENT = Self::NONE.bits; + const COMMUNICATION_CLIENT = Self::NONE.bits(); } } From 1a44de6eef07c72228214e583496a10760c6fd4c Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:22:13 +0200 Subject: [PATCH 4/9] Use legacy serde formatters --- comms/core/src/peer_manager/peer.rs | 14 +++++++++++++- comms/core/src/peer_manager/peer_features.rs | 14 +++++++++++++- comms/dht/src/envelope.rs | 15 +++++++++++++-- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/comms/core/src/peer_manager/peer.rs b/comms/core/src/peer_manager/peer.rs index 3ec13afe13..2c92f18348 100644 --- a/comms/core/src/peer_manager/peer.rs +++ b/comms/core/src/peer_manager/peer.rs @@ -49,13 +49,25 @@ use crate::{ bitflags! { /// Miscellaneous Peer flags - #[derive(Default, Deserialize, Serialize, Eq, PartialEq, Debug, Clone, Copy)] + #[derive(Default, Eq, PartialEq, Debug, Clone, Copy)] pub struct PeerFlags: u8 { const NONE = 0x00; const SEED = 0x01; } } +impl serde::Serialize for PeerFlags { + fn serialize(&self, serializer: S) -> Result { + bitflags_serde_legacy::serialize(self, "Flags", serializer) + } +} + +impl<'de> serde::Deserialize<'de> for PeerFlags { + fn deserialize>(deserializer: D) -> Result { + bitflags_serde_legacy::deserialize("Flags", deserializer) + } +} + /// A Peer represents a communication peer that is identified by a Public Key and NodeId. The Peer struct maintains a /// collection of the NetAddressesWithStats that this Peer can be reached by. The struct also maintains a set of flags /// describing the status of the Peer. diff --git a/comms/core/src/peer_manager/peer_features.rs b/comms/core/src/peer_manager/peer_features.rs index e19ee6c26a..fb7c65371b 100644 --- a/comms/core/src/peer_manager/peer_features.rs +++ b/comms/core/src/peer_manager/peer_features.rs @@ -26,7 +26,7 @@ use bitflags::bitflags; bitflags! { /// Peer feature flags. These advertised the capabilities of peer nodes. - #[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, PartialEq)] + #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub struct PeerFeatures: u32 { /// No capabilities const NONE = 0b0000_0000; @@ -42,6 +42,18 @@ bitflags! { } } +impl serde::Serialize for PeerFeatures { + fn serialize(&self, serializer: S) -> Result { + bitflags_serde_legacy::serialize(self, "Flags", serializer) + } +} + +impl<'de> serde::Deserialize<'de> for PeerFeatures { + fn deserialize>(deserializer: D) -> Result { + bitflags_serde_legacy::deserialize("Flags", deserializer) + } +} + impl PeerFeatures { /// Returns true if these flags represent a COMMUNICATION_CLIENT. #[inline] diff --git a/comms/dht/src/envelope.rs b/comms/dht/src/envelope.rs index e14162b245..1b6c2403c0 100644 --- a/comms/dht/src/envelope.rs +++ b/comms/dht/src/envelope.rs @@ -30,7 +30,6 @@ use std::{ use bitflags::bitflags; use chrono::{DateTime, NaiveDateTime, Utc}; use prost_types::Timestamp; -use serde::{Deserialize, Serialize}; use tari_comms::{message::MessageTag, peer_manager::NodeId, types::CommsPublicKey, NodeIdentity}; use tari_utilities::{epoch_time::EpochTime, ByteArray, ByteArrayError}; use thiserror::Error; @@ -100,7 +99,7 @@ impl fmt::Display for DhtMessageType { bitflags! { /// Used to indicate characteristics of the incoming or outgoing message, such /// as whether the message is encrypted. - #[derive(Deserialize, Serialize, Default, Copy, Clone, Debug, Eq, PartialEq)] + #[derive(Default, Copy, Clone, Debug, Eq, PartialEq)] pub struct DhtMessageFlags: u32 { const NONE = 0x00; /// Set if the message is encrypted @@ -108,6 +107,18 @@ bitflags! { } } +impl serde::Serialize for DhtMessageFlags { + fn serialize(&self, serializer: S) -> Result { + bitflags_serde_legacy::serialize(self, "Flags", serializer) + } +} + +impl<'de> serde::Deserialize<'de> for DhtMessageFlags { + fn deserialize>(deserializer: D) -> Result { + bitflags_serde_legacy::deserialize("Flags", deserializer) + } +} + impl DhtMessageFlags { pub fn is_encrypted(self) -> bool { self.contains(Self::ENCRYPTED) From d7e1dfdeb8b71d45226b97605c893d1f4813b045 Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:22:24 +0200 Subject: [PATCH 5/9] Support borsh serialization bitflags uses an internal structure that can't be serialized by borsh. This format of creating the struct and using the bitflags trait is the recommended format for supporting not supported serializers. --- .../transaction_components/kernel_features.rs | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/base_layer/core/src/transactions/transaction_components/kernel_features.rs b/base_layer/core/src/transactions/transaction_components/kernel_features.rs index d2095d7f9e..19f1c165ce 100644 --- a/base_layer/core/src/transactions/transaction_components/kernel_features.rs +++ b/base_layer/core/src/transactions/transaction_components/kernel_features.rs @@ -21,12 +21,13 @@ // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. use borsh::{BorshDeserialize, BorshSerialize}; -use serde::{Deserialize, Serialize}; + +/// Options for a kernel's structure or use. +#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Eq, PartialEq)] +pub struct KernelFeatures(u8); bitflags! { - /// Options for a kernel's structure or use. - #[derive(Deserialize, Serialize, BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Eq, PartialEq)] - pub struct KernelFeatures: u8 { + impl KernelFeatures: u8 { /// Coinbase transaction const COINBASE_KERNEL = 1u8; /// Burned output transaction @@ -34,6 +35,18 @@ bitflags! { } } +impl serde::Serialize for KernelFeatures { + fn serialize(&self, serializer: S) -> Result { + bitflags_serde_legacy::serialize(self, "Flags", serializer) + } +} + +impl<'de> serde::Deserialize<'de> for KernelFeatures { + fn deserialize>(deserializer: D) -> Result { + bitflags_serde_legacy::deserialize("Flags", deserializer) + } +} + impl KernelFeatures { /// Creates a coinbase kernel flag pub fn create_coinbase() -> KernelFeatures { From cb421828777c2651cb5a49ed96d4931144e63a31 Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 12:27:47 +0200 Subject: [PATCH 6/9] Revert "Use legacy serde formatters" Upgrade to the new format. This reverts commit 1a44de6eef07c72228214e583496a10760c6fd4c. With a bit extra ammended into it... --- Cargo.lock | 13 ------------- base_layer/core/Cargo.toml | 1 - .../transaction_components/kernel_features.rs | 15 ++------------- comms/core/Cargo.toml | 1 - comms/core/src/peer_manager/peer.rs | 14 +------------- comms/core/src/peer_manager/peer_features.rs | 15 ++------------- comms/dht/Cargo.toml | 1 - comms/dht/src/envelope.rs | 15 ++------------- 8 files changed, 7 insertions(+), 68 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2f19be3ea..513a18f56c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -445,16 +445,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitflags-serde-legacy" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b64e60c28b6d25ad92e8b367801ff9aa12b41d05fc8798055d296bace4a60cc" -dependencies = [ - "bitflags 2.4.0", - "serde", -] - [[package]] name = "bitstring" version = "0.1.2" @@ -5522,7 +5512,6 @@ dependencies = [ "anyhow", "async-trait", "bitflags 2.4.0", - "bitflags-serde-legacy", "blake2", "bytes 1.4.0", "chrono", @@ -5572,7 +5561,6 @@ version = "0.52.0-pre.1" dependencies = [ "anyhow", "bitflags 2.4.0", - "bitflags-serde-legacy", "chacha20 0.7.3", "chacha20poly1305 0.10.1", "chrono", @@ -5666,7 +5654,6 @@ dependencies = [ "async-trait", "bincode", "bitflags 2.4.0", - "bitflags-serde-legacy", "blake2", "borsh", "bytes 0.5.6", diff --git a/base_layer/core/Cargo.toml b/base_layer/core/Cargo.toml index 361a269436..e7c7f02b0e 100644 --- a/base_layer/core/Cargo.toml +++ b/base_layer/core/Cargo.toml @@ -39,7 +39,6 @@ tari_common_sqlite = { path = "../../common_sqlite" } async-trait = {version = "0.1.50"} bincode = "1.1.4" bitflags = { version = "2.4.0", features = ["serde"] } -bitflags-serde-legacy = "0.1.1" blake2 = "0.10" borsh = { version = "0.10", features = ["const-generics"] } bytes = "0.5" diff --git a/base_layer/core/src/transactions/transaction_components/kernel_features.rs b/base_layer/core/src/transactions/transaction_components/kernel_features.rs index 19f1c165ce..099a07a056 100644 --- a/base_layer/core/src/transactions/transaction_components/kernel_features.rs +++ b/base_layer/core/src/transactions/transaction_components/kernel_features.rs @@ -21,9 +21,10 @@ // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. use borsh::{BorshDeserialize, BorshSerialize}; +use serde::{Deserialize, Serialize}; /// Options for a kernel's structure or use. -#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Eq, PartialEq)] +#[derive(Serialize, Deserialize, BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Eq, PartialEq)] pub struct KernelFeatures(u8); bitflags! { @@ -35,18 +36,6 @@ bitflags! { } } -impl serde::Serialize for KernelFeatures { - fn serialize(&self, serializer: S) -> Result { - bitflags_serde_legacy::serialize(self, "Flags", serializer) - } -} - -impl<'de> serde::Deserialize<'de> for KernelFeatures { - fn deserialize>(deserializer: D) -> Result { - bitflags_serde_legacy::deserialize("Flags", deserializer) - } -} - impl KernelFeatures { /// Creates a coinbase kernel flag pub fn create_coinbase() -> KernelFeatures { diff --git a/comms/core/Cargo.toml b/comms/core/Cargo.toml index 77ab657de2..d9503fa444 100644 --- a/comms/core/Cargo.toml +++ b/comms/core/Cargo.toml @@ -19,7 +19,6 @@ tari_utilities = { version = "0.5" } anyhow = "1.0.53" async-trait = "0.1.36" bitflags = { version = "2.4.0", features = ["serde"] } -bitflags-serde-legacy = "0.1.1" blake2 = "0.10" bytes = { version = "1", features = ["serde"] } chrono = { version = "0.4.19", default-features = false, features = ["serde", "clock"] } diff --git a/comms/core/src/peer_manager/peer.rs b/comms/core/src/peer_manager/peer.rs index 2c92f18348..3ec13afe13 100644 --- a/comms/core/src/peer_manager/peer.rs +++ b/comms/core/src/peer_manager/peer.rs @@ -49,25 +49,13 @@ use crate::{ bitflags! { /// Miscellaneous Peer flags - #[derive(Default, Eq, PartialEq, Debug, Clone, Copy)] + #[derive(Default, Deserialize, Serialize, Eq, PartialEq, Debug, Clone, Copy)] pub struct PeerFlags: u8 { const NONE = 0x00; const SEED = 0x01; } } -impl serde::Serialize for PeerFlags { - fn serialize(&self, serializer: S) -> Result { - bitflags_serde_legacy::serialize(self, "Flags", serializer) - } -} - -impl<'de> serde::Deserialize<'de> for PeerFlags { - fn deserialize>(deserializer: D) -> Result { - bitflags_serde_legacy::deserialize("Flags", deserializer) - } -} - /// A Peer represents a communication peer that is identified by a Public Key and NodeId. The Peer struct maintains a /// collection of the NetAddressesWithStats that this Peer can be reached by. The struct also maintains a set of flags /// describing the status of the Peer. diff --git a/comms/core/src/peer_manager/peer_features.rs b/comms/core/src/peer_manager/peer_features.rs index fb7c65371b..7be09dca02 100644 --- a/comms/core/src/peer_manager/peer_features.rs +++ b/comms/core/src/peer_manager/peer_features.rs @@ -23,10 +23,11 @@ use std::fmt; use bitflags::bitflags; +use serde::{Deserialize, Serialize}; bitflags! { /// Peer feature flags. These advertised the capabilities of peer nodes. - #[derive(Clone, Copy, Debug, Eq, PartialEq)] + #[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, PartialEq)] pub struct PeerFeatures: u32 { /// No capabilities const NONE = 0b0000_0000; @@ -42,18 +43,6 @@ bitflags! { } } -impl serde::Serialize for PeerFeatures { - fn serialize(&self, serializer: S) -> Result { - bitflags_serde_legacy::serialize(self, "Flags", serializer) - } -} - -impl<'de> serde::Deserialize<'de> for PeerFeatures { - fn deserialize>(deserializer: D) -> Result { - bitflags_serde_legacy::deserialize("Flags", deserializer) - } -} - impl PeerFeatures { /// Returns true if these flags represent a COMMUNICATION_CLIENT. #[inline] diff --git a/comms/dht/Cargo.toml b/comms/dht/Cargo.toml index 58c2900c1f..286ef37ed6 100644 --- a/comms/dht/Cargo.toml +++ b/comms/dht/Cargo.toml @@ -21,7 +21,6 @@ tari_common_sqlite = { path = "../../common_sqlite" } anyhow = "1.0.53" bitflags = { version = "2.4.0", features = ["serde"] } -bitflags-serde-legacy = "0.1.1" chacha20 = "0.7.1" chacha20poly1305 = "0.10.1" chrono = { version = "0.4.19", default-features = false } diff --git a/comms/dht/src/envelope.rs b/comms/dht/src/envelope.rs index 1b6c2403c0..e14162b245 100644 --- a/comms/dht/src/envelope.rs +++ b/comms/dht/src/envelope.rs @@ -30,6 +30,7 @@ use std::{ use bitflags::bitflags; use chrono::{DateTime, NaiveDateTime, Utc}; use prost_types::Timestamp; +use serde::{Deserialize, Serialize}; use tari_comms::{message::MessageTag, peer_manager::NodeId, types::CommsPublicKey, NodeIdentity}; use tari_utilities::{epoch_time::EpochTime, ByteArray, ByteArrayError}; use thiserror::Error; @@ -99,7 +100,7 @@ impl fmt::Display for DhtMessageType { bitflags! { /// Used to indicate characteristics of the incoming or outgoing message, such /// as whether the message is encrypted. - #[derive(Default, Copy, Clone, Debug, Eq, PartialEq)] + #[derive(Deserialize, Serialize, Default, Copy, Clone, Debug, Eq, PartialEq)] pub struct DhtMessageFlags: u32 { const NONE = 0x00; /// Set if the message is encrypted @@ -107,18 +108,6 @@ bitflags! { } } -impl serde::Serialize for DhtMessageFlags { - fn serialize(&self, serializer: S) -> Result { - bitflags_serde_legacy::serialize(self, "Flags", serializer) - } -} - -impl<'de> serde::Deserialize<'de> for DhtMessageFlags { - fn deserialize>(deserializer: D) -> Result { - bitflags_serde_legacy::deserialize("Flags", deserializer) - } -} - impl DhtMessageFlags { pub fn is_encrypted(self) -> bool { self.contains(Self::ENCRYPTED) From fee1c8db1beac881e12d705215ee29249606294f Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 15:32:48 +0200 Subject: [PATCH 7/9] Update kenrnel format in faucets --- base_layer/core/src/blocks/faucets/esmeralda_faucet.json | 2 +- base_layer/core/src/blocks/faucets/igor_faucet.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/base_layer/core/src/blocks/faucets/esmeralda_faucet.json b/base_layer/core/src/blocks/faucets/esmeralda_faucet.json index 812e54348e..cf73781e62 100644 --- a/base_layer/core/src/blocks/faucets/esmeralda_faucet.json +++ b/base_layer/core/src/blocks/faucets/esmeralda_faucet.json @@ -453,4 +453,4 @@ {"version":"V0","features":{"version":"V0","output_type":0,"maturity":3558240,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"2c3dcafffc9a79dc10f6384d83519ba6b573acd4b03bad7dbb186166737fe851","proof":null,"script":"73","sender_offset_public_key":"ecc5a231ca6f0f14212d35cf91ca6ff5209396fa21f704ad9e2a127c33a04504","metadata_signature":{"ephemeral_commitment":"064193cf5831b2c35ba47230a3e3193e8878fc941b7d5cc48ef7b666d246ac6d","ephemeral_pubkey":"64779a975a3c07260a2d9cf8720852001e24de02f2dfea8b3de070e7b815e445","u_a":"082cddc87ad4086903383abad7cfb78b92a4b98b78c53bc4749ed122d431e50d","u_x":"329491fc8451e899b13d3eac400e304270b9712761d166603bea517ac6114100","u_y":"bd97658e77dcb35b0af01473abc0fa02ceb077083e4407b78645589b28f7d80e"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":1067769369090} {"version":"V0","features":{"version":"V0","output_type":0,"maturity":3568320,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"8cfc7c799721948ebbafbe8a7c386b43a72c02437191101090f16b2b98abc12c","proof":null,"script":"73","sender_offset_public_key":"d4f0710d42a72f5137b37d249bd9332fac41d0feef921a2646ffc1b318fcfc55","metadata_signature":{"ephemeral_commitment":"8acf637ed7bfbd8f6485a8fd1fc5deb67057aee73334b18b0fb9697162b0fb62","ephemeral_pubkey":"a81f809b36076379c61e5b75452854ae953ce56bf9649dc511e7cd15adc7262a","u_a":"6831907ab5355a0574451af3fbcab837477abaa97284a27bee6c034cee2aa909","u_x":"b2d7250e3ca94807dafab8fb0df35294fe3d25d0371b214733d2b6833aa76d03","u_y":"e0b4c7a236ad800f29de5a2dc7b6715c71eb41111e18be2eebe5a9999a296a09"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":1058372253648} {"version":"V0","features":{"version":"V0","output_type":0,"maturity":3574176,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"885306808c95dc65708bb406f3124f5a374d00a3f6111f6c5a26147be285d806","proof":null,"script":"73","sender_offset_public_key":"cc8cb1c24250ec490c577374bd1c7651aab9454ff982bed90c3ccfb426411f2d","metadata_signature":{"ephemeral_commitment":"faa2adb0cb7b50dcb67a0d870b628654969c4964365122dc585e1f0995b35810","ephemeral_pubkey":"629a1b26f1d5692da25868cd2d6eeb2f057e3dadd01ff7510475f1aecf048f07","u_a":"dc36aa0ae126630423b3096bb97efd42d9c9f951fac43ee8618965072dd22c07","u_x":"c9920aed9752b28fd344a8e3508de575e14722d655d3bb059667b4d11c86e204","u_y":"20d175e6da0fbccdb338cae156908abe055637aa01375fb22cedcde4d75e6703"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":610482446047} -{"version":"V0","features":{"bits":0},"fee":0,"lock_height":0,"excess":"ea6d44e2e369bec0c41bc23ebb3b7a9e1b06ad33b3a288e461a2fd229eb60122","excess_sig":{"public_nonce":"ea7f16718149ca831535b9109d0014c4f14ec6af59a5ebb7fed0c943c2cc1853","signature":"493edf49b9c1de9ebd6e1fa03c076260682c7767c9c9b5934f97ec8ff6513100"},"burn_commitment":null} +{"version":"V0","features":0,"fee":0,"lock_height":0,"excess":"ea6d44e2e369bec0c41bc23ebb3b7a9e1b06ad33b3a288e461a2fd229eb60122","excess_sig":{"public_nonce":"ea7f16718149ca831535b9109d0014c4f14ec6af59a5ebb7fed0c943c2cc1853","signature":"493edf49b9c1de9ebd6e1fa03c076260682c7767c9c9b5934f97ec8ff6513100"},"burn_commitment":null} diff --git a/base_layer/core/src/blocks/faucets/igor_faucet.json b/base_layer/core/src/blocks/faucets/igor_faucet.json index 25e6b97ed1..a5dcdd0eae 100644 --- a/base_layer/core/src/blocks/faucets/igor_faucet.json +++ b/base_layer/core/src/blocks/faucets/igor_faucet.json @@ -5524,4 +5524,4 @@ {"version":"V0","features":{"version":"V0","output_type":0,"maturity":11081144,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"36ce6daabb0c724a25a448a28259d88ded75414a033ce0137c99acab5f033773","proof":null,"script":"73","sender_offset_public_key":"e0ee3b5f210fe858b5b5c088938b9c4b67bd265e3019836e1155abc133c3ff20","metadata_signature":{"ephemeral_commitment":"24e12529821d207d5aefe0b78e5d26e058555f07cef39be82b669b9ec8151d21","ephemeral_pubkey":"4c862f60bd8d92b72426784ed35666ac14a288d4b3a9a020fe6316399a7af14f","u_a":"5e37d07ac483f3beaf8259bcce1367c48d4ee5f905446a7fe364419984d2c301","u_x":"ae5918a416392930323764c67a08f223b2c85dca1609a8269e76e21cdfce3a0a","u_y":"dbd906f08bc6ef50d15eac666d841015d611955330821416ef0711b1040f170d"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":1054066742} {"version":"V0","features":{"version":"V0","output_type":0,"maturity":11083150,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"a254a0a59d30f8b1abde585a95103fda75a606e91bef66297528a5d6d1b0d301","proof":null,"script":"73","sender_offset_public_key":"b83923e9d6a0a4279232e4c2177baa99c2af1a0e3015b6559a950040ba296124","metadata_signature":{"ephemeral_commitment":"0c8d3c501de829d1e5a91c8e801ddb31344fc23b3611e657b0ffee4256996c55","ephemeral_pubkey":"963aec71faf233eed8db74bfb2196f0ba18899a0f59f2abba8bc38a08ab0fe2b","u_a":"aba654b0b8a6246847c1f45f79d45339697caea32f8780e6a80c953e5a45db05","u_x":"f750ccbdeaf4a5efc69b81048c23bb3586c33b317a30231405327a4f047bc40e","u_y":"691fbb99393d30a4c7271501dd3edce5a2304a5ff93221f7827efd745f22da04"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":1053060734} {"version":"V0","features":{"version":"V0","output_type":0,"maturity":11084819,"coinbase_extra":[],"sidechain_feature":null,"range_proof_type":"RevealedValue"},"commitment":"b2467bab3f68c868c086cda08657bf74f959b53dc850b1ddfa902149ee01a857","proof":null,"script":"73","sender_offset_public_key":"1a5699ea448bdec8ab14df106892c8b59e23bcb08a0de35ab933f9cc04a66260","metadata_signature":{"ephemeral_commitment":"5ae908c58cef55c9b9c5e146e8c79dfcb2a7d1932d2d55af87cee1ca65954174","ephemeral_pubkey":"78438373e9cd7f5630e5475cc300a73a000e00fbf68b67072821b474a0af1d60","u_a":"03492fb6286f5ca19f8a496002883407ec880b191a33c90a2fb6a74c21784209","u_x":"60b8b6f13b5924b9b296b4fc903fe62ca1df4fcb5d7fbc2b8f62d94e0832df0b","u_y":"fe55c8a399ee5633abf84dda04c63ecd0cb37ed3ae3d4a5963f991870d426205"},"covenant":"","encrypted_data":{"data":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"minimum_value_promise":874859744} -{"version":"V0","features":{"bits":0},"fee":0,"lock_height":0,"excess":"32a0bb0088f6d8d454a1863ccdef0be227c58f4102d97107797cfba8e4ace978","excess_sig":{"public_nonce":"ecf229e5e4422e32def4ba8fcbab6c42c0d9a526707af5b0d6ec316e7b1c4a18","signature":"957a5fa257d56c58d053d7c6cb5d2704e5b5f4b80e196d359ed6f93f8183050c"},"burn_commitment":null} +{"version":"V0","features":0,"fee":0,"lock_height":0,"excess":"32a0bb0088f6d8d454a1863ccdef0be227c58f4102d97107797cfba8e4ace978","excess_sig":{"public_nonce":"ecf229e5e4422e32def4ba8fcbab6c42c0d9a526707af5b0d6ec316e7b1c4a18","signature":"957a5fa257d56c58d053d7c6cb5d2704e5b5f4b80e196d359ed6f93f8183050c"},"burn_commitment":null} From c23398953f3c3a2c0ba6b22505387e065889421a Mon Sep 17 00:00:00 2001 From: brianp Date: Wed, 4 Oct 2023 15:33:41 +0200 Subject: [PATCH 8/9] use the correct network --- base_layer/core/src/blocks/genesis_block.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_layer/core/src/blocks/genesis_block.rs b/base_layer/core/src/blocks/genesis_block.rs index 5d320a6ac6..95d9e516f5 100644 --- a/base_layer/core/src/blocks/genesis_block.rs +++ b/base_layer/core/src/blocks/genesis_block.rs @@ -479,7 +479,7 @@ mod test { let utxo_sum = block.block().body.outputs().iter().map(|o| &o.commitment).sum(); let kernel_sum = block.block().body.kernels().iter().map(|k| &k.excess).sum(); - let db = create_new_blockchain_with_network(Network::Igor); + let db = create_new_blockchain_with_network(network); let lock = db.db_read_access().unwrap(); ChainBalanceValidator::new(ConsensusManager::builder(network).build().unwrap(), Default::default()) From 166b460974cdffdf3adfe2973802bf73d97a3553 Mon Sep 17 00:00:00 2001 From: Brian Pearce Date: Fri, 6 Oct 2023 09:28:49 +0200 Subject: [PATCH 9/9] Apply suggestions from code review Co-authored-by: SW van Heerden --- applications/minotari_console_wallet/Cargo.toml | 2 +- base_layer/core/Cargo.toml | 2 +- comms/core/Cargo.toml | 2 +- comms/dht/Cargo.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/minotari_console_wallet/Cargo.toml b/applications/minotari_console_wallet/Cargo.toml index 15ff22dd4a..d995faad4f 100644 --- a/applications/minotari_console_wallet/Cargo.toml +++ b/applications/minotari_console_wallet/Cargo.toml @@ -28,7 +28,7 @@ console-subscriber = "0.1.8" # Uncomment for normal use (non tokio-console tracing) tokio = { version = "1.23", features = ["signal"] } -bitflags = { version = "2.4.0", features = ["serde"] } +bitflags = { version = "2.4", features = ["serde"] } chrono = { version = "0.4.19", default-features = false } clap = { version = "3.2", features = ["derive", "env"] } config = "0.13.0" diff --git a/base_layer/core/Cargo.toml b/base_layer/core/Cargo.toml index e7c7f02b0e..b9d212d1e8 100644 --- a/base_layer/core/Cargo.toml +++ b/base_layer/core/Cargo.toml @@ -38,7 +38,7 @@ tari_common_sqlite = { path = "../../common_sqlite" } async-trait = {version = "0.1.50"} bincode = "1.1.4" -bitflags = { version = "2.4.0", features = ["serde"] } +bitflags = { version = "2.4", features = ["serde"] } blake2 = "0.10" borsh = { version = "0.10", features = ["const-generics"] } bytes = "0.5" diff --git a/comms/core/Cargo.toml b/comms/core/Cargo.toml index d9503fa444..709ba3c021 100644 --- a/comms/core/Cargo.toml +++ b/comms/core/Cargo.toml @@ -18,7 +18,7 @@ tari_utilities = { version = "0.5" } anyhow = "1.0.53" async-trait = "0.1.36" -bitflags = { version = "2.4.0", features = ["serde"] } +bitflags = { version = "2.4", features = ["serde"] } blake2 = "0.10" bytes = { version = "1", features = ["serde"] } chrono = { version = "0.4.19", default-features = false, features = ["serde", "clock"] } diff --git a/comms/dht/Cargo.toml b/comms/dht/Cargo.toml index 286ef37ed6..6d0be4e336 100644 --- a/comms/dht/Cargo.toml +++ b/comms/dht/Cargo.toml @@ -20,7 +20,7 @@ tari_storage = { path = "../../infrastructure/storage" } tari_common_sqlite = { path = "../../common_sqlite" } anyhow = "1.0.53" -bitflags = { version = "2.4.0", features = ["serde"] } +bitflags = { version = "2.4", features = ["serde"] } chacha20 = "0.7.1" chacha20poly1305 = "0.10.1" chrono = { version = "0.4.19", default-features = false }