Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -464,9 +464,10 @@ RUN --mount=type=cache,sharing=shared,id=cargo_registry_index,target=${CARGO_HOM
source /root/env && \
if [[ "${CARGO_BUILD_PROFILE}" == "release" ]] ; then \
mv .cargo/config-release.toml .cargo/config.toml && \
export FEATURES_FLAG="--no-default-features" ; \
export OUT_DIRECTORY=release ; \
else \
export FEATURES_FLAG="--features=console,grovedbg" ; \
export FEATURES_FLAG="--no-default-features --features=console,grovedbg" ; \
export OUT_DIRECTORY=debug ; \
fi && \
# Workaround: as we cache dapi-grpc, its build.rs is not rerun, so we need to touch it
Expand Down
9 changes: 5 additions & 4 deletions packages/rs-drive-abci/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ tokio-util = { version = "0.7" }
derive_more = { version = "1.0", features = ["from", "deref", "deref_mut"] }
async-trait = "0.1.77"
console-subscriber = { version = "0.4", optional = true }
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3" }
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3", optional = true}

[dev-dependencies]
bs58 = { version = "0.5.0" }
Expand All @@ -93,19 +93,20 @@ dpp = { path = "../rs-dpp", features = [
"data-contract-json-conversion",
"data-contract-cbor-conversion",
] }
drive = { path = "../rs-drive" }
drive = { path = "../rs-drive", features = ["fixtures-and-mocks"] }
strategy-tests = { path = "../strategy-tests" }
assert_matches = "1.5.0"
drive-abci = { path = ".", features = ["testing-config"] }
bls-signatures = { git = "https://github.com/dashpay/bls-signatures", tag = "1.3.3"}
mockall = { version = "0.13" }

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

[features]

default = ["mocks"]
mocks = ["mockall", "drive/fixtures-and-mocks"]
mocks = ["mockall", "drive/fixtures-and-mocks", "bls-signatures"]
console = ["console-subscriber", "tokio/tracing"]
testing-config = []
grovedbg = ["drive/grovedbg"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,13 @@ pub(super) struct OldStructureValidatorSetV0 {
/// The list of masternodes
pub members: BTreeMap<ProTxHash, ValidatorV0>,
/// The threshold quorum public key
#[cfg(feature = "bls-signatures")]
pub threshold_public_key: bls_signatures::PublicKey,

/// Extra fields for forward compatibility.
#[cfg(not(feature = "bls-signatures"))]
#[serde(flatten)]
pub extra_fields: std::collections::HashMap<String, serde_json::Value>,
}

impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::ValidatorSetV0 {
Expand All @@ -42,7 +48,9 @@ impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::Va
quorum_index,
core_height,
members,
#[cfg(feature = "bls-signatures")]
threshold_public_key,
..
} = value;
Self {
quorum_hash,
Expand All @@ -52,8 +60,11 @@ impl From<OldStructureValidatorSetV0> for dpp::core_types::validator_set::v0::Va
.into_iter()
.map(|(pro_tx_hash, validator)| (pro_tx_hash, validator.into()))
.collect(),
#[cfg(feature = "bls-signatures")]
threshold_public_key: PublicKey::try_from(threshold_public_key.to_bytes().as_slice())
.expect("this should not be possible to error as the threshold_public_key was already verified on disk"),
#[cfg(not(feature = "bls-signatures"))]
threshold_public_key: Default::default(),
}
}
}
Expand All @@ -64,6 +75,7 @@ pub(super) struct ValidatorV0 {
/// The proTxHash
pub pro_tx_hash: ProTxHash,
/// The public key share of this validator for this quorum
#[cfg(feature = "bls-signatures")]
pub public_key: Option<bls_signatures::PublicKey>,
/// The node address
pub node_ip: String,
Expand All @@ -83,6 +95,7 @@ impl From<ValidatorV0> for dpp::core_types::validator::v0::ValidatorV0 {
fn from(value: ValidatorV0) -> Self {
let ValidatorV0 {
pro_tx_hash,
#[cfg(feature = "bls-signatures")]
public_key,
node_ip,
node_id,
Expand All @@ -93,7 +106,10 @@ impl From<ValidatorV0> for dpp::core_types::validator::v0::ValidatorV0 {
} = value;
Self {
pro_tx_hash,
#[cfg(feature = "bls-signatures")]
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")),
#[cfg(not(feature = "bls-signatures"))]
public_key: None,
node_ip,
node_id,
core_port,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ mod v0;
use crate::config::QuorumLikeConfig;
use crate::error::execution::ExecutionError;
use crate::error::Error;
use crate::platform_types::signature_verification_quorum_set::v0::for_saving::SignatureVerificationQuorumSetForSavingV0;
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v0::SignatureVerificationQuorumSetForSavingV0;
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v1::SignatureVerificationQuorumSetForSavingV1;
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v2::SignatureVerificationQuorumSetForSavingV2;
pub use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::{
QuorumConfig, QuorumsWithConfig, SelectedQuorumSetIterator, SignatureVerificationQuorumSetV0,
SignatureVerificationQuorumSetV0Methods, SIGN_OFFSET,
Expand Down Expand Up @@ -121,13 +122,15 @@ pub enum SignatureVerificationQuorumSetForSaving {
V0(SignatureVerificationQuorumSetForSavingV0),
/// Version 1 of the signature verification quorums
V1(SignatureVerificationQuorumSetForSavingV1),
/// Version 2 of the signature verification quorums
V2(SignatureVerificationQuorumSetForSavingV2),
}

impl From<SignatureVerificationQuorumSet> for SignatureVerificationQuorumSetForSaving {
fn from(value: SignatureVerificationQuorumSet) -> Self {
match value {
SignatureVerificationQuorumSet::V0(v0) => {
SignatureVerificationQuorumSetForSaving::V1(v0.into())
SignatureVerificationQuorumSetForSaving::V2(v0.into())
}
}
}
Expand All @@ -142,6 +145,9 @@ impl From<SignatureVerificationQuorumSetForSaving> for SignatureVerificationQuor
SignatureVerificationQuorumSetForSaving::V1(v1) => {
SignatureVerificationQuorumSet::V0(v1.into())
}
SignatureVerificationQuorumSetForSaving::V2(v2) => {
SignatureVerificationQuorumSet::V0(v2.into())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::{
PreviousPastQuorumsV0, QuorumConfig,
};
use crate::platform_types::signature_verification_quorum_set::v0::quorum_config_for_saving_v0::QuorumConfigForSavingV0;
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::PreviousPastQuorumsV0;
use crate::platform_types::signature_verification_quorum_set::{
Quorums, SignatureVerificationQuorumSetForSaving, SignatureVerificationQuorumSetV0,
VerificationQuorum,
};
use bincode::{Decode, Encode};
use dashcore_rpc::dashcore::hashes::Hash;
use dashcore_rpc::dashcore::QuorumHash;
use dashcore_rpc::json::QuorumType;
use dpp::identity::state_transition::asset_lock_proof::Encode;
use dpp::platform_serialization::de::Decode;
use dpp::platform_value::Bytes32;

#[derive(Debug, Clone, Encode, Decode)]
Expand Down Expand Up @@ -57,36 +54,6 @@ impl From<SignatureVerificationQuorumSetForSavingV0> for SignatureVerificationQu
}
}

#[derive(Debug, Clone, Encode, Decode)]
pub struct QuorumConfigForSavingV0 {
quorum_type: QuorumType,
active_signers: u16,
rotation: bool,
window: u32,
}

impl From<QuorumConfig> for QuorumConfigForSavingV0 {
fn from(config: QuorumConfig) -> Self {
Self {
quorum_type: config.quorum_type,
active_signers: config.active_signers,
rotation: config.rotation,
window: config.window,
}
}
}

impl From<QuorumConfigForSavingV0> for QuorumConfig {
fn from(config: QuorumConfigForSavingV0) -> Self {
Self {
quorum_type: config.quorum_type,
active_signers: config.active_signers,
rotation: config.rotation,
window: config.window,
}
}
}

#[derive(Debug, Clone, Encode, Decode)]
pub struct PreviousPastQuorumsForSavingV0 {
quorums: Vec<QuorumForSavingV0>,
Expand Down Expand Up @@ -134,6 +101,7 @@ impl From<PreviousPastQuorumsForSavingV0> for PreviousPastQuorumsV0 {
#[derive(Debug, Clone, Encode, Decode)]
pub struct QuorumForSavingV0 {
hash: Bytes32,
#[cfg(feature = "bls-signatures")]
#[bincode(with_serde)]
public_key: bls_signatures::PublicKey,
index: Option<u32>,
Expand All @@ -145,10 +113,13 @@ impl From<Vec<QuorumForSavingV0>> for Quorums<VerificationQuorum> {
(
QuorumHash::from_byte_array(quorum.hash.to_buffer()),
VerificationQuorum {
#[cfg(feature = "bls-signatures")]
public_key: dpp::bls_signatures::PublicKey::try_from(
quorum.public_key.to_bytes().as_slice(),
)
.expect("expected to convert between BLS key libraries (from chia)"),
#[cfg(not(feature = "bls-signatures"))]
public_key: Default::default(),
index: quorum.index,
},
)
Expand All @@ -162,6 +133,7 @@ impl From<Quorums<VerificationQuorum>> for Vec<QuorumForSavingV0> {
.into_iter()
.map(|(hash, quorum)| QuorumForSavingV0 {
hash: Bytes32::from(hash.as_byte_array()),
#[cfg(feature = "bls-signatures")]
public_key: bls_signatures::PublicKey::from_bytes(
&quorum.public_key.0.to_compressed(),
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
use crate::platform_types::signature_verification_quorum_set::v0::for_saving::{
PreviousPastQuorumsForSavingV0, QuorumConfigForSavingV0,
};
#[cfg(feature = "bls-signatures")]
use crate::platform_types::signature_verification_quorum_set::v0::for_saving_v0::PreviousPastQuorumsForSavingV0;
use crate::platform_types::signature_verification_quorum_set::v0::quorum_config_for_saving_v0::QuorumConfigForSavingV0;
use crate::platform_types::signature_verification_quorum_set::v0::quorum_set::PreviousPastQuorumsV0;
use crate::platform_types::signature_verification_quorum_set::{
Quorums, SignatureVerificationQuorumSetForSaving, SignatureVerificationQuorumSetV0,
ThresholdBlsPublicKey, VerificationQuorum,
};
use bincode::{Decode, Encode};
use dashcore_rpc::dashcore::hashes::Hash;
use dashcore_rpc::dashcore::QuorumHash;
use dpp::bls_signatures::Bls12381G2Impl;
use dpp::identity::state_transition::asset_lock_proof::Encode;
use dpp::platform_serialization::de::Decode;
use dpp::platform_value::Bytes32;

#[derive(Debug, Clone, Encode, Decode)]
pub struct SignatureVerificationQuorumSetForSavingV1 {
config: QuorumConfigForSavingV0,
current_quorums: Vec<QuorumForSavingV1>,
#[cfg(feature = "bls-signatures")]
previous_quorums: Option<PreviousPastQuorumsForSavingV0>,
}

Expand All @@ -36,6 +37,7 @@ impl From<SignatureVerificationQuorumSetV0> for SignatureVerificationQuorumSetFo
Self {
config: config.into(),
current_quorums: current_quorums.into(),
#[cfg(feature = "bls-signatures")]
previous_quorums: previous.map(|previous| previous.into()),
}
}
Expand All @@ -46,13 +48,17 @@ impl From<SignatureVerificationQuorumSetForSavingV1> for SignatureVerificationQu
let SignatureVerificationQuorumSetForSavingV1 {
config,
current_quorums,
#[cfg(feature = "bls-signatures")]
previous_quorums,
} = value;

Self {
config: config.into(),
current_quorums: current_quorums.into(),
#[cfg(feature = "bls-signatures")]
previous: previous_quorums.map(|previous| previous.into()),
#[cfg(not(feature = "bls-signatures"))]
previous: None,
}
}
}
Expand Down Expand Up @@ -90,3 +96,47 @@ impl From<Quorums<VerificationQuorum>> for Vec<QuorumForSavingV1> {
.collect()
}
}

#[derive(Debug, Clone, Encode, Decode)]
pub struct PreviousPastQuorumsForSavingV1 {
quorums: Vec<QuorumForSavingV1>,
last_active_core_height: u32,
updated_at_core_height: u32,
previous_change_height: Option<u32>,
}

impl From<PreviousPastQuorumsV0> for PreviousPastQuorumsForSavingV1 {
fn from(value: PreviousPastQuorumsV0) -> Self {
let PreviousPastQuorumsV0 {
quorums,
last_active_core_height,
updated_at_core_height,
previous_change_height,
} = value;

Self {
quorums: quorums.into(),
last_active_core_height,
updated_at_core_height,
previous_change_height,
}
}
}

impl From<PreviousPastQuorumsForSavingV1> for PreviousPastQuorumsV0 {
fn from(value: PreviousPastQuorumsForSavingV1) -> Self {
let PreviousPastQuorumsForSavingV1 {
quorums,
last_active_core_height,
updated_at_core_height,
previous_change_height,
} = value;

Self {
quorums: quorums.into(),
last_active_core_height,
updated_at_core_height,
previous_change_height,
}
}
}
Loading
Loading