From 04a53627e51f21d4fa34a3a366c8abc69d293e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20Ver=C5=A1i=C4=87?= Date: Tue, 9 Jan 2024 16:39:59 +0300 Subject: [PATCH] [feature] #4126: Add chain_id to prevent replay attacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marin Veršić --- cli/src/lib.rs | 22 +- cli/src/samples.rs | 17 +- client/benches/torii.rs | 22 +- client/benches/tps/utils.rs | 4 +- client/examples/million_accounts_genesis.rs | 11 +- client/src/client.rs | 7 +- client/src/lib.rs | 3 +- client/tests/integration/asset.rs | 10 +- client/tests/integration/burn_public_keys.rs | 2 +- client/tests/integration/domain_owner.rs | 5 +- client/tests/integration/permissions.rs | 10 +- client/tests/integration/roles.rs | 2 +- client/tests/integration/unregister_peer.rs | 13 +- client/tests/integration/upgrade.rs | 4 +- config/iroha_test_config.json | 1 + config/src/client.rs | 23 +- config/src/iroha.rs | 12 +- configs/client/config.json | 5 +- configs/peer/config.json | 1 + configs/peer/executor.wasm | Bin 390610 -> 445440 bytes core/benches/blocks/common.rs | 6 +- core/benches/kura.rs | 15 +- core/benches/validation.rs | 51 +- core/src/block.rs | 42 +- core/src/gossiper.rs | 12 +- core/src/queue.rs | 31 +- core/src/smartcontracts/isi/query.rs | 18 +- core/src/sumeragi/main_loop.rs | 791 ++++++++++--------- core/src/sumeragi/mod.rs | 10 +- core/src/tx.rs | 37 +- core/test_network/src/lib.rs | 28 +- data_model/src/transaction.rs | 5 +- docker-compose.dev.local.yml | 4 + docker-compose.dev.single.yml | 1 + docker-compose.dev.yml | 4 + docs/source/references/schema.json | 4 + ffi/derive/src/attr_parse/derive.rs | 4 +- genesis/src/lib.rs | 17 +- scripts/test_env.py | 1 + tools/kagami/src/config.rs | 1 + tools/swarm/src/compose.rs | 40 +- torii/src/lib.rs | 7 +- torii/src/routing.rs | 3 +- 43 files changed, 764 insertions(+), 542 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index b63e0880efd..7d4f9723772 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -251,6 +251,7 @@ impl Iroha { let kura_thread_handler = Kura::start(Arc::clone(&kura)); let sumeragi = SumeragiHandle::start(SumeragiStartArgs { + chain_id: config.chain_id, configuration: &config.sumeragi, events_sender: events_sender.clone(), wsv, @@ -271,6 +272,7 @@ impl Iroha { .start(); let gossiper = TransactionGossiper::from_configuration( + config.chain_id, &config.sumeragi, network.clone(), Arc::clone(&queue), @@ -300,6 +302,7 @@ impl Iroha { let kiso = KisoHandle::new(config.clone()); let torii = Torii::new( + config.chain_id, kiso.clone(), &config.torii, Arc::clone(&queue), @@ -579,7 +582,7 @@ pub fn read_config( .wrap_err("Invalid genesis configuration")? { Some( - GenesisNetwork::new(raw_block, &key_pair) + GenesisNetwork::new(raw_block, config.chain_id, &key_pair) .wrap_err("Failed to construct the genesis")?, ) } else { @@ -630,21 +633,24 @@ mod tests { use super::*; fn config_factory() -> Result { - let mut base = ConfigurationProxy::default(); - let key_pair = KeyPair::generate()?; - base.public_key = Some(key_pair.public_key().clone()); - base.private_key = Some(key_pair.private_key().clone()); + let mut base = ConfigurationProxy { + chain_id: Some(0), - let torii = base.torii.as_mut().unwrap(); - torii.p2p_addr = Some(socket_addr!(127.0.0.1:1337)); - torii.api_url = Some(socket_addr!(127.0.0.1:1337)); + public_key: Some(key_pair.public_key().clone()), + private_key: Some(key_pair.private_key().clone()), + ..ConfigurationProxy::default() + }; let genesis = base.genesis.as_mut().unwrap(); genesis.private_key = Some(Some(key_pair.private_key().clone())); genesis.public_key = Some(key_pair.public_key().clone()); + let torii = base.torii.as_mut().unwrap(); + torii.p2p_addr = Some(socket_addr!(127.0.0.1:1337)); + torii.api_url = Some(socket_addr!(127.0.0.1:1337)); + Ok(base) } diff --git a/cli/src/samples.rs b/cli/src/samples.rs index 1a59f2b0a25..3670be9cf7e 100644 --- a/cli/src/samples.rs +++ b/cli/src/samples.rs @@ -52,12 +52,19 @@ pub fn get_trusted_peers(public_key: Option<&PublicKey>) -> HashSet { /// /// # Panics /// - when [`KeyPair`] generation fails (rare case). -pub fn get_config_proxy(peers: UniqueVec, key_pair: Option) -> ConfigurationProxy { +pub fn get_config_proxy( + peers: UniqueVec, + chain_id: Option, + key_pair: Option, +) -> ConfigurationProxy { + let chain_id = chain_id.unwrap_or(0); + let (public_key, private_key) = key_pair .unwrap_or_else(|| KeyPair::generate().expect("Key pair generation failed")) .into(); iroha_logger::info!(%public_key); ConfigurationProxy { + chain_id: Some(chain_id), public_key: Some(public_key.clone()), private_key: Some(private_key.clone()), sumeragi: Some(Box::new(iroha_config::sumeragi::ConfigurationProxy { @@ -94,8 +101,12 @@ pub fn get_config_proxy(peers: UniqueVec, key_pair: Option) -> /// /// # Panics /// - when [`KeyPair`] generation fails (rare case). -pub fn get_config(trusted_peers: UniqueVec, key_pair: Option) -> Configuration { - get_config_proxy(trusted_peers, key_pair) +pub fn get_config( + trusted_peers: UniqueVec, + chain_id: Option, + key_pair: Option, +) -> Configuration { + get_config_proxy(trusted_peers, chain_id, key_pair) .build() .expect("Iroha config should build as all required fields were provided") } diff --git a/client/benches/torii.rs b/client/benches/torii.rs index 088ec7eb406..400447b29b1 100644 --- a/client/benches/torii.rs +++ b/client/benches/torii.rs @@ -12,7 +12,7 @@ use iroha_client::{ use iroha_genesis::{GenesisNetwork, RawGenesisBlockBuilder}; use iroha_primitives::unique_vec; use iroha_version::Encode; -use test_network::{get_key_pair, Peer as TestPeer, PeerBuilder, TestRuntime}; +use test_network::{get_chain_id, get_key_pair, Peer as TestPeer, PeerBuilder, TestRuntime}; use tokio::runtime::Runtime; const MINIMUM_SUCCESS_REQUEST_RATIO: f32 = 0.9; @@ -30,7 +30,11 @@ fn get_genesis_key_pair(config: &iroha_config::iroha::Configuration) -> KeyPair fn query_requests(criterion: &mut Criterion) { let mut peer = ::new().expect("Failed to create peer"); - let configuration = get_config(unique_vec![peer.id.clone()], Some(get_key_pair())); + let configuration = get_config( + unique_vec![peer.id.clone()], + Some(get_chain_id()), + Some(get_key_pair()), + ); let rt = Runtime::test(); let genesis = GenesisNetwork::new( @@ -45,6 +49,7 @@ fn query_requests(criterion: &mut Criterion) { construct_executor("../default_executor").expect("Failed to construct executor"), ) .build(), + get_chain_id(), &get_genesis_key_pair(&configuration), ) .expect("genesis creation failed"); @@ -76,7 +81,8 @@ fn query_requests(criterion: &mut Criterion) { quantity, AssetId::new(asset_definition_id, account_id.clone()), ); - let mut client_config = iroha_client::samples::get_client_config(&get_key_pair()); + let mut client_config = + iroha_client::samples::get_client_config(get_chain_id(), &get_key_pair()); client_config.torii_api_url = format!("http://{}", peer.api_address).parse().unwrap(); @@ -130,7 +136,11 @@ fn instruction_submits(criterion: &mut Criterion) { println!("instruction submits"); let rt = Runtime::test(); let mut peer = ::new().expect("Failed to create peer"); - let configuration = get_config(unique_vec![peer.id.clone()], Some(get_key_pair())); + let configuration = get_config( + unique_vec![peer.id.clone()], + Some(get_chain_id()), + Some(get_key_pair()), + ); let genesis = GenesisNetwork::new( RawGenesisBlockBuilder::default() .domain("wonderland".parse().expect("Valid")) @@ -143,6 +153,7 @@ fn instruction_submits(criterion: &mut Criterion) { construct_executor("../default_executor").expect("Failed to construct executor"), ) .build(), + get_chain_id(), &get_genesis_key_pair(&configuration), ) .expect("failed to create genesis"); @@ -159,7 +170,8 @@ fn instruction_submits(criterion: &mut Criterion) { .into(); let create_account = Register::account(Account::new(account_id.clone(), [public_key])).into(); let asset_definition_id = AssetDefinitionId::new("xor".parse().expect("Valid"), domain_id); - let mut client_config = iroha_client::samples::get_client_config(&get_key_pair()); + let mut client_config = + iroha_client::samples::get_client_config(get_chain_id(), &get_key_pair()); client_config.torii_api_url = format!("http://{}", peer.api_address).parse().unwrap(); let iroha_client = Client::new(&client_config).expect("Invalid client configuration"); thread::sleep(std::time::Duration::from_millis(5000)); diff --git a/client/benches/tps/utils.rs b/client/benches/tps/utils.rs index c1a3494260f..21260ff56a9 100644 --- a/client/benches/tps/utils.rs +++ b/client/benches/tps/utils.rs @@ -207,6 +207,8 @@ impl MeasurerUnit { /// Spawn who periodically submits transactions fn spawn_transaction_submitter(&self, shutdown_signal: mpsc::Receiver<()>) -> JoinHandle<()> { + let chain_id = 0; + let submitter = self.client.clone(); let interval_us_per_tx = self.config.interval_us_per_tx; let instructions = self.instructions(); @@ -218,7 +220,7 @@ impl MeasurerUnit { for instruction in instructions { match shutdown_signal.try_recv() { Err(mpsc::TryRecvError::Empty) => { - let mut transaction = TransactionBuilder::new(alice_id.clone()) + let mut transaction = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions([instruction]); transaction.set_nonce(nonce); // Use nonce to avoid transaction duplication within the same thread diff --git a/client/examples/million_accounts_genesis.rs b/client/examples/million_accounts_genesis.rs index a6de431c796..32e1766e9e6 100644 --- a/client/examples/million_accounts_genesis.rs +++ b/client/examples/million_accounts_genesis.rs @@ -7,7 +7,8 @@ use iroha_data_model::isi::InstructionBox; use iroha_genesis::{GenesisNetwork, RawGenesisBlock, RawGenesisBlockBuilder}; use iroha_primitives::unique_vec; use test_network::{ - get_key_pair, wait_for_genesis_committed, Peer as TestPeer, PeerBuilder, TestRuntime, + get_chain_id, get_key_pair, wait_for_genesis_committed, Peer as TestPeer, PeerBuilder, + TestRuntime, }; use tokio::runtime::Runtime; @@ -36,9 +37,13 @@ fn generate_genesis(num_domains: u32) -> RawGenesisBlock { fn main_genesis() { let mut peer = ::new().expect("Failed to create peer"); - let configuration = get_config(unique_vec![peer.id.clone()], Some(get_key_pair())); + let configuration = get_config( + unique_vec![peer.id.clone()], + Some(get_chain_id()), + Some(get_key_pair()), + ); let rt = Runtime::test(); - let genesis = GenesisNetwork::new(generate_genesis(1_000_000_u32), &{ + let genesis = GenesisNetwork::new(generate_genesis(1_000_000_u32), get_chain_id(), &{ let private_key = configuration .genesis .private_key diff --git a/client/src/client.rs b/client/src/client.rs index 3a4c7615397..c915971b628 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -344,6 +344,8 @@ impl_query_output! { )] #[display(fmt = "{}@{torii_url}", "key_pair.public_key()")] pub struct Client { + /// Unique id of the blockchain. Used for simple replay attack protection. + pub chain_id: u16, /// Url for accessing iroha node pub torii_url: Url, /// Accounts keypair @@ -440,6 +442,7 @@ impl Client { } Ok(Self { + chain_id: configuration.chain_id, torii_url: configuration.torii_api_url.clone(), key_pair: KeyPair::new( configuration.public_key.clone(), @@ -466,7 +469,7 @@ impl Client { instructions: impl Into, metadata: UnlimitedMetadata, ) -> Result { - let tx_builder = TransactionBuilder::new(self.account_id.clone()); + let tx_builder = TransactionBuilder::new(self.chain_id, self.account_id.clone()); let mut tx_builder = match instructions.into() { Executable::Instructions(instructions) => tx_builder.with_instructions(instructions), @@ -1664,6 +1667,7 @@ mod tests { let (public_key, private_key) = KeyPair::generate().unwrap().into(); let cfg = ConfigurationProxy { + chain_id: Some(0), public_key: Some(public_key), private_key: Some(private_key), account_id: Some( @@ -1706,6 +1710,7 @@ mod tests { }; let cfg = ConfigurationProxy { + chain_id: Some(0), public_key: Some( "ed01207233BFC89DCBD68C19FDE6CE6158225298EC1131B6A130D1AEB454C1AB5183C0" .parse() diff --git a/client/src/lib.rs b/client/src/lib.rs index 78a3cbeac13..21e21f65350 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -15,9 +15,10 @@ pub mod samples { }; /// Get sample client configuration. - pub fn get_client_config(key_pair: &KeyPair) -> Configuration { + pub fn get_client_config(chain_id: u16, key_pair: &KeyPair) -> Configuration { let (public_key, private_key) = key_pair.clone().into(); ConfigurationProxy { + chain_id: Some(chain_id), public_key: Some(public_key), private_key: Some(private_key), account_id: Some( diff --git a/client/tests/integration/asset.rs b/client/tests/integration/asset.rs index 3b151b99ec8..52c8b038e09 100644 --- a/client/tests/integration/asset.rs +++ b/client/tests/integration/asset.rs @@ -277,10 +277,12 @@ fn find_rate_and_make_exchange_isi_should_succeed() { alice_id.clone(), ); - let grant_asset_transfer_tx = TransactionBuilder::new(asset_id.account_id().clone()) - .with_instructions([allow_alice_to_transfer_asset]) - .sign(owner_keypair) - .expect("Failed to sign seller transaction"); + let chain_id = 0; + let grant_asset_transfer_tx = + TransactionBuilder::new(chain_id, asset_id.account_id().clone()) + .with_instructions([allow_alice_to_transfer_asset]) + .sign(owner_keypair) + .expect("Failed to sign seller transaction"); test_client .submit_transaction_blocking(&grant_asset_transfer_tx) diff --git a/client/tests/integration/burn_public_keys.rs b/client/tests/integration/burn_public_keys.rs index f207894995d..d4c0c98846b 100644 --- a/client/tests/integration/burn_public_keys.rs +++ b/client/tests/integration/burn_public_keys.rs @@ -14,7 +14,7 @@ fn submit( eyre::Result>, ) { let tx = if let Some((account_id, keypair)) = submitter { - TransactionBuilder::new(account_id) + TransactionBuilder::new(0, account_id) .with_instructions(instructions) .sign(keypair) .unwrap() diff --git a/client/tests/integration/domain_owner.rs b/client/tests/integration/domain_owner.rs index eeeb881b324..a0f39e0af7d 100644 --- a/client/tests/integration/domain_owner.rs +++ b/client/tests/integration/domain_owner.rs @@ -104,6 +104,7 @@ fn domain_owner_asset_definition_permissions() -> Result<()> { let (_rt, _peer, test_client) = ::new().with_port(11_085).start_with_runtime(); wait_for_genesis_committed(&[test_client.clone()], 0); + let chain_id = 0; let kingdom_id: DomainId = "kingdom".parse()?; let bob_id: AccountId = "bob@kingdom".parse()?; let rabbit_id: AccountId = "rabbit@kingdom".parse()?; @@ -122,7 +123,7 @@ fn domain_owner_asset_definition_permissions() -> Result<()> { // register asset definitions by "bob@kingdom" so he is owner of it let coin = AssetDefinition::quantity(coin_id.clone()); - let transaction = TransactionBuilder::new(bob_id.clone()) + let transaction = TransactionBuilder::new(chain_id, bob_id.clone()) .with_instructions([Register::asset_definition(coin)]) .sign(bob_keypair)?; test_client.submit_transaction_blocking(&transaction)?; @@ -181,7 +182,7 @@ fn domain_owner_asset_permissions() -> Result<()> { // register asset definitions by "bob@kingdom" so he is owner of it let coin = AssetDefinition::quantity(coin_id.clone()); let store = AssetDefinition::store(store_id.clone()); - let transaction = TransactionBuilder::new(bob_id.clone()) + let transaction = TransactionBuilder::new(0, bob_id.clone()) .with_instructions([ Register::asset_definition(coin), Register::asset_definition(store), diff --git a/client/tests/integration/permissions.rs b/client/tests/integration/permissions.rs index a6250427fbd..d1455c6af93 100644 --- a/client/tests/integration/permissions.rs +++ b/client/tests/integration/permissions.rs @@ -94,7 +94,7 @@ fn permissions_disallow_asset_transfer() { quantity, alice_id.clone(), ); - let transfer_tx = TransactionBuilder::new(mouse_id) + let transfer_tx = TransactionBuilder::new(0, mouse_id) .with_instructions([transfer_asset]) .sign(mouse_keypair) .expect("Failed to sign mouse transaction"); @@ -144,7 +144,7 @@ fn permissions_disallow_asset_burn() { quantity, AssetId::new(asset_definition_id, mouse_id.clone()), ); - let burn_tx = TransactionBuilder::new(mouse_id) + let burn_tx = TransactionBuilder::new(0, mouse_id) .with_instructions([burn_asset]) .sign(mouse_keypair) .expect("Failed to sign mouse transaction"); @@ -226,7 +226,7 @@ fn permissions_differ_not_only_by_names() { alice_id.clone(), ); - let grant_hats_access_tx = TransactionBuilder::new(mouse_id.clone()) + let grant_hats_access_tx = TransactionBuilder::new(0, mouse_id.clone()) .with_instructions([allow_alice_to_set_key_value_in_hats]) .sign(mouse_keypair.clone()) .expect("Failed to sign mouse transaction"); @@ -263,7 +263,7 @@ fn permissions_differ_not_only_by_names() { alice_id, ); - let grant_shoes_access_tx = TransactionBuilder::new(mouse_id) + let grant_shoes_access_tx = TransactionBuilder::new(0, mouse_id) .with_instructions([allow_alice_to_set_key_value_in_shoes]) .sign(mouse_keypair) .expect("Failed to sign mouse transaction"); @@ -313,7 +313,7 @@ fn stored_vs_granted_token_payload() -> Result<()> { alice_id, ); - let transaction = TransactionBuilder::new(mouse_id) + let transaction = TransactionBuilder::new(0, mouse_id) .with_instructions([allow_alice_to_set_key_value_in_mouse_asset]) .sign(mouse_keypair) .expect("Failed to sign mouse transaction"); diff --git a/client/tests/integration/roles.rs b/client/tests/integration/roles.rs index ef1884806a3..ceab82cee1a 100644 --- a/client/tests/integration/roles.rs +++ b/client/tests/integration/roles.rs @@ -76,7 +76,7 @@ fn register_and_grant_role_for_metadata_access() -> Result<()> { // Mouse grants role to Alice let grant_role = Grant::role(role_id.clone(), alice_id.clone()); - let grant_role_tx = TransactionBuilder::new(mouse_id.clone()) + let grant_role_tx = TransactionBuilder::new(0, mouse_id.clone()) .with_instructions([grant_role]) .sign(mouse_key_pair)?; test_client.submit_transaction_blocking(&grant_role_tx)?; diff --git a/client/tests/integration/unregister_peer.rs b/client/tests/integration/unregister_peer.rs index 3121bf1de76..16f6ad87c10 100644 --- a/client/tests/integration/unregister_peer.rs +++ b/client/tests/integration/unregister_peer.rs @@ -112,14 +112,11 @@ fn init() -> Result<( let asset_definition_id: AssetDefinitionId = "xor#domain".parse()?; let create_asset = Register::asset_definition(AssetDefinition::quantity(asset_definition_id.clone())); - let instructions = parameters.into_iter().chain( - [ - create_domain.into(), - create_account.into(), - create_asset.into(), - ] - .into_iter(), - ); + let instructions = parameters.into_iter().chain([ + create_domain.into(), + create_account.into(), + create_asset.into(), + ]); client.submit_all_blocking(instructions)?; iroha_logger::info!("Init"); Ok(( diff --git a/client/tests/integration/upgrade.rs b/client/tests/integration/upgrade.rs index 3ec49a84600..a6a5956f0d9 100644 --- a/client/tests/integration/upgrade.rs +++ b/client/tests/integration/upgrade.rs @@ -30,7 +30,7 @@ fn executor_upgrade_should_work() -> Result<()> { let alice_rose: AssetId = "rose##alice@wonderland".parse()?; let admin_rose: AccountId = "admin@admin".parse()?; let transfer_alice_rose = Transfer::asset_quantity(alice_rose, 1_u32, admin_rose); - let transfer_rose_tx = TransactionBuilder::new(admin_id.clone()) + let transfer_rose_tx = TransactionBuilder::new(0, admin_id.clone()) .with_instructions([transfer_alice_rose.clone()]) .sign(admin_keypair.clone())?; let _ = client @@ -44,7 +44,7 @@ fn executor_upgrade_should_work() -> Result<()> { // Check that admin can transfer alice's rose now // Creating new transaction instead of cloning, because we need to update it's creation time - let transfer_rose_tx = TransactionBuilder::new(admin_id) + let transfer_rose_tx = TransactionBuilder::new(0, admin_id) .with_instructions([transfer_alice_rose]) .sign(admin_keypair)?; client diff --git a/config/iroha_test_config.json b/config/iroha_test_config.json index 7a180598bbb..ba1dd4937a3 100644 --- a/config/iroha_test_config.json +++ b/config/iroha_test_config.json @@ -1,4 +1,5 @@ { + "CHAIN_ID": 0, "PUBLIC_KEY": "ed01201C61FAF8FE94E253B93114240394F79A607B7FA55F9E5A41EBEC74B88055768B", "PRIVATE_KEY": { "digest_function": "ed25519", diff --git a/config/src/client.rs b/config/src/client.rs index a9238879cac..8d859e9f8fc 100644 --- a/config/src/client.rs +++ b/config/src/client.rs @@ -6,13 +6,11 @@ use derive_more::Display; use eyre::{Result, WrapErr}; use iroha_config_base::derive::{Error as ConfigError, Proxy}; use iroha_crypto::prelude::*; -use iroha_data_model::{prelude::*, transaction::TransactionLimits}; +use iroha_data_model::prelude::*; use iroha_primitives::small::SmallStr; use serde::{Deserialize, Serialize}; use url::Url; -use crate::wsv::default::DEFAULT_TRANSACTION_LIMITS; - #[allow(unsafe_code)] const DEFAULT_TRANSACTION_TIME_TO_LIVE_MS: NonZeroU64 = unsafe { NonZeroU64::new_unchecked(100_000) }; @@ -69,6 +67,8 @@ pub struct BasicAuth { #[serde(rename_all = "UPPERCASE")] #[config(env_prefix = "IROHA_")] pub struct Configuration { + /// Unique id of the blockchain. Used for simple replay attack protection. + pub chain_id: u16, /// Public key of the user account. #[config(serde_as_str)] pub public_key: PublicKey, @@ -84,13 +84,6 @@ pub struct Configuration { pub transaction_time_to_live_ms: Option, /// Transaction status wait timeout in milliseconds. pub transaction_status_timeout_ms: u64, - /// The limits to which transactions must adhere to - // NOTE: If you want this functionality, implement it in the app manually - #[deprecated( - note = "This parameter is not used and takes no effect and will be removed in future releases. \ - If you want this functionality, implement it in the app manually." - )] - pub transaction_limits: TransactionLimits, /// If `true` add nonce, which make different hashes for transactions which occur repeatedly and simultaneously pub add_transaction_nonce: bool, } @@ -98,6 +91,7 @@ pub struct Configuration { impl Default for ConfigurationProxy { fn default() -> Self { Self { + chain_id: None, public_key: None, private_key: None, account_id: None, @@ -105,7 +99,6 @@ impl Default for ConfigurationProxy { torii_api_url: None, transaction_time_to_live_ms: Some(Some(DEFAULT_TRANSACTION_TIME_TO_LIVE_MS)), transaction_status_timeout_ms: Some(DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS), - transaction_limits: Some(DEFAULT_TRANSACTION_LIMITS), add_transaction_nonce: Some(DEFAULT_ADD_TRANSACTION_NONCE), } } @@ -208,17 +201,17 @@ mod tests { prop_compose! { fn arb_proxy() ( + chain_id in prop::option::of(Just(crate::iroha::tests::placeholder_chain_id())), (public_key, private_key) in arb_keys_with_option(), account_id in prop::option::of(Just(placeholder_account())), basic_auth in prop::option::of(Just(None)), torii_api_url in prop::option::of(Just(format!("http://{DEFAULT_API_ADDR}").parse().unwrap())), transaction_time_to_live_ms in prop::option::of(Just(Some(DEFAULT_TRANSACTION_TIME_TO_LIVE_MS))), transaction_status_timeout_ms in prop::option::of(Just(DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS)), - transaction_limits in prop::option::of(Just(DEFAULT_TRANSACTION_LIMITS)), add_transaction_nonce in prop::option::of(Just(DEFAULT_ADD_TRANSACTION_NONCE)), ) -> ConfigurationProxy { - ConfigurationProxy { public_key, private_key, account_id, basic_auth, torii_api_url, transaction_time_to_live_ms, transaction_status_timeout_ms, transaction_limits, add_transaction_nonce } + ConfigurationProxy { chain_id, public_key, private_key, account_id, basic_auth, torii_api_url, transaction_time_to_live_ms, transaction_status_timeout_ms, add_transaction_nonce } } } @@ -236,10 +229,6 @@ mod tests { assert_eq!(arb_cfg.account_id, example_cfg.account_id); assert_eq!(arb_cfg.transaction_time_to_live_ms, example_cfg.transaction_time_to_live_ms); assert_eq!(arb_cfg.transaction_status_timeout_ms, example_cfg.transaction_status_timeout_ms); - #[allow(deprecated)] // For testing purposes only - { - assert_eq!(arb_cfg.transaction_limits, example_cfg.transaction_limits); - } assert_eq!(arb_cfg.add_transaction_nonce, example_cfg.add_transaction_nonce); } } diff --git a/config/src/iroha.rs b/config/src/iroha.rs index 1946b2571b1..83f806190c1 100644 --- a/config/src/iroha.rs +++ b/config/src/iroha.rs @@ -14,6 +14,8 @@ view! { #[serde(rename_all = "UPPERCASE")] #[config(env_prefix = "IROHA_")] pub struct Configuration { + /// Unique id of the blockchain. Used for simple replay attack protection. + pub chain_id: u16, /// Public key of this peer #[config(serde_as_str)] pub public_key: PublicKey, @@ -64,6 +66,7 @@ view! { impl Default for ConfigurationProxy { fn default() -> Self { Self { + chain_id: None, public_key: None, private_key: None, kura: Some(Box::default()), @@ -165,7 +168,7 @@ impl ConfigurationProxy { } #[cfg(test)] -mod tests { +pub mod tests { use std::path::PathBuf; use proptest::prelude::*; @@ -200,8 +203,13 @@ mod tests { .boxed() } + pub fn placeholder_chain_id() -> u16 { + 0 + } + prop_compose! { fn arb_proxy()( + chain_id in prop::option::of(Just(placeholder_chain_id())), (public_key, private_key) in arb_keys(), kura in prop::option::of(kura::tests::arb_proxy().prop_map(Box::new)), sumeragi in (prop::option::of(sumeragi::tests::arb_proxy().prop_map(Box::new))), @@ -216,7 +224,7 @@ mod tests { snapshot in prop::option::of(snapshot::tests::arb_proxy().prop_map(Box::new)), live_query_store in prop::option::of(live_query_store::tests::arb_proxy()), ) -> ConfigurationProxy { - ConfigurationProxy { public_key, private_key, kura, sumeragi, torii, block_sync, queue, + ConfigurationProxy { chain_id, public_key, private_key, kura, sumeragi, torii, block_sync, queue, logger, genesis, wsv, network, telemetry, snapshot, live_query_store } } } diff --git a/configs/client/config.json b/configs/client/config.json index 5ed2399d626..69c16948d05 100644 --- a/configs/client/config.json +++ b/configs/client/config.json @@ -1,4 +1,5 @@ { + "CHAIN_ID": 0, "PUBLIC_KEY": "ed01207233BFC89DCBD68C19FDE6CE6158225298EC1131B6A130D1AEB454C1AB5183C0", "PRIVATE_KEY": { "digest_function": "ed25519", @@ -12,9 +13,5 @@ "TORII_API_URL": "http://127.0.0.1:8080/", "TRANSACTION_TIME_TO_LIVE_MS": 100000, "TRANSACTION_STATUS_TIMEOUT_MS": 15000, - "TRANSACTION_LIMITS": { - "max_instruction_number": 4096, - "max_wasm_size_bytes": 4194304 - }, "ADD_TRANSACTION_NONCE": false } diff --git a/configs/peer/config.json b/configs/peer/config.json index 3f0dc2f87a9..2695398702f 100644 --- a/configs/peer/config.json +++ b/configs/peer/config.json @@ -1,4 +1,5 @@ { + "CHAIN_ID": null, "PUBLIC_KEY": null, "PRIVATE_KEY": null, "KURA": { diff --git a/configs/peer/executor.wasm b/configs/peer/executor.wasm index 7af36698d6cf6663f58b1f0a0e07e4bcce86101e..e8aa03031098b28dc123b9cb1d5589761e96d48c 100644 GIT binary patch literal 445440 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

$WMTjs63AnRh5%zuHYx7x)<^?% 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 literal 390610 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 UP0z_s0wxS?4$#hX-PDQ_01&KGWdHyG diff --git a/core/benches/blocks/common.rs b/core/benches/blocks/common.rs index 7aef12edd2d..fc8b95a2619 100644 --- a/core/benches/blocks/common.rs +++ b/core/benches/blocks/common.rs @@ -26,7 +26,9 @@ pub fn create_block( account_id: AccountId, key_pair: KeyPair, ) -> CommittedBlock { - let transaction = TransactionBuilder::new(account_id) + let chain_id = 0; + + let transaction = TransactionBuilder::new(chain_id, account_id) .with_instructions(instructions) .sign(key_pair.clone()) .unwrap(); @@ -34,7 +36,7 @@ pub fn create_block( let topology = Topology::new(UniqueVec::new()); let block = BlockBuilder::new( - vec![AcceptedTransaction::accept(transaction, &limits).unwrap()], + vec![AcceptedTransaction::accept(transaction, chain_id, &limits).unwrap()], topology.clone(), Vec::new(), ) diff --git a/core/benches/kura.rs b/core/benches/kura.rs index a47f731e31d..e5acb865fea 100644 --- a/core/benches/kura.rs +++ b/core/benches/kura.rs @@ -19,21 +19,26 @@ use iroha_primitives::unique_vec::UniqueVec; use tokio::{fs, runtime::Runtime}; async fn measure_block_size_for_n_executors(n_executors: u32) { + let chain_id = 0; + let alice_id = AccountId::from_str("alice@test").expect("tested"); let bob_id = AccountId::from_str("bob@test").expect("tested"); let xor_id = AssetDefinitionId::from_str("xor#test").expect("tested"); let alice_xor_id = AssetId::new(xor_id, alice_id); let transfer = Transfer::asset_quantity(alice_xor_id, 10_u32, bob_id); let keypair = KeyPair::generate().expect("Failed to generate KeyPair."); - let tx = TransactionBuilder::new(AccountId::from_str("alice@wonderland").expect("checked")) - .with_instructions([transfer]) - .sign(keypair.clone()) - .expect("Failed to sign."); + let tx = TransactionBuilder::new( + chain_id, + AccountId::from_str("alice@wonderland").expect("checked"), + ) + .with_instructions([transfer]) + .sign(keypair.clone()) + .expect("Failed to sign."); let transaction_limits = TransactionLimits { max_instruction_number: 4096, max_wasm_size_bytes: 0, }; - let tx = AcceptedTransaction::accept(tx, &transaction_limits) + let tx = AcceptedTransaction::accept(tx, chain_id, &transaction_limits) .expect("Failed to accept Transaction."); let dir = tempfile::tempdir().expect("Could not create tempfile."); let cfg = Configuration { diff --git a/core/benches/validation.rs b/core/benches/validation.rs index 3a5bcaefe23..236c28f60e9 100644 --- a/core/benches/validation.rs +++ b/core/benches/validation.rs @@ -23,7 +23,7 @@ const TRANSACTION_LIMITS: TransactionLimits = TransactionLimits { max_wasm_size_bytes: 0, }; -fn build_test_transaction(keys: KeyPair) -> SignedTransaction { +fn build_test_transaction(keys: KeyPair, chain_id: u16) -> SignedTransaction { let domain_name = "domain"; let domain_id = DomainId::from_str(domain_name).expect("does not panic"); let create_domain: InstructionBox = Register::domain(Domain::new(domain_id)).into(); @@ -47,10 +47,13 @@ fn build_test_transaction(keys: KeyPair) -> SignedTransaction { Register::asset_definition(AssetDefinition::quantity(asset_definition_id)).into(); let instructions = [create_domain, create_account, create_asset]; - TransactionBuilder::new(AccountId::new( - START_ACCOUNT.parse().expect("Valid"), - START_DOMAIN.parse().expect("Valid"), - )) + TransactionBuilder::new( + chain_id, + AccountId::new( + START_ACCOUNT.parse().expect("Valid"), + START_DOMAIN.parse().expect("Valid"), + ), + ) .with_instructions(instructions) .sign(keys) .expect("Failed to sign.") @@ -93,24 +96,28 @@ fn build_test_and_transient_wsv(keys: KeyPair) -> WorldStateView { } fn accept_transaction(criterion: &mut Criterion) { + let chain_id = 0; + let keys = KeyPair::generate().expect("Failed to generate keys"); - let transaction = build_test_transaction(keys); + let transaction = build_test_transaction(keys, chain_id); let mut success_count = 0; let mut failures_count = 0; let _ = criterion.bench_function("accept", |b| { - b.iter( - || match AcceptedTransaction::accept(transaction.clone(), &TRANSACTION_LIMITS) { + b.iter(|| { + match AcceptedTransaction::accept(transaction.clone(), chain_id, &TRANSACTION_LIMITS) { Ok(_) => success_count += 1, Err(_) => failures_count += 1, - }, - ); + } + }); }); println!("Success count: {success_count}, Failures count: {failures_count}"); } fn sign_transaction(criterion: &mut Criterion) { + let chain_id = 0; + let keys = KeyPair::generate().expect("Failed to generate keys"); - let transaction = build_test_transaction(keys); + let transaction = build_test_transaction(keys, chain_id); let key_pair = KeyPair::generate().expect("Failed to generate KeyPair."); let mut success_count = 0; let mut failures_count = 0; @@ -124,10 +131,15 @@ fn sign_transaction(criterion: &mut Criterion) { } fn validate_transaction(criterion: &mut Criterion) { + let chain_id = 0; + let keys = KeyPair::generate().expect("Failed to generate keys"); - let transaction = - AcceptedTransaction::accept(build_test_transaction(keys.clone()), &TRANSACTION_LIMITS) - .expect("Failed to accept transaction."); + let transaction = AcceptedTransaction::accept( + build_test_transaction(keys.clone(), chain_id), + chain_id, + &TRANSACTION_LIMITS, + ) + .expect("Failed to accept transaction."); let mut success_count = 0; let mut failure_count = 0; let wsv = build_test_and_transient_wsv(keys); @@ -145,10 +157,15 @@ fn validate_transaction(criterion: &mut Criterion) { } fn sign_blocks(criterion: &mut Criterion) { + let chain_id = 0; + let keys = KeyPair::generate().expect("Failed to generate keys"); - let transaction = - AcceptedTransaction::accept(build_test_transaction(keys), &TRANSACTION_LIMITS) - .expect("Failed to accept transaction."); + let transaction = AcceptedTransaction::accept( + build_test_transaction(keys, chain_id), + chain_id, + &TRANSACTION_LIMITS, + ) + .expect("Failed to accept transaction."); let key_pair = KeyPair::generate().expect("Failed to generate KeyPair."); let kura = iroha_core::kura::Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); diff --git a/core/src/block.rs b/core/src/block.rs index 164dc6b5456..5931c3f136d 100644 --- a/core/src/block.rs +++ b/core/src/block.rs @@ -265,6 +265,7 @@ mod valid { pub fn validate( block: SignedBlock, topology: &Topology, + expected_chain_id: u16, wsv: &mut WorldStateView, ) -> Result { if !block.payload().header.is_genesis() { @@ -326,7 +327,7 @@ mod valid { return Err((block, BlockValidationError::HasCommittedTransactions)); } - if let Err(error) = Self::validate_transactions(&block, wsv) { + if let Err(error) = Self::validate_transactions(&block, expected_chain_id, wsv) { return Err((block, error.into())); } @@ -342,6 +343,7 @@ mod valid { fn validate_transactions( block: &SignedBlock, + expected_chain_id: u16, wsv: &mut WorldStateView, ) -> Result<(), TransactionValidationError> { let is_genesis = block.payload().header.is_genesis(); @@ -356,10 +358,10 @@ mod valid { let limits = &transaction_executor.transaction_limits; let tx = if is_genesis { - AcceptedTransaction::accept_genesis(GenesisTransaction(value)) + AcceptedTransaction::accept_genesis(GenesisTransaction(value), expected_chain_id) } else { - AcceptedTransaction::accept(value, limits)? - }; + AcceptedTransaction::accept(value, expected_chain_id, limits) + }?; if error.is_some() { match transaction_executor.validate(tx, wsv) { @@ -720,6 +722,8 @@ mod tests { #[tokio::test] async fn should_reject_due_to_repetition() { + let chain_id = 0; + // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -740,11 +744,11 @@ mod tests { // Making two transactions that have the same instruction let transaction_limits = &wsv.transaction_executor().transaction_limits; - let tx = TransactionBuilder::new(alice_id) + let tx = TransactionBuilder::new(chain_id, alice_id) .with_instructions([create_asset_definition]) .sign(alice_keys.clone()) .expect("Valid"); - let tx = AcceptedTransaction::accept(tx, transaction_limits).expect("Valid"); + let tx = AcceptedTransaction::accept(tx, chain_id, transaction_limits).expect("Valid"); // Creating a block of two identical transactions and validating it let transactions = vec![tx.clone(), tx]; @@ -763,6 +767,8 @@ mod tests { #[tokio::test] async fn tx_order_same_in_validation_and_revalidation() { + let chain_id = 0; + // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -783,11 +789,11 @@ mod tests { // Making two transactions that have the same instruction let transaction_limits = &wsv.transaction_executor().transaction_limits; - let tx = TransactionBuilder::new(alice_id.clone()) + let tx = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions([create_asset_definition]) .sign(alice_keys.clone()) .expect("Valid"); - let tx = AcceptedTransaction::accept(tx, transaction_limits).expect("Valid"); + let tx = AcceptedTransaction::accept(tx, chain_id, transaction_limits).expect("Valid"); let quantity: u32 = 200; let fail_quantity: u32 = 20; @@ -802,17 +808,17 @@ mod tests { AssetId::new(asset_definition_id, alice_id.clone()), ); - let tx0 = TransactionBuilder::new(alice_id.clone()) + let tx0 = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions([fail_mint]) .sign(alice_keys.clone()) .expect("Valid"); - let tx0 = AcceptedTransaction::accept(tx0, transaction_limits).expect("Valid"); + let tx0 = AcceptedTransaction::accept(tx0, chain_id, transaction_limits).expect("Valid"); - let tx2 = TransactionBuilder::new(alice_id) + let tx2 = TransactionBuilder::new(chain_id, alice_id) .with_instructions([succeed_mint]) .sign(alice_keys.clone()) .expect("Valid"); - let tx2 = AcceptedTransaction::accept(tx2, transaction_limits).expect("Valid"); + let tx2 = AcceptedTransaction::accept(tx2, chain_id, transaction_limits).expect("Valid"); // Creating a block of two identical transactions and validating it let transactions = vec![tx0, tx, tx2]; @@ -831,6 +837,8 @@ mod tests { #[tokio::test] async fn failed_transactions_revert() { + let chain_id = 0; + // Predefined world state let alice_id = AccountId::from_str("alice@wonderland").expect("Valid"); let alice_keys = KeyPair::generate().expect("Valid"); @@ -858,16 +866,18 @@ mod tests { Fail::new("Always fail".to_owned()).into(), ]; let instructions_accept: [InstructionBox; 2] = [create_domain.into(), create_asset.into()]; - let tx_fail = TransactionBuilder::new(alice_id.clone()) + let tx_fail = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions(instructions_fail) .sign(alice_keys.clone()) .expect("Valid"); - let tx_fail = AcceptedTransaction::accept(tx_fail, transaction_limits).expect("Valid"); - let tx_accept = TransactionBuilder::new(alice_id) + let tx_fail = + AcceptedTransaction::accept(tx_fail, chain_id, transaction_limits).expect("Valid"); + let tx_accept = TransactionBuilder::new(chain_id, alice_id) .with_instructions(instructions_accept) .sign(alice_keys.clone()) .expect("Valid"); - let tx_accept = AcceptedTransaction::accept(tx_accept, transaction_limits).expect("Valid"); + let tx_accept = + AcceptedTransaction::accept(tx_accept, chain_id, transaction_limits).expect("Valid"); // Creating a block of where first transaction must fail and second one fully executed let transactions = vec![tx_fail, tx_accept]; diff --git a/core/src/gossiper.rs b/core/src/gossiper.rs index 365ebb7ac7a..7b4966c9e1c 100644 --- a/core/src/gossiper.rs +++ b/core/src/gossiper.rs @@ -31,6 +31,8 @@ impl TransactionGossiperHandle { /// Actor to gossip transactions and receive transaction gossips pub struct TransactionGossiper { + /// Unique id of the blockchain. Used for simple replay attack protection. + chain_id: u16, /// The size of batch that is being gossiped. Smaller size leads /// to longer time to synchronise, useful if you have high packet loss. gossip_batch_size: u32, @@ -57,19 +59,21 @@ impl TransactionGossiper { /// Construct [`Self`] from configuration pub fn from_configuration( + chain_id: u16, // Currently we are using configuration parameters from sumeragi not to break configuration - configuartion: &Configuration, + configuration: &Configuration, network: IrohaNetwork, queue: Arc, sumeragi: SumeragiHandle, ) -> Self { let wsv = sumeragi.wsv_clone(); Self { + chain_id, queue, sumeragi, network, - gossip_batch_size: configuartion.gossip_batch_size, - gossip_period: Duration::from_millis(configuartion.gossip_period_ms), + gossip_batch_size: configuration.gossip_batch_size, + gossip_period: Duration::from_millis(configuration.gossip_period_ms), wsv, } } @@ -115,7 +119,7 @@ impl TransactionGossiper { for tx in txs { let transaction_limits = &self.wsv.config.transaction_limits; - match AcceptedTransaction::accept(tx, transaction_limits) { + match AcceptedTransaction::accept(tx, self.chain_id, transaction_limits) { Ok(tx) => match self.queue.push(tx, &self.wsv) { Ok(()) => {} Err(crate::queue::Failure { diff --git a/core/src/queue.rs b/core/src/queue.rs index 2872ebc9365..d366b834b7a 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -250,9 +250,8 @@ impl Queue { expired_transactions: &mut Vec, ) -> Option { loop { - let Some(hash) = self.tx_hashes.pop() else { - return None; - }; + let hash = self.tx_hashes.pop()?; + let entry = match self.accepted_txs.entry(hash) { Entry::Occupied(entry) => entry, // FIXME: Reachable under high load. Investigate, see if it's a problem. @@ -394,11 +393,13 @@ mod tests { }; fn accepted_tx(account_id: &str, key: KeyPair) -> AcceptedTransaction { + let chain_id = 0; + let message = std::iter::repeat_with(rand::random::) .take(16) .collect(); let instructions = [Fail { message }]; - let tx = TransactionBuilder::new(AccountId::from_str(account_id).expect("Valid")) + let tx = TransactionBuilder::new(chain_id, AccountId::from_str(account_id).expect("Valid")) .with_instructions(instructions) .sign(key) .expect("Failed to sign."); @@ -406,7 +407,7 @@ mod tests { max_instruction_number: 4096, max_wasm_size_bytes: 0, }; - AcceptedTransaction::accept(tx, &limits).expect("Failed to accept Transaction.") + AcceptedTransaction::accept(tx, chain_id, &limits).expect("Failed to accept Transaction.") } pub fn world_with_test_domains( @@ -483,6 +484,8 @@ mod tests { #[test] async fn push_multisignature_tx() { + let chain_id = 0; + let max_txs_in_block = 2; let key_pairs = [KeyPair::generate().unwrap(), KeyPair::generate().unwrap()]; let kura = Kura::blank_kura_for_testing(); @@ -513,7 +516,7 @@ mod tests { .expect("Default queue config should always build") }); let instructions: [InstructionBox; 0] = []; - let tx = TransactionBuilder::new("alice@wonderland".parse().expect("Valid")) + let tx = TransactionBuilder::new(chain_id, "alice@wonderland".parse().expect("Valid")) .with_instructions(instructions); let tx_limits = TransactionLimits { max_instruction_number: 4096, @@ -527,7 +530,7 @@ mod tests { for key_pair in &key_pairs[1..] { signed_tx = signed_tx.sign(key_pair.clone()).expect("Failed to sign"); } - AcceptedTransaction::accept(signed_tx, &tx_limits) + AcceptedTransaction::accept(signed_tx, chain_id, &tx_limits) .expect("Failed to accept Transaction.") }; // Check that fully signed transaction pass signature check @@ -539,6 +542,7 @@ mod tests { let get_tx = |key_pair| { AcceptedTransaction::accept( tx.clone().sign(key_pair).expect("Failed to sign."), + chain_id, &tx_limits, ) .expect("Failed to accept Transaction.") @@ -744,6 +748,8 @@ mod tests { #[test] async fn custom_expired_transaction_is_rejected() { + let chain_id = 0; + let max_txs_in_block = 2; let alice_key = KeyPair::generate().expect("Failed to generate keypair."); let kura = Kura::blank_kura_for_testing(); @@ -763,16 +769,19 @@ mod tests { let instructions = [Fail { message: "expired".to_owned(), }]; - let mut tx = - TransactionBuilder::new(AccountId::from_str("alice@wonderland").expect("Valid")) - .with_instructions(instructions); + let mut tx = TransactionBuilder::new( + chain_id, + AccountId::from_str("alice@wonderland").expect("Valid"), + ) + .with_instructions(instructions); tx.set_ttl(Duration::from_millis(10)); let tx = tx.sign(alice_key).expect("Failed to sign."); let limits = TransactionLimits { max_instruction_number: 4096, max_wasm_size_bytes: 0, }; - let tx = AcceptedTransaction::accept(tx, &limits).expect("Failed to accept Transaction."); + let tx = AcceptedTransaction::accept(tx, chain_id, &limits) + .expect("Failed to accept Transaction."); queue .push(tx.clone(), &wsv) .expect("Failed to push tx into queue"); diff --git a/core/src/smartcontracts/isi/query.rs b/core/src/smartcontracts/isi/query.rs index d14ed740d0b..7ca9a8c45dc 100644 --- a/core/src/smartcontracts/isi/query.rs +++ b/core/src/smartcontracts/isi/query.rs @@ -249,6 +249,8 @@ mod tests { valid_tx_per_block: usize, invalid_tx_per_block: usize, ) -> Result { + let chain_id = 0; + let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); @@ -266,17 +268,17 @@ mod tests { let valid_tx = { let instructions: [InstructionBox; 0] = []; - let tx = TransactionBuilder::new(ALICE_ID.clone()) + let tx = TransactionBuilder::new(chain_id, ALICE_ID.clone()) .with_instructions(instructions) .sign(ALICE_KEYS.clone())?; - AcceptedTransaction::accept(tx, &limits)? + AcceptedTransaction::accept(tx, chain_id, &limits)? }; let invalid_tx = { let isi = Fail::new("fail".to_owned()); - let tx = TransactionBuilder::new(ALICE_ID.clone()) + let tx = TransactionBuilder::new(chain_id, ALICE_ID.clone()) .with_instructions([isi.clone(), isi]) .sign(ALICE_KEYS.clone())?; - AcceptedTransaction::accept(tx, &huge_limits)? + AcceptedTransaction::accept(tx, chain_id, &huge_limits)? }; let mut transactions = vec![valid_tx; valid_tx_per_block]; @@ -409,17 +411,19 @@ mod tests { #[test] async fn find_transaction() -> Result<()> { + let chain_id = 0; + let kura = Kura::blank_kura_for_testing(); let query_handle = LiveQueryStore::test().start(); let mut wsv = WorldStateView::new(world_with_test_domains(), kura.clone(), query_handle); let instructions: [InstructionBox; 0] = []; - let tx = TransactionBuilder::new(ALICE_ID.clone()) + let tx = TransactionBuilder::new(chain_id, ALICE_ID.clone()) .with_instructions(instructions) .sign(ALICE_KEYS.clone())?; let tx_limits = &wsv.transaction_executor().transaction_limits; - let va_tx = AcceptedTransaction::accept(tx, tx_limits)?; + let va_tx = AcceptedTransaction::accept(tx, chain_id, tx_limits)?; let topology = Topology::new(UniqueVec::new()); let vcb = BlockBuilder::new(vec![va_tx.clone()], topology.clone(), Vec::new()) @@ -431,7 +435,7 @@ mod tests { wsv.apply(&vcb)?; kura.store_block(vcb); - let unapplied_tx = TransactionBuilder::new(ALICE_ID.clone()) + let unapplied_tx = TransactionBuilder::new(chain_id, ALICE_ID.clone()) .with_instructions([Unregister::account("account@domain".parse().unwrap())]) .sign(ALICE_KEYS.clone())?; let wrong_hash = unapplied_tx.hash(); diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index fcca60b867b..6651db83151 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -14,6 +14,8 @@ use crate::{block::*, sumeragi::tracing::instrument}; /// `Sumeragi` is the implementation of the consensus. pub struct Sumeragi { + /// Unique id of the blockchain. Used for simple replay attack protection. + pub chain_id: u16, /// The pair of keys used for communication given this Sumeragi instance. pub key_pair: KeyPair, /// Address of queue @@ -209,19 +211,23 @@ impl Sumeragi { } }; - let block = - match ValidBlock::validate(block, &self.current_topology, &mut new_wsv) - .and_then(|block| { - block - .commit(&self.current_topology) - .map_err(|(block, error)| (block.into(), error)) - }) { - Ok(block) => block, - Err((_, error)) => { - error!(?error, "Received invalid genesis block"); - continue; - } - }; + let block = match ValidBlock::validate( + block, + &self.current_topology, + self.chain_id, + &mut new_wsv, + ) + .and_then(|block| { + block + .commit(&self.current_topology) + .map_err(|(block, error)| (block.into(), error)) + }) { + Ok(block) => block, + Err((_, error)) => { + error!(?error, "Received invalid genesis block"); + continue; + } + }; new_wsv.world_mut().trusted_peers_ids = block.payload().commit_topology.clone(); @@ -244,8 +250,9 @@ impl Sumeragi { let transactions: Vec<_> = genesis_network .into_transactions() .into_iter() - .map(AcceptedTransaction::accept_genesis) - .collect(); + .map(|tx| AcceptedTransaction::accept_genesis(tx, self.chain_id)) + .collect::>() + .expect("Genesis invalid"); let mut new_wsv = self.wsv.clone(); let genesis = BlockBuilder::new(transactions, self.current_topology.clone(), vec![]) @@ -364,172 +371,177 @@ impl Sumeragi { self.transaction_cache .retain(|tx| !self.wsv.has_transaction(tx.hash()) && !self.queue.is_expired(tx)); } -} -fn suggest_view_change( - sumeragi: &Sumeragi, - view_change_proof_chain: &mut ProofChain, - current_view_change_index: u64, -) { - let suspect_proof = - ProofBuilder::new(sumeragi.wsv.latest_block_hash(), current_view_change_index) - .sign(sumeragi.key_pair.clone()) - .expect("Proof signing failed"); - - view_change_proof_chain - .insert_proof( - &sumeragi.current_topology.ordered_peers, - sumeragi.current_topology.max_faults(), - sumeragi.wsv.latest_block_hash(), - suspect_proof, - ) - .unwrap_or_else(|err| error!("{err}")); + fn vote_for_block( + &self, + topology: &Topology, + BlockCreated { block }: BlockCreated, + ) -> Option { + let block_hash = block.payload().hash(); + let addr = &self.peer_id.address; + let role = self.current_topology.role(&self.peer_id); + trace!(%addr, %role, block_hash=%block_hash, "Block received, voting..."); - let msg = MessagePacket::new(view_change_proof_chain.clone(), None); - sumeragi.broadcast_packet(msg); -} + let mut new_wsv = self.wsv.clone(); + let block = match ValidBlock::validate(block, topology, self.chain_id, &mut new_wsv) { + Ok(block) => block, + Err((_, error)) => { + warn!(%addr, %role, ?error, "Block validation failed"); + return None; + } + }; -fn prune_view_change_proofs_and_calculate_current_index( - sumeragi: &Sumeragi, - view_change_proof_chain: &mut ProofChain, -) -> u64 { - view_change_proof_chain.prune(sumeragi.wsv.latest_block_hash()); - view_change_proof_chain.verify_with_state( - &sumeragi.current_topology.ordered_peers, - sumeragi.current_topology.max_faults(), - sumeragi.wsv.latest_block_hash(), - ) as u64 -} + let signed_block = block + .sign(self.key_pair.clone()) + .expect("Block signing failed"); -#[allow(clippy::too_many_lines)] -fn handle_message( - message: Message, - sumeragi: &mut Sumeragi, - voting_block: &mut Option, - current_view_change_index: u64, - view_change_proof_chain: &mut ProofChain, - voting_signatures: &mut Vec>, -) { - let current_topology = &sumeragi.current_topology; - let role = current_topology.role(&sumeragi.peer_id); - let addr = &sumeragi.peer_id.address; - - #[allow(clippy::suspicious_operation_groupings)] - match (message, role) { - (Message::BlockSyncUpdate(BlockSyncUpdate { block }), _) => { - let block_hash = block.hash(); - info!(%addr, %role, hash=%block_hash, "Block sync update received"); - - match handle_block_sync(block, &sumeragi.wsv, &sumeragi.finalized_wsv) { - Ok(BlockSyncOk::CommitBlock(block, new_wsv)) => { - sumeragi.commit_block(block, new_wsv) - } - Ok(BlockSyncOk::ReplaceTopBlock(block, new_wsv)) => { - warn!( - %addr, %role, - peer_latest_block_hash=?sumeragi.wsv.latest_block_hash(), - peer_latest_block_view_change_index=?sumeragi.wsv.latest_block_view_change_index(), - consensus_latest_block_hash=%block.hash(), - consensus_latest_block_view_change_index=%block.payload().header.view_change_index, - "Soft fork occurred: peer in inconsistent state. Rolling back and replacing top block." - ); - sumeragi.replace_top_block(block, new_wsv) - } - Err((_, BlockSyncError::BlockNotValid(error))) => { - error!(%addr, %role, %block_hash, ?error, "Block not valid.") - } - Err((_, BlockSyncError::SoftForkBlockNotValid(error))) => { - error!(%addr, %role, %block_hash, ?error, "Soft-fork block not valid.") - } - Err(( - _, - BlockSyncError::SoftForkBlockSmallViewChangeIndex { - peer_view_change_index, - block_view_change_index, - }, - )) => { - debug!( - %addr, %role, - peer_latest_block_hash=?sumeragi.wsv.latest_block_hash(), - peer_latest_block_view_change_index=?peer_view_change_index, - consensus_latest_block_hash=%block_hash, - consensus_latest_block_view_change_index=%block_view_change_index, - "Soft fork doesn't occurred: block has the same or smaller view change index" - ); - } - Err(( - _, - BlockSyncError::BlockNotProperHeight { - peer_height, - block_height, - }, - )) => { - warn!(%addr, %role, %block_hash, %block_height, %peer_height, "Other peer send irrelevant or outdated block to the peer (it's neither `peer_height` nor `peer_height + 1`).") + Some(VotingBlock::new(signed_block, new_wsv)) + } + + fn suggest_view_change( + &self, + view_change_proof_chain: &mut ProofChain, + current_view_change_index: u64, + ) { + let suspect_proof = + ProofBuilder::new(self.wsv.latest_block_hash(), current_view_change_index) + .sign(self.key_pair.clone()) + .expect("Proof signing failed"); + + view_change_proof_chain + .insert_proof( + &self.current_topology.ordered_peers, + self.current_topology.max_faults(), + self.wsv.latest_block_hash(), + suspect_proof, + ) + .unwrap_or_else(|err| error!("{err}")); + + let msg = MessagePacket::new(view_change_proof_chain.clone(), None); + self.broadcast_packet(msg); + } + + fn prune_view_change_proofs_and_calculate_current_index( + &self, + view_change_proof_chain: &mut ProofChain, + ) -> u64 { + view_change_proof_chain.prune(self.wsv.latest_block_hash()); + view_change_proof_chain.verify_with_state( + &self.current_topology.ordered_peers, + self.current_topology.max_faults(), + self.wsv.latest_block_hash(), + ) as u64 + } + + #[allow(clippy::too_many_lines)] + fn handle_message( + &mut self, + message: Message, + voting_block: &mut Option, + current_view_change_index: u64, + view_change_proof_chain: &mut ProofChain, + voting_signatures: &mut Vec>, + ) { + let current_topology = &self.current_topology; + let role = current_topology.role(&self.peer_id); + let addr = &self.peer_id.address; + + #[allow(clippy::suspicious_operation_groupings)] + match (message, role) { + (Message::BlockSyncUpdate(BlockSyncUpdate { block }), _) => { + let block_hash = block.hash(); + info!(%addr, %role, hash=%block_hash, "Block sync update received"); + + match handle_block_sync(self.chain_id, block, &self.wsv, &self.finalized_wsv) { + Ok(BlockSyncOk::CommitBlock(block, new_wsv)) => { + self.commit_block(block, new_wsv) + } + Ok(BlockSyncOk::ReplaceTopBlock(block, new_wsv)) => { + warn!( + %addr, %role, + peer_latest_block_hash=?self.wsv.latest_block_hash(), + peer_latest_block_view_change_index=?self.wsv.latest_block_view_change_index(), + consensus_latest_block_hash=%block.hash(), + consensus_latest_block_view_change_index=%block.payload().header.view_change_index, + "Soft fork occurred: peer in inconsistent state. Rolling back and replacing top block." + ); + self.replace_top_block(block, new_wsv) + } + Err((_, BlockSyncError::BlockNotValid(error))) => { + error!(%addr, %role, %block_hash, ?error, "Block not valid.") + } + Err((_, BlockSyncError::SoftForkBlockNotValid(error))) => { + error!(%addr, %role, %block_hash, ?error, "Soft-fork block not valid.") + } + Err(( + _, + BlockSyncError::SoftForkBlockSmallViewChangeIndex { + peer_view_change_index, + block_view_change_index, + }, + )) => { + debug!( + %addr, %role, + peer_latest_block_hash=?self.wsv.latest_block_hash(), + peer_latest_block_view_change_index=?peer_view_change_index, + consensus_latest_block_hash=%block_hash, + consensus_latest_block_view_change_index=%block_view_change_index, + "Soft fork doesn't occurred: block has the same or smaller view change index" + ); + } + Err(( + _, + BlockSyncError::BlockNotProperHeight { + peer_height, + block_height, + }, + )) => { + warn!(%addr, %role, %block_hash, %block_height, %peer_height, "Other peer send irrelevant or outdated block to the peer (it's neither `peer_height` nor `peer_height + 1`).") + } } } - } - ( - Message::BlockCommitted(BlockCommitted { hash, signatures }), - Role::Leader | Role::ValidatingPeer | Role::ProxyTail | Role::ObservingPeer, - ) => { - let is_consensus_required = current_topology.is_consensus_required().is_some(); - if role == Role::ProxyTail && is_consensus_required - || role == Role::Leader && !is_consensus_required - { - error!(%addr, %role, "Received BlockCommitted message, but shouldn't"); - } else if let Some(voted_block) = voting_block.take() { - let voting_block_hash = voted_block.block.payload().hash(); - - if hash == voting_block_hash { - match voted_block - .block - .commit_with_signatures(current_topology, signatures) - { - Ok(committed_block) => { - sumeragi.commit_block(committed_block, voted_block.new_wsv) - } - Err((_, error)) => { - error!(%addr, %role, %hash, ?error, "Block failed to be committed") - } + ( + Message::BlockCommitted(BlockCommitted { hash, signatures }), + Role::Leader | Role::ValidatingPeer | Role::ProxyTail | Role::ObservingPeer, + ) => { + let is_consensus_required = current_topology.is_consensus_required().is_some(); + if role == Role::ProxyTail && is_consensus_required + || role == Role::Leader && !is_consensus_required + { + error!(%addr, %role, "Received BlockCommitted message, but shouldn't"); + } else if let Some(voted_block) = voting_block.take() { + let voting_block_hash = voted_block.block.payload().hash(); + + if hash == voting_block_hash { + match voted_block + .block + .commit_with_signatures(current_topology, signatures) + { + Ok(committed_block) => { + self.commit_block(committed_block, voted_block.new_wsv) + } + Err((_, error)) => { + error!(%addr, %role, %hash, ?error, "Block failed to be committed") + } + }; + } else { + error!( + %addr, %role, committed_block_hash=%hash, %voting_block_hash, + "The hash of the committed block does not match the hash of the block stored by the peer." + ); + + *voting_block = Some(voted_block); }; } else { - error!( - %addr, %role, committed_block_hash=%hash, %voting_block_hash, - "The hash of the committed block does not match the hash of the block stored by the peer." - ); - - *voting_block = Some(voted_block); - }; - } else { - error!(%addr, %role, %hash, "Peer missing voting block") + error!(%addr, %role, %hash, "Peer missing voting block") + } } - } - (Message::BlockCreated(block_created), Role::ValidatingPeer) => { - let current_topology = current_topology + (Message::BlockCreated(block_created), Role::ValidatingPeer) => { + let current_topology = current_topology .is_consensus_required() .expect("Peer has `ValidatingPeer` role, which mean that current topology require consensus"); - if let Some(v_block) = vote_for_block(sumeragi, ¤t_topology, block_created) { - let block_hash = v_block.block.payload().hash(); - - let msg = MessagePacket::new( - view_change_proof_chain.clone(), - Some(BlockSigned::from(v_block.block.clone()).into()), - ); - - sumeragi.broadcast_packet_to(msg, [current_topology.proxy_tail()]); - info!(%addr, %block_hash, "Block validated, signed and forwarded"); - - *voting_block = Some(v_block); - } - } - (Message::BlockCreated(block_created), Role::ObservingPeer) => { - let current_topology = current_topology.is_consensus_required().expect( - "Peer has `ObservingPeer` role, which mean that current topology require consensus", - ); - - if let Some(v_block) = vote_for_block(sumeragi, ¤t_topology, block_created) { - if current_view_change_index >= 1 { + if let Some(v_block) = self.vote_for_block(¤t_topology, block_created) { let block_hash = v_block.block.payload().hash(); let msg = MessagePacket::new( @@ -537,176 +549,198 @@ fn handle_message( Some(BlockSigned::from(v_block.block.clone()).into()), ); - sumeragi.broadcast_packet_to(msg, [current_topology.proxy_tail()]); + self.broadcast_packet_to(msg, [current_topology.proxy_tail()]); info!(%addr, %block_hash, "Block validated, signed and forwarded"); + *voting_block = Some(v_block); - } else { - error!(%addr, %role, "Received BlockCreated message, but shouldn't"); } } - } - (Message::BlockCreated(block_created), Role::ProxyTail) => { - if let Some(mut new_block) = vote_for_block(sumeragi, current_topology, block_created) { - // NOTE: Up until this point it was unknown which block is expected to be received, - // therefore all the signatures (of any hash) were collected and will now be pruned - add_signatures::(&mut new_block, voting_signatures.drain(..)); - *voting_block = Some(new_block); + (Message::BlockCreated(block_created), Role::ObservingPeer) => { + let current_topology = current_topology.is_consensus_required().expect( + "Peer has `ObservingPeer` role, which mean that current topology require consensus", + ); + + if let Some(v_block) = self.vote_for_block(¤t_topology, block_created) { + if current_view_change_index >= 1 { + let block_hash = v_block.block.payload().hash(); + + let msg = MessagePacket::new( + view_change_proof_chain.clone(), + Some(BlockSigned::from(v_block.block.clone()).into()), + ); + + self.broadcast_packet_to(msg, [current_topology.proxy_tail()]); + info!(%addr, %block_hash, "Block validated, signed and forwarded"); + *voting_block = Some(v_block); + } else { + error!(%addr, %role, "Received BlockCreated message, but shouldn't"); + } + } } - } - (Message::BlockSigned(BlockSigned { hash, signatures }), Role::ProxyTail) => { - trace!(block_hash=%hash, "Received block signatures"); + (Message::BlockCreated(block_created), Role::ProxyTail) => { + if let Some(mut new_block) = self.vote_for_block(current_topology, block_created) { + // NOTE: Up until this point it was unknown which block is expected to be received, + // therefore all the signatures (of any hash) were collected and will now be pruned + add_signatures::(&mut new_block, voting_signatures.drain(..)); + *voting_block = Some(new_block); + } + } + (Message::BlockSigned(BlockSigned { hash, signatures }), Role::ProxyTail) => { + trace!(block_hash=%hash, "Received block signatures"); - let roles: &[Role] = if current_view_change_index >= 1 { - &[Role::ValidatingPeer, Role::ObservingPeer] - } else { - &[Role::ValidatingPeer] - }; - let valid_signatures = current_topology.filter_signatures_by_roles(roles, &signatures); + let roles: &[Role] = if current_view_change_index >= 1 { + &[Role::ValidatingPeer, Role::ObservingPeer] + } else { + &[Role::ValidatingPeer] + }; + let valid_signatures = + current_topology.filter_signatures_by_roles(roles, &signatures); - if let Some(voted_block) = voting_block.as_mut() { - let voting_block_hash = voted_block.block.payload().hash(); + if let Some(voted_block) = voting_block.as_mut() { + let voting_block_hash = voted_block.block.payload().hash(); - if hash == voting_block_hash { - add_signatures::(voted_block, valid_signatures); + if hash == voting_block_hash { + add_signatures::(voted_block, valid_signatures); + } else { + debug!(%voting_block_hash, "Received signatures are not for the current block"); + } } else { - debug!(%voting_block_hash, "Received signatures are not for the current block"); + // NOTE: Due to the nature of distributed systems, signatures can sometimes be received before + // the block (sent by the leader). Collect the signatures and wait for the block to be received + voting_signatures.extend(valid_signatures); } - } else { - // NOTE: Due to the nature of distributed systems, signatures can sometimes be received before - // the block (sent by the leader). Collect the signatures and wait for the block to be received - voting_signatures.extend(valid_signatures); } - } - (msg, role) => { - trace!(%addr, %role, ?msg, "message not handled") + (msg, role) => { + trace!(%addr, %role, ?msg, "message not handled") + } } } -} -#[allow(clippy::too_many_lines)] -fn process_message_independent( - sumeragi: &mut Sumeragi, - voting_block: &mut Option, - current_view_change_index: u64, - view_change_proof_chain: &mut ProofChain, - round_start_time: &Instant, - #[cfg_attr(not(debug_assertions), allow(unused_variables))] is_genesis_peer: bool, -) { - let current_topology = &sumeragi.current_topology; - let role = current_topology.role(&sumeragi.peer_id); - let addr = &sumeragi.peer_id.address; - - match role { - Role::Leader => { - if voting_block.is_none() { - let cache_full = sumeragi.transaction_cache.len() >= sumeragi.max_txs_in_block; - let deadline_reached = round_start_time.elapsed() > sumeragi.block_time; - let cache_non_empty = !sumeragi.transaction_cache.is_empty(); - - if cache_full || (deadline_reached && cache_non_empty) { - let transactions = sumeragi.transaction_cache.clone(); - info!(%addr, txns=%transactions.len(), "Creating block..."); - - // TODO: properly process triggers! - let mut new_wsv = sumeragi.wsv.clone(); - let event_recommendations = Vec::new(); - let new_block = match BlockBuilder::new( - transactions, - sumeragi.current_topology.clone(), - event_recommendations, - ) - .chain(current_view_change_index, &mut new_wsv) - .sign(sumeragi.key_pair.clone()) - { - Ok(block) => block, - Err(error) => { - error!(?error, "Failed to sign block"); - return; - } - }; + #[allow(clippy::too_many_lines)] + fn process_message_independent( + &mut self, + voting_block: &mut Option, + current_view_change_index: u64, + view_change_proof_chain: &mut ProofChain, + round_start_time: &Instant, + #[cfg_attr(not(debug_assertions), allow(unused_variables))] is_genesis_peer: bool, + ) { + let current_topology = &self.current_topology; + let role = current_topology.role(&self.peer_id); + let addr = &self.peer_id.address; - if let Some(current_topology) = current_topology.is_consensus_required() { - info!(%addr, block_payload_hash=%new_block.payload().hash(), "Block created"); - *voting_block = Some(VotingBlock::new(new_block.clone(), new_wsv)); + match role { + Role::Leader => { + if voting_block.is_none() { + let cache_full = self.transaction_cache.len() >= self.max_txs_in_block; + let deadline_reached = round_start_time.elapsed() > self.block_time; + let cache_non_empty = !self.transaction_cache.is_empty(); - let msg = MessagePacket::new( - view_change_proof_chain.clone(), - Some(BlockCreated::from(new_block).into()), - ); - if current_view_change_index >= 1 { - sumeragi.broadcast_packet(msg); - } else { - sumeragi.broadcast_packet_to(msg, current_topology.voting_peers()); - } - } else { - match new_block.commit(current_topology) { - Ok(committed_block) => { - let msg = MessagePacket::new( - view_change_proof_chain.clone(), - Some(BlockCommitted::from(committed_block.clone()).into()), - ); + if cache_full || (deadline_reached && cache_non_empty) { + let transactions = self.transaction_cache.clone(); + info!(%addr, txns=%transactions.len(), "Creating block..."); - sumeragi.broadcast_packet(msg); - sumeragi.commit_block(committed_block, new_wsv); + // TODO: properly process triggers! + let mut new_wsv = self.wsv.clone(); + let event_recommendations = Vec::new(); + let new_block = match BlockBuilder::new( + transactions, + self.current_topology.clone(), + event_recommendations, + ) + .chain(current_view_change_index, &mut new_wsv) + .sign(self.key_pair.clone()) + { + Ok(block) => block, + Err(error) => { + error!(?error, "Failed to sign block"); + return; + } + }; + + if let Some(current_topology) = current_topology.is_consensus_required() { + info!(%addr, block_payload_hash=%new_block.payload().hash(), "Block created"); + *voting_block = Some(VotingBlock::new(new_block.clone(), new_wsv)); + + let msg = MessagePacket::new( + view_change_proof_chain.clone(), + Some(BlockCreated::from(new_block).into()), + ); + if current_view_change_index >= 1 { + self.broadcast_packet(msg); + } else { + self.broadcast_packet_to(msg, current_topology.voting_peers()); + } + } else { + match new_block.commit(current_topology) { + Ok(committed_block) => { + let msg = MessagePacket::new( + view_change_proof_chain.clone(), + Some(BlockCommitted::from(committed_block.clone()).into()), + ); + + self.broadcast_packet(msg); + self.commit_block(committed_block, new_wsv); + } + Err((_, error)) => error!(%addr, role=%Role::Leader, ?error), } - Err((_, error)) => error!(%addr, role=%Role::Leader, ?error), } } } } - } - Role::ProxyTail => { - if let Some(voted_block) = voting_block.take() { - let voted_at = voted_block.voted_at; - let new_wsv = voted_block.new_wsv; + Role::ProxyTail => { + if let Some(voted_block) = voting_block.take() { + let voted_at = voted_block.voted_at; + let new_wsv = voted_block.new_wsv; - match voted_block.block.commit(current_topology) { - Ok(committed_block) => { - info!(voting_block_hash = %committed_block.hash(), "Block reached required number of votes"); + match voted_block.block.commit(current_topology) { + Ok(committed_block) => { + info!(voting_block_hash = %committed_block.hash(), "Block reached required number of votes"); - let msg = MessagePacket::new( - view_change_proof_chain.clone(), - Some(BlockCommitted::from(committed_block.clone()).into()), - ); + let msg = MessagePacket::new( + view_change_proof_chain.clone(), + Some(BlockCommitted::from(committed_block.clone()).into()), + ); - let current_topology = current_topology + let current_topology = current_topology .is_consensus_required() .expect("Peer has `ProxyTail` role, which mean that current topology require consensus"); - #[cfg(debug_assertions)] - if is_genesis_peer && sumeragi.debug_force_soft_fork { - std::thread::sleep(sumeragi.pipeline_time() * 2); - } else if current_view_change_index >= 1 { - sumeragi.broadcast_packet(msg); - } else { - sumeragi.broadcast_packet_to(msg, current_topology.voting_peers()); - } - - #[cfg(not(debug_assertions))] - { - if current_view_change_index >= 1 { - sumeragi.broadcast_packet(msg); + #[cfg(debug_assertions)] + if is_genesis_peer && self.debug_force_soft_fork { + std::thread::sleep(self.pipeline_time() * 2); + } else if current_view_change_index >= 1 { + self.broadcast_packet(msg); } else { - sumeragi.broadcast_packet_to( - msg, - current_topology - .ordered_peers - .iter() - .take(current_topology.min_votes_for_commit()), - ); + self.broadcast_packet_to(msg, current_topology.voting_peers()); } + + #[cfg(not(debug_assertions))] + { + if current_view_change_index >= 1 { + self.broadcast_packet(msg); + } else { + self.broadcast_packet_to( + msg, + current_topology + .ordered_peers + .iter() + .take(current_topology.min_votes_for_commit()), + ); + } + } + self.commit_block(committed_block, new_wsv); + } + Err((block, error)) => { + // Restore the current voting block and continue the round + *voting_block = Some(VotingBlock::voted_at(block, new_wsv, voted_at)); + trace!(?error, "Not enough signatures, waiting for more..."); } - sumeragi.commit_block(committed_block, new_wsv); - } - Err((block, error)) => { - // Restore the current voting block and continue the round - *voting_block = Some(VotingBlock::voted_at(block, new_wsv, voted_at)); - trace!(?error, "Not enough signatures, waiting for more..."); } } } + _ => {} } - _ => {} } } @@ -857,10 +891,8 @@ pub(crate) fn run( ); sumeragi.send_events(expired_transactions.iter().map(expired_event)); - let current_view_change_index = prune_view_change_proofs_and_calculate_current_index( - &sumeragi, - &mut view_change_proof_chain, - ); + let current_view_change_index = sumeragi + .prune_view_change_proofs_and_calculate_current_index(&mut view_change_proof_chain); reset_state( &sumeragi.peer_id, @@ -893,11 +925,7 @@ pub(crate) fn run( warn!(peer_public_key=%sumeragi.peer_id.public_key, %role, "No block produced in due time, requesting view change..."); } - suggest_view_change( - &sumeragi, - &mut view_change_proof_chain, - current_view_change_index, - ); + sumeragi.suggest_view_change(&mut view_change_proof_chain, current_view_change_index); // NOTE: View change must be periodically suggested until it is accepted. // Must be initialized to pipeline time but can increase by chosen amount @@ -914,9 +942,8 @@ pub(crate) fn run( should_sleep = true; }, |message| { - handle_message( + sumeragi.handle_message( message, - &mut sumeragi, &mut voting_block, current_view_change_index, &mut view_change_proof_chain, @@ -926,10 +953,8 @@ pub(crate) fn run( ); // State could be changed after handling message so it is necessary to reset state before handling message independent step - let current_view_change_index = prune_view_change_proofs_and_calculate_current_index( - &sumeragi, - &mut view_change_proof_chain, - ); + let current_view_change_index = sumeragi + .prune_view_change_proofs_and_calculate_current_index(&mut view_change_proof_chain); reset_state( &sumeragi.peer_id, @@ -949,8 +974,7 @@ pub(crate) fn run( &mut view_change_time, ); - process_message_independent( - &mut sumeragi, + sumeragi.process_message_independent( &mut voting_block, current_view_change_index, &mut view_change_proof_chain, @@ -989,32 +1013,6 @@ fn expired_event(txn: &AcceptedTransaction) -> Event { .into() } -fn vote_for_block( - sumeragi: &Sumeragi, - topology: &Topology, - BlockCreated { block }: BlockCreated, -) -> Option { - let block_hash = block.payload().hash(); - let addr = &sumeragi.peer_id.address; - let role = sumeragi.current_topology.role(&sumeragi.peer_id); - trace!(%addr, %role, block_hash=%block_hash, "Block received, voting..."); - - let mut new_wsv = sumeragi.wsv.clone(); - let block = match ValidBlock::validate(block, topology, &mut new_wsv) { - Ok(block) => block, - Err((_, error)) => { - warn!(%addr, %role, ?error, "Block validation failed"); - return None; - } - }; - - let signed_block = block - .sign(sumeragi.key_pair.clone()) - .expect("Block signing failed"); - - Some(VotingBlock::new(signed_block, new_wsv)) -} - /// Type enumerating early return types to reduce cyclomatic /// complexity of the main loop items and allow direct short /// circuiting with the `?` operator. Candidate for `impl @@ -1111,6 +1109,7 @@ enum BlockSyncError { } fn handle_block_sync( + chain_id: u16, block: SignedBlock, wsv: &WorldStateView, finalized_wsv: &WorldStateView, @@ -1128,7 +1127,7 @@ fn handle_block_sync( let view_change_index = block.payload().header().view_change_index; Topology::recreate_topology(&last_committed_block, view_change_index, new_peers) }; - ValidBlock::validate(block, &topology, &mut new_wsv) + ValidBlock::validate(block, &topology, chain_id, &mut new_wsv) .and_then(|block| { block .commit(&topology) @@ -1148,7 +1147,7 @@ fn handle_block_sync( let view_change_index = block.payload().header().view_change_index; Topology::recreate_topology(&last_committed_block, view_change_index, new_peers) }; - ValidBlock::validate(block, &topology, &mut new_wsv) + ValidBlock::validate(block, &topology, chain_id, &mut new_wsv) .and_then(|block| { block .commit(&topology) @@ -1191,6 +1190,7 @@ mod tests { use crate::{query::store::LiveQueryStore, smartcontracts::Registrable}; fn create_data_for_test( + chain_id: u16, topology: &Topology, leader_key_pair: KeyPair, ) -> (WorldStateView, Arc, SignedBlock) { @@ -1209,15 +1209,19 @@ mod tests { // Create "genesis" block // Creating an instruction - let fail_box: InstructionBox = Fail::new("Dummy isi".to_owned()).into(); + let fail_box = Fail::new("Dummy isi".to_owned()); // Making two transactions that have the same instruction - let tx = TransactionBuilder::new(alice_id.clone()) + let tx = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions([fail_box]) .sign(alice_keys.clone()) .expect("Valid"); - let tx = AcceptedTransaction::accept(tx, &wsv.transaction_executor().transaction_limits) - .expect("Valid"); + let tx = AcceptedTransaction::accept( + tx, + chain_id, + &wsv.transaction_executor().transaction_limits, + ) + .expect("Valid"); // Creating a block of two identical transactions and validating it let block = BlockBuilder::new(vec![tx.clone(), tx], topology.clone(), Vec::new()) @@ -1237,20 +1241,28 @@ mod tests { "xor2#wonderland".parse().expect("Valid"), )); - let tx1 = TransactionBuilder::new(alice_id.clone()) + let tx1 = TransactionBuilder::new(chain_id, alice_id.clone()) .with_instructions([create_asset_definition1]) .sign(alice_keys.clone()) .expect("Valid"); - let tx1 = AcceptedTransaction::accept(tx1, &wsv.transaction_executor().transaction_limits) - .map(Into::into) - .expect("Valid"); - let tx2 = TransactionBuilder::new(alice_id) + let tx1 = AcceptedTransaction::accept( + tx1, + chain_id, + &wsv.transaction_executor().transaction_limits, + ) + .map(Into::into) + .expect("Valid"); + let tx2 = TransactionBuilder::new(chain_id, alice_id) .with_instructions([create_asset_definition2]) .sign(alice_keys) .expect("Valid"); - let tx2 = AcceptedTransaction::accept(tx2, &wsv.transaction_executor().transaction_limits) - .map(Into::into) - .expect("Valid"); + let tx2 = AcceptedTransaction::accept( + tx2, + chain_id, + &wsv.transaction_executor().transaction_limits, + ) + .map(Into::into) + .expect("Valid"); // Creating a block of two identical transactions and validating it let block = BlockBuilder::new(vec![tx1, tx2], topology.clone(), Vec::new()) @@ -1264,32 +1276,39 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] async fn block_sync_invalid_block() { + let chain_id = 0; + let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), leader_key_pair.public_key(), )]); - let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, _, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let wsv = finalized_wsv.clone(); // Malform block to make it invalid block.payload_mut().commit_topology.clear(); - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!(result, Err((_, BlockSyncError::BlockNotValid(_))))) } #[test] async fn block_sync_invalid_soft_fork_block() { + let chain_id = 0; + let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), leader_key_pair.public_key(), )]); - let (finalized_wsv, kura, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, kura, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let mut wsv = finalized_wsv.clone(); - let validated_block = ValidBlock::validate(block.clone(), &topology, &mut wsv).unwrap(); + let validated_block = + ValidBlock::validate(block.clone(), &topology, chain_id, &mut wsv).unwrap(); let committed_block = validated_block.commit(&topology).expect("Block is valid"); wsv.apply_without_execution(&committed_block) .expect("Failed to apply block"); @@ -1298,7 +1317,7 @@ mod tests { // Malform block to make it invalid block.payload_mut().commit_topology.clear(); - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!( result, Err((_, BlockSyncError::SoftForkBlockNotValid(_))) @@ -1308,15 +1327,18 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] async fn block_sync_not_proper_height() { + let chain_id = 0; + let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); - let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, _, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let wsv = finalized_wsv.clone(); // Change block height block.payload_mut().header.height = 42; - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!( result, Err(( @@ -1332,28 +1354,34 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] async fn block_sync_commit_block() { + let chain_id = 0; + let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), leader_key_pair.public_key(), )]); - let (finalized_wsv, _, block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, _, block) = create_data_for_test(chain_id, &topology, leader_key_pair); let wsv = finalized_wsv.clone(); - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!(result, Ok(BlockSyncOk::CommitBlock(_, _)))) } #[test] async fn block_sync_replace_top_block() { + let chain_id = 0; + let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), leader_key_pair.public_key(), )]); - let (finalized_wsv, kura, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, kura, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let mut wsv = finalized_wsv.clone(); - let validated_block = ValidBlock::validate(block.clone(), &topology, &mut wsv).unwrap(); + let validated_block = + ValidBlock::validate(block.clone(), &topology, chain_id, &mut wsv).unwrap(); let committed_block = validated_block.commit(&topology).expect("Block is valid"); wsv.apply_without_execution(&committed_block) .expect("Failed to apply block"); @@ -1363,24 +1391,28 @@ mod tests { // Increase block view change index block.payload_mut().header.view_change_index = 42; - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!(result, Ok(BlockSyncOk::ReplaceTopBlock(_, _)))) } #[test] async fn block_sync_small_view_change_index() { + let chain_id = 0; + let leader_key_pair = KeyPair::generate().unwrap(); let topology = Topology::new(unique_vec![PeerId::new( &"127.0.0.1:8080".parse().unwrap(), leader_key_pair.public_key(), )]); - let (finalized_wsv, kura, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, kura, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let mut wsv = finalized_wsv.clone(); // Increase block view change index block.payload_mut().header.view_change_index = 42; - let validated_block = ValidBlock::validate(block.clone(), &topology, &mut wsv).unwrap(); + let validated_block = + ValidBlock::validate(block.clone(), &topology, chain_id, &mut wsv).unwrap(); let committed_block = validated_block.commit(&topology).expect("Block is valid"); wsv.apply_without_execution(&committed_block) .expect("Failed to apply block"); @@ -1390,7 +1422,7 @@ mod tests { // Decrease block view change index back block.payload_mut().header.view_change_index = 0; - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!( result, Err(( @@ -1406,9 +1438,12 @@ mod tests { #[test] #[allow(clippy::redundant_clone)] async fn block_sync_genesis_block_do_not_replace() { + let chain_id = 0; + let topology = Topology::new(UniqueVec::new()); let leader_key_pair = KeyPair::generate().unwrap(); - let (finalized_wsv, _, mut block) = create_data_for_test(&topology, leader_key_pair); + let (finalized_wsv, _, mut block) = + create_data_for_test(chain_id, &topology, leader_key_pair); let wsv = finalized_wsv.clone(); // Change block height and view change index @@ -1416,7 +1451,7 @@ mod tests { block.payload_mut().header.view_change_index = 42; block.payload_mut().header.height = 1; - let result = handle_block_sync(block, &wsv, &finalized_wsv); + let result = handle_block_sync(chain_id, block, &wsv, &finalized_wsv); assert!(matches!( result, Err(( diff --git a/core/src/sumeragi/mod.rs b/core/src/sumeragi/mod.rs index 2bafc67e9f2..c8711551aef 100644 --- a/core/src/sumeragi/mod.rs +++ b/core/src/sumeragi/mod.rs @@ -227,6 +227,7 @@ impl SumeragiHandle { } fn replay_block( + chain_id: u16, block: &SignedBlock, wsv: &mut WorldStateView, mut current_topology: Topology, @@ -234,7 +235,7 @@ impl SumeragiHandle { // NOTE: topology need to be updated up to block's view_change_index current_topology.rotate_all_n(block.payload().header.view_change_index); - let block = ValidBlock::validate(block.clone(), ¤t_topology, wsv) + let block = ValidBlock::validate(block.clone(), ¤t_topology, chain_id, wsv) .expect("Kura blocks should be valid") .commit(¤t_topology) .expect("Kura blocks should be valid"); @@ -258,6 +259,7 @@ impl SumeragiHandle { #[allow(clippy::too_many_lines)] pub fn start( SumeragiStartArgs { + chain_id, configuration, events_sender, mut wsv, @@ -296,14 +298,14 @@ impl SumeragiHandle { let block_iter_except_last = (&mut blocks_iter).take(block_count.saturating_sub(skip_block_count + 1)); for block in block_iter_except_last { - current_topology = Self::replay_block(&block, &mut wsv, current_topology); + current_topology = Self::replay_block(chain_id, &block, &mut wsv, current_topology); } // finalized_wsv is one block behind let finalized_wsv = wsv.clone(); if let Some(block) = blocks_iter.next() { - current_topology = Self::replay_block(&block, &mut wsv, current_topology); + current_topology = Self::replay_block(chain_id, &block, &mut wsv, current_topology); } info!("Sumeragi has finished loading blocks and setting up the WSV"); @@ -318,6 +320,7 @@ impl SumeragiHandle { let debug_force_soft_fork = false; let sumeragi = main_loop::Sumeragi { + chain_id, key_pair: configuration.key_pair.clone(), queue: Arc::clone(&queue), peer_id: configuration.peer_id.clone(), @@ -418,6 +421,7 @@ impl VotingBlock { /// Arguments for [`SumeragiHandle::start`] function #[allow(missing_docs)] pub struct SumeragiStartArgs<'args> { + pub chain_id: u16, pub configuration: &'args Configuration, pub events_sender: EventsSender, pub wsv: WorldStateView, diff --git a/core/src/tx.rs b/core/src/tx.rs index 01ee688edcf..b3ecf102319 100644 --- a/core/src/tx.rs +++ b/core/src/tx.rs @@ -11,6 +11,7 @@ use eyre::Result; use iroha_crypto::{HashOf, SignatureVerificationFail, SignaturesOf}; pub use iroha_data_model::prelude::*; use iroha_data_model::{ + isi::error::Mismatch, query::error::FindError, transaction::{error::TransactionLimitError, TransactionLimits}, }; @@ -34,12 +35,26 @@ pub enum AcceptTransactionFail { SignatureVerification(#[source] SignatureVerificationFail), /// The genesis account can only sign transactions in the genesis block UnexpectedGenesisAccountSignature, + /// Transaction's `chain_id` doesn't correspond to the id of current blockchain + ChainIdMismatch(Mismatch), } impl AcceptedTransaction { /// Accept genesis transaction. Transition from [`GenesisTransaction`] to [`AcceptedTransaction`]. - pub fn accept_genesis(tx: GenesisTransaction) -> Self { - Self(tx.0) + pub fn accept_genesis( + tx: GenesisTransaction, + expected_chain_id: u16, + ) -> Result { + let actual_chain_id = tx.0.payload().chain_id; + + if expected_chain_id != actual_chain_id { + return Err(AcceptTransactionFail::ChainIdMismatch(Mismatch { + expected: expected_chain_id, + actual: actual_chain_id, + })); + } + + Ok(Self(tx.0)) } /// Accept transaction. Transition from [`SignedTransaction`] to [`AcceptedTransaction`]. @@ -48,14 +63,24 @@ impl AcceptedTransaction { /// /// - if it does not adhere to limits pub fn accept( - transaction: SignedTransaction, + tx: SignedTransaction, + expected_chain_id: u16, limits: &TransactionLimits, ) -> Result { - if *iroha_genesis::GENESIS_ACCOUNT_ID == transaction.payload().authority { + let actual_chain_id = tx.payload().chain_id; + + if expected_chain_id != actual_chain_id { + return Err(AcceptTransactionFail::ChainIdMismatch(Mismatch { + expected: expected_chain_id, + actual: actual_chain_id, + })); + } + + if *iroha_genesis::GENESIS_ACCOUNT_ID == tx.payload().authority { return Err(AcceptTransactionFail::UnexpectedGenesisAccountSignature); } - match &transaction.payload().instructions { + match &tx.payload().instructions { Executable::Instructions(instructions) => { let instruction_count = instructions.len(); if u64::try_from(instruction_count).expect("`usize` should always fit into `u64`") @@ -93,7 +118,7 @@ impl AcceptedTransaction { } } - Ok(Self(transaction)) + Ok(Self(tx)) } /// Transaction hash diff --git a/core/test_network/src/lib.rs b/core/test_network/src/lib.rs index 9b217a69d59..a3abee7f51e 100644 --- a/core/test_network/src/lib.rs +++ b/core/test_network/src/lib.rs @@ -49,21 +49,22 @@ pub struct Network { pub peers: BTreeMap, } +/// Get a standardized blockchain id +pub fn get_chain_id() -> u16 { + 0 +} + /// Get a standardised key-pair from the hard-coded literals. -/// -/// # Panics -/// Programmer error. Given keys must be in proper format. pub fn get_key_pair() -> KeyPair { KeyPair::new( PublicKey::from_str( "ed01207233BFC89DCBD68C19FDE6CE6158225298EC1131B6A130D1AEB454C1AB5183C0", - ) - .expect("Public key not in mulithash format"), + ).unwrap(), PrivateKey::from_hex( Algorithm::Ed25519, "9AC47ABF59B356E0BD7DCBBBB4DEC080E302156A48CA907E47CB6AEA1D32719E7233BFC89DCBD68C19FDE6CE6158225298EC1131B6A130D1AEB454C1AB5183C0" - ).expect("Private key not hex encoded") - ).expect("Key pair mismatch") + ).unwrap() + ).unwrap() } /// Trait used to differentiate a test instance of `genesis`. @@ -129,12 +130,13 @@ impl TestGenesis for GenesisNetwork { first_transaction.append_instruction(isi); } + let chain_id = 0; let key_pair = KeyPair::new( cfg.genesis.public_key.clone(), cfg.genesis.private_key.expect("Should be"), ) .expect("Genesis key pair should be valid"); - GenesisNetwork::new(genesis, &key_pair).expect("Failed to init genesis") + GenesisNetwork::new(genesis, chain_id, &key_pair).expect("Failed to init genesis") } } @@ -768,8 +770,11 @@ impl TestRuntime for Runtime { impl TestConfiguration for Configuration { fn test() -> Self { - let mut sample_proxy = - iroha::samples::get_config_proxy(UniqueVec::new(), Some(get_key_pair())); + let mut sample_proxy = iroha::samples::get_config_proxy( + UniqueVec::new(), + Some(get_chain_id()), + Some(get_key_pair()), + ); let env_proxy = ConfigurationProxy::from_std_env().expect("Test env variables should parse properly"); let (public_key, private_key) = KeyPair::generate().unwrap().into(); @@ -791,7 +796,8 @@ impl TestConfiguration for Configuration { impl TestClientConfiguration for ClientConfiguration { fn test(api_url: &SocketAddr) -> Self { - let mut configuration = iroha_client::samples::get_client_config(&get_key_pair()); + let mut configuration = + iroha_client::samples::get_client_config(get_chain_id(), &get_key_pair()); configuration.torii_api_url = format!("http://{api_url}") .parse() .expect("Should be valid url"); diff --git a/data_model/src/transaction.rs b/data_model/src/transaction.rs index 9d288239636..b22a16b3270 100644 --- a/data_model/src/transaction.rs +++ b/data_model/src/transaction.rs @@ -101,6 +101,8 @@ pub mod model { #[getset(get = "pub")] #[ffi_type] pub struct TransactionPayload { + /// Unique id of the blockchain. Used for simple replay attack protection. + pub chain_id: u16, /// Creation timestamp (unix time in milliseconds). #[getset(skip)] pub creation_time_ms: u64, @@ -676,7 +678,7 @@ mod http { /// Construct [`Self`]. #[inline] #[cfg(feature = "std")] - pub fn new(authority: AccountId) -> Self { + pub fn new(chain_id: u16, authority: AccountId) -> Self { let creation_time_ms = crate::current_time() .as_millis() .try_into() @@ -684,6 +686,7 @@ mod http { Self { payload: TransactionPayload { + chain_id, authority, creation_time_ms, nonce: None, diff --git a/docker-compose.dev.local.yml b/docker-compose.dev.local.yml index b7e9c831877..be69b02c5e5 100644 --- a/docker-compose.dev.local.yml +++ b/docker-compose.dev.local.yml @@ -7,6 +7,7 @@ services: build: ./ platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb"}' @@ -27,6 +28,7 @@ services: build: ./ platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"c02ffad5e455e7ec620d74de5769681e4d8385906bce5a437eb67452a9efbbc2815bbdc9775d28c3633269b25f22d048e2aa2e36017cbe5ad85f15220beb6f6f"}' @@ -44,6 +46,7 @@ services: build: ./ platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"29c5ed1409cb10fd791bc4ff8a6cb5e22a5fae7e36f448ef3ea2988b1319a88bf417e0371e6adb32fd66749477402b1ab67f84a8e9b082e997980cc91f327736"}' @@ -61,6 +64,7 @@ services: build: ./ platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"5eed4855fad183c451aac39dfc50831607e4cf408c98e2b977f3ce4a2df42ce2a66522370d60b9c09e79ade2e9bb1ef2e78733a944b999b3a6aee687ce476d61"}' diff --git a/docker-compose.dev.single.yml b/docker-compose.dev.single.yml index a6d0af1cdae..01e4d9b0197 100644 --- a/docker-compose.dev.single.yml +++ b/docker-compose.dev.single.yml @@ -7,6 +7,7 @@ services: build: ./ platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb"}' diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index a483a1c1b16..83439255e3e 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -7,6 +7,7 @@ services: image: hyperledger/iroha2:dev platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed01208BA62848CF767D72E7F7F4B9D2D7BA07FEE33760F79ABE5597A51520E292A0CB IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"8f4c15e5d664da3f13778801d23d4e89b76e94c1b94b389544168b6cb894f84f8ba62848cf767d72e7f7f4b9d2d7ba07fee33760f79abe5597a51520e292a0cb"}' @@ -27,6 +28,7 @@ services: image: hyperledger/iroha2:dev platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120815BBDC9775D28C3633269B25F22D048E2AA2E36017CBE5AD85F15220BEB6F6F IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"c02ffad5e455e7ec620d74de5769681e4d8385906bce5a437eb67452a9efbbc2815bbdc9775d28c3633269b25f22d048e2aa2e36017cbe5ad85f15220beb6f6f"}' @@ -44,6 +46,7 @@ services: image: hyperledger/iroha2:dev platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120F417E0371E6ADB32FD66749477402B1AB67F84A8E9B082E997980CC91F327736 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"29c5ed1409cb10fd791bc4ff8a6cb5e22a5fae7e36f448ef3ea2988b1319a88bf417e0371e6adb32fd66749477402b1ab67f84a8e9b082e997980cc91f327736"}' @@ -61,6 +64,7 @@ services: image: hyperledger/iroha2:dev platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120A66522370D60B9C09E79ADE2E9BB1EF2E78733A944B999B3A6AEE687CE476D61 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"5eed4855fad183c451aac39dfc50831607e4cf408c98e2b977f3ce4a2df42ce2a66522370d60b9c09e79ade2e9bb1ef2e78733a944b999b3a6aee687ce476d61"}' diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 3ac32350d43..b07817080eb 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -4124,6 +4124,10 @@ }, "TransactionPayload": { "Struct": [ + { + "name": "chain_id", + "type": "u16" + }, { "name": "creation_time_ms", "type": "u64" diff --git a/ffi/derive/src/attr_parse/derive.rs b/ffi/derive/src/attr_parse/derive.rs index d1d36bb5832..7ee73ab107d 100644 --- a/ffi/derive/src/attr_parse/derive.rs +++ b/ffi/derive/src/attr_parse/derive.rs @@ -21,9 +21,7 @@ pub enum RustcDerive { impl RustcDerive { fn try_from_path(path: &syn2::Path) -> Option { - let Some(ident) = path.get_ident() else { - return None; - }; + let ident = path.get_ident()?; match ident.to_string().as_str() { "Eq" => Some(Self::Eq), diff --git a/genesis/src/lib.rs b/genesis/src/lib.rs index d32ebb22405..673e11972e6 100644 --- a/genesis/src/lib.rs +++ b/genesis/src/lib.rs @@ -45,7 +45,11 @@ impl GenesisNetwork { /// - If fails to sign a transaction (which means that the `key_pair` is malformed rather /// than anything else) /// - If transactions set is empty - pub fn new(raw_block: RawGenesisBlock, genesis_key_pair: &KeyPair) -> Result { + pub fn new( + raw_block: RawGenesisBlock, + chain_id: u16, + genesis_key_pair: &KeyPair, + ) -> Result { // First instruction should be Executor upgrade. // This makes possible to grant permissions to users in genesis. let transactions_iter = std::iter::once(GenesisTransactionBuilder { @@ -64,7 +68,7 @@ impl GenesisNetwork { // FIXME: fix underlying chain of `.sign` so that it doesn't // consume the key pair unnecessarily. It might be costly to clone // the key pair for a large genesis. - .sign(genesis_key_pair.clone()) + .sign(chain_id, genesis_key_pair.clone()) .map(GenesisTransaction) .wrap_err_with(|| eyre!("Failed to sign transaction at index {i}")) }) @@ -188,11 +192,12 @@ impl GenesisTransactionBuilder { /// /// # Errors /// Fails if signing or accepting fails. - pub fn sign( + fn sign( self, + chain_id: u16, genesis_key_pair: KeyPair, ) -> core::result::Result { - TransactionBuilder::new(GENESIS_ACCOUNT_ID.clone()) + TransactionBuilder::new(chain_id, GENESIS_ACCOUNT_ID.clone()) .with_instructions(self.isi) .sign(genesis_key_pair) } @@ -364,8 +369,11 @@ mod tests { #[test] fn load_new_genesis_block() -> Result<()> { + let chain_id = 0; + let genesis_key_pair = KeyPair::generate()?; let (alice_public_key, _) = KeyPair::generate()?.into(); + let _genesis_block = GenesisNetwork::new( RawGenesisBlockBuilder::default() .domain("wonderland".parse()?) @@ -373,6 +381,7 @@ mod tests { .finish_domain() .executor(dummy_executor()) .build(), + chain_id, &genesis_key_pair, )?; Ok(()) diff --git a/scripts/test_env.py b/scripts/test_env.py index cd72d89c5aa..b64e0cf05e6 100755 --- a/scripts/test_env.py +++ b/scripts/test_env.py @@ -46,6 +46,7 @@ def __init__(self, args: argparse.Namespace): sys.exit(1) copy_or_prompt_build_bin("iroha", args.root_dir, peers_dir) + self.shared_env["IROHA_CHAIN_ID"] = "0" self.shared_env["IROHA_CONFIG"] = str(peers_dir.joinpath("config.json")) self.shared_env["IROHA_GENESIS_PUBLIC_KEY"] = self.peers[0].public_key diff --git a/tools/kagami/src/config.rs b/tools/kagami/src/config.rs index e36b53fcd18..e78798d3841 100644 --- a/tools/kagami/src/config.rs +++ b/tools/kagami/src/config.rs @@ -41,6 +41,7 @@ mod client { impl RunArgs for Args { fn run(self, writer: &mut BufWriter) -> Outcome { let config = ConfigurationProxy { + chain_id: Some(0), torii_api_url: Some(format!("http://{DEFAULT_API_ADDR}").parse()?), account_id: Some("alice@wonderland".parse()?), basic_auth: Some(Some(BasicAuth { diff --git a/tools/swarm/src/compose.rs b/tools/swarm/src/compose.rs index 80dc51f7ac4..4ce36f704dc 100644 --- a/tools/swarm/src/compose.rs +++ b/tools/swarm/src/compose.rs @@ -103,6 +103,7 @@ pub struct DockerComposeService { impl DockerComposeService { pub fn new( + chain_id: u16, peer: &Peer, source: ServiceSource, volumes: Vec<(String, String)>, @@ -122,6 +123,7 @@ impl DockerComposeService { }; let compact_env = CompactPeerEnv { + chain_id, trusted_peers, genesis_public_key, genesis_private_key, @@ -209,6 +211,7 @@ pub enum ServiceSource { #[derive(Serialize, Debug)] #[serde(rename_all = "UPPERCASE")] struct FullPeerEnv { + iroha_chain_id: u16, iroha_config: String, iroha_public_key: PublicKey, iroha_private_key: SerializeAsJsonStr, @@ -224,6 +227,7 @@ struct FullPeerEnv { } struct CompactPeerEnv { + chain_id: u16, key_pair: KeyPair, genesis_public_key: PublicKey, /// Genesis private key is only needed for a peer that is submitting the genesis block @@ -240,12 +244,13 @@ impl From for FullPeerEnv { .genesis_private_key .map_or((None, None), |private_key| { ( - Some(private_key).map(SerializeAsJsonStr), + Some(SerializeAsJsonStr(private_key)), Some(PATH_TO_GENESIS.to_string()), ) }); Self { + iroha_chain_id: value.chain_id, iroha_config: PATH_TO_CONFIG.to_string(), iroha_public_key: value.key_pair.public_key().clone(), iroha_private_key: SerializeAsJsonStr(value.key_pair.private_key().clone()), @@ -302,6 +307,7 @@ impl DockerComposeBuilder<'_> { ) })?; + let chain_id = 0; let peers = peer_generator::generate_peers(self.peers, self.seed) .wrap_err("Failed to generate peers")?; let genesis_key_pair = generate_key_pair(self.seed, GENESIS_KEYPAIR_SEED) @@ -329,6 +335,7 @@ impl DockerComposeBuilder<'_> { let first_peer_service = { let (name, peer) = peers_iter.next().expect("There is non-zero count of peers"); let service = DockerComposeService::new( + chain_id, peer, service_source.clone(), volumes.clone(), @@ -347,6 +354,7 @@ impl DockerComposeBuilder<'_> { let services = peers_iter .map(|(name, peer)| { let service = DockerComposeService::new( + chain_id, peer, service_source.clone(), volumes.clone(), @@ -504,6 +512,7 @@ mod tests { } } + #[derive(Debug)] struct TestEnv { env: HashMap, /// Set of env variables that weren't fetched yet @@ -513,11 +522,22 @@ mod tests { impl From for TestEnv { fn from(peer_env: FullPeerEnv) -> Self { let json = serde_json::to_string(&peer_env).expect("Must be serializable"); - let env: HashMap<_, _> = + let env: HashMap<_, serde_json::Value> = serde_json::from_str(&json).expect("Must be deserializable into a hash map"); let untouched = env.keys().map(Clone::clone).collect(); Self { - env, + env: env + .into_iter() + .map(|(k, v)| { + let s = if let serde_json::Value::String(s) = v { + s + } else { + v.to_string() + }; + + (k, s) + }) + .collect(), untouched: RefCell::new(untouched), } } @@ -561,6 +581,7 @@ mod tests { fn default_config_with_swarm_env_is_exhaustive() { let keypair = KeyPair::generate().unwrap(); let env: TestEnv = CompactPeerEnv { + chain_id: 0, key_pair: keypair.clone(), genesis_public_key: keypair.public_key().clone(), genesis_private_key: Some(keypair.private_key().clone()), @@ -572,6 +593,7 @@ mod tests { // pretending like we've read `IROHA_CONFIG` env to know the config location let _ = env.fetch("IROHA_CONFIG").expect("should be presented"); + println!("ENV: {:#?}", env); let proxy = ConfigurationProxy::default() .override_with(ConfigurationProxy::from_env(&env).expect("valid env")); @@ -597,6 +619,7 @@ mod tests { services: { let mut map = BTreeMap::new(); + let chain_id = 0; let key_pair = KeyPair::generate_with_configuration( KeyGenConfiguration::default().use_seed(vec![1, 5, 1, 2, 2, 3, 4, 1, 2, 3]), ) @@ -608,6 +631,7 @@ mod tests { platform: PlatformArchitecture, source: ServiceSource::Build(PathBuf::from(".")), environment: CompactPeerEnv { + chain_id, key_pair: key_pair.clone(), genesis_public_key: key_pair.public_key().clone(), genesis_private_key: Some(key_pair.private_key().clone()), @@ -642,6 +666,7 @@ mod tests { build: . platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed012039E5BF092186FACC358770792A493CA98A83740643A3D41389483CF334F748C8 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"db9d90d20f969177bd5882f9fe211d14d1399d5440d04e3468783d169bbc4a8e39e5bf092186facc358770792a493ca98a83740643a3d41389483cf334f748c8"}' @@ -664,11 +689,15 @@ mod tests { #[test] fn empty_genesis_public_key_is_skipped_in_env() { + let chain_id = 0; + let key_pair = KeyPair::generate_with_configuration( KeyGenConfiguration::default().use_seed(vec![0, 1, 2]), ) .unwrap(); + let env: FullPeerEnv = CompactPeerEnv { + chain_id, key_pair: key_pair.clone(), genesis_public_key: key_pair.public_key().clone(), genesis_private_key: None, @@ -680,6 +709,7 @@ mod tests { let actual = serde_yaml::to_string(&env).unwrap(); let expected = expect_test::expect![[r#" + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120415388A90FA238196737746A70565D041CFB32EAA0C89FF8CB244C7F832A6EBD IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"6bf163fd75192b81a78cb20c5f8cb917f591ac6635f2577e6ca305c27a456a5d415388a90fa238196737746a70565d041cfb32eaa0c89ff8cb244c7f832a6ebd"}' @@ -719,6 +749,7 @@ mod tests { build: ./iroha-cloned platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120F0321EB4139163C35F88BF78520FF7071499D7F4E79854550028A196C7B49E13 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"5f8d1291bf6b762ee748a87182345d135fd167062857aa4f20ba39f25e74c4b0f0321eb4139163c35f88bf78520ff7071499d7f4e79854550028a196c7b49e13"}' @@ -739,6 +770,7 @@ mod tests { build: ./iroha-cloned platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120A88554AA5C86D28D0EEBEC497235664433E807881CD31E12A1AF6C4D8B0F026C IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"8d34d2c6a699c61e7a9d5aabbbd07629029dfb4f9a0800d65aa6570113edb465a88554aa5c86d28d0eebec497235664433e807881cd31e12a1af6c4d8b0f026c"}' @@ -756,6 +788,7 @@ mod tests { build: ./iroha-cloned platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120312C1B7B5DE23D366ADCF23CD6DB92CE18B2AA283C7D9F5033B969C2DC2B92F4 IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"cf4515a82289f312868027568c0da0ee3f0fde7fef1b69deb47b19fde7cbc169312c1b7b5de23d366adcf23cd6db92ce18b2aa283c7d9f5033b969c2dc2b92f4"}' @@ -773,6 +806,7 @@ mod tests { build: ./iroha-cloned platform: linux/amd64 environment: + IROHA_CHAIN_ID: 0 IROHA_CONFIG: /config/config.json IROHA_PUBLIC_KEY: ed0120854457B2E3D6082181DA73DC01C1E6F93A72D0C45268DC8845755287E98A5DEE IROHA_PRIVATE_KEY: '{"digest_function":"ed25519","payload":"ab0e99c2b845b4ac7b3e88d25a860793c7eb600a25c66c75cba0bae91e955aa6854457b2e3d6082181da73dc01c1e6f93a72d0c45268dc8845755287e98a5dee"}' diff --git a/torii/src/lib.rs b/torii/src/lib.rs index 83d9ce10a26..7e9aca9efcb 100644 --- a/torii/src/lib.rs +++ b/torii/src/lib.rs @@ -41,6 +41,7 @@ mod stream; /// Main network handler and the only entrypoint of the Iroha. pub struct Torii { + chain_id: u16, kiso: KisoHandle, queue: Arc, events: EventsSender, @@ -56,6 +57,7 @@ impl Torii { /// Construct `Torii`. #[allow(clippy::too_many_arguments)] pub fn new( + chain_id: u16, kiso: KisoHandle, config: &ToriiConfiguration, queue: Arc, @@ -66,6 +68,7 @@ impl Torii { kura: Arc, ) -> Self { Self { + chain_id, kiso, queue, events, @@ -131,10 +134,10 @@ impl Torii { let post_router = warp::post() .and( - endpoint3( + endpoint4( routing::handle_transaction, warp::path(uri::TRANSACTION) - .and(add_state!(self.queue, self.sumeragi)) + .and(add_state!(self.chain_id, self.queue, self.sumeragi)) .and(warp::body::content_length_limit( self.transaction_max_content_length, )) diff --git a/torii/src/routing.rs b/torii/src/routing.rs index baf083998b6..6a803792e67 100644 --- a/torii/src/routing.rs +++ b/torii/src/routing.rs @@ -76,13 +76,14 @@ fn fetch_size() -> impl warp::Filter, sumeragi: SumeragiHandle, transaction: SignedTransaction, ) -> Result { let wsv = sumeragi.wsv_clone(); let transaction_limits = wsv.config.transaction_limits; - let transaction = AcceptedTransaction::accept(transaction, &transaction_limits) + let transaction = AcceptedTransaction::accept(transaction, chain_id, &transaction_limits) .map_err(Error::AcceptTransaction)?; queue .push(transaction, &wsv)