diff --git a/SECURITY.md b/SECURITY.md index 18fc2c07..8dbccc9b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -7,9 +7,13 @@ This repository is a component of [genvm-manager]; the canonical security policy ## Reporting a vulnerability -**Do not open a public issue.** Report privately via GitHub's -[private vulnerability reporting](https://github.com/genlayerlabs/genvm-manager/security/advisories/new), -or email kira@genlayerlabs.com +**Before mainnet, report everything except remote code execution publicly** — open a +regular issue. Until there is value at stake, an open report gets triaged faster and is +useful to everyone reading along. RCE is the only exception; report it privately. + +For remote code execution, **do not open a public issue** — report it via GitHub's +[private vulnerability reporting](https://github.com/genlayerlabs/genvm-manager/security/advisories/new) +on the [genvm-manager] repository. Include a description, affected component/version, and a reproduction (a contract, calldata, or test case) where possible. We aim to acknowledge within a few business days. diff --git a/executor/fuzz/genvm-storage.rs b/executor/fuzz/genvm-storage.rs index cde883e4..caaf6634 100644 --- a/executor/fuzz/genvm-storage.rs +++ b/executor/fuzz/genvm-storage.rs @@ -151,31 +151,31 @@ async fn run_storage_fuzz(input: FuzzInput) -> anyhow::Result<()> { address, genvm::rt::vm::storage::Limiter::new(sync::DArc::new( rt::fees::DataLimit::new( - vec![primitive_types::U256::MAX], + std::collections::HashMap::from([("test".to_owned(), primitive_types::U256::MAX)]), genvm::config::FeesConfig { expr_prelude: String::new(), storage: genvm::config::FeesBucketConfig { - bucket_no: vec![0], + buckets: vec![symbol_table::GlobalSymbol::from("test")], subtract_on_start_expr: "0".into(), delta_expr: r"\attrs = 0".into(), }, message_receipt: genvm::config::FeesBucketConfig { - bucket_no: vec![0], + buckets: vec![symbol_table::GlobalSymbol::from("test")], subtract_on_start_expr: "0".into(), delta_expr: r"\attrs = 0".into(), }, nondet_output: genvm::config::FeesBucketConfig { - bucket_no: vec![0], + buckets: vec![symbol_table::GlobalSymbol::from("test")], subtract_on_start_expr: "0".into(), delta_expr: r"\attrs = 0".into(), }, message_fee: genvm::config::FeesBucketConfig { - bucket_no: vec![0], + buckets: vec![symbol_table::GlobalSymbol::from("test")], subtract_on_start_expr: "0".into(), delta_expr: r"\attrs = 0".into(), }, event: genvm::config::FeesBucketConfig { - bucket_no: vec![0], + buckets: vec![symbol_table::GlobalSymbol::from("test")], subtract_on_start_expr: "0".into(), delta_expr: r"\attrs = 0".into(), }, diff --git a/executor/install/config/genvm.yaml b/executor/install/config/genvm.yaml index aa586ce8..3db6b4c3 100644 --- a/executor/install/config/genvm.yaml +++ b/executor/install/config/genvm.yaml @@ -8,35 +8,35 @@ modules: log_level: info -# NOTE: we on purpose set all to 0 in this legacy version +# This legacy executor line intentionally charges every fee category at zero fees: expr_prelude: "" storage: - bucket_no: 0 + buckets: execution_data_gas subtract_on_start_expr: | 0 delta_expr: | \a = 0 message_receipt: - bucket_no: 0 + buckets: execution_data_gas subtract_on_start_expr: | 0 delta_expr: | \a = 0 nondet_output: - bucket_no: 0 + buckets: execution_data_gas subtract_on_start_expr: | 0 delta_expr: | \a = 0 message_fee: - bucket_no: 0 + buckets: execution_data_gas subtract_on_start_expr: | 0 delta_expr: | \a = 0 event: - bucket_no: 0 + buckets: execution_data_gas subtract_on_start_expr: | 0 delta_expr: | diff --git a/executor/src/config.rs b/executor/src/config.rs index 6483f3d5..f75f5e0a 100644 --- a/executor/src/config.rs +++ b/executor/src/config.rs @@ -15,7 +15,7 @@ fn default_fee_expr_zero() -> String { "0".to_owned() } -fn deserialize_bucket_nos<'de, D>(d: D) -> Result, D::Error> +fn deserialize_bucket_names<'de, D>(d: D) -> Result, D::Error> where D: serde::Deserializer<'de>, { @@ -23,24 +23,26 @@ where struct Visitor; impl<'de> de::Visitor<'de> for Visitor { - type Value = Vec; + type Value = Vec; fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - f.write_str("an integer or array of integers") + f.write_str("a non-empty string or array of non-empty strings") } - fn visit_u64(self, v: u64) -> Result, E> { - u8::try_from(v) - .map(|b| vec![b]) - .map_err(|_| E::custom(format!("bucket_no {v} exceeds u8 range"))) - } - fn visit_i64(self, v: i64) -> Result, E> { - u8::try_from(v) - .map(|b| vec![b]) - .map_err(|_| E::custom(format!("bucket_no {v} out of u8 range"))) + fn visit_str(self, v: &str) -> Result { + if v.is_empty() { + return Err(E::custom("bucket name must not be empty")); + } + Ok(vec![symbol_table::GlobalSymbol::from(v)]) } - fn visit_seq>(self, mut seq: A) -> Result, A::Error> { + fn visit_seq>(self, mut seq: A) -> Result { let mut v = Vec::new(); - while let Some(n) = seq.next_element::()? { - v.push(n); + while let Some(name) = seq.next_element::()? { + if name.is_empty() { + return Err(de::Error::custom("bucket name must not be empty")); + } + v.push(symbol_table::GlobalSymbol::from(name)); + } + if v.is_empty() { + return Err(de::Error::custom("buckets must have at least one entry")); } Ok(v) } @@ -49,9 +51,10 @@ where } #[derive(Clone, Deserialize, Debug)] +#[serde(deny_unknown_fields)] pub struct FeesBucketConfig { - #[serde(deserialize_with = "deserialize_bucket_nos")] - pub bucket_no: Vec, + #[serde(deserialize_with = "deserialize_bucket_names")] + pub buckets: Vec, /// Cost charged once, up-front, when the bucket is created /// (the fixed part of `start + sum of per-change`). #[serde(default = "default_fee_expr_zero")] diff --git a/executor/src/domain/fees.rs b/executor/src/domain/fees.rs index 7bc2cae1..713f2caa 100644 --- a/executor/src/domain/fees.rs +++ b/executor/src/domain/fees.rs @@ -3,6 +3,11 @@ use primitive_types::U256; mod abi; +pub const CALL_KEY_WILDCARD: genlayer_sdk::abi::CallKey = genlayer_sdk::abi::CallKey([ + 0xc5, 0xd2, 0x46, 0x01, 0x86, 0xf7, 0x23, 0x3c, 0x92, 0x7e, 0x7d, 0xb2, 0xdc, 0xc7, 0x03, 0xc0, + 0xe5, 0x00, 0xb6, 0x53, 0xca, 0x82, 0x27, 0x3b, 0x7b, 0xfa, 0xd8, 0x04, 0x5d, 0x85, 0xa4, 0x70, +]); + #[derive( Debug, Clone, @@ -82,7 +87,7 @@ pub struct MessageAllocationNode { /// Target contract address; `None` means wildcard (any recipient). pub recipient: Option, /// `None` = wildcard: all call keys for this recipient - /// (chain sentinel: `CALL_KEY_WILDCARD` = `bytes32(0)`). + /// (chain sentinel: `CALL_KEY_WILDCARD` = `keccak256("")`). pub call_key: Option, /// Max budget for matching messages. pub budget: U256, @@ -93,12 +98,10 @@ pub struct MessageAllocationNode { } impl MessageAllocationNode { - /// ABI-encodes the nested allocation tree as the chain's flat - /// `MessageAllocationNode[]` representation (matching `abi.encode(nodes)`), - /// flattening children to parent-pointer form via pre-order traversal so that - /// every parent precedes its children and their `parentIndex` is well-defined. - pub fn abi_encode(roots: &[MessageAllocationNode]) -> Vec { - abi::encode(roots) + /// ABI-encodes this matched node and its descendants for transport to the chain. + /// The matched node is element 0 and descendants are in BFS order. + pub fn abi_encode(&self) -> Vec { + abi::encode(self) } #[allow(clippy::if_same_then_else)] diff --git a/executor/src/domain/fees/abi.rs b/executor/src/domain/fees/abi.rs index 4af80e42..f0db6472 100644 --- a/executor/src/domain/fees/abi.rs +++ b/executor/src/domain/fees/abi.rs @@ -50,46 +50,34 @@ fn push_address(buf: &mut Vec, addr: Option<&genlayer_sdk::calldata::Address } } -/// `callKey` is already a 32-byte word; `None` is the `CALL_KEY_WILDCARD` = `bytes32(0)`. +/// `callKey` is already a 32-byte word; `None` is `CALL_KEY_WILDCARD`. fn push_call_key(buf: &mut Vec, call_key: Option<&genlayer_sdk::abi::CallKey>) { match call_key { Some(ck) => buf.extend_from_slice(&ck.0), - None => buf.extend_from_slice(&[0u8; 32]), + None => buf.extend_from_slice(&super::CALL_KEY_WILDCARD.0), } } -/// ABI-encodes the nested allocation tree as the chain's flat -/// `MessageAllocationNode[]` representation (matching `abi.encode(nodes)`). -pub(super) fn encode(roots: &[MessageAllocationNode]) -> Vec { - // Pre-order flatten: (node, parentIndex). Parents always precede children, - // so the parent's array index is already assigned when a child is visited. +/// Encodes the transport payload consumed by `decodeAllocationSubtree`. +pub(super) fn encode(root: &MessageAllocationNode) -> Vec { let mut flat: Vec<(&MessageAllocationNode, U256)> = Vec::new(); - fn flatten<'a>( - nodes: &'a [MessageAllocationNode], - parent: U256, - out: &mut Vec<(&'a MessageAllocationNode, U256)>, - ) { - for node in nodes { - let my_index = U256::from(out.len() as u64); - out.push((node, parent)); - flatten(&node.children, my_index, out); + let mut queue = std::collections::VecDeque::from([(root, NODE_ROOT_SENTINEL)]); + while let Some((node, parent_index)) = queue.pop_front() { + let node_index = U256::from(flat.len()); + flat.push((node, parent_index)); + for child in &node.children { + queue.push_back((child, node_index)); } } - flatten(roots, NODE_ROOT_SENTINEL, &mut flat); - // Encode each element as its own self-contained dynamic tuple. let elements: Vec> = flat .iter() .map(|(node, parent_index)| encode_node(node, *parent_index)) .collect(); - // `abi.encode(MessageAllocationNode[])`: leading offset (0x20) to the array. let mut buf = Vec::new(); push_word(&mut buf, 0x20); - // Dynamic array of dynamic elements: length, then per-element head offsets - // (relative to the start of the head region, i.e. right after the length), - // then the element tails. push_word(&mut buf, elements.len() as u64); let mut offset = elements.len() * 32; for element in &elements { diff --git a/executor/src/exe/run.rs b/executor/src/exe/run.rs index 46a099f4..e0401bc6 100644 --- a/executor/src/exe/run.rs +++ b/executor/src/exe/run.rs @@ -15,11 +15,16 @@ const EXECUTION_DATA_HELP: &str = "path to file containing encoded execution dat fn fill_nested_fee_buckets( is_nested: bool, - max_bucket_no: usize, - bucket_totals: &mut Vec, + bucket_names: &[symbol_table::GlobalSymbol], + bucket_totals: &mut std::collections::HashMap, ) { if is_nested && bucket_totals.is_empty() { - bucket_totals.resize(max_bucket_no + 1, primitive_types::U256::zero()); + bucket_totals.extend( + bucket_names + .iter() + .copied() + .map(|name| (name.as_str().to_owned(), primitive_types::U256::zero())), + ); } } @@ -162,7 +167,8 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { let mut bucket_totals = execution_data .bucket_totals .iter() - .map(|bi| { + .map(|(name, bi)| { + anyhow::ensure!(!name.is_empty(), "bucket name must not be empty"); let (sign, bytes) = bi.to_bytes_be(); anyhow::ensure!( sign != num_bigint::Sign::Minus, @@ -172,28 +178,29 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { let mut buf = [0u8; 32]; let start = 32usize.saturating_sub(bytes.len()); buf[start..].copy_from_slice(&bytes); - Ok(primitive_types::U256::from_big_endian(&buf)) + Ok((name.clone(), primitive_types::U256::from_big_endian(&buf))) }) - .collect::>>()?; - - let max_bucket_no = [ - &config.fees.storage.bucket_no, - &config.fees.message_receipt.bucket_no, - &config.fees.nondet_output.bucket_no, - &config.fees.message_fee.bucket_no, - &config.fees.event.bucket_no, + .collect::>>()?; + + let bucket_names = [ + &config.fees.storage.buckets, + &config.fees.message_receipt.buckets, + &config.fees.nondet_output.buckets, + &config.fees.message_fee.buckets, + &config.fees.event.buckets, ] .into_iter() .flat_map(|v| v.iter().copied()) - .max() - .unwrap_or(0); + .collect::>(); - fill_nested_fee_buckets(is_nested, max_bucket_no as usize, &mut bucket_totals); - anyhow::ensure!( - (max_bucket_no as usize) < bucket_totals.len(), - "fees config references bucket {max_bucket_no} but only {} bucket(s) provided", - bucket_totals.len(), - ); + fill_nested_fee_buckets(is_nested, &bucket_names, &mut bucket_totals); + for name in bucket_names { + anyhow::ensure!( + bucket_totals.contains_key(name.as_str()), + "fees config references missing bucket `{}`", + name.as_str(), + ); + } let emit_leader_public_data = !args.sync && !is_nested && execution_data.leader_public_data.is_none(); @@ -201,7 +208,7 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { match execution_data.leader_public_data.as_ref() { None => (None, false), Some(encoded) => match genvm::leader_public_data::LeaderPublicData::decode(encoded) { - Ok(data) => (Some(data.nondet_block_outputs), false), + Ok(data) => (Some(data.nd_outs), false), Err(_) => (Some(Vec::new()), true), }, }; @@ -287,7 +294,7 @@ pub fn handle(args: Args, mut config: config::Config) -> Result<()> { let data_fees_consumed = runtime.block_on(shared_data.data_fees_limit.consumed()); let leader_public_data = if emit_leader_public_data { genvm::leader_public_data::LeaderPublicData { - nondet_block_outputs: Vec::new(), + nd_outs: Vec::new(), } .encode() } else { diff --git a/executor/src/host/mod.rs b/executor/src/host/mod.rs index 551bc1dd..67a41bae 100644 --- a/executor/src/host/mod.rs +++ b/executor/src/host/mod.rs @@ -188,7 +188,7 @@ impl FullResult { emissions: Vec::new(), nondet_disagreement: None, leader_public_data: bytes::Bytes::new(), - data_fees_remaining: Vec::new(), + data_fees_remaining: std::collections::BTreeMap::new(), data_fees_consumed: genvm_modules_interfaces::BucketsConsumed::default(), llm_consumed_gen_wei: primitive_types::U256::zero(), }, @@ -201,7 +201,7 @@ impl FullResult { rt_result: rt::vm::FullResult, leader_public_data: bytes::Bytes, nondet_disagreement: Option, - data_fees_remaining: Vec, + data_fees_remaining: std::collections::BTreeMap, data_fees_consumed: rt::fees::BucketsConsumed, llm_consumption: primitive_types::U256, ) -> Self { @@ -209,7 +209,7 @@ impl FullResult { backtrace: &'a Option, data: &'a calldata::unparsed::Maybe, data_fees_consumed: &'a rt::fees::BucketsConsumed, - data_fees_remaining: &'a Vec, + data_fees_remaining: &'a std::collections::BTreeMap, kind: &'a public_abi::ResultCode, wasm_store_hashes: &'a rt::errors::WasmStoreHashes, storage_changes: &'a Vec, diff --git a/executor/src/leader_public_data.rs b/executor/src/leader_public_data.rs index 6df581ba..1fb85c71 100644 --- a/executor/src/leader_public_data.rs +++ b/executor/src/leader_public_data.rs @@ -1,126 +1,84 @@ +use crate::public_abi::top_limits; use bytes::Bytes; -const PADDING: &[u8] = b"padded"; - -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, genlayer_calldata::Encode)] pub struct LeaderPublicData { - pub nondet_block_outputs: Vec, + pub nd_outs: Vec, } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct DecodeError; - -impl LeaderPublicData { - pub fn encode(&self) -> Bytes { - let mut payload = Vec::new(); - for output in self - .nondet_block_outputs - .iter() - .map(Bytes::as_ref) - .chain(std::iter::once(PADDING)) - { - encode_bytes(&mut payload, output); - } - - let mut encoded = Vec::new(); - encode_len(&mut encoded, payload.len(), 0xc0, 0xf7); - encoded.extend_from_slice(&payload); - encoded.into() - } - - pub fn decode(encoded: &[u8]) -> Result { - if encoded.is_empty() { - return Ok(Self { - nondet_block_outputs: Vec::new(), - }); - } - - let (payload_start, payload_len) = decode_len(encoded, 0, true)?; - let payload_end = payload_start.checked_add(payload_len).ok_or(DecodeError)?; - if payload_end != encoded.len() { - return Err(DecodeError); - } - - let mut cursor = payload_start; - let mut outputs = Vec::new(); - while cursor < payload_end { - let (data_start, data_len) = decode_len(encoded, cursor, false)?; - let data_end = data_start.checked_add(data_len).ok_or(DecodeError)?; - if data_end > payload_end { - return Err(DecodeError); +impl genlayer_calldata::codec::Decode for LeaderPublicData { + fn decode( + deserializer: D, + ) -> Result { + use genlayer_calldata::codec::{DecodeError, MapAccess, SeqAccess, Visitor}; + + struct OutputsVisitor; + impl Visitor for OutputsVisitor { + type Value = Vec; + + fn visit_seq( + self, + len: u64, + mut seq: A, + ) -> Result { + if len > u64::from(top_limits::NONDET_BLOCKS) { + return Err(DecodeError::Custom( + "too many nondeterministic outputs".to_owned(), + )); + } + + let mut outputs = Vec::with_capacity(len as usize); + while let Some(output) = seq.next_element::()? { + outputs.push(output); + } + debug_assert_eq!(outputs.len(), len as usize); + Ok(outputs) } - outputs.push(Bytes::copy_from_slice(&encoded[data_start..data_end])); - cursor = data_end; } - if outputs.last().is_none_or(|last| last.as_ref() != PADDING) { - return Err(DecodeError); + struct LeaderPublicDataVisitor; + impl Visitor for LeaderPublicDataVisitor { + type Value = LeaderPublicData; + + fn visit_map( + self, + len: u64, + mut map: A, + ) -> Result { + if len != 1 { + return Err(DecodeError::LengthMismatch { + expected: 1, + got: usize::try_from(len).unwrap_or(usize::MAX), + }); + } + let Some(key) = map.next_key()? else { + return Err(DecodeError::FieldMissing("nd_outs")); + }; + if key != "nd_outs" { + return Err(DecodeError::UnknownField(key.to_owned())); + } + + let nd_outs = map.next_value_visit(OutputsVisitor)?; + debug_assert!(map.next_key()?.is_none()); + Ok(LeaderPublicData { nd_outs }) + } } - outputs.pop(); - - Ok(Self { - nondet_block_outputs: outputs, - }) - } -} - -fn encode_bytes(output: &mut Vec, value: &[u8]) { - if value.len() == 1 && value[0] < 0x80 { - output.push(value[0]); - return; - } - - encode_len(output, value.len(), 0x80, 0xb7); - output.extend_from_slice(value); -} -fn encode_len(output: &mut Vec, len: usize, short_base: u8, long_base: u8) { - if len <= 55 { - output.push(short_base + len as u8); - return; + deserializer.deserialize(LeaderPublicDataVisitor) } - - let bytes = len.to_be_bytes(); - let first = bytes.iter().position(|byte| *byte != 0).unwrap(); - let len_bytes = &bytes[first..]; - output.push(long_base + len_bytes.len() as u8); - output.extend_from_slice(len_bytes); } -fn decode_len(encoded: &[u8], offset: usize, list: bool) -> Result<(usize, usize), DecodeError> { - let prefix = *encoded.get(offset).ok_or(DecodeError)?; - let short_base: u8 = if list { 0xc0 } else { 0x80 }; - let long_base: u8 = if list { 0xf7 } else { 0xb7 }; - - if !list && prefix < 0x80 { - return Ok((offset, 1)); - } - if prefix < short_base || prefix > long_base.saturating_add(size_of::() as u8) { - return Err(DecodeError); - } - if prefix <= long_base { - if !list && prefix == 0x81 && encoded.get(offset + 1).is_some_and(|byte| *byte < 0x80) { - return Err(DecodeError); - } - return Ok((offset + 1, usize::from(prefix - short_base))); - } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct DecodeError; - let len_len = usize::from(prefix - long_base); - let len_start = offset.checked_add(1).ok_or(DecodeError)?; - let len_end = len_start.checked_add(len_len).ok_or(DecodeError)?; - let len_bytes = encoded.get(len_start..len_end).ok_or(DecodeError)?; - if len_bytes.first() == Some(&0) { - return Err(DecodeError); +impl LeaderPublicData { + pub fn encode(&self) -> Bytes { + genlayer_calldata::encode_obj(self).into() } - let mut buf = [0; size_of::()]; - buf[size_of::() - len_len..].copy_from_slice(len_bytes); - let len = usize::from_be_bytes(buf); - if len <= 55 { - return Err(DecodeError); + pub fn decode(encoded: &[u8]) -> Result { + genlayer_calldata::decode_obj(encoded).map_err(|_| DecodeError) } - - Ok((len_end, len)) } #[cfg(test)] @@ -128,30 +86,53 @@ mod tests { use super::*; #[test] - fn rlp_round_trip() { + fn calldata_round_trip() { let data = LeaderPublicData { - nondet_block_outputs: vec![Bytes::from_static(b"a"), Bytes::from_static(b"bc")], + nd_outs: vec![Bytes::from_static(b"a"), Bytes::from_static(b"bc")], }; assert_eq!(LeaderPublicData::decode(&data.encode()), Ok(data)); } #[test] - fn preserves_legacy_empty_encoding() { + fn has_stable_calldata_encoding() { let data = LeaderPublicData { - nondet_block_outputs: Vec::new(), + nd_outs: vec![Bytes::from_static(b"a"), Bytes::from_static(b"bc")], }; - assert_eq!(data.encode().as_ref(), b"\xc7\x86padded"); + assert_eq!(data.encode().as_ref(), b"\x0e\x07nd_outs\x15\x0ba\x13bc"); } #[test] - fn rejects_missing_padding_and_trailing_bytes() { - assert_eq!(LeaderPublicData::decode(b"\xc0"), Err(DecodeError)); + fn rejects_empty_legacy_and_trailing_data() { + assert_eq!(LeaderPublicData::decode(&[]), Err(DecodeError)); + assert_eq!( + LeaderPublicData::decode(b"\xcc\x84test\x86padded"), + Err(DecodeError) + ); + + let mut encoded = LeaderPublicData { + nd_outs: Vec::new(), + } + .encode() + .to_vec(); + encoded.push(0); + assert_eq!(LeaderPublicData::decode(&encoded), Err(DecodeError)); + } + + #[test] + fn bounds_output_count_while_decoding() { + let at_limit = LeaderPublicData { + nd_outs: vec![Bytes::new(); top_limits::NONDET_BLOCKS as usize], + }; + assert_eq!(LeaderPublicData::decode(&at_limit.encode()), Ok(at_limit)); + + let above_limit = LeaderPublicData { + nd_outs: vec![Bytes::new(); top_limits::NONDET_BLOCKS as usize + 1], + }; assert_eq!( - LeaderPublicData::decode(b"\xc7\x86padded\x00"), + LeaderPublicData::decode(&above_limit.encode()), Err(DecodeError) ); - assert_eq!(LeaderPublicData::decode(b"\xc2\x81\x01"), Err(DecodeError)); } } diff --git a/executor/src/lib.rs b/executor/src/lib.rs index adac6e0e..69da6e89 100644 --- a/executor/src/lib.rs +++ b/executor/src/lib.rs @@ -396,6 +396,11 @@ pub async fn run_with_impl( topmost_runner_id, }, }; + let message_fee_allocation = entry_data + .message_fee_allocation + .into_iter() + .map(convert_message_allocation_node) + .collect::>(); let essential_data = Box::new(wasi::genlayer_sdk::SingleVMData { // A budget minted elsewhere is a remainder, not an authority: a chain @@ -422,11 +427,11 @@ pub async fn run_with_impl( data_fees_limit, messages_value_decremented: primitive_types::U256::zero(), emissions: Vec::new(), - message_fee_allocation: entry_data - .message_fee_allocation - .into_iter() - .map(convert_message_allocation_node) - .collect(), + message_fee_allocation_consumed: vec![ + primitive_types::U256::zero(); + message_fee_allocation.len() + ], + message_fee_allocation, custom_runners: Default::default(), }, det_subvm_hashes: Default::default(), @@ -510,7 +515,7 @@ pub async fn run_with( let leader_public_data = if supervisor.is_leader() && supervisor.emit_leader_public_data { leader_public_data::LeaderPublicData { - nondet_block_outputs: nondet_results, + nd_outs: nondet_results, } .encode() } else { diff --git a/executor/src/rt/fees.rs b/executor/src/rt/fees.rs index 5f12f54a..eddead0d 100644 --- a/executor/src/rt/fees.rs +++ b/executor/src/rt/fees.rs @@ -114,7 +114,7 @@ fn value_to_u256_vec( genvm_common::expr::Value::Array(arr) => { anyhow::ensure!( arr.len() == bucket_count, - "fee expression returned array of length {} but bucket_no has {bucket_count} entries", + "fee expression returned array of length {} but buckets has {bucket_count} entries", arr.len(), ); arr.iter() @@ -154,12 +154,12 @@ fn eval_with_node( /// [`DataLimit::consume_initial`]) + Σ `delta(attrs)`. `delta` is a function /// closing over `node`/the prelude. /// -/// `bucket_nos` can target multiple on-chain buckets. When the delta expression +/// `bucket_names` can target multiple on-chain buckets. When the delta expression /// returns a scalar it is charged identically against every bucket; when it /// returns an array the lengths must match and each element is charged to the /// corresponding bucket. All subtractions are atomic (all-or-nothing). struct Bucket { - bucket_nos: Vec, + bucket_names: Vec, subtract_on_start: Vec, delta: genvm_common::expr::Value, oom_error: abi::consts::VmError, @@ -170,7 +170,14 @@ struct Bucket { impl std::fmt::Debug for Bucket { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("Bucket") - .field("bucket_nos", &self.bucket_nos) + .field( + "bucket_names", + &self + .bucket_names + .iter() + .map(symbol_table::GlobalSymbol::as_str) + .collect::>(), + ) .field("subtract_on_start", &self.subtract_on_start) .finish() } @@ -182,8 +189,8 @@ fn build_bucket( node: &genvm_common::expr::Value, oom_error: abi::consts::VmError, ) -> anyhow::Result { - let n = cfg.bucket_no.len(); - anyhow::ensure!(n > 0, "bucket_no must have at least one entry"); + let n = cfg.buckets.len(); + anyhow::ensure!(n > 0, "buckets must have at least one entry"); let subtract_on_start = value_to_u256_vec( eval_with_node( @@ -196,8 +203,9 @@ fn build_bucket( )?; let delta = eval_with_node(prelude, "delta", &cfg.delta_expr, node)?; + debug_assert_eq!(subtract_on_start.len(), n); Ok(Bucket { - bucket_nos: cfg.bucket_no.clone(), + bucket_names: cfg.buckets.clone(), subtract_on_start, delta, oom_error, @@ -244,7 +252,7 @@ pub struct MessageReceiptParams { #[derive(Debug)] pub struct DataLimit { - buckets: tokio::sync::Mutex>, + buckets: tokio::sync::Mutex>, storage: Bucket, message_receipt: Bucket, nondet_output: Bucket, @@ -254,7 +262,7 @@ pub struct DataLimit { impl DataLimit { pub fn new( - bucket_totals: Vec, + bucket_totals: std::collections::HashMap, fees: crate::config::FeesConfig, gas_data: std::collections::BTreeMap, ) -> anyhow::Result { @@ -304,6 +312,24 @@ impl DataLimit { abi::consts::VmError::oom().storage(), )?; + for bucket in [ + &storage, + &message_receipt, + &nondet_output, + &message_fee, + &event, + ] { + debug_assert_eq!(bucket.bucket_names.len(), bucket.subtract_on_start.len()); + debug_assert_eq!(bucket.bucket_names.len(), bucket.total_consumed.len()); + for &name in &bucket.bucket_names { + anyhow::ensure!( + bucket_totals.contains_key(name.as_str()), + "fees config references missing bucket `{}`", + name.as_str(), + ); + } + } + Ok(Self { buckets: tokio::sync::Mutex::new(bucket_totals), storage, @@ -323,9 +349,12 @@ impl DataLimit { .delta .apply_with(attrs_object(vars), no_free_vars) .map_err(|e| anyhow::anyhow!("{e}")) - .and_then(|v| value_to_u256_vec(v, bucket.bucket_nos.len())) + .and_then(|v| value_to_u256_vec(v, bucket.bucket_names.len())) { - Ok(costs) => Ok(CostVec(costs)), + Ok(costs) => { + debug_assert_eq!(costs.len(), bucket.bucket_names.len()); + Ok(CostVec(costs)) + } Err(e) => { log_error!(error:ah = e; "failed to evaluate fee expression"); Err(e).context("failed to evaluate fee expression") @@ -343,33 +372,48 @@ impl DataLimit { } async fn consume_bucket_raw(&self, bucket: &Bucket, costs: &[primitive_types::U256]) -> bool { + debug_assert_eq!(bucket.bucket_names.len(), costs.len()); + debug_assert_eq!(bucket.bucket_names.len(), bucket.total_consumed.len()); let mut buckets = self.buckets.lock().await; - for (idx, (&bno, &cost)) in bucket.bucket_nos.iter().zip(costs.iter()).enumerate() { - let Some(remaining) = buckets.get(bno as usize) else { - log_warn!(bucket = bno; "consume_bucket: bucket index out of range"); + for (idx, (&name, &cost)) in bucket.bucket_names.iter().zip(costs.iter()).enumerate() { + let Some(remaining) = buckets.get(name.as_str()) else { + debug_assert!( + buckets.contains_key(name.as_str()), + "validated bucket disappeared: {}", + name.as_str() + ); + log_warn!(bucket = name.as_str(); "consume_bucket: bucket missing"); return false; }; if *remaining < cost { log_warn!( - bucket = bno, + bucket = name.as_str(), cost:display = cost, remaining:display = *remaining; "consume_bucket: insufficient funds" ); return false; } - // when the same bucket_no appears more than once, verify + // When the same bucket appears more than once, verify // cumulative cost fits let mut cumulative = cost; - for (&prev_bno, &prev_cost) in bucket.bucket_nos[..idx].iter().zip(costs[..idx].iter()) + for (&prev_name, &prev_cost) in + bucket.bucket_names[..idx].iter().zip(costs[..idx].iter()) { - if prev_bno == bno { - cumulative += prev_cost; + if prev_name == name { + let Some(total) = cumulative.checked_add(prev_cost) else { + log_warn!( + bucket = name.as_str(); + "consume_bucket: cumulative cost overflow" + ); + return false; + }; + cumulative = total; } } if *remaining < cumulative { log_warn!( - bucket = bno, + bucket = name.as_str(), cumulative:display = cumulative, remaining:display = *remaining; "consume_bucket: insufficient funds (cumulative)" @@ -377,12 +421,20 @@ impl DataLimit { return false; } } - for (i, (&bno, &cost)) in bucket.bucket_nos.iter().zip(costs.iter()).enumerate() { - buckets[bno as usize] -= cost; + for (i, (&name, &cost)) in bucket.bucket_names.iter().zip(costs.iter()).enumerate() { + let Some(remaining) = buckets.get_mut(name.as_str()) else { + debug_assert!( + buckets.contains_key(name.as_str()), + "validated bucket disappeared: {}", + name.as_str() + ); + return false; + }; + *remaining -= cost; log_debug!( - bucket = bno, + bucket = name.as_str(), cost:display = cost, - remaining:display = buckets[bno as usize]; + remaining:display = *remaining; "consume_bucket: ok" ); *bucket.total_consumed[i].lock().await += cost; @@ -391,8 +443,13 @@ impl DataLimit { true } - pub async fn remaining(&self) -> Vec { - self.buckets.lock().await.clone() + pub async fn remaining(&self) -> std::collections::BTreeMap { + self.buckets + .lock() + .await + .iter() + .map(|(name, total)| (name.clone(), *total)) + .collect() } async fn sum_consumed(bucket: &Bucket) -> primitive_types::U256 { @@ -433,7 +490,11 @@ impl DataLimit { bucket.oom_error.clone(), anyhow::anyhow!( "subtract_on_start exceeds bucket {:?} total", - bucket.bucket_nos + bucket + .bucket_names + .iter() + .map(symbol_table::GlobalSymbol::as_str) + .collect::>() ), )); } @@ -513,31 +574,61 @@ impl DataLimit { pub async fn consume_message_fee(&self, cost_fee: &CostVec, cost_receipt: &CostVec) -> bool { let mut buckets = self.buckets.lock().await; - // Build a cumulative deduction map: bucket_index → total to subtract. - let mut deductions: std::collections::BTreeMap = - std::collections::BTreeMap::new(); - - for (&bno, &cost) in self.message_fee.bucket_nos.iter().zip(cost_fee.0.iter()) { - *deductions.entry(bno).or_default() += cost; + debug_assert_eq!(self.message_fee.bucket_names.len(), cost_fee.0.len()); + debug_assert_eq!( + self.message_receipt.bucket_names.len(), + cost_receipt.0.len() + ); + let mut deductions: Vec<(symbol_table::GlobalSymbol, primitive_types::U256)> = Vec::new(); + + for (&name, &cost) in self.message_fee.bucket_names.iter().zip(cost_fee.0.iter()) { + if let Some((_, total)) = deductions + .iter_mut() + .find(|(existing, _)| *existing == name) + { + let Some(sum) = total.checked_add(cost) else { + log_warn!(bucket = name.as_str(); "consume_message_fee: cost overflow"); + return false; + }; + *total = sum; + } else { + deductions.push((name, cost)); + } } - for (&bno, &cost) in self + for (&name, &cost) in self .message_receipt - .bucket_nos + .bucket_names .iter() .zip(cost_receipt.0.iter()) { - *deductions.entry(bno).or_default() += cost; + if let Some((_, total)) = deductions + .iter_mut() + .find(|(existing, _)| *existing == name) + { + let Some(sum) = total.checked_add(cost) else { + log_warn!(bucket = name.as_str(); "consume_message_fee: cost overflow"); + return false; + }; + *total = sum; + } else { + deductions.push((name, cost)); + } } // Check all buckets first (atomic: all-or-nothing). - for (&bno, &total) in &deductions { - let Some(remaining) = buckets.get(bno as usize) else { - log_warn!(bucket = bno; "consume_message_fee: bucket index out of range"); + for &(name, total) in &deductions { + let Some(remaining) = buckets.get(name.as_str()) else { + debug_assert!( + buckets.contains_key(name.as_str()), + "validated bucket disappeared: {}", + name.as_str() + ); + log_warn!(bucket = name.as_str(); "consume_message_fee: bucket missing"); return false; }; if *remaining < total { log_warn!( - bucket = bno, + bucket = name.as_str(), cost:display = total, remaining:display = *remaining; "consume_message_fee: insufficient funds" @@ -547,8 +638,11 @@ impl DataLimit { } // Apply all deductions. - for (&bno, &total) in &deductions { - buckets[bno as usize] -= total; + for &(name, total) in &deductions { + let remaining = buckets + .get_mut(name.as_str()) + .expect("validated fee bucket must remain present"); + *remaining -= total; } std::mem::drop(buckets); diff --git a/executor/src/wasi/genlayer_sdk.rs b/executor/src/wasi/genlayer_sdk.rs index 896b9609..f1228a61 100644 --- a/executor/src/wasi/genlayer_sdk.rs +++ b/executor/src/wasi/genlayer_sdk.rs @@ -100,7 +100,8 @@ struct ConsumeInternalArgs { async fn consume_message_fee_internal( shared_data: &rt::SharedData, - node: &mut domain::fees::MessageAllocationNode, + node: &domain::fees::MessageAllocationNode, + consumed: &mut primitive_types::U256, fee_params: Arc, on: gl_call::On, args: ConsumeInternalArgs, @@ -111,11 +112,16 @@ async fn consume_message_fee_internal( .map_err(|x| generated::types::Error::trap(anyhow_to_wasmtime(x)))?; let fee_total = fee_cost.sum(); - if fee_total > node.budget { + let remaining_budget = node.budget.checked_sub(*consumed).ok_or_else(|| { + generated::types::Error::trap(anyhow_to_wasmtime(anyhow::anyhow!( + "message allocation consumed budget exceeds its total" + ))) + })?; + if fee_total > remaining_budget { log_warn!( node:cd = *node, fee_cost:cd = fee_total, - budget: cd = node.budget; + budget: cd = remaining_budget; "message fee cost exceeds node budget" ); return Err(oom_trap(abi::consts::VmError::oom().fees().internal())); @@ -150,7 +156,7 @@ async fn consume_message_fee_internal( return Err(oom_trap(abi::consts::VmError::oom().fees().internal())); } - node.budget -= fee_total; + *consumed += fee_total; Ok(rt::fees::MessageFeeConsumption { message_fee: fee_cost, @@ -166,7 +172,8 @@ struct ConsumeExternalArgs { async fn consume_message_fee_external( shared_data: &rt::SharedData, - node: &mut domain::fees::MessageAllocationNode, + node: &domain::fees::MessageAllocationNode, + consumed: &mut primitive_types::U256, params: domain::fees::ExternalMessageParams, // External messages are always emitted on finalization; carried for signature // symmetry with the internal path. @@ -179,7 +186,12 @@ async fn consume_message_fee_external( .map_err(|x| generated::types::Error::trap(anyhow_to_wasmtime(x)))?; let fee_total = fee_cost.sum(); - if fee_total > node.budget { + let remaining_budget = node.budget.checked_sub(*consumed).ok_or_else(|| { + generated::types::Error::trap(anyhow_to_wasmtime(anyhow::anyhow!( + "message allocation consumed budget exceeds its total" + ))) + })?; + if fee_total > remaining_budget { return Err(oom_trap(abi::consts::VmError::oom().fees().external())); } @@ -202,7 +214,7 @@ async fn consume_message_fee_external( return Err(oom_trap(abi::consts::VmError::oom().fees().external())); } - node.budget -= fee_total; + *consumed += fee_total; Ok(rt::fees::MessageFeeConsumption { message_fee: fee_cost, @@ -312,6 +324,7 @@ pub struct VMDataAccumulator { pub messages_value_decremented: primitive_types::U256, pub emissions: Vec, pub message_fee_allocation: Vec, + pub message_fee_allocation_consumed: Vec, /// Custom runner hashes registered in (and inherited into) this execution /// scope. Only these may be resolved via `custom:`. A nondet sub-VM /// starts empty, so it cannot see runners the deterministic scope registered. @@ -704,15 +717,16 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { call_key.0[..4].copy_from_slice(&calldata[..4]); } - let Some((matched_node, matched_params)) = self + let Some((matched_index, matched_params)) = self .context .data .accumulator .message_fee_allocation - .iter_mut() - .find_map(|node| { + .iter() + .enumerate() + .find_map(|(index, node)| { node.matches_external(address, call_key) - .map(|params| (node, params)) + .map(|params| (index, params)) }) else { log_warn!( @@ -725,10 +739,14 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { }; let calldata_length = calldata.len() as u64; + let shared_data = self.context.data.supervisor.shared_data.clone(); + let accumulator = &mut self.context.data.accumulator; + let matched_node = &accumulator.message_fee_allocation[matched_index]; let fees = consume_message_fee_external( - &self.context.data.supervisor.shared_data, + &shared_data, matched_node, + &mut accumulator.message_fee_allocation_consumed[matched_index], matched_params, gl_call::On::Finalized, ConsumeExternalArgs { @@ -889,6 +907,7 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { .messages_value_decremented, emissions: Vec::new(), message_fee_allocation: Vec::new(), + message_fee_allocation_consumed: Vec::new(), // CallContract is a deterministic sub-call: inherit the // runners registered so far. custom_runners: self.context.data.accumulator.custom_runners.clone(), @@ -1136,15 +1155,16 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { } } - let Some((matched_node, matched_params)) = self + let Some((matched_index, matched_params)) = self .context .data .accumulator .message_fee_allocation - .iter_mut() - .find_map(|node| { + .iter() + .enumerate() + .find_map(|(index, node)| { node.matches_internal(on, address, call_key) - .map(|params| (node, params)) + .map(|params| (index, params)) }) else { log_warn!( @@ -1169,13 +1189,14 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { let calldata_length = enc.into_inner().0; let fee_params = (*matched_params).clone(); - let subtree = bytes::Bytes::from(domain::fees::MessageAllocationNode::abi_encode( - &matched_node.children, - )); + let accumulator = &mut self.context.data.accumulator; + let matched_node = &accumulator.message_fee_allocation[matched_index]; + let subtree = bytes::Bytes::from(matched_node.abi_encode()); let fees = consume_message_fee_internal( - &self.context.data.supervisor.shared_data, + &sd, matched_node, + &mut accumulator.message_fee_allocation_consumed[matched_index], matched_params, on, ConsumeInternalArgs { @@ -1247,15 +1268,16 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { } } - let Some((matched_node, matched_params)) = self + let Some((matched_index, matched_params)) = self .context .data .accumulator .message_fee_allocation - .iter_mut() - .find_map(|node| { + .iter() + .enumerate() + .find_map(|(index, node)| { node.matches_internal(on, calldata::Address::zero(), abi::CallKey::DEPLOY) - .map(|params| (node, params)) + .map(|params| (index, params)) }) else { log_warn!( @@ -1274,13 +1296,14 @@ impl generated::genlayer_sdk::GenlayerSdk for ContextVFS<'_> { let calldata_length = enc.into_inner().0; let fee_params = (*matched_params).clone(); - let subtree = bytes::Bytes::from(domain::fees::MessageAllocationNode::abi_encode( - &matched_node.children, - )); + let accumulator = &mut self.context.data.accumulator; + let matched_node = &accumulator.message_fee_allocation[matched_index]; + let subtree = bytes::Bytes::from(matched_node.abi_encode()); let fees = consume_message_fee_internal( - &self.context.data.supervisor.shared_data, + &sd, matched_node, + &mut accumulator.message_fee_allocation_consumed[matched_index], matched_params, on, ConsumeInternalArgs { @@ -2058,6 +2081,7 @@ impl ContextVFS<'_> { .messages_value_decremented, emissions: Vec::new(), message_fee_allocation: Vec::new(), + message_fee_allocation_consumed: Vec::new(), // Nondet is an isolated execution scope: it must NOT see custom // runners registered by the deterministic scope. custom_runners: Default::default(), @@ -2152,6 +2176,7 @@ impl ContextVFS<'_> { messages_value_decremented: primitive_types::U256::max_value(), emissions: Vec::new(), message_fee_allocation: Vec::new(), + message_fee_allocation_consumed: Vec::new(), // Sandbox is a deterministic sub-VM: inherit the registered runners. custom_runners: self.context.data.accumulator.custom_runners.clone(), }; diff --git a/executor/tests/fee_bucket_accounting.rs b/executor/tests/fee_bucket_accounting.rs new file mode 100644 index 00000000..aacb9a9e --- /dev/null +++ b/executor/tests/fee_bucket_accounting.rs @@ -0,0 +1,67 @@ +use genvm::config::{FeesBucketConfig, FeesConfig}; +use genvm::rt::fees::{CostVec, DataLimit}; +use primitive_types::U256; + +fn config(event: FeesBucketConfig) -> FeesConfig { + let bucket = || FeesBucketConfig { + buckets: vec![symbol_table::GlobalSymbol::from("test")], + subtract_on_start_expr: "0".to_owned(), + delta_expr: "\\attrs = 0".to_owned(), + }; + FeesConfig { + expr_prelude: String::new(), + storage: bucket(), + message_receipt: bucket(), + nondet_output: bucket(), + message_fee: bucket(), + event, + } +} + +fn data_limit(fees: FeesConfig) -> DataLimit { + DataLimit::new( + std::collections::HashMap::from([("test".to_owned(), U256::MAX)]), + fees, + Default::default(), + ) + .unwrap() +} + +#[tokio::test] +async fn duplicate_bucket_cost_overflow_is_rejected_atomically() { + let event = FeesBucketConfig { + buckets: vec![ + symbol_table::GlobalSymbol::from("test"), + symbol_table::GlobalSymbol::from("test"), + ], + subtract_on_start_expr: "0".to_owned(), + delta_expr: format!("\\attrs = [{}, 1]", U256::MAX), + }; + let fees = data_limit(config(event)); + + assert_eq!(fees.consume_event(0, 0).await.unwrap(), None); + assert_eq!( + fees.remaining().await, + std::collections::BTreeMap::from([("test".to_owned(), U256::MAX)]) + ); +} + +#[tokio::test] +async fn shared_message_bucket_cost_overflow_is_rejected_atomically() { + let event = FeesBucketConfig { + buckets: vec![symbol_table::GlobalSymbol::from("test")], + subtract_on_start_expr: "0".to_owned(), + delta_expr: "\\attrs = 0".to_owned(), + }; + let fees = data_limit(config(event)); + + assert!( + !fees + .consume_message_fee(&CostVec(vec![U256::MAX]), &CostVec(vec![U256::one()])) + .await + ); + assert_eq!( + fees.remaining().await, + std::collections::BTreeMap::from([("test".to_owned(), U256::MAX)]) + ); +} diff --git a/executor/tests/fee_bucket_config.rs b/executor/tests/fee_bucket_config.rs new file mode 100644 index 00000000..929a9212 --- /dev/null +++ b/executor/tests/fee_bucket_config.rs @@ -0,0 +1,71 @@ +use genvm::config::FeesBucketConfig; + +fn parse(input: &str) -> Result { + serde_yaml::from_str(input) +} + +#[test] +fn bucket_config_accepts_one_named_bucket() { + let config = parse("buckets: execution_data_gas\ndelta_expr: '\\a = 0'").unwrap(); + + assert_eq!(config.buckets.len(), 1); + assert_eq!(config.buckets[0].as_str(), "execution_data_gas"); +} + +#[test] +fn bucket_config_accepts_multiple_named_buckets() { + let config = + parse("buckets: [execution_data_gas, submitted_messages]\ndelta_expr: '\\a = 0'").unwrap(); + + let names = config + .buckets + .iter() + .map(symbol_table::GlobalSymbol::as_str) + .collect::>(); + assert_eq!(names, ["execution_data_gas", "submitted_messages"]); +} + +#[test] +fn bucket_config_rejects_numeric_buckets() { + let error = parse("buckets: 0\ndelta_expr: '\\a = 0'").unwrap_err(); + let message = error.to_string(); + + assert!( + message.contains("non-empty string"), + "unexpected error: {message}" + ); +} + +#[test] +fn bucket_config_rejects_empty_names() { + let error = parse("buckets: ''\ndelta_expr: '\\a = 0'").unwrap_err(); + let message = error.to_string(); + + assert!( + message.contains("must not be empty"), + "unexpected error: {message}" + ); +} + +#[test] +fn bucket_config_rejects_an_empty_list() { + let error = parse("buckets: []\ndelta_expr: '\\a = 0'").unwrap_err(); + let message = error.to_string(); + + assert!( + message.contains("at least one entry"), + "unexpected error: {message}" + ); +} + +#[test] +fn bucket_config_rejects_legacy_bucket_number() { + let error = + parse("buckets: execution_data_gas\nbucket_no: 0\ndelta_expr: '\\a = 0'").unwrap_err(); + let message = error.to_string(); + + assert!( + message.contains("unknown field `bucket_no`"), + "unexpected error: {message}" + ); +} diff --git a/executor/tests/fees_abi.rs b/executor/tests/fees_abi.rs new file mode 100644 index 00000000..e1cc4492 --- /dev/null +++ b/executor/tests/fees_abi.rs @@ -0,0 +1,59 @@ +use genvm::domain::fees::{ + ExternalMessageParams, MessageAllocationNode, MessageAllocationNodeParams, CALL_KEY_WILDCARD, +}; +use primitive_types::U256; + +fn word(buf: &[u8], index: usize) -> U256 { + U256::from_big_endian(&buf[index * 32..index * 32 + 32]) +} + +fn node(budget: u64, children: Vec) -> MessageAllocationNode { + MessageAllocationNode { + recipient: Some(genlayer_sdk::calldata::Address::from([budget as u8; 20])), + call_key: None, + budget: U256::from(budget), + on: genlayer_sdk::abi::gl_call::On::Finalized, + fee_params: MessageAllocationNodeParams::External(ExternalMessageParams { + gas_limit: U256::one(), + max_gas_price: U256::one(), + }), + children, + } +} + +fn element_index(encoded: &[u8], index: usize) -> usize { + let heads_base = 2 * 32; + (heads_base + word(encoded, 2 + index).as_usize()) / 32 +} + +#[test] +fn subtree_uses_raw_array_transport_and_wildcard() { + let encoded = node(7, vec![]).abi_encode(); + let root = element_index(&encoded, 0); + + assert_eq!(word(&encoded, 0), U256::from(0x20), "array offset"); + assert_eq!(word(&encoded, 1), U256::one(), "array node count"); + assert_eq!(word(&encoded, root + 2), U256::MAX, "root sentinel"); + assert_eq!( + word(&encoded, root + 4), + U256::from_big_endian(&CALL_KEY_WILDCARD.0), + "call-key wildcard" + ); +} + +#[test] +fn subtree_contains_matched_node_then_descendants_in_bfs_order() { + let root = node(10, vec![node(20, vec![node(40, vec![])]), node(30, vec![])]); + let encoded = root.abi_encode(); + + assert_eq!(word(&encoded, 1), U256::from(4)); + let budgets = (0..4) + .map(|index| word(&encoded, element_index(&encoded, index) + 5)) + .collect::>(); + assert_eq!(budgets, [10, 20, 30, 40].map(U256::from), "BFS node order"); + assert_eq!( + word(&encoded, element_index(&encoded, 3) + 2), + U256::one(), + "grandchild parent index" + ); +} diff --git a/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash b/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash index a2728c44..7e860aba 100644 --- a/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash +++ b/tests/integration/stable/agentic/wasi/environ_args/environ_args.0.hash @@ -1 +1 @@ -KuPewP32WRSjpb8t1Yq+L79p6BAXj3+3QiR7/24xD1E= +tmr6DYcQHeoyNK5MLTNF0SCVUCdctQefhncA93Z+q8g= diff --git a/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash b/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash index 1ee973bc..41978755 100644 --- a/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash +++ b/tests/integration/stable/agentic/wasi/hash_random/hash_random.0.hash @@ -1 +1 @@ -EUYdsFr6hDq3oFict1tFmniMif1iZky+7L6xOK2upD0= +AJ2YAQXk7fnSNocs4AoYRcXzz0Lz8+7eA2CDzS6oTOE= diff --git a/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash b/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash index d1961481..22e7627c 100644 --- a/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash +++ b/tests/integration/stable/agentic/wasi/id_repr/id_repr.0.hash @@ -1 +1 @@ -nJ1wtFcQ4j/9TkNuO+ohOpWI4+J2VvsMDlAgT6dCGA0= +oAKcZDVAJocJs7HZwJJldx7bnYko0X8SSyBcqe3qpB4= diff --git a/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash b/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash index 7e3b2181..be84b32e 100644 --- a/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash +++ b/tests/integration/stable/agentic/wasi/set_order/set_order.0.hash @@ -1 +1 @@ -fbBMtEzNz4eg6D01XqnIOkXhS5uqCgPmaGnwM6n+6Jg= +10y1/Xj/XWTCGBzT3HnEUEqlf979HNplTFuzv4zD+1U= diff --git a/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash b/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash index 7293ceb4..f3df7277 100644 --- a/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash +++ b/tests/integration/stable/agentic/wasi/wasi_clock/wasi_clock.0.hash @@ -1 +1 @@ -IFGOR9oPyEpbfUF0W4nMydmB8cY3wFNwtBEDgb2kL6w= +4zu0LuB4VRBXQ8ExBkuok6otOmTrRvM6rC2/ZaocY0Y= diff --git a/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash b/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash index 1200ac75..53042a39 100644 --- a/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash +++ b/tests/integration/stable/agentic/wasi/wasi_random/wasi_random.0.hash @@ -1 +1 @@ -aLVHhHKJlbPnjfVLWY+gE5b8TLTKHiel86CojliRXUs= +F3i9q+Ymp+jg23tcUgvjUmwaBdZXhKx06Qtuf6kUDnA= diff --git a/tests/integration/stable/bench/read_tree_map.0.hash b/tests/integration/stable/bench/read_tree_map.0.hash index c93f6b9f..5d2d01f1 100644 --- a/tests/integration/stable/bench/read_tree_map.0.hash +++ b/tests/integration/stable/bench/read_tree_map.0.hash @@ -1 +1 @@ -IyjT+5B/FvewmRBkezbAxEMJCNC0ldz6IjYbRYSiYEs= +58g6iQJ38tCaaMesGYvjUF49wEI9NbmFRv227fhkBKE= diff --git a/tests/integration/stable/bench/read_tree_map.0_0.hash b/tests/integration/stable/bench/read_tree_map.0_0.hash index 06fbc294..a6e7f78a 100644 --- a/tests/integration/stable/bench/read_tree_map.0_0.hash +++ b/tests/integration/stable/bench/read_tree_map.0_0.hash @@ -1 +1 @@ -P2cryrwYBeXVf+fk1X9XGxMYsMx+XDzbmJB+w7hIisc= +oUTDPYEhkuYlDhnfZWPKP2AjilNxdNAouiJLrYwE4f0= diff --git a/tests/integration/stable/exploits/call_wasi_extra.0.hash b/tests/integration/stable/exploits/call_wasi_extra.0.hash index 63a0d66f..f5e5e177 100644 --- a/tests/integration/stable/exploits/call_wasi_extra.0.hash +++ b/tests/integration/stable/exploits/call_wasi_extra.0.hash @@ -1 +1 @@ -CJgvNSVnWirkvmJsO6eJqJe00aAAsUU5NNts5tVnWjg= +p3M/F8APNP3fdjYhakPrLfRVPVPjNKy/7mRZj1bNYnE= diff --git a/tests/integration/stable/exploits/disagree_in_sandbox.0.hash b/tests/integration/stable/exploits/disagree_in_sandbox.0.hash index a8866b40..15aae1b1 100644 --- a/tests/integration/stable/exploits/disagree_in_sandbox.0.hash +++ b/tests/integration/stable/exploits/disagree_in_sandbox.0.hash @@ -1 +1 @@ -F6SlkggfEjL+zdtDPYJU6q7PbMBiH2urHLHr1WObz1Q= +rwvidBjWP7jW3yRcxMl27i/Bi7XPNowbByDtinfD/3M= diff --git a/tests/integration/stable/exploits/flt.0.hash b/tests/integration/stable/exploits/flt.0.hash index ea6ec78c..0e69aafa 100644 --- a/tests/integration/stable/exploits/flt.0.hash +++ b/tests/integration/stable/exploits/flt.0.hash @@ -1 +1 @@ -MzmpNP8G/Z0iWWXk0/5XJTUeP/UqWArbF62uL7BHZS4= +3v7do15VAmjPYqgZpvmWfFzKcAwj1bIhQC1DZm3QVcs= diff --git a/tests/integration/stable/exploits/fork_bomb.0.hash b/tests/integration/stable/exploits/fork_bomb.0.hash index 6fbda3d8..d4214b21 100644 --- a/tests/integration/stable/exploits/fork_bomb.0.hash +++ b/tests/integration/stable/exploits/fork_bomb.0.hash @@ -1 +1 @@ -O1XSZee/GIMTPO3hJIIkfHLU9t946KviqLtFxFDnJDA= +2r4I/zwGz8hFBPQm9Mv7UMfB/DQnfjsuYigr/U9gbao= diff --git a/tests/integration/stable/exploits/method_init.0.hash b/tests/integration/stable/exploits/method_init.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/exploits/method_init.0.hash +++ b/tests/integration/stable/exploits/method_init.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/exploits/method_init.0_0.hash b/tests/integration/stable/exploits/method_init.0_0.hash index bed53032..f6f79d05 100644 --- a/tests/integration/stable/exploits/method_init.0_0.hash +++ b/tests/integration/stable/exploits/method_init.0_0.hash @@ -1 +1 @@ -sfJxEyJfMVenNFc8hcCfM5INI8wJrMyzqBxOBVOyNlI= +6lYjjZLnOLQYilOsJ9G965wqxMsQQi96bZzr37iZxEc= diff --git a/tests/integration/stable/exploits/method_private.0.hash b/tests/integration/stable/exploits/method_private.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/exploits/method_private.0.hash +++ b/tests/integration/stable/exploits/method_private.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/exploits/method_private.0_0.hash b/tests/integration/stable/exploits/method_private.0_0.hash index b9e6c1a8..19f5e198 100644 --- a/tests/integration/stable/exploits/method_private.0_0.hash +++ b/tests/integration/stable/exploits/method_private.0_0.hash @@ -1 +1 @@ -1d3iSufVx1/7srPpG93C1mtEkWfrc27Sc+dzeJ2UK7g= +RayyhHmmnT3sl00qzlAMCPWs6B6og0VePTloTQZpoRc= diff --git a/tests/integration/stable/exploits/oom.0.hash b/tests/integration/stable/exploits/oom.0.hash index 5eb00e81..d3ec3777 100644 --- a/tests/integration/stable/exploits/oom.0.hash +++ b/tests/integration/stable/exploits/oom.0.hash @@ -1 +1 @@ -caXQSTceOy5zcp8g4fAebuOudprVgMW8uthrXn6+jZw= +wSK3VXlmr2rz+s1RVI0X1/A2wnaOZQsTqW+L+pxxF0Q= diff --git a/tests/integration/stable/exploits/rec.0.hash b/tests/integration/stable/exploits/rec.0.hash index 539c1425..6182b3d8 100644 --- a/tests/integration/stable/exploits/rec.0.hash +++ b/tests/integration/stable/exploits/rec.0.hash @@ -1 +1 @@ -i5a3V+TELIMhB00hf/blkdU8QLzLMrTfuzqnl3rAphM= +ZDKnQpobHa0NhQOU0B31s3ZEu58e7wxdtwcQxGoBgLc= diff --git a/tests/integration/stable/exploits/rec_1023.0.hash b/tests/integration/stable/exploits/rec_1023.0.hash index ff4011b1..8828b31f 100644 --- a/tests/integration/stable/exploits/rec_1023.0.hash +++ b/tests/integration/stable/exploits/rec_1023.0.hash @@ -1 +1 @@ -aVE4Vl7LHNwdIasYShYyDI836Kq4V/sTK9bzVAcis/U= +QKSgtSN2MO5AyP9WvipQbBgRVWuEsNV6nOsh6f6YvHk= diff --git a/tests/integration/stable/exploits/rec_1024.0.hash b/tests/integration/stable/exploits/rec_1024.0.hash index bef42d13..850fd211 100644 --- a/tests/integration/stable/exploits/rec_1024.0.hash +++ b/tests/integration/stable/exploits/rec_1024.0.hash @@ -1 +1 @@ -CjEjCzHHM9sSYSoridFC/GZZpSlzZhjiRg00hhbS918= +l5clghO3UYKZ32mu/k4ks6MpLOwJO2Kzu8pVrJTpByY= diff --git a/tests/integration/stable/exploits/storage_rw_long.0.hash b/tests/integration/stable/exploits/storage_rw_long.0.hash index 91009adf..cbd86576 100644 --- a/tests/integration/stable/exploits/storage_rw_long.0.hash +++ b/tests/integration/stable/exploits/storage_rw_long.0.hash @@ -1 +1 @@ -gyepzwUR4xKPBTrIQQk4YICKicBLHUfLfyl5QXeORqY= +JvYQDWvT1NzkWI81npc/YvfEpHYmD5glcM1QPC4QqzM= diff --git a/tests/integration/stable/exploits/storage_rw_long.0_0.hash b/tests/integration/stable/exploits/storage_rw_long.0_0.hash index 8d00edb6..06773b34 100644 --- a/tests/integration/stable/exploits/storage_rw_long.0_0.hash +++ b/tests/integration/stable/exploits/storage_rw_long.0_0.hash @@ -1 +1 @@ -FjnbscBvjsWTp2tBIK/8vWaLezOi16vqsUsDSa6hWKc= +EcuvM8Qt9UxVzVMhFvFcW+6Yw570hUIB/3KJnVCSJo4= diff --git a/tests/integration/stable/exploits/unreachable.0.hash b/tests/integration/stable/exploits/unreachable.0.hash index b064460b..7ed5727d 100644 --- a/tests/integration/stable/exploits/unreachable.0.hash +++ b/tests/integration/stable/exploits/unreachable.0.hash @@ -1 +1 @@ -0jdeTvJDncN55evXOfohroHnffO5j+hvGvgVLc99Urk= +jole5mPZTzTfUqxWth5UTCrN4/wS4DC+IAH+/+VXEd0= diff --git a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash +++ b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash index a1be8303..22803806 100644 --- a/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/leader_no_nondet.0_0.hash @@ -1 +1 @@ -kCJihiQ/nwCfBwL4IfN0fFPVzluUUCFeCp33NrRpCLU= +fhv9AeII7dL3LTWznTiPiK9Xl9V0JlMMiyWkpSqb4D0= diff --git a/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash b/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_leader.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash index 462db152..f4bf29a7 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_leader.0_0.hash @@ -1 +1 @@ -kcYfXzKN3KEDf0SjC2HHP92u6CosyQ+89QkEmyckVFs= +SirjHeKX2jkz6jqGsH9pdbkXoOqMwlnhrAmFkQAchas= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash index 462db152..f4bf29a7 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_err.0_0.hash @@ -1 +1 @@ -kcYfXzKN3KEDf0SjC2HHP92u6CosyQ+89QkEmyckVFs= +SirjHeKX2jkz6jqGsH9pdbkXoOqMwlnhrAmFkQAchas= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash index dccca947..e39513c7 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit.0_0.hash @@ -1 +1 @@ -n6jm5se+7tASVrEeTuyXPzLzoxa32ZPwPMGj7g+GzLQ= +eQJn1PRuTUzx8Hr4KqO8EehUMxSaV5fwNhWoQMvSbBQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash index e7acfa29..a9cc9365 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_exit_wrong_err.0_0.hash @@ -1 +1 @@ -hcZlCwd5fful7etGr42H/cfd8+IVu1oEc5X4o1goMcA= +rJ8Ic7zslY1LvF4ccMoCmUd+jeruuSDbYVpVs/Z8Be0= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash index 9817617a..92252de9 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0.hash @@ -1 +1 @@ -nGqQR89K4M2MnJi2YtPpp+T2hktPMxpurP9QgNA3nyE= +fBV8VH9Nj49ZS3j7a8sQcMJ3gGg3JXANgkbLSUCRPmQ= diff --git a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash index f6796b35..a0fb505b 100644 --- a/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash +++ b/tests/integration/stable/nondet/leader_errors/simple_valid_err_nerr.0_0.hash @@ -1 +1 @@ -ZIjSfK7PFYWWRDksMDSxlWOxe9RkVn4Mp6HldBFtWBU= +6rONev917Wst7dRc/mgP/6UPyUYh6sBVrOe9gl/nB7g= diff --git a/tests/integration/stable/nondet/metod_det_get_webpage.0.hash b/tests/integration/stable/nondet/metod_det_get_webpage.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/nondet/metod_det_get_webpage.0.hash +++ b/tests/integration/stable/nondet/metod_det_get_webpage.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash b/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash index 87cccdc5..27fe2eb7 100644 --- a/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash +++ b/tests/integration/stable/nondet/metod_det_get_webpage.0_0.hash @@ -1 +1 @@ -nXvxdsA9eMbY4GQA2OFY3+1Y9GtnihsgkA8pKWFacWE= +0Yk5apVFhh5QxA3Lizw0GxKnL9UHaZs5TbcDxpa18Ew= diff --git a/tests/integration/stable/nondet/trivial.0.hash b/tests/integration/stable/nondet/trivial.0.hash index 9ebd4b9d..60732d6a 100644 --- a/tests/integration/stable/nondet/trivial.0.hash +++ b/tests/integration/stable/nondet/trivial.0.hash @@ -1 +1 @@ -dkBSpd/CmlrZ/ER4ufDF+cs6BtVk3sLw8GpDWxeOX5U= +mXDk1pkO38jWAzrvw/nrLAYPbEuVSLNpF0owkemU0nw= diff --git a/tests/integration/stable/nondet/trivial.0_0.hash b/tests/integration/stable/nondet/trivial.0_0.hash index 56490edf..48f9eae3 100644 --- a/tests/integration/stable/nondet/trivial.0_0.hash +++ b/tests/integration/stable/nondet/trivial.0_0.hash @@ -1 +1 @@ -XXP6+fmv8V3o49GlzjmOxstfFkzRV5ZDw3rysHbXnkg= +Ra5A8NMpsfAHCSv3d83RjrML7Qksqc+sLrmIe1zKlbo= diff --git a/tests/integration/stable/nondet/validator/rollback_agree.0.hash b/tests/integration/stable/nondet/validator/rollback_agree.0.hash index 79305d9a..ee2ac2f1 100644 --- a/tests/integration/stable/nondet/validator/rollback_agree.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_agree.0.hash @@ -1 +1 @@ -wLqOKhNv4nncyBgTnCr0k14EmJZJhm7GAVK1OO81gKA= +7OohweW9/xCh7KgerGJDJQRCiT1EQcoZ3vwXTXVd9Po= diff --git a/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash b/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash index 17ced809..67cb5661 100644 --- a/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_agree.0_0.hash @@ -1 +1 @@ -wtDPdJemlqnE1oWAzHRtXbLLpU884PRdu1g2S14WTYQ= +8K1azSFz4VxblKdnlibhL/XBhnu0g6ms/n8y6GmZYYA= diff --git a/tests/integration/stable/nondet/validator/rollback_disagree.0.hash b/tests/integration/stable/nondet/validator/rollback_disagree.0.hash index 79305d9a..ee2ac2f1 100644 --- a/tests/integration/stable/nondet/validator/rollback_disagree.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_disagree.0.hash @@ -1 +1 @@ -wLqOKhNv4nncyBgTnCr0k14EmJZJhm7GAVK1OO81gKA= +7OohweW9/xCh7KgerGJDJQRCiT1EQcoZ3vwXTXVd9Po= diff --git a/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash b/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash index 672ad6b0..06b9de2e 100644 --- a/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_disagree.0_0.hash @@ -1 +1 @@ -niYFya1V+FAnnrEcfnjQ5IaLbrNFx/6zEGZGPSLm93k= +4xVOY//6C+/0WKaUyw0gRTqJDs9iRfA13ODs2KbbJBQ= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.0.hash b/tests/integration/stable/nondet/validator/rollback_imm.0.hash index 48bd61c0..e7b0ab8f 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.0.hash @@ -1 +1 @@ -nkUFY7hTP2Ic3jGaDqsvMbWxfqG2rK97IL6QpDFxpRE= +VYSJWVH0Hj+3h0phHGOGgsTjI8H5+aUUr0NzqG8QC3U= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash b/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash index 37682930..60c5007c 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.0_0.hash @@ -1 +1 @@ -tIR4HuQ6trd0FnFR0aV7jOXy05/OUeVIdpJPDGgyQoM= +2AiAamEJrolA3WQzGuXvbwAB1i6HmWE5jpQzW2hLyzQ= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.1.hash b/tests/integration/stable/nondet/validator/rollback_imm.1.hash index 48bd61c0..e7b0ab8f 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.1.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.1.hash @@ -1 +1 @@ -nkUFY7hTP2Ic3jGaDqsvMbWxfqG2rK97IL6QpDFxpRE= +VYSJWVH0Hj+3h0phHGOGgsTjI8H5+aUUr0NzqG8QC3U= diff --git a/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash b/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash index 0b61bce0..39a84789 100644 --- a/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash +++ b/tests/integration/stable/nondet/validator/rollback_imm.1_0.hash @@ -1 +1 @@ -Up4uJyy5hE39rmTjD+GZTrLqmWgwBsFIuQ6aLZEjkrY= +xB/T1nZrv8nGlPOx+PNnwmq9eK0/1r8pXthxDOismt0= diff --git a/tests/integration/stable/nondet/validator/sync.0.hash b/tests/integration/stable/nondet/validator/sync.0.hash index 6def75b3..675b0ed3 100644 --- a/tests/integration/stable/nondet/validator/sync.0.hash +++ b/tests/integration/stable/nondet/validator/sync.0.hash @@ -1 +1 @@ -SSM4vl43AOd20ypJ3Pl7QzrG3o0McVkg7jiy4PpzryY= +zj+jV9dGpw3peHqHvZE3mOvd5PxSNdSg5g0Et6DfyDI= diff --git a/tests/integration/stable/nondet/validator/sync.0_0.hash b/tests/integration/stable/nondet/validator/sync.0_0.hash index 624ff246..565ba025 100644 --- a/tests/integration/stable/nondet/validator/sync.0_0.hash +++ b/tests/integration/stable/nondet/validator/sync.0_0.hash @@ -1 +1 @@ -rsE1gabEJ2wcoWRM/+juGuRSjX86VkjZs8TIhOK68tE= +mxf8EG0SttDpHd/R9xxgfKYsiy6ax2J7OdDVIJUbqXc= diff --git a/tests/integration/stable/nondet/validator/sync_err.0.hash b/tests/integration/stable/nondet/validator/sync_err.0.hash index 6def75b3..675b0ed3 100644 --- a/tests/integration/stable/nondet/validator/sync_err.0.hash +++ b/tests/integration/stable/nondet/validator/sync_err.0.hash @@ -1 +1 @@ -SSM4vl43AOd20ypJ3Pl7QzrG3o0McVkg7jiy4PpzryY= +zj+jV9dGpw3peHqHvZE3mOvd5PxSNdSg5g0Et6DfyDI= diff --git a/tests/integration/stable/nondet/validator/sync_err.0_0.hash b/tests/integration/stable/nondet/validator/sync_err.0_0.hash index 5f571201..57b6268f 100644 --- a/tests/integration/stable/nondet/validator/sync_err.0_0.hash +++ b/tests/integration/stable/nondet/validator/sync_err.0_0.hash @@ -1 +1 @@ -UMRnANXg4dOJhGZkn/t4FZ2HpDo5wmUbfABa1j44+ps= +5a5vivqqmWrhhmAOfdk9qEtkT6/g1V+Vji2Xvy/uEQ8= diff --git a/tests/integration/stable/py/balances/balance.0.hash b/tests/integration/stable/py/balances/balance.0.hash index a328c59c..58eb5e99 100644 --- a/tests/integration/stable/py/balances/balance.0.hash +++ b/tests/integration/stable/py/balances/balance.0.hash @@ -1 +1 @@ -8AbmmIdF3BhQeYrixzustPR/cwFxY4lVCGVIIH00PjE= +NbGm+Tm/rxY9/4yDTgeiCjYG40B2pmfHlojj7xjonzo= diff --git a/tests/integration/stable/py/balances/balance.0.stdout b/tests/integration/stable/py/balances/balance.0.stdout index 4218e06e..c36ff288 100644 --- a/tests/integration/stable/py/balances/balance.0.stdout +++ b/tests/integration/stable/py/balances/balance.0.stdout @@ -7,4 +7,4 @@ main At(self) 10 nested self 10 nested At(self) 10 executed with `Return(null)` -{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalMessage","use_balance":false,"value":5} +{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalMessage","use_balance":false,"value":5} diff --git a/tests/integration/stable/py/balances/balance_eth.0.hash b/tests/integration/stable/py/balances/balance_eth.0.hash index 88f2f53c..047c5264 100644 --- a/tests/integration/stable/py/balances/balance_eth.0.hash +++ b/tests/integration/stable/py/balances/balance_eth.0.hash @@ -1 +1 @@ -dumPlg3xVOUnE+BeiV5rYf9TSh92IJTHeebFl95mDVE= +CdEdZGR48oAAOtSMRAYISloXoZUXYVzPg4R7/ibGH1M= diff --git a/tests/integration/stable/py/balances/sandbox_overspend.0.hash b/tests/integration/stable/py/balances/sandbox_overspend.0.hash index 8fe1f3c2..e7de996c 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend.0.hash +++ b/tests/integration/stable/py/balances/sandbox_overspend.0.hash @@ -1 +1 @@ -wDV+0rauq63+gF7ZNXTsVD9MLdBXNio921gSMd3CQjk= +/HD3bwQUib3fnuz2y3deX2XhiBsv++NeIrL9b21isrE= diff --git a/tests/integration/stable/py/balances/sandbox_overspend.0.stdout b/tests/integration/stable/py/balances/sandbox_overspend.0.stdout index 07e1edde..cf9d656f 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend.0.stdout +++ b/tests/integration/stable/py/balances/sandbox_overspend.0.stdout @@ -2,4 +2,4 @@ balance before=100 after_first_send=40 sandbox result=VMError(message='exit_code 1') balance final=40 executed with `Return(null)` -{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalMessage","use_balance":false,"value":60} +{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalMessage","use_balance":false,"value":60} diff --git a/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash b/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash index 92d0966c..6313c53c 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash +++ b/tests/integration/stable/py/balances/sandbox_overspend_2.0.hash @@ -1 +1 @@ -ML4v23Ol2orfKV98yDYEATKo+FgPzKZ/vqpSuFy6+O8= +FOdTE2y4y7SmuXshrQCr8hWS+jXehFaqMO5tkm6Erx4= diff --git a/tests/integration/stable/py/balances/sandbox_overspend_2.0.stdout b/tests/integration/stable/py/balances/sandbox_overspend_2.0.stdout index a5bb2a81..713ec074 100644 --- a/tests/integration/stable/py/balances/sandbox_overspend_2.0.stdout +++ b/tests/integration/stable/py/balances/sandbox_overspend_2.0.stdout @@ -3,4 +3,4 @@ sandbox result=Return(calldata=40) balance after sandbox=40 transfer failed with error: 7: inbalance balance final=40 executed with `Return(null)` -{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalMessage","use_balance":false,"value":60} +{"address":addr#0200000000000000000000000000000000000000,"call_key":b#0000000000000000000000000000000000000000000000000000000000000000,"calldata":{},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalMessage","use_balance":false,"value":60} diff --git a/tests/integration/stable/py/balances/undefined_all.0.hash b/tests/integration/stable/py/balances/undefined_all.0.hash index 7bf0795c..7f7c6be8 100644 --- a/tests/integration/stable/py/balances/undefined_all.0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0.hash @@ -1 +1 @@ -irtLI2rN/oHjrDlwYkljBPEaR8StP0g1dbinXZo2J6s= +lbbOpnox1JK+a+5sl7njk2ix5EPCHYHhsxNCarcOPfs= diff --git a/tests/integration/stable/py/balances/undefined_all.0_0.hash b/tests/integration/stable/py/balances/undefined_all.0_0.hash index 229dce0f..1e6eddef 100644 --- a/tests/integration/stable/py/balances/undefined_all.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0_0.hash @@ -1 +1 @@ -l9sm53Ug3wz274H6u8wQjfw5YSPtaCeACkac3qJSmGM= +Iuwrlq45+7j54V27ow326gnU7WHOgCAHWlOHwAGA9io= diff --git a/tests/integration/stable/py/balances/undefined_all.0_0_0.hash b/tests/integration/stable/py/balances/undefined_all.0_0_0.hash index bccd191d..b6fd107d 100644 --- a/tests/integration/stable/py/balances/undefined_all.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_all.0_0_0.hash @@ -1 +1 @@ -svuS28+K+kz6tYNBogWqGXM7a4cxiPhOiwzxiYKUMsU= +j6MY8DR3gb0tqgIXZ/BiFv2nJa6MDuTf/arkogEVRLw= diff --git a/tests/integration/stable/py/balances/undefined_method.0.hash b/tests/integration/stable/py/balances/undefined_method.0.hash index fdf7a80e..8106ab5c 100644 --- a/tests/integration/stable/py/balances/undefined_method.0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0.hash @@ -1 +1 @@ -CVco/ZIXRsnhsdwnUiHOpS6M21/OFOpnVWsKr8UJmSU= +4546DyeybOMBfSIyahSjzjnXtJIQnHDfvv37zxnRiZ8= diff --git a/tests/integration/stable/py/balances/undefined_method.0_0.hash b/tests/integration/stable/py/balances/undefined_method.0_0.hash index f83204e7..b11cc6b3 100644 --- a/tests/integration/stable/py/balances/undefined_method.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0_0.hash @@ -1 +1 @@ -4ryjI6rvz8L0/vw0hcjJcMPF5YTKJy7l4Lg6S/B80PI= +eP2I9tWuIAipLct+fbNZfW1jyMr7mu99QerpKIVtr64= diff --git a/tests/integration/stable/py/balances/undefined_method.0_0_0.hash b/tests/integration/stable/py/balances/undefined_method.0_0_0.hash index f97c5fb3..53112bd7 100644 --- a/tests/integration/stable/py/balances/undefined_method.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method.0_0_0.hash @@ -1 +1 @@ -iAUkGZWdh5+XCDaTTvGvHmPhggtC4yzf+LWCo82RsbA= +Lt/d0Phv0b1wEVUZrDu5yE8n8y/q8JcZubxNYc20Fq8= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0.hash index 5792e4fe..f208c646 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0.hash @@ -1 +1 @@ -517OfrPviJlFJAyKX7FTyi9I/lmszxQqf+X1pHPNwJM= +vWlpBKwUMFXwJLAKiY664AbQ0NSpCxSbj10va5RvN7M= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash index 67dccba9..2f9c873c 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0_0.hash @@ -1 +1 @@ -1wrIepG8CMPplz5hbrEorJT8Qpck2EEamgPXtefPXJ8= +KrCL+725LU+34g/Eo7sNhX6KrUC52slOrYYsQ+yFDY4= diff --git a/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash b/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash index 819c3e71..6f814bbe 100644 --- a/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_method_payable.0_0_0.hash @@ -1 +1 @@ -pG5M/CV8ycw/XoDXXBszys3GrSpZv41rP3+3NrM4/cA= +W1U7b3ibyr11MOpVGBc/cE5CWeJQnfuOzpuhoap2dhM= diff --git a/tests/integration/stable/py/balances/undefined_receive.0.hash b/tests/integration/stable/py/balances/undefined_receive.0.hash index 2e294b86..4e420cfb 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0.hash @@ -1 +1 @@ -ycZXtHHnWvOU1nnRQ2GhOPT5e3JY/bF7kv2SMt3LvaE= +eR2ki9NKZ1C4rivrboaZtNtx0SU4i2tLYVkEjArNUF8= diff --git a/tests/integration/stable/py/balances/undefined_receive.0_0.hash b/tests/integration/stable/py/balances/undefined_receive.0_0.hash index 05967a4c..bc8564bf 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0_0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0_0.hash @@ -1 +1 @@ -KMQfYuvvGY1+wV+k90wMw9+JPTeB+IrYHU8ztyAANR0= +L4ZgO4yyVFObEUU/ixwo29dwNP41tycpc3zOjpZOAzw= diff --git a/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash b/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash index e34d2c61..16a4b8e8 100644 --- a/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash +++ b/tests/integration/stable/py/balances/undefined_receive.0_0_0.hash @@ -1 +1 @@ -ogUY7jVH1DUBUmXHy99rPj2gZ+lrwyXerCQmyVCU2C0= +gt9M/JezqQaPgscvGbqG29q+MHjcNXunPqRKdjCrq1I= diff --git a/tests/integration/stable/py/embeddings/simple.0.hash b/tests/integration/stable/py/embeddings/simple.0.hash index c710f19c..858e0423 100644 --- a/tests/integration/stable/py/embeddings/simple.0.hash +++ b/tests/integration/stable/py/embeddings/simple.0.hash @@ -1 +1 @@ -Psqww5gGcWY4FATWJXHEkwM3D7P/9AhealXCuuANxvQ= +bUybcbmSeecXdfMJnhdpWrG0RkMb5ItQwKhUDoi2a6s= diff --git a/tests/integration/stable/py/embeddings/simple.0_0.hash b/tests/integration/stable/py/embeddings/simple.0_0.hash index 1ff25618..dc5772b6 100644 --- a/tests/integration/stable/py/embeddings/simple.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple.0_0.hash @@ -1 +1 @@ -4oUI2bjeB54xZ1AHYQ0ViKcSUhmnJplHGQMGB+069cY= +l2+N2FLmn6hmSzFd85QZDamNx3LGt7Y5RrRUiqIV+2g= diff --git a/tests/integration/stable/py/embeddings/simple_det.0.hash b/tests/integration/stable/py/embeddings/simple_det.0.hash index c710f19c..858e0423 100644 --- a/tests/integration/stable/py/embeddings/simple_det.0.hash +++ b/tests/integration/stable/py/embeddings/simple_det.0.hash @@ -1 +1 @@ -Psqww5gGcWY4FATWJXHEkwM3D7P/9AhealXCuuANxvQ= +bUybcbmSeecXdfMJnhdpWrG0RkMb5ItQwKhUDoi2a6s= diff --git a/tests/integration/stable/py/embeddings/simple_det.0_0.hash b/tests/integration/stable/py/embeddings/simple_det.0_0.hash index 9b50add2..3d86e0d1 100644 --- a/tests/integration/stable/py/embeddings/simple_det.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple_det.0_0.hash @@ -1 +1 @@ -f+yauGrfZVUn+kynMn5FcxNu8+u69hHCG713bYrxcgg= +dc4odZ8tcEQ2M9mDUqJ0svBHNg56SsrvR9imzPTvtF0= diff --git a/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash b/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash index 24f7f43c..4c52e520 100644 --- a/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash +++ b/tests/integration/stable/py/embeddings/simple_tokenizer.0.hash @@ -1 +1 @@ -SFeCTKWKlmI8VcpwYHwYsdhk+yKTDD1hKvwp1D5sMvw= +fxNkY0BMEuMmlF/hDvVnendb9UM1aw+ERc9wuZgbCrU= diff --git a/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash b/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash index 3cf1a17b..171291aa 100644 --- a/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash +++ b/tests/integration/stable/py/embeddings/simple_tokenizer.0_0.hash @@ -1 +1 @@ -sAJQ9s+YaRiPK9FdiECc/cBoTOHWuGqNiKx/6z5yYfQ= +FfIkUm4T/Ce6DhW+HmeQFSzYm6k9QvXxiZ295l8xp4g= diff --git a/tests/integration/stable/py/embeddings/vecdb.0.hash b/tests/integration/stable/py/embeddings/vecdb.0.hash index 53c8c2f1..315347f2 100644 --- a/tests/integration/stable/py/embeddings/vecdb.0.hash +++ b/tests/integration/stable/py/embeddings/vecdb.0.hash @@ -1 +1 @@ -bsD1qVism0InJwKNW80PFmcHu1GgbafVByJqPnHTrm4= +5/Ty+t9hQM1Y/reFZjeL5zKXRDyeo4bvb/qPq9J9E/U= diff --git a/tests/integration/stable/py/events/post_event.0.hash b/tests/integration/stable/py/events/post_event.0.hash index fdcf4a91..5264b0dc 100644 --- a/tests/integration/stable/py/events/post_event.0.hash +++ b/tests/integration/stable/py/events/post_event.0.hash @@ -1 +1 @@ -laFpjIw3DYfrlPTArMmXTH5xs97x6BGMFPTCqfy791w= +vVItScy/YAlLpuCKo95YpbORwuW2RGxK8sbqvus13RE= diff --git a/tests/integration/stable/py/intercontract/call_view.0.hash b/tests/integration/stable/py/intercontract/call_view.0.hash index e1d5f142..9318382f 100644 --- a/tests/integration/stable/py/intercontract/call_view.0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0.hash @@ -1 +1 @@ -hoRnvUY3Mj/TEIz2TJXlkWUNvOA8TveXHh96fth8ZuE= +ToqpPwF8yZGBsBQySeQhL41iEoWtkOaGO3oxFAwIim4= diff --git a/tests/integration/stable/py/intercontract/call_view.0_0.hash b/tests/integration/stable/py/intercontract/call_view.0_0.hash index 7306c03d..cd9126d1 100644 --- a/tests/integration/stable/py/intercontract/call_view.0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0_0.hash @@ -1 +1 @@ -+PztsaXr4qd5wddfJl2Fu4U8oRWstIRwxYHyv27UTuY= +ahIRFU9FX9Sk4sqNelidzCTzNRTq3WdCbq9N+yDOYdU= diff --git a/tests/integration/stable/py/intercontract/call_view.0_0_0.hash b/tests/integration/stable/py/intercontract/call_view.0_0_0.hash index d7cbe71a..c62acfed 100644 --- a/tests/integration/stable/py/intercontract/call_view.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view.0_0_0.hash @@ -1 +1 @@ -0XdjrF2ifPmXO8vTYcc5vPLCnY4WQ6Aq80b/+1THJug= +b0qTnfbFqrIn8OWSkNHBPJl3qqVohUrlB9IP0YVp/sQ= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0.hash index e1d5f142..9318382f 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0.hash @@ -1 +1 @@ -hoRnvUY3Mj/TEIz2TJXlkWUNvOA8TveXHh96fth8ZuE= +ToqpPwF8yZGBsBQySeQhL41iEoWtkOaGO3oxFAwIim4= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash index c1dfe456..99171b11 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0_0.hash @@ -1 +1 @@ -GuxcONs92KcylFV5KtTL71mLTVRrgPdvjNlnd3LIpA8= +ZjE4TpVFT6eQ2hQyShDJTxJvx5nmaQS25leT5ew8B4M= diff --git a/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash b/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash index 8e1c8c1b..ac07744c 100644 --- a/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/call_view_iface.0_0_0.hash @@ -1 +1 @@ -JMT2Jr4llLyHaCrY39Vbk4UUL8mYaZRD5rbGZL+myEQ= +xMNJTQ9XAAUxKooBB/aAFA3gwSzk5XRuYLVTuu5yTb0= diff --git a/tests/integration/stable/py/intercontract/deploy.0.hash b/tests/integration/stable/py/intercontract/deploy.0.hash index 42a16243..b5c0391c 100644 --- a/tests/integration/stable/py/intercontract/deploy.0.hash +++ b/tests/integration/stable/py/intercontract/deploy.0.hash @@ -1 +1 @@ -gNhYAfgt09tSrUmGHFP+etsUOTqb9gLNEm0xKBX/3uY= +sXhmX+p2v/rXJzX46BQzQ0YCzIlPb4dzp0WQqz30III= diff --git a/tests/integration/stable/py/intercontract/deploy.0.stdout b/tests/integration/stable/py/intercontract/deploy.0.stdout index f14b36bf..290e9750 100644 --- a/tests/integration/stable/py/intercontract/deploy.0.stdout +++ b/tests/integration/stable/py/intercontract/deploy.0.stdout @@ -1,2 +1,2 @@ executed with `Return(null)` -{"calldata":{},"code":b#6e6f74207265616c6c79206120636f6e7472616374,"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"salt_nonce":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalDeployMessage","use_balance":false,"value":0} +{"calldata":{},"code":b#6e6f74207265616c6c79206120636f6e7472616374,"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"salt_nonce":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalDeployMessage","use_balance":false,"value":0} diff --git a/tests/integration/stable/py/intercontract/deploy_salt.0.hash b/tests/integration/stable/py/intercontract/deploy_salt.0.hash index 67aaaa8e..dcbdfea0 100644 --- a/tests/integration/stable/py/intercontract/deploy_salt.0.hash +++ b/tests/integration/stable/py/intercontract/deploy_salt.0.hash @@ -1 +1 @@ -hzKntavz/ozdq7mGpWH4ayO/o5E+wmveqd8dBE0IVRo= +IKUFcM6wfC9Gh0JUewiNwO3JPtLnNqk7HRjf6i+8bp8= diff --git a/tests/integration/stable/py/intercontract/deploy_salt.0.stdout b/tests/integration/stable/py/intercontract/deploy_salt.0.stdout index a999a3f2..4b1a01e0 100644 --- a/tests/integration/stable/py/intercontract/deploy_salt.0.stdout +++ b/tests/integration/stable/py/intercontract/deploy_salt.0.stdout @@ -1,3 +1,3 @@ 0xf539Cb83f077Cd01BDd1a4E002866dCC0D15D633 executed with `Return(null)` -{"calldata":{},"code":b#6e6f74207265616c6c79206120636f6e7472616374,"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"salt_nonce":1,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalDeployMessage","use_balance":false,"value":0} +{"calldata":{},"code":b#6e6f74207265616c6c79206120636f6e7472616374,"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"salt_nonce":1,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalDeployMessage","use_balance":false,"value":0} diff --git a/tests/integration/stable/py/intercontract/send_message.0.hash b/tests/integration/stable/py/intercontract/send_message.0.hash index ce8ec8ad..78190cbf 100644 --- a/tests/integration/stable/py/intercontract/send_message.0.hash +++ b/tests/integration/stable/py/intercontract/send_message.0.hash @@ -1 +1 @@ -A1QCxeQlVU4hv2yI5/2LaVeXrjUCjGuoZjs/d4gU7t4= +hBKWwN4bJVnitIwkEATYlbEikUfb5VmvFK5qbEVZOQc= diff --git a/tests/integration/stable/py/intercontract/send_message.0.stdout b/tests/integration/stable/py/intercontract/send_message.0.stdout index 5207cded..5320c5f2 100644 --- a/tests/integration/stable/py/intercontract/send_message.0.stdout +++ b/tests/integration/stable/py/intercontract/send_message.0.stdout @@ -1,2 +1,2 @@ executed with `Return(null)` -{"address":addr#3030303030303030303030303030303030303030,"call_key":b#666f6f0000000000000000000000000000000000000000000000000000000000,"calldata":{"args":[1,2],"method":"foo"},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalMessage","use_balance":false,"value":0} +{"address":addr#3030303030303030303030303030303030303030,"call_key":b#666f6f0000000000000000000000000000000000000000000000000000000000,"calldata":{"args":[1,2],"method":"foo"},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":20,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":20,"validator_timeunits_allocation":5},"message_fee":0,"on":"finalized","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalMessage","use_balance":false,"value":0} diff --git a/tests/integration/stable/py/intercontract/send_message_eth.0.hash b/tests/integration/stable/py/intercontract/send_message_eth.0.hash index e64656f5..a2f90c05 100644 --- a/tests/integration/stable/py/intercontract/send_message_eth.0.hash +++ b/tests/integration/stable/py/intercontract/send_message_eth.0.hash @@ -1 +1 @@ -8DM+JF6f1MwqF0JsTUsRQxNKl4GR8uIcorKuHZC9u6Y= +U5HGrNyHgEAwIijvICS3CaqGjPPoYxpsDvCDWYTMKo4= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0.hash b/tests/integration/stable/py/intercontract/send_message_on.0.hash index 2361d7d8..69e28283 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0.hash @@ -1 +1 @@ -7a5ztIogTAUik3RYtjZaKujqagldYUKwfTy/CeiMXJg= +xtKs52ZUedtiovdA07PmSOGSQOlip00WT+WML1jSeEI= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0_0.hash b/tests/integration/stable/py/intercontract/send_message_on.0_0.hash index 5163b4ec..64a3f4ed 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0_0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0_0.hash @@ -1 +1 @@ -d+QkD+eRXLQDgkjBbrfzi+KexQdCZfha969iT/zNcqg= +i3RfU3ICb/taAoYe53UjrrOOLhi0gwIF/Knt6cegTHs= diff --git a/tests/integration/stable/py/intercontract/send_message_on.0_0.stdout b/tests/integration/stable/py/intercontract/send_message_on.0_0.stdout index 79c084f5..c367923d 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0_0.stdout +++ b/tests/integration/stable/py/intercontract/send_message_on.0_0.stdout @@ -1,2 +1,2 @@ executed with `Return(null)` -{"address":addr#3030303030303030303030303030303030303030,"call_key":b#666f6f0000000000000000000000000000000000000000000000000000000000,"calldata":{"args":[1,2],"method":"foo"},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":1606938044258990275541962092341162602522202993782792835301376,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":1606938044258990275541962092341162602522202993782792835301376,"validator_timeunits_allocation":5},"message_fee":0,"on":"decided","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000,"type":"InternalMessage","use_balance":false,"value":0} +{"address":addr#3030303030303030303030303030303030303030,"call_key":b#666f6f0000000000000000000000000000000000000000000000000000000000,"calldata":{"args":[1,2],"method":"foo"},"fee_params":{"execution_budget_per_round":1024,"leader_timeunits_allocation":5,"max_price_gen_per_time_unit":1606938044258990275541962092341162602522202993782792835301376,"receipt_fee_max_gas_price":1606938044258990275541962092341162602522202993782792835301376,"rotations":[4,4,4,4,4],"storage_fee_max_gas_price":1606938044258990275541962092341162602522202993782792835301376,"validator_timeunits_allocation":5},"message_fee":0,"on":"decided","receipt_fee":0,"subtree":b#00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004,"type":"InternalMessage","use_balance":false,"value":0} diff --git a/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash b/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash index 60cd08e1..86bd5f6d 100644 --- a/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash +++ b/tests/integration/stable/py/intercontract/send_message_on.0_0_0.hash @@ -1 +1 @@ -tpRxNodE41z6lse5OtfDV1Ly7kZkbUoW7fmKcKLhwVM= +jET3TRyx+kZQKbgKml3s7yTxPCxG7eaDh4AsEDXwEXs= diff --git a/tests/integration/stable/py/other/meth/method_init.0.hash b/tests/integration/stable/py/other/meth/method_init.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/py/other/meth/method_init.0.hash +++ b/tests/integration/stable/py/other/meth/method_init.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash b/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash index 6d7021f1..c1636fc0 100644 --- a/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash +++ b/tests/integration/stable/py/other/meth/method_init_wrong_name.0.hash @@ -1 +1 @@ -ZJJgzNB+9VkcWpwBkqwNor3pVhAnP7gdGLeXKro7/8Q= +7l5eXOl9JLsPVI51I9qO3+YLRMToyinsQuYoa1xz4HA= diff --git a/tests/integration/stable/py/other/meth/method_public.0.hash b/tests/integration/stable/py/other/meth/method_public.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/py/other/meth/method_public.0.hash +++ b/tests/integration/stable/py/other/meth/method_public.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/py/other/meth/method_public.0_0.hash b/tests/integration/stable/py/other/meth/method_public.0_0.hash index 2ae1110a..dd8185e9 100644 --- a/tests/integration/stable/py/other/meth/method_public.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_public.0_0.hash @@ -1 +1 @@ -tstr3pfV9/kgF6ZTQomzr1dzeA5XheF1UmnNGGp+VOM= +gOR7IT96MgKaS8Jcq/zMm5qtRfFntnPDA/DH7u0C5hU= diff --git a/tests/integration/stable/py/other/meth/method_retn.0.hash b/tests/integration/stable/py/other/meth/method_retn.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/py/other/meth/method_retn.0.hash +++ b/tests/integration/stable/py/other/meth/method_retn.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/py/other/meth/method_retn.0_0.hash b/tests/integration/stable/py/other/meth/method_retn.0_0.hash index 8a61f336..a3214b47 100644 --- a/tests/integration/stable/py/other/meth/method_retn.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_retn.0_0.hash @@ -1 +1 @@ -RZkwpumNBog7a/YSxKdPnGZar/pGgjEGJHwT3YQlNJU= +kKKBVh67CCXmTcvWJFQbrnyNQYE/uuTD4XcHub0LVxA= diff --git a/tests/integration/stable/py/other/meth/method_retn_view.0.hash b/tests/integration/stable/py/other/meth/method_retn_view.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/py/other/meth/method_retn_view.0.hash +++ b/tests/integration/stable/py/other/meth/method_retn_view.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash b/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash index 77cc6ad3..ab892769 100644 --- a/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_retn_view.0_0.hash @@ -1 +1 @@ -lk1UdO9ttBa7X6nNt9eQpWTg89hxByVolb04C0soM2s= +dSFuf31Bb8swZBFHFLubGA7aH5pC1kW2ROqrF97MxMM= diff --git a/tests/integration/stable/py/other/meth/method_rollback.0.hash b/tests/integration/stable/py/other/meth/method_rollback.0.hash index 39cc7496..041c2965 100644 --- a/tests/integration/stable/py/other/meth/method_rollback.0.hash +++ b/tests/integration/stable/py/other/meth/method_rollback.0.hash @@ -1 +1 @@ -8Ww6NiBUN1yr9sE4sCajqKV/UxsrY3vAlXWPejABbnE= +DYzZ5d2xNgLFloiKzFtpL2OuJnjhhI2puAUD67qTCSE= diff --git a/tests/integration/stable/py/other/meth/method_rollback.0_0.hash b/tests/integration/stable/py/other/meth/method_rollback.0_0.hash index 3cff9783..f5eccd6f 100644 --- a/tests/integration/stable/py/other/meth/method_rollback.0_0.hash +++ b/tests/integration/stable/py/other/meth/method_rollback.0_0.hash @@ -1 +1 @@ -laxZB4KYjVLGCXIU1PT5/jx6Xxi20amh+rV/0T+oHTE= ++dJyDjrsQx68+FIxIr2ZyYbsNLPFMdrgDaD9VYuwxw4= diff --git a/tests/integration/stable/py/other/ret/returns.0.hash b/tests/integration/stable/py/other/ret/returns.0.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.0.hash +++ b/tests/integration/stable/py/other/ret/returns.0.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.0_0.hash b/tests/integration/stable/py/other/ret/returns.0_0.hash index e511c175..b921a4a8 100644 --- a/tests/integration/stable/py/other/ret/returns.0_0.hash +++ b/tests/integration/stable/py/other/ret/returns.0_0.hash @@ -1 +1 @@ -2tjjbCtD83th/FR8WnHw15It8k2SbUyKiymCvFT29dM= +Ndn3izwtwLetDOi5MikbXQOSl/mhFEso1Srkyl4Xv9Y= diff --git a/tests/integration/stable/py/other/ret/returns.1.hash b/tests/integration/stable/py/other/ret/returns.1.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.1.hash +++ b/tests/integration/stable/py/other/ret/returns.1.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.1_0.hash b/tests/integration/stable/py/other/ret/returns.1_0.hash index 6078d9a8..c0f05809 100644 --- a/tests/integration/stable/py/other/ret/returns.1_0.hash +++ b/tests/integration/stable/py/other/ret/returns.1_0.hash @@ -1 +1 @@ -tNHZd2Q7qNIyOnFYkdxPmS4K8YifH6pIrMmWWql06fg= +E484jlOpbL65LgBcsp77zfqrSXwzo6kEotJSRJjeyp4= diff --git a/tests/integration/stable/py/other/ret/returns.2.hash b/tests/integration/stable/py/other/ret/returns.2.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.2.hash +++ b/tests/integration/stable/py/other/ret/returns.2.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.2_0.hash b/tests/integration/stable/py/other/ret/returns.2_0.hash index 559bcf30..1a2727d0 100644 --- a/tests/integration/stable/py/other/ret/returns.2_0.hash +++ b/tests/integration/stable/py/other/ret/returns.2_0.hash @@ -1 +1 @@ -Q7vlO5JEUySqbNkqBzn6FFiNziJHOnECnkLtmwPDMI4= +TFgkfgt+BjEZg+K67lt43ArVoQD6FffJ0Ld0gX6norI= diff --git a/tests/integration/stable/py/other/ret/returns.3.hash b/tests/integration/stable/py/other/ret/returns.3.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.3.hash +++ b/tests/integration/stable/py/other/ret/returns.3.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.3_0.hash b/tests/integration/stable/py/other/ret/returns.3_0.hash index cb79e13d..de39d6e8 100644 --- a/tests/integration/stable/py/other/ret/returns.3_0.hash +++ b/tests/integration/stable/py/other/ret/returns.3_0.hash @@ -1 +1 @@ -W9XcLzaksgG0ewUEpKXdtwNmNrCLQdkuQ9nVgmMpero= +wKrx6eJQKt7mKnxk1GB/GHGnvYGDCxamjfWmQHL5154= diff --git a/tests/integration/stable/py/other/ret/returns.4.hash b/tests/integration/stable/py/other/ret/returns.4.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.4.hash +++ b/tests/integration/stable/py/other/ret/returns.4.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.4_0.hash b/tests/integration/stable/py/other/ret/returns.4_0.hash index 06a252fc..37052278 100644 --- a/tests/integration/stable/py/other/ret/returns.4_0.hash +++ b/tests/integration/stable/py/other/ret/returns.4_0.hash @@ -1 +1 @@ -u+gDzlHfdsAI68Kf2kgUSAFC4VI6hhiIVQpCmFkXukw= +ybC7NL7C2rk7uP13Dp1tepM0AQWeEfIaBR0cJnRlE+w= diff --git a/tests/integration/stable/py/other/ret/returns.5.hash b/tests/integration/stable/py/other/ret/returns.5.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.5.hash +++ b/tests/integration/stable/py/other/ret/returns.5.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.5_0.hash b/tests/integration/stable/py/other/ret/returns.5_0.hash index 2a7cd09a..cec4d7ec 100644 --- a/tests/integration/stable/py/other/ret/returns.5_0.hash +++ b/tests/integration/stable/py/other/ret/returns.5_0.hash @@ -1 +1 @@ -LFZz1By4iqyKCK9HXVcTd1QsE9BSEGxhWc361bKUTgs= +UUGX0fnUHcWActCgT05kOUlVZwBXkQ0IIdS8F9/Hu9o= diff --git a/tests/integration/stable/py/other/ret/returns.6.hash b/tests/integration/stable/py/other/ret/returns.6.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.6.hash +++ b/tests/integration/stable/py/other/ret/returns.6.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.6_0.hash b/tests/integration/stable/py/other/ret/returns.6_0.hash index 0e825e24..9dec1abd 100644 --- a/tests/integration/stable/py/other/ret/returns.6_0.hash +++ b/tests/integration/stable/py/other/ret/returns.6_0.hash @@ -1 +1 @@ -9canHlGwZvVAKXlrvHhmtUDXjF6eR3JUgsJMsAAtbR4= +2vHsQU2l2nO6jrzvvURbyQF43eK2k8Mq/jIavt3sl8Y= diff --git a/tests/integration/stable/py/other/ret/returns.7.hash b/tests/integration/stable/py/other/ret/returns.7.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.7.hash +++ b/tests/integration/stable/py/other/ret/returns.7.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.7_0.hash b/tests/integration/stable/py/other/ret/returns.7_0.hash index ba9db1f8..5656ae15 100644 --- a/tests/integration/stable/py/other/ret/returns.7_0.hash +++ b/tests/integration/stable/py/other/ret/returns.7_0.hash @@ -1 +1 @@ -OxSHqovJkl46LzxySmZM4oBiauItsXNMj16iTrpc/cM= +RTI05oGJ3sTfCTT43FTxw++dUOwossGWTJcF8kXMZlQ= diff --git a/tests/integration/stable/py/other/ret/returns.8.hash b/tests/integration/stable/py/other/ret/returns.8.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.8.hash +++ b/tests/integration/stable/py/other/ret/returns.8.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.8_0.hash b/tests/integration/stable/py/other/ret/returns.8_0.hash index 68cce877..cf38002c 100644 --- a/tests/integration/stable/py/other/ret/returns.8_0.hash +++ b/tests/integration/stable/py/other/ret/returns.8_0.hash @@ -1 +1 @@ -YDqflQu/Im4iPDrIw8WiHh0IgjhVJxQmS+AR8G6gKhI= +NFWumk3WI+zOJGMWHybZSK1VzILFrTxuqpspp/EB99k= diff --git a/tests/integration/stable/py/other/ret/returns.9.hash b/tests/integration/stable/py/other/ret/returns.9.hash index 0ab215e9..176b8db8 100644 --- a/tests/integration/stable/py/other/ret/returns.9.hash +++ b/tests/integration/stable/py/other/ret/returns.9.hash @@ -1 +1 @@ -+ThLbjT/Sc9cE1VXdXPh7nIWF5+G4yIbauN0NLu9pv8= ++5yhTP9YkbUOJ5nMGkqmUu3PVQClDFua0WJX3O7gBhI= diff --git a/tests/integration/stable/py/other/ret/returns.9_0.hash b/tests/integration/stable/py/other/ret/returns.9_0.hash index 429c8f89..8e712620 100644 --- a/tests/integration/stable/py/other/ret/returns.9_0.hash +++ b/tests/integration/stable/py/other/ret/returns.9_0.hash @@ -1 +1 @@ -Y671Js+C5QIYT+tEH/P04ZFVIJR0G9aXGKQA6jKSLdI= +iK6clhE0u961/a/jdOOMEmdCY3jPmVeo3XD5PyIwA3o= diff --git a/tests/integration/stable/py/pitfalls/error_msg.0.hash b/tests/integration/stable/py/pitfalls/error_msg.0.hash index 241b14c6..36928ae0 100644 --- a/tests/integration/stable/py/pitfalls/error_msg.0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg.0.hash @@ -1 +1 @@ -oHiFQoCtCl031e3QHX2DPhGDBvto5836pjcJCNCfJJ8= +LSCRSmJt4VTARTHWSaKOaD4V8XIzejHSQ9SV8p03H9o= diff --git a/tests/integration/stable/py/pitfalls/error_msg.0_0.hash b/tests/integration/stable/py/pitfalls/error_msg.0_0.hash index 771242bf..3a870c42 100644 --- a/tests/integration/stable/py/pitfalls/error_msg.0_0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg.0_0.hash @@ -1 +1 @@ -pWR5PWcwggPSVR+0lNrt1JL+d5uGV9YURBeOjK63sOQ= +COa2peDE1/VJ/lS71onoFJBNP54hxOoLRDuU6CXJgdo= diff --git a/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash b/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash index 91b53903..384d82e3 100644 --- a/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg_overridden.0.hash @@ -1 +1 @@ -zZ/vTTuvN28/+0m8Czc/UVUTbGyj+jX5PZ0Jys80al4= +OITh2l41Bu0nw+65Xp2fm1tHmvCQidlZFARo+q/rYV0= diff --git a/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash b/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash index 4f5428d1..77ebbf72 100644 --- a/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash +++ b/tests/integration/stable/py/pitfalls/error_msg_overridden.0_0.hash @@ -1 +1 @@ -PnLgXqtzmp3ZlNuKSjoAERM9/XRlBWLFr9dQaUqZpAo= +9RP7a0FR48x2n3C2X/pbEe8rUO/BSsCNQX49emzW6L8= diff --git a/tests/integration/stable/py/pitfalls/multi_contract.0.hash b/tests/integration/stable/py/pitfalls/multi_contract.0.hash index 5456c664..f41cb01a 100644 --- a/tests/integration/stable/py/pitfalls/multi_contract.0.hash +++ b/tests/integration/stable/py/pitfalls/multi_contract.0.hash @@ -1 +1 @@ -jgzRiMEG2OFEOV8gREgnp7hdV0WhsEVHjKddD5uw3gk= +aluxFStJmv+Xjvy6mOcq0quB8e+jkc5vXYeiQK0U6Rw= diff --git a/tests/integration/stable/py/pitfalls/pub_ctor.0.hash b/tests/integration/stable/py/pitfalls/pub_ctor.0.hash index bcb13822..f8cece63 100644 --- a/tests/integration/stable/py/pitfalls/pub_ctor.0.hash +++ b/tests/integration/stable/py/pitfalls/pub_ctor.0.hash @@ -1 +1 @@ -rFvL7Uu+OJo/WsXaUzB2tX/Pn9NJhQ5Jx1vizsxqQGU= +OUmuhxYbNCIWd8qvW2eq5dml4KmiFjl+h96rdBx4Ln8= diff --git a/tests/integration/stable/py/pitfalls/store_proxy.0.hash b/tests/integration/stable/py/pitfalls/store_proxy.0.hash index 90bca576..8ca3bded 100644 --- a/tests/integration/stable/py/pitfalls/store_proxy.0.hash +++ b/tests/integration/stable/py/pitfalls/store_proxy.0.hash @@ -1 +1 @@ -wGqfaMHCh+pL7Fl9F0xedHHXUEz//o1PaYWAMfYU+Ag= +34NW2wgcdI7csP/ZvjUuBh8RuE7+OGP6S3UrRjoy2Os= diff --git a/tests/integration/stable/py/rollbacks/call_view.0.hash b/tests/integration/stable/py/rollbacks/call_view.0.hash index c7732fbf..1c793093 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0.hash @@ -1 +1 @@ -K7Z27VdBdIyZTEC9C8syloEd8i9AtdDeyYpAEkV3t4c= +WUHnfWj8kHQeETER3PXP5hF5YIeHQsQnHpcN2ZjFczA= diff --git a/tests/integration/stable/py/rollbacks/call_view.0_0.hash b/tests/integration/stable/py/rollbacks/call_view.0_0.hash index fedd06e2..6fc578df 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0_0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0_0.hash @@ -1 +1 @@ -+S+8ixUk073ZIxSV+zl2GkMSiopJpnjRWf9enPTf4Jc= +1lqonrT7bx6lsWtSAaNcxrFmIn98Ilo2ag7VTwYwyWI= diff --git a/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash b/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash index 0e4b6473..43474367 100644 --- a/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash +++ b/tests/integration/stable/py/rollbacks/call_view.0_0_0.hash @@ -1 +1 @@ -ncJQ8redVn3jRIgtMzghTxvkmILQ31Ll8KDE2LT9F5c= +3kL5P6bJv16b9unjQJ7GvODrbv9L6GMk4WCkM1Pyq10= diff --git a/tests/integration/stable/py/rollbacks/nondet.0.hash b/tests/integration/stable/py/rollbacks/nondet.0.hash index a723748b..dbb9b305 100644 --- a/tests/integration/stable/py/rollbacks/nondet.0.hash +++ b/tests/integration/stable/py/rollbacks/nondet.0.hash @@ -1 +1 @@ -UdyQ8LqDXvz/OImvfRItUObp4PB+8iZ3DHsr37MrTck= +vVJEamvZCbzHrdrbTzrXmqw9fLXauBBm8f4T3XJ9cE4= diff --git a/tests/integration/stable/py/rollbacks/simple.0.hash b/tests/integration/stable/py/rollbacks/simple.0.hash index 4344b4e6..195d1ecf 100644 --- a/tests/integration/stable/py/rollbacks/simple.0.hash +++ b/tests/integration/stable/py/rollbacks/simple.0.hash @@ -1 +1 @@ -q3SSNK4Y2zYspQIMVhHT8Awy9Yh60xdFjMwsILo6yGU= +66QIaDR9XViWFvdt5mDOqtEtp9Z30XySVRhyR7dDtAs= diff --git a/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash b/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash index 96559bfe..e244645b 100644 --- a/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/assign-json.0.hash @@ -1 +1 @@ -/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= +iqixyRN2ULKc0Urih46UL4wYxcBnzejGAHaEk525gro= diff --git a/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash b/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash index dc2e1ee4..9e7eda51 100644 --- a/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/assign-json.0_0.hash @@ -1 +1 @@ -/czKEgfvZcq5PoUkEedxQtm9F5ePhaSAB9zBQpWV4tE= +eCW/WZwPo3aD/Cmp88ZsIJlTjToZkFOKdZ5ZQWXDCeI= diff --git a/tests/integration/stable/py/sandbox/det/s/exit.0.hash b/tests/integration/stable/py/sandbox/det/s/exit.0.hash index 96559bfe..e244645b 100644 --- a/tests/integration/stable/py/sandbox/det/s/exit.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/exit.0.hash @@ -1 +1 @@ -/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= +iqixyRN2ULKc0Urih46UL4wYxcBnzejGAHaEk525gro= diff --git a/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash b/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash index 8f836c24..0e599e59 100644 --- a/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/exit.0_0.hash @@ -1 +1 @@ -X/owXxjspoQ/PVcxrTiEu5LhANLNcBq1L4Zx6LMtRnA= +ikXkAacYNgvSlcep5aE2jUbZEz8MfONdRy63+p6AoQw= diff --git a/tests/integration/stable/py/sandbox/det/s/print.0.hash b/tests/integration/stable/py/sandbox/det/s/print.0.hash index 96559bfe..e244645b 100644 --- a/tests/integration/stable/py/sandbox/det/s/print.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/print.0.hash @@ -1 +1 @@ -/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= +iqixyRN2ULKc0Urih46UL4wYxcBnzejGAHaEk525gro= diff --git a/tests/integration/stable/py/sandbox/det/s/print.0_0.hash b/tests/integration/stable/py/sandbox/det/s/print.0_0.hash index 41bf0d79..3743b8a1 100644 --- a/tests/integration/stable/py/sandbox/det/s/print.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/print.0_0.hash @@ -1 +1 @@ -QwAKfPgeq4fI2C5PjApHKzZZ9NgOUAEqO91vQ973mbY= +6D0NFwH0i2OemoxHPolUBWrROy5ng76q1lP4TAENrpE= diff --git a/tests/integration/stable/py/sandbox/det/s/rollback.0.hash b/tests/integration/stable/py/sandbox/det/s/rollback.0.hash index 96559bfe..e244645b 100644 --- a/tests/integration/stable/py/sandbox/det/s/rollback.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/rollback.0.hash @@ -1 +1 @@ -/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= +iqixyRN2ULKc0Urih46UL4wYxcBnzejGAHaEk525gro= diff --git a/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash b/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash index 73514e89..329a389e 100644 --- a/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/rollback.0_0.hash @@ -1 +1 @@ -iaWKxRdFNqlWlo6aE6EdS/mkYxSlut6Swoz52JaIms0= +QMEHUoj/8erlq+HK5sBW+dql9d+aXax5rZvnyD/MVZs= diff --git a/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash b/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash index 96559bfe..e244645b 100644 --- a/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash +++ b/tests/integration/stable/py/sandbox/det/s/sandbox.0.hash @@ -1 +1 @@ -/5frtkbfiDQUN7FL7ZcJQ7+2JR/e5vFcUZdHgWpOcjc= +iqixyRN2ULKc0Urih46UL4wYxcBnzejGAHaEk525gro= diff --git a/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash b/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash index b0c030f4..bacc9f3b 100644 --- a/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash +++ b/tests/integration/stable/py/sandbox/det/s/sandbox.0_0.hash @@ -1 +1 @@ -ZteiiRBaAkH74LDzcQGVkBi0pvD1QAIyp6jdSKjBlbA= +Z9hb3cdAjQwv07ZKZ/0A4Kx6TAAgnZyMzd5U0E7lJN4= diff --git a/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash b/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash index 15ca6148..1cccd724 100644 --- a/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash +++ b/tests/integration/stable/py/sandbox/det/sandbox_write.0.hash @@ -1 +1 @@ -2xi6BEcT4aBjJPH21nQa4EAR6S5Zy1vs1lolOZnXD44= +jH3jq9D8GHitwmwtXxuGzNePH+NV7uEYCtEN4Nytib0= diff --git a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash index af4a9ea2..3789e9f0 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0.hash @@ -1 +1 @@ -P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= +TgxxK/Aivvp2oALWKcvf1FnnBkVpthxi/6FfVKgfQqo= diff --git a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash index 969a2ba7..c5c7676e 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/assign-json.0_0.hash @@ -1 +1 @@ -WuWV8ucgSe/CB3fxB11JfLPJmXi7wfLC9hhsK6+43c0= +AiCNAza16Rf9XgO7CxiLUrUGQEn9jh9wMAgqfT657Zc= diff --git a/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash b/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash index af4a9ea2..3789e9f0 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/exit.0.hash @@ -1 +1 @@ -P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= +TgxxK/Aivvp2oALWKcvf1FnnBkVpthxi/6FfVKgfQqo= diff --git a/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash index c5b94534..d1637bf0 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/exit.0_0.hash @@ -1 +1 @@ -DKF1iskAkdjhuytCXuV2D1FWnlNJXMNy+gVWgdCkIdo= +O1GeU6KZqn43nXnnuPKNMio+47ci0eunBTfafzQ+8yM= diff --git a/tests/integration/stable/py/sandbox/non-det/s/print.0.hash b/tests/integration/stable/py/sandbox/non-det/s/print.0.hash index af4a9ea2..3789e9f0 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/print.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/print.0.hash @@ -1 +1 @@ -P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= +TgxxK/Aivvp2oALWKcvf1FnnBkVpthxi/6FfVKgfQqo= diff --git a/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash index 3cbcf648..ac9068f6 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/print.0_0.hash @@ -1 +1 @@ -p4BMlv2Wi4L8mdk/Cc4c6fF1JAfJeEuLRRGwASIz0ao= +Lbxff2mdGRw14oI4nu3MKj3d01BXbWYgrftHJ3PkL9E= diff --git a/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash b/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash index af4a9ea2..3789e9f0 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/rollback.0.hash @@ -1 +1 @@ -P8sltBawLY2n+3XL79JhEsMk+BlKgAUi414ptZOLL0g= +TgxxK/Aivvp2oALWKcvf1FnnBkVpthxi/6FfVKgfQqo= diff --git a/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash b/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash index 3e674a96..59eb0b0a 100644 --- a/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash +++ b/tests/integration/stable/py/sandbox/non-det/s/rollback.0_0.hash @@ -1 +1 @@ -fIL3+6jiLIE59QWtjSlMDZKwU/pXqNGqa6HOCGh3G+0= +Nr244+CDu0XrXgTec/d8lpRO8HH7diDcMhHFJrFXzhw= diff --git a/tests/integration/stable/py/schemas/complex_types.0.hash b/tests/integration/stable/py/schemas/complex_types.0.hash index a07ec201..4e4ecb87 100644 --- a/tests/integration/stable/py/schemas/complex_types.0.hash +++ b/tests/integration/stable/py/schemas/complex_types.0.hash @@ -1 +1 @@ -DdOlg5vnoirF3hBK01kN4ykb4fQIntdeS7Rnxnt9Nuw= +tA8po4NV1tVWwbD1oQXTZm/LAZ8Q+0lrS+BsewBJw1g= diff --git a/tests/integration/stable/py/schemas/complex_types.0_0.hash b/tests/integration/stable/py/schemas/complex_types.0_0.hash index dc773efa..6f30c62d 100644 --- a/tests/integration/stable/py/schemas/complex_types.0_0.hash +++ b/tests/integration/stable/py/schemas/complex_types.0_0.hash @@ -1 +1 @@ -5G7SNqkoXiXG0oqNk2IY9EWfarqKryQcmWaFBK1XfeE= +t2pDZ7SvqcDwPSDkN2OahnaZr7TRSxzS3H9hvdxNWRs= diff --git a/tests/integration/stable/py/schemas/prim_types.0.hash b/tests/integration/stable/py/schemas/prim_types.0.hash index 6286aa57..73856317 100644 --- a/tests/integration/stable/py/schemas/prim_types.0.hash +++ b/tests/integration/stable/py/schemas/prim_types.0.hash @@ -1 +1 @@ -cme+sgMH2W7594T+uT6sN5G1OJS72+LQ6cmvYJ1p2gQ= +RKFBm8rwQUF1zXv0LcpWmWYAvJZBynmnMPkWhFBtVjk= diff --git a/tests/integration/stable/py/schemas/prim_types.0_0.hash b/tests/integration/stable/py/schemas/prim_types.0_0.hash index e44b5451..6ee980e7 100644 --- a/tests/integration/stable/py/schemas/prim_types.0_0.hash +++ b/tests/integration/stable/py/schemas/prim_types.0_0.hash @@ -1 +1 @@ -c3es/FR8NqFNI7HOzTH7yFxPSbIcmm7LHt4x5uGNrOY= +/FknY7vEne0Hi9TAOMEx341Qr7vls/tkseRQlBbh2XE= diff --git a/tests/integration/stable/py/schemas/ret-float.0.hash b/tests/integration/stable/py/schemas/ret-float.0.hash index 0875d886..3e37d626 100644 --- a/tests/integration/stable/py/schemas/ret-float.0.hash +++ b/tests/integration/stable/py/schemas/ret-float.0.hash @@ -1 +1 @@ -HN0W1Wo1agWBARU0YG5eqSO4rhXyjLoCsNcH8POloO8= +V1P/+vjPkzv78KeoVofZ4AuombaSQExr5ZR98DP219I= diff --git a/tests/integration/stable/py/schemas/ret-float.0_0.hash b/tests/integration/stable/py/schemas/ret-float.0_0.hash index 08760e23..dd7413fe 100644 --- a/tests/integration/stable/py/schemas/ret-float.0_0.hash +++ b/tests/integration/stable/py/schemas/ret-float.0_0.hash @@ -1 +1 @@ -iRDO6z0B+cIq2zUMPF2HomdTGQouGalCLGwGPuyQooQ= +Rh2nLWHVyklFcmzODmYhvzO3cF290OOkan1HUj/WZIg= diff --git a/tests/integration/stable/py/schemas/ret-tuple.0.hash b/tests/integration/stable/py/schemas/ret-tuple.0.hash index 21d7a9aa..a4aabead 100644 --- a/tests/integration/stable/py/schemas/ret-tuple.0.hash +++ b/tests/integration/stable/py/schemas/ret-tuple.0.hash @@ -1 +1 @@ -lkbpAMsjKhe/2PGZx0Ebsf74yv3mzk3SgGsHIvCHMcQ= +5SvYUHJsvCSMqgOhLArN2UvEvl43iF3HtwUG4l/Ch4U= diff --git a/tests/integration/stable/py/schemas/ret-tuple.0_0.hash b/tests/integration/stable/py/schemas/ret-tuple.0_0.hash index 82005caa..4b4fe778 100644 --- a/tests/integration/stable/py/schemas/ret-tuple.0_0.hash +++ b/tests/integration/stable/py/schemas/ret-tuple.0_0.hash @@ -1 +1 @@ -eyD+4ybIsxYPLXTPwUGdD1/fYrP7oJXHt21JsevgaO8= +68HjokS5aTH7cbrRNskDFlGoTwWyIdLyo6Iebvc9hGE= diff --git a/tests/integration/stable/py/schemas/ret.0.hash b/tests/integration/stable/py/schemas/ret.0.hash index b9127700..32bddcd1 100644 --- a/tests/integration/stable/py/schemas/ret.0.hash +++ b/tests/integration/stable/py/schemas/ret.0.hash @@ -1 +1 @@ -2jfP0Y3Ycs8clTeY/VyjyEvgpRoQNZZAwwrpKC03b/0= +cfYvOqKP8zaWoTRQNwCGHwdPe9SF73Qk0j9guN+fK7M= diff --git a/tests/integration/stable/py/schemas/ret.0_0.hash b/tests/integration/stable/py/schemas/ret.0_0.hash index e590da06..d616a5eb 100644 --- a/tests/integration/stable/py/schemas/ret.0_0.hash +++ b/tests/integration/stable/py/schemas/ret.0_0.hash @@ -1 +1 @@ -uEwn4PYe3H7v7yVZYWPC6dCxWsELszB9ZYHpGuq/Na8= +I8u1P1Fp2dVMqlMrcv1B0pqlVKI6cMSUOU3WcJmzFoY= diff --git a/tests/integration/stable/py/schemas/trivial.0.hash b/tests/integration/stable/py/schemas/trivial.0.hash index b9127700..32bddcd1 100644 --- a/tests/integration/stable/py/schemas/trivial.0.hash +++ b/tests/integration/stable/py/schemas/trivial.0.hash @@ -1 +1 @@ -2jfP0Y3Ycs8clTeY/VyjyEvgpRoQNZZAwwrpKC03b/0= +cfYvOqKP8zaWoTRQNwCGHwdPe9SF73Qk0j9guN+fK7M= diff --git a/tests/integration/stable/py/schemas/trivial.0_0.hash b/tests/integration/stable/py/schemas/trivial.0_0.hash index e590da06..d616a5eb 100644 --- a/tests/integration/stable/py/schemas/trivial.0_0.hash +++ b/tests/integration/stable/py/schemas/trivial.0_0.hash @@ -1 +1 @@ -uEwn4PYe3H7v7yVZYWPC6dCxWsELszB9ZYHpGuq/Na8= +I8u1P1Fp2dVMqlMrcv1B0pqlVKI6cMSUOU3WcJmzFoY= diff --git a/tests/integration/stable/runners/dup-dependency.0.hash b/tests/integration/stable/runners/dup-dependency.0.hash index 01944ba9..941bdf2d 100644 --- a/tests/integration/stable/runners/dup-dependency.0.hash +++ b/tests/integration/stable/runners/dup-dependency.0.hash @@ -1 +1 @@ -3kxNk8gJs2RnjfWKkq/mJSW0MVKuHjvBUKh2R6vztD8= +wiZaSK0uzXo5WFzV+Zv4BIbvr7j+VjwsN/Dyozyx9I4= diff --git a/tests/integration/stable/runners/env-template.0.hash b/tests/integration/stable/runners/env-template.0.hash index fddf79d3..8827e28d 100644 --- a/tests/integration/stable/runners/env-template.0.hash +++ b/tests/integration/stable/runners/env-template.0.hash @@ -1 +1 @@ -3Ua1uRWn5Zndsia2ahxQ64pY2ahw10KYRy0PJP/fHEw= +mdfGdlhMLTAKU8ikCFxjxlxbtyQRNvVzi6rSqOMcyos= diff --git a/tests/integration/stable/runners/malformed_runner.0.hash b/tests/integration/stable/runners/malformed_runner.0.hash index 670e226f..b4da0e06 100644 --- a/tests/integration/stable/runners/malformed_runner.0.hash +++ b/tests/integration/stable/runners/malformed_runner.0.hash @@ -1 +1 @@ -B1eLEDY7SeTEgqHhKdqCJzblrICXW5AxI33ytPE1B+0= +mic9/tTokCdtaFb75IFC3QzH2dyYr3/Stln7K5zrIz8= diff --git a/tests/integration/stable/runners/no_runner.0.hash b/tests/integration/stable/runners/no_runner.0.hash index 9b9867f2..14bb7a32 100644 --- a/tests/integration/stable/runners/no_runner.0.hash +++ b/tests/integration/stable/runners/no_runner.0.hash @@ -1 +1 @@ -iOjrZPgYJJLScXZVhJEID/+xTqXVYszu5TRYnOM9s8g= +wy2Gb8AmRSEYtaYPE6sb/+mDypGeHRTPZaVJqOwoyhw= diff --git a/tests/integration/stable/runners/zip/no-zip.0.hash b/tests/integration/stable/runners/zip/no-zip.0.hash index 165ee1ca..2aa9d9be 100644 --- a/tests/integration/stable/runners/zip/no-zip.0.hash +++ b/tests/integration/stable/runners/zip/no-zip.0.hash @@ -1 +1 @@ -MOyuWTWpufzSM7lU4hE4xX1L/mbHLdauE+FtZOB8M8U= +du0tsGcGQQfbmuNssEXtS1sv/bCPpApzdi7tOMoRuXc= diff --git a/tests/integration/stable/self-run/datetime.0.hash b/tests/integration/stable/self-run/datetime.0.hash index 068f8a1f..a9d6da41 100644 --- a/tests/integration/stable/self-run/datetime.0.hash +++ b/tests/integration/stable/self-run/datetime.0.hash @@ -1 +1 @@ -Y/EJyAl18rAP36dkEh7JVaeUanGaLLmLNeUMDDfTCI4= +QBm3THDlxYljdasmKTzd3swSWD0uoZNNMQg8rEcnNWY= diff --git a/tests/integration/stable/self-run/floats.0.hash b/tests/integration/stable/self-run/floats.0.hash index 7df886ae..b595fc20 100644 --- a/tests/integration/stable/self-run/floats.0.hash +++ b/tests/integration/stable/self-run/floats.0.hash @@ -1 +1 @@ -RGJD8Coh3qU9nDYe9iNZalL3me38OVWbjWR/1JG9S0I= +rsAMn4MMJM2Y11ly0ZDvKJDDdKVusnMfLnfFYdFtHeM= diff --git a/tests/integration/stable/self-run/formats.0.hash b/tests/integration/stable/self-run/formats.0.hash index aa5eafae..10765c46 100644 --- a/tests/integration/stable/self-run/formats.0.hash +++ b/tests/integration/stable/self-run/formats.0.hash @@ -1 +1 @@ -7a0hvOQJmPNCBTFLVD+rBl7QHSQo6Fmllgb+N/30TvI= +x4w8PCM0Vij/C7n7bQ5EM0IcJxTzXjzV3ayZ8SzrSZM= diff --git a/tests/integration/stable/self-run/issue_163.0.hash b/tests/integration/stable/self-run/issue_163.0.hash index 7056bbaa..ede20b49 100644 --- a/tests/integration/stable/self-run/issue_163.0.hash +++ b/tests/integration/stable/self-run/issue_163.0.hash @@ -1 +1 @@ -Ft+GgaySacsP8A8HR3z98dEvd36KFfCS265dC0q+bik= +DbabuyNDPV6cQAkxDQ7yZRJmKcXu6Ah6xGwSSRPT82A= diff --git a/tests/integration/stable/self-run/module/np.0.hash b/tests/integration/stable/self-run/module/np.0.hash index 30039900..06186041 100644 --- a/tests/integration/stable/self-run/module/np.0.hash +++ b/tests/integration/stable/self-run/module/np.0.hash @@ -1 +1 @@ -XkYbrd4uzpGgBTe0WmmFZvLf8gokCVY/dJRY4YD/LQI= +XWa0PsimUmXECS5jiux4jsm50E81GyTPOym55+9t00E= diff --git a/tests/integration/stable/self-run/module/pil.0.hash b/tests/integration/stable/self-run/module/pil.0.hash index 8418e5cc..3b4db9be 100644 --- a/tests/integration/stable/self-run/module/pil.0.hash +++ b/tests/integration/stable/self-run/module/pil.0.hash @@ -1 +1 @@ -xenajBe2otUAJqjFTSG3TRRgOzLQ1ma1lmwhr1K/poc= +7zzwCwDcXnO2sQQm7kBvTlbnqYgyFxZuBIaHHodaoVY= diff --git a/tests/integration/stable/self-run/re.0.hash b/tests/integration/stable/self-run/re.0.hash index 801ad9a1..d2f53e13 100644 --- a/tests/integration/stable/self-run/re.0.hash +++ b/tests/integration/stable/self-run/re.0.hash @@ -1 +1 @@ -RXby+cOVQukakscOHcSkifCy+Vm0neCLrpf1IWS74Q4= +LUcJNNWrIEMFhGhfk2zByH4B/whckEWdUY7WguWqiV4= diff --git a/tests/integration/stable/self-run/typing_is_ok.0.hash b/tests/integration/stable/self-run/typing_is_ok.0.hash index 821e3e1f..42ecc63a 100644 --- a/tests/integration/stable/self-run/typing_is_ok.0.hash +++ b/tests/integration/stable/self-run/typing_is_ok.0.hash @@ -1 +1 @@ -4CLKMiq9mZ5MJHalZ4hIGzKKKJrF6PpIubHkCvo57N0= +hGW1J42kdoswlny2uf/aZlPxz5SsluhA4olnw1zAi7Q= diff --git a/tests/integration/stable/storage/alloc_generic.0.hash b/tests/integration/stable/storage/alloc_generic.0.hash index 49fac11a..f4038f55 100644 --- a/tests/integration/stable/storage/alloc_generic.0.hash +++ b/tests/integration/stable/storage/alloc_generic.0.hash @@ -1 +1 @@ -hPVHe6Z9tPtba5ph8toWQOY+hLcY/YtH20lgYa5i28M= +SLmlbDWCYIkL4jDpPa9/Wr9TmH1j59/r63vT7I+8guE= diff --git a/tests/integration/stable/storage/alloc_generic_err.0.hash b/tests/integration/stable/storage/alloc_generic_err.0.hash index 21795b38..2f4a671f 100644 --- a/tests/integration/stable/storage/alloc_generic_err.0.hash +++ b/tests/integration/stable/storage/alloc_generic_err.0.hash @@ -1 +1 @@ -uxoM1BLTj+zHyrQ/d8I8pF2gvUDdlEDDDCSUb4rKd/A= +PuQrzhp6T26XYHpR5ixVS4RZs/i7bOzfccIsLbE3hec= diff --git a/tests/integration/stable/storage/base.0.hash b/tests/integration/stable/storage/base.0.hash index c9e25e46..165336ff 100644 --- a/tests/integration/stable/storage/base.0.hash +++ b/tests/integration/stable/storage/base.0.hash @@ -1 +1 @@ -uOz+sBj8VtXeEPICfJSFZ2+HYpr1C5tJu+UzFqR+QDg= +CfPeDSGIt9wLsT2M3OPjaty/PxihlQDir2LYwS3AfmQ= diff --git a/tests/integration/stable/storage/floats.0.hash b/tests/integration/stable/storage/floats.0.hash index 38b29752..41a66859 100644 --- a/tests/integration/stable/storage/floats.0.hash +++ b/tests/integration/stable/storage/floats.0.hash @@ -1 +1 @@ -lIjpcOE14o1kIgopEkX4iRFf0LFlXNY4NLOf1+wf5DQ= +KUxe+soE914IhQK01sbcbJFafaag2MjmiP1a9gT44MY= diff --git a/tests/integration/stable/storage/gvm-89.0.hash b/tests/integration/stable/storage/gvm-89.0.hash index 39ea80d3..af232e85 100644 --- a/tests/integration/stable/storage/gvm-89.0.hash +++ b/tests/integration/stable/storage/gvm-89.0.hash @@ -1 +1 @@ -r8ABX0Hxr+ARONjiDAoEHfCgvaXiqiJ+mCAlT15gvbw= +Zuv8iS9QoOPdUbiJ727WAHBZLc6ERaV6a8jbHzCEq8U= diff --git a/tests/integration/stable/storage/gvm-89.0_0.hash b/tests/integration/stable/storage/gvm-89.0_0.hash index 277ed945..60fdd80a 100644 --- a/tests/integration/stable/storage/gvm-89.0_0.hash +++ b/tests/integration/stable/storage/gvm-89.0_0.hash @@ -1 +1 @@ -EZfeF6KwZuK/12vobzMdwQL4Uxtrfqtpukw45ECy8RI= +AVcwMyN5fRvMgVr7Cwvx/x81bCt3JkxX08cPDecw5mI= diff --git a/tests/integration/stable/storage/locking/default-frozen.0.hash b/tests/integration/stable/storage/locking/default-frozen.0.hash index fc1af63b..5414d0f9 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0.hash @@ -1 +1 @@ -+Bc+flNOIXF+PAiMUHBssER7FHATyiu8EPcwOloYzEo= +uyxXrIkb94Jzq0+B9wWC5VR9nk1PM5yynJbU0TLa1C4= diff --git a/tests/integration/stable/storage/locking/default-frozen.0_0.hash b/tests/integration/stable/storage/locking/default-frozen.0_0.hash index 8e5a820e..3c6715c5 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0_0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0_0.hash @@ -1 +1 @@ -XNPcYFyGaV0QDrEtOqIRM/exX7awarryXCjE4GKQMJU= +870vb99VrQEgQdsljP31X/c1/VvNxlGGj5vKvx749xE= diff --git a/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash b/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash index e7a4b47f..7aedd127 100644 --- a/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash +++ b/tests/integration/stable/storage/locking/default-frozen.0_0_0.hash @@ -1 +1 @@ -2v/3ER4W4v7BKMOwSqOZAABn9Yz9vG6TtQrHzA417Jg= +tckXimIH31Ddyro/5ZwyyiXJFiKyp1EC7bi/c7ilUKY= diff --git a/tests/integration/stable/storage/locking/modify_ctor.0.hash b/tests/integration/stable/storage/locking/modify_ctor.0.hash index 5e9d48ea..46a54278 100644 --- a/tests/integration/stable/storage/locking/modify_ctor.0.hash +++ b/tests/integration/stable/storage/locking/modify_ctor.0.hash @@ -1 +1 @@ -NgfA2Ygg2UTUTHtPlpXhJJMkrdp3XGMJR7EUjZ8fn/8= +6+oTJlDuT4IEIIYLkrWW/23XANkLAI792qIsQkSUM8k= diff --git a/tests/integration/stable/storage/locking/modify_ctor.0_0.hash b/tests/integration/stable/storage/locking/modify_ctor.0_0.hash index 693f105a..3a30d18f 100644 --- a/tests/integration/stable/storage/locking/modify_ctor.0_0.hash +++ b/tests/integration/stable/storage/locking/modify_ctor.0_0.hash @@ -1 +1 @@ -QgsUK5xSXTuWNkouDwOFeUrgzTILSbjpfQAj59ErGPo= +GAC/HsXWI/VAtAVEgRec34hRRarH+nuQGRDBkjrHrxQ= diff --git a/tests/integration/stable/storage/locking/modify_later.0.hash b/tests/integration/stable/storage/locking/modify_later.0.hash index 80a63cce..3374131d 100644 --- a/tests/integration/stable/storage/locking/modify_later.0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0.hash @@ -1 +1 @@ -KlZOzVhscylUzGcTA2hBK7+Ioq3AuBBwihlx+oDJhxE= +YVBgyjw8sQ79Qe2DmVoi3SaTMXgTJaR9N0VOJVHjtBk= diff --git a/tests/integration/stable/storage/locking/modify_later.0_0.hash b/tests/integration/stable/storage/locking/modify_later.0_0.hash index 01ed2231..72c87b5f 100644 --- a/tests/integration/stable/storage/locking/modify_later.0_0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0_0.hash @@ -1 +1 @@ -ppb/i5wgWzAx54AlFCfF0uDjinjycCh0pNUwuxq6HVQ= +PByd5pUn1NXtFU6EJYA7H7mXsbmnbQzGqtvMcTgaUTI= diff --git a/tests/integration/stable/storage/locking/modify_later.0_0_0.hash b/tests/integration/stable/storage/locking/modify_later.0_0_0.hash index 693f105a..3a30d18f 100644 --- a/tests/integration/stable/storage/locking/modify_later.0_0_0.hash +++ b/tests/integration/stable/storage/locking/modify_later.0_0_0.hash @@ -1 +1 @@ -QgsUK5xSXTuWNkouDwOFeUrgzTILSbjpfQAj59ErGPo= +GAC/HsXWI/VAtAVEgRec34hRRarH+nuQGRDBkjrHrxQ= diff --git a/tests/integration/stable/storage/np.0.hash b/tests/integration/stable/storage/np.0.hash index 9e5e09c3..5667e64b 100644 --- a/tests/integration/stable/storage/np.0.hash +++ b/tests/integration/stable/storage/np.0.hash @@ -1 +1 @@ -t1N3MJTryks5R7IAX23KFSOk4RNvpwgqFp9fyRdHQdk= +hUpaaLVr8Ueb3EFecC2LJJl3P93HGa++UKG/hk/g0Is= diff --git a/tests/integration/stable/storage/persists.0.hash b/tests/integration/stable/storage/persists.0.hash index 9482f54f..5d38c3de 100644 --- a/tests/integration/stable/storage/persists.0.hash +++ b/tests/integration/stable/storage/persists.0.hash @@ -1 +1 @@ -i4oN4WOv0rc174O2mrCwxvbXSlVGwntRGIC/O51ym28= +j7uTHuPdGcf9l0V+cdt6y9cBj8dXc2aS9lKzhViJEJE= diff --git a/tests/integration/stable/storage/persists.0_0.hash b/tests/integration/stable/storage/persists.0_0.hash index 8f0f01a3..cc0143f2 100644 --- a/tests/integration/stable/storage/persists.0_0.hash +++ b/tests/integration/stable/storage/persists.0_0.hash @@ -1 +1 @@ -zjuTpNhxhn7J8Jrrrs0oKFpFqt5jkazqcU3EgR0bVMs= +EhoB1gVF/iGFhC9uhJ6Gbw4tFzYirYEO8yT8kRJaozk= diff --git a/tests/integration/stable/storage/read_nondet.0.hash b/tests/integration/stable/storage/read_nondet.0.hash index b79d352d..d2621b67 100644 --- a/tests/integration/stable/storage/read_nondet.0.hash +++ b/tests/integration/stable/storage/read_nondet.0.hash @@ -1 +1 @@ -TY5hQTp1t8km6ELF9u2s+7bEmCUkAKEoZpyxnXyTQI4= +2whDqY04WZLue4HXuhQaaoqM6cUevOPqTDbEN5/Yksc= diff --git a/tests/integration/stable/storage/storage_tree_map.0.hash b/tests/integration/stable/storage/storage_tree_map.0.hash index 4bcfb85f..20f042c9 100644 --- a/tests/integration/stable/storage/storage_tree_map.0.hash +++ b/tests/integration/stable/storage/storage_tree_map.0.hash @@ -1 +1 @@ -KzN5k7Oznwu7puqsh0lNYtzZbF/SmmbQ8CWRZI8r6Vs= +5XwvfHZ1GCFNY3anCu5wsvR2J/XL8HawpNeKBCrAHt0= diff --git a/tests/integration/stable/storage/to_str.0.hash b/tests/integration/stable/storage/to_str.0.hash index e5781feb..e17e1a19 100644 --- a/tests/integration/stable/storage/to_str.0.hash +++ b/tests/integration/stable/storage/to_str.0.hash @@ -1 +1 @@ -vw6K6bH3tMr/tDjVxYDKsB/mgldEcJHparlKLQMNBk0= +SI1m3xn9RszSfij7nhKKnfqjbm6kjoQxy7qwd/LWBzE= diff --git a/tests/integration/stable/storage/tree_map_nested.0.hash b/tests/integration/stable/storage/tree_map_nested.0.hash index 567a0c08..d4387b42 100644 --- a/tests/integration/stable/storage/tree_map_nested.0.hash +++ b/tests/integration/stable/storage/tree_map_nested.0.hash @@ -1 +1 @@ -SaDUvSecl9i7/0OVfvKPbGRa6gxR82TEIPdzIqkTnGM= +5Yvkn7KsamMern8/SB9Ideq1xIQ69jQ/Z3RIbMobkrE=