Skip to content

Commit 68e6581

Browse files
chore(platform): make bls sig compatibility an optional feature
1 parent cd1527d commit 68e6581

File tree

10 files changed

+191
-52
lines changed

10 files changed

+191
-52
lines changed

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Dockerfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,10 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
464464
source /root/env && \
465465
if [[ "${CARGO_BUILD_PROFILE}" == "release" ]] ; then \
466466
mv .cargo/config-release.toml .cargo/config.toml && \
467+
export FEATURES_FLAG="--no-default-features" ; \
467468
export OUT_DIRECTORY=release ; \
468469
else \
469-
export FEATURES_FLAG="--features=console,grovedbg" ; \
470+
export FEATURES_FLAG="--no-default-features --features=console,grovedbg" ; \
470471
export OUT_DIRECTORY=debug ; \
471472
fi && \
472473
# Workaround: as we cache dapi-grpc, its build.rs is not rerun, so we need to touch it

packages/rs-drive-abci/Cargo.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ tokio-util = { version = "0.7" }
7373
derive_more = { version = "1.0", features = ["from", "deref", "deref_mut"] }
7474
async-trait = "0.1.77"
7575
console-subscriber = { version = "0.4", optional = true }
76-
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3" }
76+
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3", optional = true}
7777

7878
[dev-dependencies]
7979
bs58 = { version = "0.5.0" }
@@ -93,19 +93,20 @@ dpp = { path = "../rs-dpp", features = [
9393
"data-contract-json-conversion",
9494
"data-contract-cbor-conversion",
9595
] }
96-
drive = { path = "../rs-drive" }
96+
drive = { path = "../rs-drive", features = ["fixtures-and-mocks"] }
9797
strategy-tests = { path = "../strategy-tests" }
9898
assert_matches = "1.5.0"
9999
drive-abci = { path = ".", features = ["testing-config"] }
100+
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3"}
101+
mockall = { version = "0.13" }
100102

101103
# For tests of grovedb verify
102104
rocksdb = { version = "0.23.0" }
103105
integer-encoding = { version = "4.0.0" }
104106

105107
[features]
106-
107108
default = ["mocks"]
108-
mocks = ["mockall", "drive/fixtures-and-mocks"]
109+
mocks = ["mockall", "drive/fixtures-and-mocks", "bls-signatures"]
109110
console = ["console-subscriber", "tokio/tracing"]
110111
testing-config = []
111112
grovedbg = ["drive/grovedbg"]

packages/rs-drive-abci/src/platform_types/platform_state/v0/old_structures/mod.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@ pub(super) struct OldStructureValidatorSetV0 {
3232
/// The list of masternodes
3333
pub members: BTreeMap<ProTxHash, ValidatorV0>,
3434
/// The threshold quorum public key
35+
#[cfg(feature = "bls-signatures")]
3536
pub threshold_public_key: bls_signatures::PublicKey,
37+
38+
/// Extra fields for forward compatibility.
39+
#[cfg(not(feature = "bls-signatures"))]
40+
#[serde(flatten)]
41+
pub extra_fields: std::collections::HashMap<String, serde_json::Value>,
3642
}
3743

3844
impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::ValidatorSetV0 {
@@ -42,7 +48,9 @@ impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::Va
4248
quorum_index,
4349
core_height,
4450
members,
51+
#[cfg(feature = "bls-signatures")]
4552
threshold_public_key,
53+
..
4654
} = value;
4755
Self {
4856
quorum_hash,
@@ -52,8 +60,11 @@ impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::Va
5260
.into_iter()
5361
.map(|(pro_tx_hash, validator)| (pro_tx_hash, validator.into()))
5462
.collect(),
63+
#[cfg(feature = "bls-signatures")]
5564
threshold_public_key: PublicKey::try_from(threshold_public_key.to_bytes().as_slice())
5665
.expect("this should not be possible to error as the threshold_public_key was already verified on disk"),
66+
#[cfg(not(feature = "bls-signatures"))]
67+
threshold_public_key: Default::default(),
5768
}
5869
}
5970
}
@@ -64,6 +75,7 @@ pub(super) struct ValidatorV0 {
6475
/// The proTxHash
6576
pub pro_tx_hash: ProTxHash,
6677
/// The public key share of this validator for this quorum
78+
#[cfg(feature = "bls-signatures")]
6779
pub public_key: Option<bls_signatures::PublicKey>,
6880
/// The node address
6981
pub node_ip: String,
@@ -83,6 +95,7 @@ impl From<ValidatorV0> for dpp::core_types::validator::v0::ValidatorV0 {
8395
fn from(value: ValidatorV0) -> Self {
8496
let ValidatorV0 {
8597
pro_tx_hash,
98+
#[cfg(feature = "bls-signatures")]
8699
public_key,
87100
node_ip,
88101
node_id,
@@ -93,7 +106,10 @@ impl From<ValidatorV0> for dpp::core_types::validator::v0::ValidatorV0 {
93106
} = value;
94107
Self {
95108
pro_tx_hash,
109+
#[cfg(feature = "bls-signatures")]
96110
public_key: public_key.map(|pk| PublicKey::try_from(pk.to_bytes().as_slice()).expect("this should not be possible to error as the public_key was already verified on disk")),
111+
#[cfg(not(feature = "bls-signatures"))]
112+
public_key: None,
97113
node_ip,
98114
node_id,
99115
core_port,

packages/rs-drive-abci/src/platform_types/signature_verification_quorum_set/mod.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ mod v0;
33
use crate::config::QuorumLikeConfig;
44
use crate::error::execution::ExecutionError;
55
use crate::error::Error;
6-
use crate::platform_types::signature_verification_quorum_set::v0::for_saving::SignatureVerificationQuorumSetForSavingV0;
6+
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v0::SignatureVerificationQuorumSetForSavingV0;
77
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v1::SignatureVerificationQuorumSetForSavingV1;
8+
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v2::SignatureVerificationQuorumSetForSavingV2;
89
pub use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::{
910
QuorumConfig, QuorumsWithConfig, SelectedQuorumSetIterator, SignatureVerificationQuorumSetV0,
1011
SignatureVerificationQuorumSetV0Methods, SIGN_OFFSET,
@@ -121,13 +122,15 @@ pub enum SignatureVerificationQuorumSetForSaving {
121122
V0(SignatureVerificationQuorumSetForSavingV0),
122123
/// Version 1 of the signature verification quorums
123124
V1(SignatureVerificationQuorumSetForSavingV1),
125+
/// Version 2 of the signature verification quorums
126+
V2(SignatureVerificationQuorumSetForSavingV2),
124127
}
125128

126129
impl From<SignatureVerificationQuorumSet> for SignatureVerificationQuorumSetForSaving {
127130
fn from(value: SignatureVerificationQuorumSet) -> Self {
128131
match value {
129132
SignatureVerificationQuorumSet::V0(v0) => {
130-
SignatureVerificationQuorumSetForSaving::V1(v0.into())
133+
SignatureVerificationQuorumSetForSaving::V2(v0.into())
131134
}
132135
}
133136
}
@@ -142,6 +145,9 @@ impl From<SignatureVerificationQuorumSetForSaving> for SignatureVerificationQuor
142145
SignatureVerificationQuorumSetForSaving::V1(v1) => {
143146
SignatureVerificationQuorumSet::V0(v1.into())
144147
}
148+
SignatureVerificationQuorumSetForSaving::V2(v2) => {
149+
SignatureVerificationQuorumSet::V0(v2.into())
150+
}
145151
}
146152
}
147153
}
Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::{
2-
PreviousPastQuorumsV0, QuorumConfig,
3-
};
1+
use crate::platform_types::signature_verification_quorum_set::v0::quorum_config_for_saving_v0::QuorumConfigForSavingV0;
2+
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::PreviousPastQuorumsV0;
43
use crate::platform_types::signature_verification_quorum_set::{
54
Quorums, SignatureVerificationQuorumSetForSaving, SignatureVerificationQuorumSetV0,
65
VerificationQuorum,
76
};
7+
use bincode::{Decode, Encode};
88
use dashcore_rpc::dashcore::hashes::Hash;
99
use dashcore_rpc::dashcore::QuorumHash;
10-
use dashcore_rpc::json::QuorumType;
11-
use dpp::identity::state_transition::asset_lock_proof::Encode;
12-
use dpp::platform_serialization::de::Decode;
1310
use dpp::platform_value::Bytes32;
1411

1512
#[derive(Debug, Clone, Encode, Decode)]
@@ -57,36 +54,6 @@ impl From<SignatureVerificationQuorumSetForSavingV0> for SignatureVerificationQu
5754
}
5855
}
5956

60-
#[derive(Debug, Clone, Encode, Decode)]
61-
pub struct QuorumConfigForSavingV0 {
62-
quorum_type: QuorumType,
63-
active_signers: u16,
64-
rotation: bool,
65-
window: u32,
66-
}
67-
68-
impl From<QuorumConfig> for QuorumConfigForSavingV0 {
69-
fn from(config: QuorumConfig) -> Self {
70-
Self {
71-
quorum_type: config.quorum_type,
72-
active_signers: config.active_signers,
73-
rotation: config.rotation,
74-
window: config.window,
75-
}
76-
}
77-
}
78-
79-
impl From<QuorumConfigForSavingV0> for QuorumConfig {
80-
fn from(config: QuorumConfigForSavingV0) -> Self {
81-
Self {
82-
quorum_type: config.quorum_type,
83-
active_signers: config.active_signers,
84-
rotation: config.rotation,
85-
window: config.window,
86-
}
87-
}
88-
}
89-
9057
#[derive(Debug, Clone, Encode, Decode)]
9158
pub struct PreviousPastQuorumsForSavingV0 {
9259
quorums: Vec<QuorumForSavingV0>,
@@ -134,6 +101,7 @@ impl From<PreviousPastQuorumsForSavingV0> for PreviousPastQuorumsV0 {
134101
#[derive(Debug, Clone, Encode, Decode)]
135102
pub struct QuorumForSavingV0 {
136103
hash: Bytes32,
104+
#[cfg(feature = "bls-signatures")]
137105
#[bincode(with_serde)]
138106
public_key: bls_signatures::PublicKey,
139107
index: Option<u32>,
@@ -145,10 +113,13 @@ impl From<Vec<QuorumForSavingV0>> for Quorums<VerificationQuorum> {
145113
(
146114
QuorumHash::from_byte_array(quorum.hash.to_buffer()),
147115
VerificationQuorum {
116+
#[cfg(feature = "bls-signatures")]
148117
public_key: dpp::bls_signatures::PublicKey::try_from(
149118
quorum.public_key.to_bytes().as_slice(),
150119
)
151120
.expect("expected to convert between BLS key libraries (from chia)"),
121+
#[cfg(not(feature = "bls-signatures"))]
122+
public_key: Default::default(),
152123
index: quorum.index,
153124
},
154125
)
@@ -162,6 +133,7 @@ impl From<Quorums<VerificationQuorum>> for Vec<QuorumForSavingV0> {
162133
.into_iter()
163134
.map(|(hash, quorum)| QuorumForSavingV0 {
164135
hash: Bytes32::from(hash.as_byte_array()),
136+
#[cfg(feature = "bls-signatures")]
165137
public_key: bls_signatures::PublicKey::from_bytes(
166138
&quorum.public_key.0.to_compressed(),
167139
)

packages/rs-drive-abci/src/platform_types/signature_verification_quorum_set/v0/for_saving_v1.rs

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
use crate::platform_types::signature_verification_quorum_set::v0::for_saving::{
2-
PreviousPastQuorumsForSavingV0, QuorumConfigForSavingV0,
3-
};
1+
#[cfg(feature = "bls-signatures")]
2+
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v0::PreviousPastQuorumsForSavingV0;
3+
use crate::platform_types::signature_verification_quorum_set::v0::quorum_config_for_saving_v0::QuorumConfigForSavingV0;
4+
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::PreviousPastQuorumsV0;
45
use crate::platform_types::signature_verification_quorum_set::{
56
Quorums, SignatureVerificationQuorumSetForSaving, SignatureVerificationQuorumSetV0,
67
ThresholdBlsPublicKey, VerificationQuorum,
78
};
9+
use bincode::{Decode, Encode};
810
use dashcore_rpc::dashcore::hashes::Hash;
911
use dashcore_rpc::dashcore::QuorumHash;
1012
use dpp::bls_signatures::Bls12381G2Impl;
11-
use dpp::identity::state_transition::asset_lock_proof::Encode;
12-
use dpp::platform_serialization::de::Decode;
1313
use dpp::platform_value::Bytes32;
1414

1515
#[derive(Debug, Clone, Encode, Decode)]
1616
pub struct SignatureVerificationQuorumSetForSavingV1 {
1717
config: QuorumConfigForSavingV0,
1818
current_quorums: Vec<QuorumForSavingV1>,
19+
#[cfg(feature = "bls-signatures")]
1920
previous_quorums: Option<PreviousPastQuorumsForSavingV0>,
2021
}
2122

@@ -36,6 +37,7 @@ impl From<SignatureVerificationQuorumSetV0> for SignatureVerificationQuorumSetFo
3637
Self {
3738
config: config.into(),
3839
current_quorums: current_quorums.into(),
40+
#[cfg(feature = "bls-signatures")]
3941
previous_quorums: previous.map(|previous| previous.into()),
4042
}
4143
}
@@ -46,13 +48,17 @@ impl From<SignatureVerificationQuorumSetForSavingV1> for SignatureVerificationQu
4648
let SignatureVerificationQuorumSetForSavingV1 {
4749
config,
4850
current_quorums,
51+
#[cfg(feature = "bls-signatures")]
4952
previous_quorums,
5053
} = value;
5154

5255
Self {
5356
config: config.into(),
5457
current_quorums: current_quorums.into(),
58+
#[cfg(feature = "bls-signatures")]
5559
previous: previous_quorums.map(|previous| previous.into()),
60+
#[cfg(not(feature = "bls-signatures"))]
61+
previous: None,
5662
}
5763
}
5864
}
@@ -90,3 +96,47 @@ impl From<Quorums<VerificationQuorum>> for Vec<QuorumForSavingV1> {
9096
.collect()
9197
}
9298
}
99+
100+
#[derive(Debug, Clone, Encode, Decode)]
101+
pub struct PreviousPastQuorumsForSavingV1 {
102+
quorums: Vec<QuorumForSavingV1>,
103+
last_active_core_height: u32,
104+
updated_at_core_height: u32,
105+
previous_change_height: Option<u32>,
106+
}
107+
108+
impl From<PreviousPastQuorumsV0> for PreviousPastQuorumsForSavingV1 {
109+
fn from(value: PreviousPastQuorumsV0) -> Self {
110+
let PreviousPastQuorumsV0 {
111+
quorums,
112+
last_active_core_height,
113+
updated_at_core_height,
114+
previous_change_height,
115+
} = value;
116+
117+
Self {
118+
quorums: quorums.into(),
119+
last_active_core_height,
120+
updated_at_core_height,
121+
previous_change_height,
122+
}
123+
}
124+
}
125+
126+
impl From<PreviousPastQuorumsForSavingV1> for PreviousPastQuorumsV0 {
127+
fn from(value: PreviousPastQuorumsForSavingV1) -> Self {
128+
let PreviousPastQuorumsForSavingV1 {
129+
quorums,
130+
last_active_core_height,
131+
updated_at_core_height,
132+
previous_change_height,
133+
} = value;
134+
135+
Self {
136+
quorums: quorums.into(),
137+
last_active_core_height,
138+
updated_at_core_height,
139+
previous_change_height,
140+
}
141+
}
142+
}

0 commit comments

Comments
 (0)