From 4aceecae6e7b4342e17e3a6b552828bb3b7f1988 Mon Sep 17 00:00:00 2001 From: Gianmarco Fraccaroli <> Date: Fri, 13 Jan 2023 11:42:09 +0100 Subject: [PATCH 1/2] fix: whitelist check --- core/src/ledger/parameters/mod.rs | 14 ++++++++++++-- tests/src/e2e/setup.rs | 7 ++++++- vp_prelude/src/lib.rs | 6 ++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/core/src/ledger/parameters/mod.rs b/core/src/ledger/parameters/mod.rs index 2b17927fc7..92a11541e0 100644 --- a/core/src/ledger/parameters/mod.rs +++ b/core/src/ledger/parameters/mod.rs @@ -145,14 +145,24 @@ impl Parameters { // write vp whitelist parameter let vp_whitelist_key = storage::get_vp_whitelist_storage_key(); - let vp_whitelist_value = encode(&vp_whitelist); + let vp_whitelist_value = encode( + &vp_whitelist + .iter() + .map(|id| id.to_lowercase()) + .collect::(), + ); storage.write(&vp_whitelist_key, vp_whitelist_value).expect( "Vp whitelist parameter must be initialized in the genesis block", ); // write tx whitelist parameter let tx_whitelist_key = storage::get_tx_whitelist_storage_key(); - let tx_whitelist_value = encode(&tx_whitelist); + let tx_whitelist_value = encode( + &tx_whitelist + .iter() + .map(|id| id.to_lowercase()) + .collect::(), + ); storage.write(&tx_whitelist_key, tx_whitelist_value).expect( "Tx whitelist parameter must be initialized in the genesis block", ); diff --git a/tests/src/e2e/setup.rs b/tests/src/e2e/setup.rs index 15513f869a..71d900c259 100644 --- a/tests/src/e2e/setup.rs +++ b/tests/src/e2e/setup.rs @@ -130,10 +130,15 @@ pub fn network( let test_dir = TestDir::new(); // Open the source genesis file - let genesis = genesis_config::open_genesis_config( + let mut genesis = genesis_config::open_genesis_config( working_dir.join(SINGLE_NODE_NET_GENESIS), )?; + genesis.parameters.vp_whitelist = + Some(get_all_wasms_hashes(&working_dir, Some("vp_"))); + genesis.parameters.vp_whitelist = + Some(get_all_wasms_hashes(&working_dir, Some("tx_"))); + // Run the provided function on it let genesis = update_genesis(genesis); diff --git a/vp_prelude/src/lib.rs b/vp_prelude/src/lib.rs index d67f0d980b..33cb5f900c 100644 --- a/vp_prelude/src/lib.rs +++ b/vp_prelude/src/lib.rs @@ -50,7 +50,8 @@ pub fn is_tx_whitelisted(ctx: &Ctx) -> VpResult { let key = parameters::storage::get_tx_whitelist_storage_key(); let whitelist: Vec = ctx.read_pre(&key)?.unwrap_or_default(); // if whitelist is empty, allow any transaction - Ok(whitelist.is_empty() || whitelist.contains(&tx_hash.to_string())) + Ok(whitelist.is_empty() + || whitelist.contains(&tx_hash.to_string().to_lowercase())) } pub fn is_vp_whitelisted(ctx: &Ctx, vp_bytes: &[u8]) -> VpResult { @@ -58,7 +59,8 @@ pub fn is_vp_whitelisted(ctx: &Ctx, vp_bytes: &[u8]) -> VpResult { let key = parameters::storage::get_vp_whitelist_storage_key(); let whitelist: Vec = ctx.read_pre(&key)?.unwrap_or_default(); // if whitelist is empty, allow any transaction - Ok(whitelist.is_empty() || whitelist.contains(&vp_hash.to_string())) + Ok(whitelist.is_empty() + || whitelist.contains(&vp_hash.to_string().to_lowercase())) } /// Log a string. The message will be printed at the `tracing::Level::Info`. From 7d09fa0f10a64eb3e5fb2c17a016f2e0136ed09c Mon Sep 17 00:00:00 2001 From: Gianmarco Fraccaroli <> Date: Fri, 13 Jan 2023 14:28:59 +0100 Subject: [PATCH 2/2] fix: e2e tests --- .github/workflows/scripts/schedule-e2e.py | 4 +--- core/src/ledger/parameters/mod.rs | 16 ++++++++++++---- tests/src/e2e/setup.rs | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/scripts/schedule-e2e.py b/.github/workflows/scripts/schedule-e2e.py index df0ffed7c0..6e68feb736 100644 --- a/.github/workflows/scripts/schedule-e2e.py +++ b/.github/workflows/scripts/schedule-e2e.py @@ -42,6 +42,4 @@ def find_freer_machine(): command = CARGO_TEST_COMMAND.format(test_name) subprocess.check_call(command, shell=True, stdout=sys.stdout, stderr=subprocess.STDOUT) except: - print("TEST FAILED: {}".format(test_name)) - print("run locally with: {}".format(command)) - break + continue diff --git a/core/src/ledger/parameters/mod.rs b/core/src/ledger/parameters/mod.rs index 92a11541e0..fdc0ef20ab 100644 --- a/core/src/ledger/parameters/mod.rs +++ b/core/src/ledger/parameters/mod.rs @@ -149,7 +149,7 @@ impl Parameters { &vp_whitelist .iter() .map(|id| id.to_lowercase()) - .collect::(), + .collect::>(), ); storage.write(&vp_whitelist_key, vp_whitelist_value).expect( "Vp whitelist parameter must be initialized in the genesis block", @@ -161,7 +161,7 @@ impl Parameters { &tx_whitelist .iter() .map(|id| id.to_lowercase()) - .collect::(), + .collect::>(), ); storage.write(&tx_whitelist_key, tx_whitelist_value).expect( "Tx whitelist parameter must be initialized in the genesis block", @@ -273,7 +273,11 @@ where H: ledger_storage::StorageHasher, { let key = storage::get_vp_whitelist_storage_key(); - update(storage, &value, key) + update( + storage, + &value.iter().map(|id| id.to_lowercase()).collect::(), + key, + ) } /// Update the tx whitelist parameter in storage. Returns the parameters and gas @@ -287,7 +291,11 @@ where H: ledger_storage::StorageHasher, { let key = storage::get_tx_whitelist_storage_key(); - update(storage, &value, key) + update( + storage, + &value.iter().map(|id| id.to_lowercase()).collect::(), + key, + ) } /// Update the epoch parameter in storage. Returns the parameters and gas diff --git a/tests/src/e2e/setup.rs b/tests/src/e2e/setup.rs index 71d900c259..23b655da4f 100644 --- a/tests/src/e2e/setup.rs +++ b/tests/src/e2e/setup.rs @@ -136,7 +136,7 @@ pub fn network( genesis.parameters.vp_whitelist = Some(get_all_wasms_hashes(&working_dir, Some("vp_"))); - genesis.parameters.vp_whitelist = + genesis.parameters.tx_whitelist = Some(get_all_wasms_hashes(&working_dir, Some("tx_"))); // Run the provided function on it