Skip to content

Commit

Permalink
[feature] #3435: Introduce validator visitor
Browse files Browse the repository at this point in the history
Signed-off-by: Marin Veršić <marin.versic101@gmail.com>
  • Loading branch information
mversic committed May 8, 2023
1 parent 3a1a84a commit 68fcaf7
Show file tree
Hide file tree
Showing 42 changed files with 2,610 additions and 2,520 deletions.
4 changes: 2 additions & 2 deletions client/tests/integration/smartcontracts/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ codegen-units = 1 # Further reduces binary size but increases compilation time

[workspace.dependencies]
iroha_wasm = { version = "=2.0.0-pre-rc.13", path = "../../../../wasm", features = ["debug"]}
iroha_validator = { version = "=2.0.0-pre-rc.13", path = "../../../../wasm/validator" }
iroha_default_validator = { version = "=2.0.0-pre-rc.13", path = "../../../../default_validator", default-features = false }
iroha_validator = { version = "=2.0.0-pre-rc.13", path = "../../../../wasm/validator", features = ["default-validator"] }

panic-halt = "0.2.0"
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,4 @@ crate-type = ['cdylib']

[dependencies]
iroha_validator.workspace = true
iroha_default_validator.workspace = true
panic-halt.workspace = true
Original file line number Diff line number Diff line change
@@ -1,21 +1,45 @@
//! Runtime Validator which allows any operation done by `admin@admin` account.
//! If authority is not `admin@admin` then `iroha_default_validator` is used.

//! Runtime Validator which allows any [`TransferBox`] instructions by `admin@admin` account.
//! If authority is not `admin@admin` then [`DefaultValidator`] is used as a backup.
#![no_std]
#![no_main]

use iroha_validator::{parse, prelude::*, DefaultValidator};

#[cfg(not(test))]
extern crate panic_halt;

use iroha_validator::{parse, prelude::*};
struct Validator(DefaultValidator);

/// Allow operation if authority is `admin@admin` and fallback to
/// [`iroha_default_validator::validate()`] if not.
impl Validate for Validator {
fn validate_transfer(&mut self, authority: &AccountId, isi: &TransferBox) -> Verdict {
pass_if!(*authority == parse!("admin@admin" as <Account as Identifiable>::Id));
self.0.validate_transfer(authority, isi)
}
}

/// Allow operation if authority is `admin@admin` and if not,
/// fallback to [`DefaultValidator::validate()`].
#[entrypoint(params = "[authority, operation]")]
pub fn validate(
authority: <Account as Identifiable>::Id,
operation: NeedsValidationBox,
) -> Verdict {
pass_if!(authority == parse!("admin@admin" as <Account as Identifiable>::Id));
iroha_default_validator::validate(authority, operation)
pub fn validate(authority: AccountId, operation: NeedsValidationBox) -> Verdict {
let mut validator = Validator(DefaultValidator);

match operation {
// NOTE: Invoked from Iroha
NeedsValidationBox::Transaction(transaction) => {
validator.validate_transaction(&authority, transaction)
}

// NOTE: Invoked only from another Wasm
NeedsValidationBox::Instruction(instruction) => {
let verdict = validator.validate_instruction(&authority, &instruction);

if !verdict.is_deny() {
instruction.execute();
}

verdict
}

// NOTE: Invoked only from another Wasm
NeedsValidationBox::Query(query) => validator.validate_query(&authority, &query),
}
}
Binary file modified configs/peer/validator.wasm
Binary file not shown.
8 changes: 4 additions & 4 deletions core/src/block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ impl Revalidate for PendingBlock {
.map(|tx_v| {
let tx = SignedTransaction {
payload: tx_v.payload,
signatures: tx_v.signatures.into(),
signatures: tx_v.signatures,
};
AcceptedTransaction::accept::<IS_GENESIS>(
tx,
Expand Down Expand Up @@ -376,7 +376,7 @@ impl Revalidate for PendingBlock {
.map(|tx_r| {
let tx = SignedTransaction {
payload: tx_r.payload,
signatures: tx_r.signatures.into(),
signatures: tx_r.signatures,
};
AcceptedTransaction::accept::<IS_GENESIS>(
tx,
Expand Down Expand Up @@ -487,7 +487,7 @@ impl Revalidate for VersionedCommittedBlock {
.map(|tx_v| {
let tx = SignedTransaction {
payload: tx_v.payload,
signatures: tx_v.signatures.into(),
signatures: tx_v.signatures,
};
AcceptedTransaction::accept::<IS_GENESIS>(
tx,
Expand Down Expand Up @@ -520,7 +520,7 @@ impl Revalidate for VersionedCommittedBlock {
.map(|tx_r| {
let tx = SignedTransaction {
payload: tx_r.payload,
signatures: tx_r.signatures.into(),
signatures: tx_r.signatures,
};
AcceptedTransaction::accept::<IS_GENESIS>(
tx,
Expand Down
4 changes: 2 additions & 2 deletions core/src/smartcontracts/isi/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ pub mod isi {
}
}

impl Execute for SetKeyValue<Account, Name, Value> {
impl Execute for SetKeyValue<Account> {
type Error = Error;

#[metrics(+"set_key_value_account_string_value")]
Expand Down Expand Up @@ -234,7 +234,7 @@ pub mod isi {
}
}

impl Execute for RemoveKeyValue<Account, Name> {
impl Execute for RemoveKeyValue<Account> {
type Error = Error;

#[metrics(+"remove_account_key_value")]
Expand Down
4 changes: 2 additions & 2 deletions core/src/smartcontracts/isi/asset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub mod isi {
use super::*;
use crate::smartcontracts::account::isi::forbid_minting;

impl Execute for SetKeyValue<Asset, Name, Value> {
impl Execute for SetKeyValue<Asset> {
type Error = Error;

#[metrics(+"asset_set_key_value")]
Expand Down Expand Up @@ -79,7 +79,7 @@ pub mod isi {
}
}

impl Execute for RemoveKeyValue<Asset, Name> {
impl Execute for RemoveKeyValue<Asset> {
type Error = Error;

#[metrics(+"asset_remove_key_value")]
Expand Down
8 changes: 4 additions & 4 deletions core/src/smartcontracts/isi/domain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ pub mod isi {
}
}

impl Execute for SetKeyValue<AssetDefinition, Name, Value> {
impl Execute for SetKeyValue<AssetDefinition> {
type Error = Error;

#[metrics(+"set_key_value_asset_def")]
Expand Down Expand Up @@ -227,7 +227,7 @@ pub mod isi {
}
}

impl Execute for RemoveKeyValue<AssetDefinition, Name> {
impl Execute for RemoveKeyValue<AssetDefinition> {
type Error = Error;

#[metrics(+"remove_key_value_asset_def")]
Expand All @@ -253,7 +253,7 @@ pub mod isi {
}
}

impl Execute for SetKeyValue<Domain, Name, Value> {
impl Execute for SetKeyValue<Domain> {
type Error = Error;

#[metrics(+"set_key_value_domain")]
Expand All @@ -280,7 +280,7 @@ pub mod isi {
}
}

impl Execute for RemoveKeyValue<Domain, Name> {
impl Execute for RemoveKeyValue<Domain> {
type Error = Error;

#[metrics(+"remove_key_value_domain")]
Expand Down
Loading

0 comments on commit 68fcaf7

Please sign in to comment.