From dc6a0c642a3af2ca89974e0d9d01029ca28cacbf Mon Sep 17 00:00:00 2001 From: Shanin Roman <40040452+Erigara@users.noreply.github.com> Date: Mon, 8 Jul 2024 22:05:18 +0300 Subject: [PATCH] feat!: speicfy on-chain parameters explicitly in genesis (#4812) Signed-off-by: Shanin Roman --- configs/swarm/executor.wasm | Bin 501671 -> 501625 bytes configs/swarm/genesis.json | 110 ++++++++++++--------------- data_model/src/block.rs | 4 +- data_model/src/parameter.rs | 2 +- docs/source/references/schema.json | 7 ++ genesis/src/lib.rs | 48 ++++++++++-- tools/kagami/src/genesis/generate.rs | 10 +-- 7 files changed, 104 insertions(+), 77 deletions(-) diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index 0fefcfab3a16f99bf13394c0edce678eef5e1c23..26823f64271cd011d36efd95f765c919b391a849 100644 GIT binary patch delta 52884 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 z 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 KPHpUs+W$WSN0hDr delta 52426 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ª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 2 { + if transactions.len() > 3 { return Err( - "Genesis block must have one or two transactions (first with executor upgrade)", + "Genesis block must have 1 to 3 transactions (executor upgrade, parameters, other isi)", ); } diff --git a/data_model/src/parameter.rs b/data_model/src/parameter.rs index 4841549d353..afff07b46d7 100644 --- a/data_model/src/parameter.rs +++ b/data_model/src/parameter.rs @@ -377,7 +377,7 @@ impl Parameters { .map(Parameter::Sumeragi) .chain(self.block.parameters().map(Parameter::Block)) .chain(self.transaction.parameters().map(Parameter::Transaction)) - .chain(self.executor.parameters().map(Parameter::SmartContract)) + .chain(self.executor.parameters().map(Parameter::Executor)) .chain( self.smart_contract .parameters() diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index b8ef73c6e7e..ec3064d9867 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -3175,6 +3175,10 @@ "name": "executor", "type": "String" }, + { + "name": "parameters", + "type": "Vec" + }, { "name": "instructions", "type": "Vec" @@ -4558,6 +4562,9 @@ "Vec": { "Vec": "InstructionBox" }, + "Vec": { + "Vec": "Parameter" + }, "Vec": { "Vec": "PeerId" }, diff --git a/genesis/src/lib.rs b/genesis/src/lib.rs index fcecd5b0772..078ba4bc2f1 100644 --- a/genesis/src/lib.rs +++ b/genesis/src/lib.rs @@ -10,7 +10,7 @@ use std::{ use eyre::{eyre, Result, WrapErr}; use iroha_crypto::{KeyPair, PublicKey}; -use iroha_data_model::{block::SignedBlock, isi::Instruction, prelude::*}; +use iroha_data_model::{block::SignedBlock, isi::Instruction, parameter::Parameter, prelude::*}; use iroha_schema::IntoSchema; use once_cell::sync::Lazy; use parity_scale_codec::{Decode, Encode}; @@ -37,6 +37,9 @@ pub struct RawGenesisTransaction { chain: ChainId, /// Path to the [`Executor`] file executor: ExecutorPath, + /// Parameters + #[serde(default)] + parameters: Vec, instructions: Vec, /// Initial topology topology: Vec, @@ -105,6 +108,7 @@ impl RawGenesisTransaction { self.chain, genesis_key_pair, self.topology, + self.parameters, ); Ok(genesis) } @@ -116,8 +120,15 @@ fn build_and_sign_genesis( chain_id: ChainId, genesis_key_pair: &KeyPair, topology: Vec, + parameters: Vec, ) -> GenesisBlock { - let transactions = build_transactions(instructions, executor, chain_id, genesis_key_pair); + let transactions = build_transactions( + instructions, + executor, + parameters, + chain_id, + genesis_key_pair, + ); let block = SignedBlock::genesis(transactions, genesis_key_pair.private_key(), topology); GenesisBlock(block) } @@ -125,18 +136,31 @@ fn build_and_sign_genesis( fn build_transactions( instructions: Vec, executor: Executor, + parameters: Vec, chain_id: ChainId, genesis_key_pair: &KeyPair, ) -> Vec { let upgrade_isi = Upgrade::new(executor).into(); let transaction_executor = build_transaction(vec![upgrade_isi], chain_id.clone(), genesis_key_pair); - if instructions.is_empty() { - vec![transaction_executor] - } else { + let mut transactions = vec![transaction_executor]; + if !parameters.is_empty() { + let parameters = build_transaction( + parameters + .into_iter() + .map(SetParameter) + .map(InstructionBox::from) + .collect(), + chain_id.clone(), + genesis_key_pair, + ); + transactions.push(parameters); + } + if !instructions.is_empty() { let transaction_instructions = build_transaction(instructions, chain_id, genesis_key_pair); - vec![transaction_executor, transaction_instructions] + transactions.push(transaction_instructions); } + transactions } fn build_transaction( @@ -166,6 +190,7 @@ fn get_executor(file: &Path) -> Result { #[derive(Default)] pub struct GenesisBuilder { instructions: Vec, + parameters: Vec, } /// `Domain` subsection of the [`GenesisBuilder`]. Makes @@ -174,6 +199,7 @@ pub struct GenesisBuilder { #[must_use] pub struct GenesisDomainBuilder { instructions: Vec, + parameters: Vec, domain_id: DomainId, } @@ -196,6 +222,7 @@ impl GenesisBuilder { self.instructions.push(Register::domain(new_domain).into()); GenesisDomainBuilder { instructions: self.instructions, + parameters: self.parameters, domain_id, } } @@ -206,6 +233,12 @@ impl GenesisBuilder { self } + /// Add parameter to the end of parameter list + pub fn append_parameter(mut self, parameter: Parameter) -> Self { + self.parameters.push(parameter); + self + } + /// Finish building, sign, and produce a [`GenesisBlock`]. pub fn build_and_sign( self, @@ -220,6 +253,7 @@ impl GenesisBuilder { chain_id, genesis_key_pair, topology, + self.parameters, ) } @@ -233,6 +267,7 @@ impl GenesisBuilder { RawGenesisTransaction { instructions: self.instructions, executor: ExecutorPath(executor_file), + parameters: self.parameters, chain: chain_id, topology, } @@ -245,6 +280,7 @@ impl GenesisDomainBuilder { pub fn finish_domain(self) -> GenesisBuilder { GenesisBuilder { instructions: self.instructions, + parameters: self.parameters, } } diff --git a/tools/kagami/src/genesis/generate.rs b/tools/kagami/src/genesis/generate.rs index e8e0d409479..6615f69180b 100644 --- a/tools/kagami/src/genesis/generate.rs +++ b/tools/kagami/src/genesis/generate.rs @@ -139,10 +139,11 @@ pub fn generate_default( .into(); let parameters = Parameters::default(); - let set_parameters = parameters - .parameters() - .map(SetParameter) - .map(InstructionBox::from); + let parameters = parameters.parameters(); + + for parameter in parameters { + builder = builder.append_parameter(parameter); + } for isi in [ mint.into(), @@ -153,7 +154,6 @@ pub fn generate_default( ] .into_iter() .chain(std::iter::once(register_user_metadata_access)) - .chain(set_parameters) { builder = builder.append_instruction(isi); }