From 6cf637838252b08f9a4684d361f6405f1b517ef9 Mon Sep 17 00:00:00 2001 From: Dmitry Murzin Date: Mon, 10 Jun 2024 11:26:07 +0300 Subject: [PATCH] feat: Custom instructions in executor (#4645) * feat: Custom instructions in executor Signed-off-by: Dmitry Murzin --- Cargo.lock | 11 + client/Cargo.toml | 1 + .../integration/smartcontracts/Cargo.toml | 7 +- .../executor_custom_data_model/Cargo.toml | 15 + .../executor_custom_data_model/src/complex.rs | 310 ++++++++++++++++++ .../executor_custom_data_model/src/lib.rs | 8 + .../executor_custom_data_model/src/simple.rs | 46 +++ .../Cargo.toml | 23 ++ .../src/lib.rs | 86 +++++ .../Cargo.toml | 23 ++ .../src/lib.rs | 64 ++++ client/tests/integration/upgrade.rs | 118 ++++++- configs/swarm/executor.wasm | Bin 510140 -> 512019 bytes core/src/smartcontracts/isi/mod.rs | 3 + core/test_network/src/lib.rs | 9 +- data_model/src/executor.rs | 10 + data_model/src/isi.rs | 39 ++- data_model/src/lib.rs | 1 + data_model/src/transaction.rs | 1 + data_model/src/visit.rs | 3 + docs/source/references/schema.json | 25 +- schema/gen/src/lib.rs | 1 + smart_contract/executor/derive/src/default.rs | 1 + smart_contract/executor/src/default.rs | 19 ++ smart_contract/executor/src/lib.rs | 13 + 25 files changed, 826 insertions(+), 11 deletions(-) create mode 100644 client/tests/integration/smartcontracts/executor_custom_data_model/Cargo.toml create mode 100644 client/tests/integration/smartcontracts/executor_custom_data_model/src/complex.rs create mode 100644 client/tests/integration/smartcontracts/executor_custom_data_model/src/lib.rs create mode 100644 client/tests/integration/smartcontracts/executor_custom_data_model/src/simple.rs create mode 100644 client/tests/integration/smartcontracts/executor_custom_instructions_complex/Cargo.toml create mode 100644 client/tests/integration/smartcontracts/executor_custom_instructions_complex/src/lib.rs create mode 100644 client/tests/integration/smartcontracts/executor_custom_instructions_simple/Cargo.toml create mode 100644 client/tests/integration/smartcontracts/executor_custom_instructions_simple/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index e40527e952e..0284f24a6be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1605,6 +1605,16 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "executor_custom_data_model" +version = "2.0.0-pre-rc.21" +dependencies = [ + "iroha_data_model", + "iroha_schema", + "serde", + "serde_json", +] + [[package]] name = "expect-test" version = "1.5.0" @@ -2785,6 +2795,7 @@ dependencies = [ "derive_more", "displaydoc 0.2.4 (git+https://github.com/akonradi-signal/displaydoc.git?branch=anonymous-const)", "error-stack", + "executor_custom_data_model", "eyre", "futures-util", "hex", diff --git a/client/Cargo.toml b/client/Cargo.toml index 1243081020f..42c820a2a0d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -90,6 +90,7 @@ irohad = { workspace = true } iroha_wasm_builder = { workspace = true } iroha_genesis = { workspace = true } test_network = { workspace = true } +executor_custom_data_model = { path = "tests/integration/smartcontracts/executor_custom_data_model" } tokio = { workspace = true, features = ["rt-multi-thread"] } criterion = { workspace = true, features = ["html_reports"] } diff --git a/client/tests/integration/smartcontracts/Cargo.toml b/client/tests/integration/smartcontracts/Cargo.toml index a03698db1b2..5004748a0c0 100644 --- a/client/tests/integration/smartcontracts/Cargo.toml +++ b/client/tests/integration/smartcontracts/Cargo.toml @@ -15,6 +15,9 @@ members = [ "executor_with_custom_permission", "executor_remove_permission", "executor_with_migration_fail", + "executor_custom_instructions_simple", + "executor_custom_instructions_complex", + "executor_custom_data_model", "query_assets_and_save_cursor", "smart_contract_can_filter_queries", ] @@ -32,8 +35,10 @@ codegen-units = 1 # Further reduces binary size but increases compilation time [workspace.dependencies] iroha_smart_contract = { version = "=2.0.0-pre-rc.21", path = "../../../../smart_contract", features = ["debug"] } iroha_trigger = { version = "=2.0.0-pre-rc.21", path = "../../../../smart_contract/trigger", features = ["debug"] } -iroha_executor = { version = "=2.0.0-pre-rc.21", path = "../../../../smart_contract/executor" } +iroha_executor = { version = "=2.0.0-pre-rc.21", path = "../../../../smart_contract/executor", features = ["debug"] } iroha_schema = { version = "=2.0.0-pre-rc.21", path = "../../../../schema" } +iroha_data_model = { version = "=2.0.0-pre-rc.21", path = "../../../../data_model", default-features = false } +executor_custom_data_model = { version = "=2.0.0-pre-rc.21", path = "executor_custom_data_model" } parity-scale-codec = { version = "3.2.1", default-features = false } anyhow = { version = "1.0.71", default-features = false } diff --git a/client/tests/integration/smartcontracts/executor_custom_data_model/Cargo.toml b/client/tests/integration/smartcontracts/executor_custom_data_model/Cargo.toml new file mode 100644 index 00000000000..6ce6deb6833 --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_data_model/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "executor_custom_data_model" + +edition.workspace = true +version.workspace = true +authors.workspace = true + +license.workspace = true + +[dependencies] +iroha_data_model.workspace = true +iroha_schema.workspace = true + +serde_json.workspace = true +serde.workspace = true diff --git a/client/tests/integration/smartcontracts/executor_custom_data_model/src/complex.rs b/client/tests/integration/smartcontracts/executor_custom_data_model/src/complex.rs new file mode 100644 index 00000000000..b86b689f4f0 --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_data_model/src/complex.rs @@ -0,0 +1,310 @@ +//! Example of custom expression system. +//! Only few expressions are implemented to show proof-of-concept. +//! See `smartcontracts/executor_custom_instructions_complex`. +//! This is simplified version of expression system from Iroha v2.0.0-pre-rc.20 + +pub use evaluate::*; +pub use expression::*; +pub use isi::*; + +mod isi { + use alloc::{boxed::Box, format, string::String, vec::Vec}; + + use iroha_data_model::{ + isi::{Custom, InstructionBox}, + JsonString, + }; + use iroha_schema::IntoSchema; + use serde::{Deserialize, Serialize}; + + use crate::complex::expression::EvaluatesTo; + + #[derive(Debug, Deserialize, Serialize, IntoSchema)] + pub enum CustomInstructionExpr { + Core(CoreExpr), + If(Box), + // Other custom instructions + } + + impl From for Custom { + fn from(isi: CustomInstructionExpr) -> Self { + let payload = + JsonString::serialize(&isi).expect("Couldn't serialize custom instruction"); + Self::new(payload) + } + } + + impl CustomInstructionExpr { + pub fn into_instruction(self) -> InstructionBox { + InstructionBox::Custom(self.into()) + } + } + + impl TryFrom<&JsonString> for CustomInstructionExpr { + type Error = serde_json::Error; + + fn try_from(payload: &JsonString) -> serde_json::Result { + payload.deserialize() + } + } + + // Built-in instruction (can be evaluated based on query values, etc) + #[derive(Debug, Deserialize, Serialize, IntoSchema)] + pub struct CoreExpr { + pub object: EvaluatesTo, + } + + impl CoreExpr { + pub fn new(object: impl Into>) -> Self { + Self { + object: object.into(), + } + } + } + + /// Composite instruction for a conditional execution of other instructions. + #[derive(Debug, Deserialize, Serialize, IntoSchema)] + pub struct ConditionalExpr { + /// Condition to be checked. + pub condition: EvaluatesTo, + /// Instruction to be executed if condition pass. + pub then: CustomInstructionExpr, + } + + impl ConditionalExpr { + pub fn new( + condition: impl Into>, + then: impl Into, + ) -> Self { + Self { + condition: condition.into(), + then: then.into(), + } + } + } +} + +mod expression { + use alloc::{ + boxed::Box, + format, + string::{String, ToString}, + vec, + vec::Vec, + }; + use core::marker::PhantomData; + + use iroha_data_model::{ + isi::InstructionBox, + prelude::{Numeric, QueryBox}, + }; + use iroha_schema::{IntoSchema, TypeId}; + use serde::{Deserialize, Serialize}; + + /// Struct for type checking and converting expression results. + #[derive(Debug, Deserialize, Serialize, TypeId)] + pub struct EvaluatesTo { + #[serde(flatten)] + pub(crate) expression: Box, + _value_type: PhantomData, + } + + impl EvaluatesTo { + pub fn new_unchecked(expression: impl Into) -> Self { + Self { + expression: Box::new(expression.into()), + _value_type: PhantomData, + } + } + } + + /// Represents all possible expressions. + #[derive(Debug, Deserialize, Serialize, IntoSchema)] + pub enum Expression { + /// Raw value. + Raw(Value), + /// Greater expression. + Greater(Greater), + /// Query to Iroha state. + Query(QueryBox), + } + + /// Returns whether the `left` expression is greater than the `right`. + #[derive(Debug, Deserialize, Serialize, IntoSchema)] + pub struct Greater { + pub left: EvaluatesTo, + pub right: EvaluatesTo, + } + + impl Greater { + /// Construct new [`Greater`] expression + pub fn new( + left: impl Into>, + right: impl Into>, + ) -> Self { + Self { + left: left.into(), + right: right.into(), + } + } + } + + impl From for EvaluatesTo { + fn from(expression: Greater) -> Self { + let expression = Expression::Greater(expression); + EvaluatesTo::new_unchecked(expression) + } + } + + /// Sized container for all possible values. + #[derive(Debug, Clone, Deserialize, Serialize, IntoSchema)] + pub enum Value { + Bool(bool), + Numeric(Numeric), + InstructionBox(InstructionBox), + } + + impl From for Value { + fn from(value: bool) -> Self { + Value::Bool(value) + } + } + + impl From for EvaluatesTo { + fn from(value: Numeric) -> Self { + let value = Value::Numeric(value); + let expression = Expression::Raw(value); + EvaluatesTo::new_unchecked(expression) + } + } + + impl From for EvaluatesTo { + fn from(value: InstructionBox) -> Self { + let value = Value::InstructionBox(value); + let expression = Expression::Raw(value); + EvaluatesTo::new_unchecked(expression) + } + } + + impl TryFrom for bool { + type Error = String; + + fn try_from(value: Value) -> Result { + match value { + Value::Bool(value) => Ok(value), + _ => Err("Expected bool".to_string()), + } + } + } + + impl TryFrom for Numeric { + type Error = String; + + fn try_from(value: Value) -> Result { + match value { + Value::Numeric(value) => Ok(value), + _ => Err("Expected Numeric".to_string()), + } + } + } + + impl TryFrom for InstructionBox { + type Error = String; + + fn try_from(value: Value) -> Result { + match value { + Value::InstructionBox(value) => Ok(value), + _ => Err("Expected InstructionBox".to_string()), + } + } + } + + impl + IntoSchema> IntoSchema for EvaluatesTo { + fn type_name() -> String { + format!("EvaluatesTo<{}>", V::type_name()) + } + fn update_schema_map(map: &mut iroha_schema::MetaMap) { + const EXPRESSION: &str = "expression"; + + if !map.contains_key::() { + map.insert::(iroha_schema::Metadata::Struct( + iroha_schema::NamedFieldsMeta { + declarations: vec![iroha_schema::Declaration { + name: String::from(EXPRESSION), + ty: core::any::TypeId::of::(), + }], + }, + )); + + Expression::update_schema_map(map); + } + } + } +} + +mod evaluate { + use alloc::string::ToString; + + use iroha_data_model::{ + isi::error::InstructionExecutionError, query::QueryBox, ValidationFail, + }; + + use crate::complex::expression::{EvaluatesTo, Expression, Greater, Value}; + + pub trait Evaluate { + /// The resulting type of the expression. + type Value; + + /// Calculate result. + fn evaluate(&self, context: &impl Context) -> Result; + } + + pub trait Context { + /// Execute query against the current state of `Iroha` + fn query(&self, query: &QueryBox) -> Result; + } + + impl> Evaluate for EvaluatesTo + where + V::Error: ToString, + { + type Value = V; + + fn evaluate(&self, context: &impl Context) -> Result { + let expr = self.expression.evaluate(context)?; + V::try_from(expr) + .map_err(|e| InstructionExecutionError::Conversion(e.to_string())) + .map_err(ValidationFail::InstructionFailed) + } + } + + impl Evaluate for Expression { + type Value = Value; + + fn evaluate(&self, context: &impl Context) -> Result { + match self { + Expression::Raw(value) => Ok(value.clone()), + Expression::Greater(expr) => expr.evaluate(context).map(Into::into), + Expression::Query(expr) => expr.evaluate(context), + } + } + } + + impl Evaluate for Greater { + type Value = bool; + + fn evaluate(&self, context: &impl Context) -> Result { + let left = self.left.evaluate(context)?; + let right = self.right.evaluate(context)?; + Ok(left > right) + } + } + + impl Evaluate for QueryBox { + type Value = Value; + + fn evaluate(&self, context: &impl Context) -> Result { + context.query(self) + } + } +} diff --git a/client/tests/integration/smartcontracts/executor_custom_data_model/src/lib.rs b/client/tests/integration/smartcontracts/executor_custom_data_model/src/lib.rs new file mode 100644 index 00000000000..62405125d13 --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_data_model/src/lib.rs @@ -0,0 +1,8 @@ +//! Example of custom instructions which can be used in custom executor + +#![no_std] + +extern crate alloc; + +pub mod complex; +pub mod simple; diff --git a/client/tests/integration/smartcontracts/executor_custom_data_model/src/simple.rs b/client/tests/integration/smartcontracts/executor_custom_data_model/src/simple.rs new file mode 100644 index 00000000000..21b63095307 --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_data_model/src/simple.rs @@ -0,0 +1,46 @@ +//! Example of one custom instruction. +//! See `smartcontracts/executor_custom_instructions_simple`. + +use alloc::{format, string::String, vec::Vec}; + +use iroha_data_model::{ + asset::AssetDefinitionId, + isi::{Custom, InstructionBox}, + prelude::Numeric, + JsonString, +}; +use iroha_schema::IntoSchema; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize, Serialize, IntoSchema)] +pub enum CustomInstructionBox { + MintAssetForAllAccounts(MintAssetForAllAccounts), + // Other custom instructions +} + +#[derive(Debug, Deserialize, Serialize, IntoSchema)] +pub struct MintAssetForAllAccounts { + pub asset_definition_id: AssetDefinitionId, + pub quantity: Numeric, +} + +impl From for Custom { + fn from(isi: CustomInstructionBox) -> Self { + let payload = JsonString::serialize(&isi).expect("Couldn't serialize custom instruction"); + Self::new(payload) + } +} + +impl CustomInstructionBox { + pub fn into_instruction(self) -> InstructionBox { + InstructionBox::Custom(self.into()) + } +} + +impl TryFrom<&JsonString> for CustomInstructionBox { + type Error = serde_json::Error; + + fn try_from(payload: &JsonString) -> serde_json::Result { + payload.deserialize() + } +} diff --git a/client/tests/integration/smartcontracts/executor_custom_instructions_complex/Cargo.toml b/client/tests/integration/smartcontracts/executor_custom_instructions_complex/Cargo.toml new file mode 100644 index 00000000000..08d487860ee --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_instructions_complex/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "executor_custom_instructions_complex" + +edition.workspace = true +version.workspace = true +authors.workspace = true + +license.workspace = true + +[lib] +crate-type = ['cdylib'] + +[dependencies] +iroha_executor.workspace = true +iroha_schema.workspace = true +executor_custom_data_model.workspace = true + +serde_json.workspace = true +serde.workspace = true + +panic-halt.workspace = true +lol_alloc.workspace = true +getrandom.workspace = true diff --git a/client/tests/integration/smartcontracts/executor_custom_instructions_complex/src/lib.rs b/client/tests/integration/smartcontracts/executor_custom_instructions_complex/src/lib.rs new file mode 100644 index 00000000000..13cf48b8fab --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_instructions_complex/src/lib.rs @@ -0,0 +1,86 @@ +//! Runtime Executor which extends instruction set with simple expression system. +//! Example of custom expression: +//! "If specific user has more then X amount of specific asset, burn Y amount of that asset" +//! This is expressed as [ConditionalExpr] with [Expression::Greater] and [Expression::Query] as condition. +//! Note that only few expressions are implemented to demonstrate proof-of-concept. + +#![no_std] + +extern crate alloc; +#[cfg(not(test))] +extern crate panic_halt; + +use executor_custom_data_model::complex::{ + ConditionalExpr, CoreExpr, CustomInstructionExpr, Evaluate, Value, +}; +use iroha_executor::{ + data_model::{isi::Custom, query::QueryOutputBox}, + prelude::*, +}; +use lol_alloc::{FreeListAllocator, LockedAllocator}; + +#[global_allocator] +static ALLOC: LockedAllocator = LockedAllocator::new(FreeListAllocator::new()); + +getrandom::register_custom_getrandom!(iroha_executor::stub_getrandom); + +#[derive(Constructor, ValidateEntrypoints, Validate, Visit)] +#[visit(custom(visit_custom))] +struct Executor { + verdict: Result, + block_height: u64, +} + +fn visit_custom(executor: &mut Executor, _authority: &AccountId, isi: &Custom) { + let Ok(isi) = CustomInstructionExpr::try_from(isi.payload()) else { + deny!(executor, "Failed to parse custom instruction"); + }; + match execute_custom_instruction(isi) { + Ok(()) => return, + Err(err) => { + deny!(executor, err); + } + } +} + +fn execute_custom_instruction(isi: CustomInstructionExpr) -> Result<(), ValidationFail> { + match isi { + CustomInstructionExpr::Core(isi) => execute_core(isi), + CustomInstructionExpr::If(isi) => execute_if(*isi), + } +} + +fn execute_core(isi: CoreExpr) -> Result<(), ValidationFail> { + let isi = isi.object.evaluate(&Context)?; + isi.execute() +} + +fn execute_if(isi: ConditionalExpr) -> Result<(), ValidationFail> { + let condition = isi.condition.evaluate(&Context)?; + if condition { + execute_custom_instruction(isi.then) + } else { + Ok(()) + } +} + +struct Context; + +impl executor_custom_data_model::complex::Context for Context { + fn query(&self, query: &QueryBox) -> Result { + // Note: supported only queries which return numeric result + match query.execute()?.into_inner() { + QueryOutputBox::Numeric(value) => Ok(Value::Numeric(value)), + _ => unimplemented!(), + } + } +} + +#[entrypoint] +pub fn migrate(_block_height: u64) -> MigrationResult { + DataModelBuilder::with_default_permissions() + .with_custom_instruction::() + .build_and_set(); + + Ok(()) +} diff --git a/client/tests/integration/smartcontracts/executor_custom_instructions_simple/Cargo.toml b/client/tests/integration/smartcontracts/executor_custom_instructions_simple/Cargo.toml new file mode 100644 index 00000000000..acae74a475c --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_instructions_simple/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "executor_custom_instructions_simple" + +edition.workspace = true +version.workspace = true +authors.workspace = true + +license.workspace = true + +[lib] +crate-type = ['cdylib'] + +[dependencies] +iroha_executor.workspace = true +iroha_schema.workspace = true +executor_custom_data_model.workspace = true + +serde_json.workspace = true +serde.workspace = true + +panic-halt.workspace = true +lol_alloc.workspace = true +getrandom.workspace = true diff --git a/client/tests/integration/smartcontracts/executor_custom_instructions_simple/src/lib.rs b/client/tests/integration/smartcontracts/executor_custom_instructions_simple/src/lib.rs new file mode 100644 index 00000000000..37c7c1bdfc0 --- /dev/null +++ b/client/tests/integration/smartcontracts/executor_custom_instructions_simple/src/lib.rs @@ -0,0 +1,64 @@ +//! Runtime Executor which extends instruction set with one custom instruction - [MintAssetForAllAccounts]. +//! This instruction is handled in executor, and translates to multiple usual ISIs. +//! It is possible to use queries during execution. + +#![no_std] + +extern crate alloc; +#[cfg(not(test))] +extern crate panic_halt; + +use executor_custom_data_model::simple::{CustomInstructionBox, MintAssetForAllAccounts}; +use iroha_executor::{data_model::isi::Custom, debug::DebugExpectExt, prelude::*}; +use lol_alloc::{FreeListAllocator, LockedAllocator}; + +#[global_allocator] +static ALLOC: LockedAllocator = LockedAllocator::new(FreeListAllocator::new()); + +getrandom::register_custom_getrandom!(iroha_executor::stub_getrandom); + +#[derive(Constructor, ValidateEntrypoints, Validate, Visit)] +#[visit(custom(visit_custom))] +struct Executor { + verdict: Result, + block_height: u64, +} + +fn visit_custom(executor: &mut Executor, _authority: &AccountId, isi: &Custom) { + let Ok(isi) = CustomInstructionBox::try_from(isi.payload()) else { + deny!(executor, "Failed to parse custom instruction"); + }; + match execute_custom_instruction(isi) { + Ok(()) => return, + Err(err) => { + deny!(executor, err); + } + } +} + +fn execute_custom_instruction(isi: CustomInstructionBox) -> Result<(), ValidationFail> { + match isi { + CustomInstructionBox::MintAssetForAllAccounts(isi) => { + execute_mint_asset_for_all_accounts(isi) + } + } +} + +fn execute_mint_asset_for_all_accounts(isi: MintAssetForAllAccounts) -> Result<(), ValidationFail> { + let accounts = FindAccountsWithAsset::new(isi.asset_definition_id.clone()).execute()?; + for account in accounts { + let account = account.dbg_expect("Failed to get accounts with asset"); + let asset_id = AssetId::new(isi.asset_definition_id.clone(), account.id().clone()); + Mint::asset_numeric(isi.quantity, asset_id).execute()?; + } + Ok(()) +} + +#[entrypoint] +pub fn migrate(_block_height: u64) -> MigrationResult { + DataModelBuilder::with_default_permissions() + .with_custom_instruction::() + .build_and_set(); + + Ok(()) +} diff --git a/client/tests/integration/upgrade.rs b/client/tests/integration/upgrade.rs index 1a4f998d87f..23954f4ac08 100644 --- a/client/tests/integration/upgrade.rs +++ b/client/tests/integration/upgrade.rs @@ -7,10 +7,11 @@ use iroha::{ crypto::KeyPair, data_model::prelude::*, }; +use iroha_data_model::parameter::{default::EXECUTOR_FUEL_LIMIT, ParametersBuilder}; use iroha_logger::info; use serde_json::json; use test_network::*; -use test_samples::ALICE_ID; +use test_samples::{ALICE_ID, BOB_ID}; use tokio::sync::mpsc; const ADMIN_PUBLIC_KEY_MULTIHASH: &str = @@ -197,6 +198,121 @@ fn executor_upgrade_should_revoke_removed_permissions() -> Result<()> { Ok(()) } +#[test] +fn executor_custom_instructions_simple() -> Result<()> { + use executor_custom_data_model::simple::{CustomInstructionBox, MintAssetForAllAccounts}; + + let (_rt, _peer, client) = ::new().with_port(11_270).start_with_runtime(); + wait_for_genesis_committed(&vec![client.clone()], 0); + + upgrade_executor( + &client, + "tests/integration/smartcontracts/executor_custom_instructions_simple", + )?; + + let asset_definition_id: AssetDefinitionId = "rose#wonderland".parse().unwrap(); + + // Give 1 rose to bob + let bob_rose = AssetId::new(asset_definition_id.clone(), BOB_ID.clone()); + client.submit_blocking(Mint::asset_numeric(Numeric::from(1u32), bob_rose.clone()))?; + + // Check that bob has 1 rose + assert_eq!( + client.request(FindAssetQuantityById::new(bob_rose.clone()))?, + Numeric::from(1u32) + ); + + // Give 1 rose to all + let isi = MintAssetForAllAccounts { + asset_definition_id, + quantity: Numeric::from(1u32), + }; + let isi = CustomInstructionBox::MintAssetForAllAccounts(isi); + client.submit_blocking(isi.into_instruction())?; + + // Check that bob has 2 roses + assert_eq!( + client.request(FindAssetQuantityById::new(bob_rose.clone()))?, + Numeric::from(2u32) + ); + + Ok(()) +} + +#[test] +fn executor_custom_instructions_complex() -> Result<()> { + use executor_custom_data_model::complex::{ + ConditionalExpr, CoreExpr, CustomInstructionExpr, EvaluatesTo, Expression, Greater, + }; + use iroha_config::parameters::actual::Root as Config; + + let mut config = Config::test(); + // Note that this value will be overwritten by genesis block with NewParameter ISI + // But it will be needed after NewParameter removal in #4597 + config.chain_wide.executor_runtime.fuel_limit = 1_000_000_000; + + let (_rt, _peer, client) = PeerBuilder::new() + .with_port(11_275) + .with_config(config) + .start_with_runtime(); + wait_for_genesis_committed(&vec![client.clone()], 0); + + // Remove this after #4597 - config value will be used (see above) + let parameters = ParametersBuilder::new() + .add_parameter(EXECUTOR_FUEL_LIMIT, Numeric::from(1_000_000_000_u32))? + .into_set_parameters(); + client.submit_all_blocking(parameters)?; + + upgrade_executor( + &client, + "tests/integration/smartcontracts/executor_custom_instructions_complex", + )?; + + // Give 6 roses to bob + let asset_definition_id: AssetDefinitionId = "rose#wonderland".parse().unwrap(); + let bob_rose = AssetId::new(asset_definition_id.clone(), BOB_ID.clone()); + client.submit_blocking(Mint::asset_numeric(Numeric::from(6u32), bob_rose.clone()))?; + + // Check that bob has 6 roses + assert_eq!( + client.request(FindAssetQuantityById::new(bob_rose.clone()))?, + Numeric::from(6u32) + ); + + // If bob has more then 5 roses, then burn 1 rose + let burn_bob_rose_if_more_then_5 = || -> Result<()> { + let condition = Greater::new( + EvaluatesTo::new_unchecked(Expression::Query( + FindAssetQuantityById::new(bob_rose.clone()).into(), + )), + Numeric::from(5u32), + ); + let then = Burn::asset_numeric(Numeric::from(1u32), bob_rose.clone()); + let then: InstructionBox = then.into(); + let then = CustomInstructionExpr::Core(CoreExpr::new(then)); + let isi = CustomInstructionExpr::If(Box::new(ConditionalExpr::new(condition, then))); + client.submit_blocking(isi.into_instruction())?; + Ok(()) + }; + burn_bob_rose_if_more_then_5()?; + + // Check that bob has 5 roses + assert_eq!( + client.request(FindAssetQuantityById::new(bob_rose.clone()))?, + Numeric::from(5u32) + ); + + burn_bob_rose_if_more_then_5()?; + + // Check that bob has 5 roses + assert_eq!( + client.request(FindAssetQuantityById::new(bob_rose.clone()))?, + Numeric::from(5u32) + ); + + Ok(()) +} + #[test] fn migration_fail_should_not_cause_any_effects() { let (_rt, _peer, client) = ::new().with_port(10_998).start_with_runtime(); diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index 4c4c8b26ecf571094cea15ec1ba659194fa451e3..eb20b37f59d5c8e74c519a57b4b13469f9746d26 100644 GIT binary patch delta 144917 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%0Au*%W3+J;+t4L?b_RuO#B-fl)67UySJ-BQ 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 delta 143206 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 diff --git a/core/src/smartcontracts/isi/mod.rs b/core/src/smartcontracts/isi/mod.rs index 659f778ecea..46acb4a1fc0 100644 --- a/core/src/smartcontracts/isi/mod.rs +++ b/core/src/smartcontracts/isi/mod.rs @@ -58,6 +58,9 @@ impl Execute for InstructionBox { Self::NewParameter(isi) => isi.execute(authority, state_transaction), Self::Upgrade(isi) => isi.execute(authority, state_transaction), Self::Log(isi) => isi.execute(authority, state_transaction), + Self::Custom(_) => { + panic!("Custom instructions should be handled in custom executor"); + } } } } diff --git a/core/test_network/src/lib.rs b/core/test_network/src/lib.rs index 911d10ee45e..5bec6392ab5 100644 --- a/core/test_network/src/lib.rs +++ b/core/test_network/src/lib.rs @@ -782,15 +782,20 @@ impl TestConfig for Config { } } +// Increased timeout to prevent flaky tests +const TRANSACTION_STATUS_TIMEOUT: Duration = Duration::from_secs(150); + impl TestClientConfig for ClientConfig { fn test(api_address: &SocketAddr) -> Self { - iroha::samples::get_client_config( + let mut config = iroha::samples::get_client_config( get_chain_id(), get_key_pair(Signatory::Alice), format!("http://{api_address}") .parse() .expect("should be valid url"), - ) + ); + config.transaction_status_timeout = TRANSACTION_STATUS_TIMEOUT; + config } } diff --git a/data_model/src/executor.rs b/data_model/src/executor.rs index d0c0b225efd..4e030b1c3b6 100644 --- a/data_model/src/executor.rs +++ b/data_model/src/executor.rs @@ -17,6 +17,8 @@ use crate::{permission::PermissionId, transaction::WasmSmartContract, JsonString #[model] mod model { + use iroha_schema::Ident; + use super::*; /// executor that checks if an operation satisfies some conditions. @@ -81,6 +83,14 @@ mod model { /// /// These IDs refer to the types in the schema. pub permissions: BTreeSet, + /// Type id in the schema. + /// Corresponds to payload of `InstructionBox::Custom`. + /// + /// Note that technically it is not needed + /// (custom instructions can be used without specifying it), + /// however it is recommended to set it, + /// so clients could retrieve it through Iroha API. + pub custom_instruction: Option, /// Data model JSON schema, typically produced by [`IntoSchema`]. pub schema: JsonString, } diff --git a/data_model/src/isi.rs b/data_model/src/isi.rs index 7ca016b30b2..07bb86c0385 100644 --- a/data_model/src/isi.rs +++ b/data_model/src/isi.rs @@ -116,6 +116,8 @@ mod model { Upgrade(Upgrade), #[debug(fmt = "{_0:?}")] Log(Log), + #[debug(fmt = "{_0:?}")] + Custom(Custom), #[debug(fmt = "{_0:?}")] Fail(Fail), @@ -176,6 +178,7 @@ impl_instruction! { Upgrade, ExecuteTrigger, Log, + Custom, Fail, } @@ -187,7 +190,7 @@ impl Instruction for InstructionBox { mod transparent { use super::*; - use crate::{account::NewAccount, domain::NewDomain, metadata::Metadata}; + use crate::{account::NewAccount, domain::NewDomain, metadata::Metadata, JsonString}; macro_rules! isi { ($($meta:meta)* $item:item) => { @@ -997,6 +1000,32 @@ mod transparent { pub msg: String, } } + + isi! { + /// Custom instruction with arbitrary payload. + /// Should be handled in custom executor, where it will be translated to usual ISIs. + /// Can be used to extend instruction set or add expression system. + /// See `executor_custom_instructions_simple` and `executor_custom_instructions_complex` + /// examples in `client/tests/integration/smartcontracts`. + /// + /// Note: If using custom instructions, it is recommended + /// to set `ExecutorDataModel::custom_instruction` in custom executor `migrate` entrypoint. + #[derive(Display)] + #[display(fmt = "CUSTOM({payload})")] + pub struct Custom { + /// Custom payload + pub payload: JsonString, + } + } + + impl Custom { + /// Constructor + pub fn new(payload: impl Into) -> Self { + Self { + payload: payload.into(), + } + } + } } macro_rules! isi_box { @@ -1518,9 +1547,9 @@ pub mod error { /// The prelude re-exports most commonly used traits, structs and macros from this crate. pub mod prelude { pub use super::{ - AssetTransferBox, Burn, BurnBox, ExecuteTrigger, Fail, Grant, GrantBox, InstructionBox, - Log, Mint, MintBox, NewParameter, Register, RegisterBox, RemoveKeyValue, RemoveKeyValueBox, - Revoke, RevokeBox, SetKeyValue, SetKeyValueBox, SetParameter, Transfer, TransferBox, - Unregister, UnregisterBox, Upgrade, + AssetTransferBox, Burn, BurnBox, Custom, ExecuteTrigger, Fail, Grant, GrantBox, + InstructionBox, Log, Mint, MintBox, NewParameter, Register, RegisterBox, RemoveKeyValue, + RemoveKeyValueBox, Revoke, RevokeBox, SetKeyValue, SetKeyValueBox, SetParameter, Transfer, + TransferBox, Unregister, UnregisterBox, Upgrade, }; } diff --git a/data_model/src/lib.rs b/data_model/src/lib.rs index c856e2f13f8..08973b8fee3 100644 --- a/data_model/src/lib.rs +++ b/data_model/src/lib.rs @@ -121,6 +121,7 @@ mod seal { Upgrade, ExecuteTrigger, Log, + Custom, Fail, // Boxed queries diff --git a/data_model/src/transaction.rs b/data_model/src/transaction.rs index 081e0a514f9..9b8bbc83c8c 100644 --- a/data_model/src/transaction.rs +++ b/data_model/src/transaction.rs @@ -583,6 +583,7 @@ pub mod error { NewParameter(_) => "new parameter", Upgrade(_) => "upgrade", Log(_) => "log", + Custom(_) => "custom", }; write!( f, diff --git a/data_model/src/visit.rs b/data_model/src/visit.rs index 7369ba377b5..bf0dcfacdf0 100644 --- a/data_model/src/visit.rs +++ b/data_model/src/visit.rs @@ -43,6 +43,7 @@ pub trait Visit { visit_new_parameter(&NewParameter), visit_set_parameter(&SetParameter), visit_log(&Log), + visit_custom(&Custom), // Visit QueryBox visit_find_account_by_id(&FindAccountById), @@ -259,6 +260,7 @@ pub fn visit_instruction( visitor.visit_unregister(authority, variant_value) } InstructionBox::Upgrade(variant_value) => visitor.visit_upgrade(authority, variant_value), + InstructionBox::Custom(custom) => visitor.visit_custom(authority, custom), } } @@ -431,6 +433,7 @@ leaf_visitors! { visit_execute_trigger(&ExecuteTrigger), visit_fail(&Fail), visit_log(&Log), + visit_custom(&Custom), // Query visitors visit_find_account_by_id(&FindAccountById), diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 649fee7573d..cc30a9c8d14 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -833,6 +833,14 @@ } ] }, + "Custom": { + "Struct": [ + { + "name": "payload", + "type": "JsonString" + } + ] + }, "DataEvent": { "Enum": [ { @@ -1197,6 +1205,10 @@ "name": "permissions", "type": "SortedVec" }, + { + "name": "custom_instruction", + "type": "Option" + }, { "name": "schema", "type": "JsonString" @@ -1858,8 +1870,13 @@ "type": "Log" }, { - "tag": "Fail", + "tag": "Custom", "discriminant": 14, + "type": "Custom" + }, + { + "tag": "Fail", + "discriminant": 15, "type": "Fail" } ] @@ -2013,8 +2030,12 @@ "discriminant": 13 }, { - "tag": "Fail", + "tag": "Custom", "discriminant": 14 + }, + { + "tag": "Fail", + "discriminant": 15 } ] }, diff --git a/schema/gen/src/lib.rs b/schema/gen/src/lib.rs index c1735b9056e..df52d034650 100644 --- a/schema/gen/src/lib.rs +++ b/schema/gen/src/lib.rs @@ -117,6 +117,7 @@ types!( ConstVec, Container, ClientQueryPayload, + Custom, DataEvent, DataEventFilter, Domain, diff --git a/smart_contract/executor/derive/src/default.rs b/smart_contract/executor/derive/src/default.rs index 14b58d0bd73..6b436fc7019 100644 --- a/smart_contract/executor/derive/src/default.rs +++ b/smart_contract/executor/derive/src/default.rs @@ -159,6 +159,7 @@ pub fn impl_derive_visit(emitter: &mut Emitter, input: &syn::DeriveInput) -> Tok "fn visit_new_parameter(operation: &NewParameter)", "fn visit_upgrade(operation: &Upgrade)", "fn visit_log(operation: &Log)", + "fn visit_custom(operation: &Custom)", "fn visit_fail(operation: &Fail)", ] .into_iter() diff --git a/smart_contract/executor/src/default.rs b/smart_contract/executor/src/default.rs index 9ab7113e4c3..26c4a6707b3 100644 --- a/smart_contract/executor/src/default.rs +++ b/smart_contract/executor/src/default.rs @@ -19,6 +19,7 @@ pub use asset_definition::{ visit_set_asset_definition_key_value, visit_transfer_asset_definition, visit_unregister_asset_definition, }; +pub use custom::visit_custom; pub use domain::{ visit_register_domain, visit_remove_domain_key_value, visit_set_domain_key_value, visit_transfer_domain, visit_unregister_domain, @@ -130,6 +131,9 @@ pub fn visit_instruction( InstructionBox::Upgrade(isi) => { executor.visit_upgrade(authority, isi); } + InstructionBox::Custom(isi) => { + executor.visit_custom(authority, isi); + } } } @@ -1702,6 +1706,21 @@ pub mod log { } } +pub mod custom { + use super::*; + + pub fn visit_custom( + executor: &mut V, + _authority: &AccountId, + _isi: &Custom, + ) { + deny!( + executor, + "Custom instructions should be handled in custom executor" + ) + } +} + pub mod fail { use super::*; diff --git a/smart_contract/executor/src/lib.rs b/smart_contract/executor/src/lib.rs index 08281ae3b3d..6672ba232ad 100644 --- a/smart_contract/executor/src/lib.rs +++ b/smart_contract/executor/src/lib.rs @@ -10,6 +10,7 @@ use alloc::collections::BTreeSet; use data_model::{executor::Result, ValidationFail}; #[cfg(not(test))] use data_model::{prelude::*, smart_contract::payloads}; +use iroha_schema::Ident; pub use iroha_schema::MetaMap; pub use iroha_smart_contract as smart_contract; pub use iroha_smart_contract_utils::{debug, encode_with_length_prefix}; @@ -189,6 +190,7 @@ pub enum TryFromDataModelObjectError { pub struct DataModelBuilder { schema: MetaMap, permissions: BTreeSet, + custom_instruction: Option, } impl DataModelBuilder { @@ -199,6 +201,7 @@ impl DataModelBuilder { Self { schema: <_>::default(), permissions: <_>::default(), + custom_instruction: None, } } @@ -226,6 +229,15 @@ impl DataModelBuilder { self } + /// Define a type of custom instruction in the data model. + /// Corresponds to payload of `InstructionBox::Custom`. + #[must_use] + pub fn with_custom_instruction(mut self) -> Self { + T::update_schema_map(&mut self.schema); + self.custom_instruction = Some(T::type_name()); + self + } + /// Remove a permission from the data model #[must_use] pub fn remove_permission(mut self) -> Self { @@ -240,6 +252,7 @@ impl DataModelBuilder { pub fn build_and_set(self) { set_data_model(&ExecutorDataModel::new( self.permissions, + self.custom_instruction, data_model::JsonString::serialize(&self.schema) .expect("schema serialization must not fail"), ))