Skip to content

Commit

Permalink
more work
Browse files Browse the repository at this point in the history
  • Loading branch information
QuantumExplorer committed Apr 7, 2023
1 parent 0faacd9 commit af2bd42
Show file tree
Hide file tree
Showing 9 changed files with 34 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ use drive::grovedb::TransactionArg;
use drive::{drive::Drive, grovedb::Transaction};

use crate::error::Error;
use crate::validation::state_transition::key_validation::validate_state_transition_identity_signature;
use crate::validation::state_transition::StateTransitionValidation;

use super::common::validate_schema;
Expand Down Expand Up @@ -78,8 +79,12 @@ impl StateTransitionValidation for DataContractCreateTransition {
fn validate_signatures(
&self,
drive: &Drive,
transaction: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
Ok(
validate_state_transition_identity_signature(drive, self, transaction)?
.map(|partial_identity| Some(partial_identity)),
)
}

fn validate_state(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ impl StateTransitionValidation for DataContractUpdateTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ impl StateTransitionValidation for DocumentsBatchTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ impl StateTransitionValidation for IdentityCreateTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ impl StateTransitionValidation for IdentityCreditWithdrawalTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ impl StateTransitionValidation for IdentityTopUpTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ impl StateTransitionValidation for IdentityUpdateTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
todo!()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
use crate::error::Error;
use dpp::identity::PartialIdentity;
use dpp::state_transition::fee::operations::{Operation, SignatureVerificationOperation};
use dpp::state_transition::state_transition_execution_context::StateTransitionExecutionContext;
use dpp::state_transition::StateTransitionIdentitySigned;
use dpp::validation::SimpleConsensusValidationResult;
use dpp::validation::{ConsensusValidationResult, SimpleConsensusValidationResult};
use dpp::{
consensus::signature::{
InvalidIdentityPublicKeyTypeError, MissingPublicKeyError, PublicKeyIsDisabledError,
SignatureError,
},
state_transition::validation::validate_state_transition_identity_signature::convert_to_consensus_signature_error,
NativeBlsModule,
};
use dpp::{BlsModule, ProtocolError};
use drive::dpp::identity::KeyType;
use drive::drive::identity::key::fetch::{
IdentityKeysRequest, OptionalSingleIdentityPublicKeyOutcome,
};
use drive::drive::Drive;
use drive::grovedb::Transaction;
use drive::grovedb::{Transaction, TransactionArg};
use lazy_static::lazy_static;
use std::collections::HashSet;
lazy_static! {
Expand All @@ -32,11 +34,10 @@ lazy_static! {
pub fn validate_state_transition_identity_signature(
drive: &Drive,
state_transition: &impl StateTransitionIdentitySigned,
transaction: &Transaction,
bls: &impl BlsModule,
transaction: TransactionArg,
execution_context: &StateTransitionExecutionContext,
) -> Result<SimpleConsensusValidationResult, Error> {
let mut validation_result = SimpleConsensusValidationResult::default();
) -> Result<ConsensusValidationResult<PartialIdentity>, Error> {
let mut validation_result = ConsensusValidationResult::<PartialIdentity>::default();

let key_id = state_transition.get_signature_public_key_id().ok_or(
ProtocolError::CorruptedCodeExecution(format!(
Expand All @@ -50,7 +51,7 @@ pub fn validate_state_transition_identity_signature(
);

let maybe_public_key: OptionalSingleIdentityPublicKeyOutcome =
drive.fetch_identity_keys(key_request, Some(transaction))?;
drive.fetch_identity_keys(key_request, transaction)?;

let public_key = match maybe_public_key {
None => {
Expand Down Expand Up @@ -83,13 +84,14 @@ pub fn validate_state_transition_identity_signature(
return Ok(validation_result);
}

let signature_is_valid = state_transition.verify_signature(&public_key, bls);
let signature_is_valid =
state_transition.verify_signature(&public_key, &NativeBlsModule::default());

if let Err(err) = signature_is_valid {
let consensus_error = convert_to_consensus_signature_error(err)?;
validation_result.add_error(consensus_error);
return Ok(validation_result);
}

Ok(validation_result)
validation_result.Ok(validation_result)
}
19 changes: 11 additions & 8 deletions packages/rs-drive-abci/src/validation/state_transition/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use crate::error::Error;
use crate::execution::execution_event::ExecutionEvent;
use crate::platform::{Platform, PlatformRef};
use crate::state::PlatformState;
use crate::validation::state_transition::key_validation::validate_state_transition_identity_signature;

pub fn process_state_transition<'a, C>(
platform: &'a PlatformRef<C>,
Expand All @@ -32,7 +33,7 @@ pub fn process_state_transition<'a, C>(
if !result.is_valid() {
return Ok(ConsensusValidationResult::<ExecutionEvent>::new_with_errors(result.errors));
}
let result = state_transition.validate_signatures(&platform.drive)?;
let result = state_transition.validate_signatures(&platform.drive, transaction)?;
if !result.is_valid() {
return Ok(ConsensusValidationResult::<ExecutionEvent>::new_with_errors(result.errors));
}
Expand All @@ -54,6 +55,7 @@ pub trait StateTransitionValidation {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error>;

fn validate_state(
Expand Down Expand Up @@ -83,15 +85,16 @@ impl StateTransitionValidation for StateTransition {
fn validate_signatures(
&self,
drive: &Drive,
tx: TransactionArg,
) -> Result<ConsensusValidationResult<Option<PartialIdentity>>, Error> {
match self {
StateTransition::DataContractCreate(st) => st.validate_signatures(drive),
StateTransition::DataContractUpdate(st) => st.validate_signatures(drive),
StateTransition::IdentityCreate(st) => st.validate_signatures(drive),
StateTransition::IdentityUpdate(st) => st.validate_signatures(drive),
StateTransition::IdentityTopUp(st) => st.validate_signatures(drive),
StateTransition::IdentityCreditWithdrawal(st) => st.validate_signatures(drive),
StateTransition::DocumentsBatch(st) => st.validate_signatures(drive),
StateTransition::DataContractCreate(st) => st.validate_signatures(drive, tx),
StateTransition::DataContractUpdate(st) => st.validate_signatures(drive, tx),
StateTransition::IdentityCreate(st) => st.validate_signatures(drive, tx),
StateTransition::IdentityUpdate(st) => st.validate_signatures(drive, tx),
StateTransition::IdentityTopUp(st) => st.validate_signatures(drive, tx),
StateTransition::IdentityCreditWithdrawal(st) => st.validate_signatures(drive, tx),
StateTransition::DocumentsBatch(st) => st.validate_signatures(drive, tx),
}
}

Expand Down

0 comments on commit af2bd42

Please sign in to comment.