diff --git a/Cargo.lock b/Cargo.lock index cac1d44..7448dc9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1157,7 +1157,7 @@ checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" [[package]] name = "banderwagon" version = "0.1.0" -source = "git+https://github.com/megaeth-labs/salt.git?rev=v1.0.2#2bb00254bbe9fd6671afac8a1bf3464614638b1c" +source = "git+https://github.com/megaeth-labs/salt.git?rev=a04647065f12dbd8461dc40569731656d160d694#a04647065f12dbd8461dc40569731656d160d694" dependencies = [ "ark-ec 0.5.0 (git+https://github.com/megaeth-labs/algebra.git?rev=80ca69c37f79d5d00750edc1602af81b5f456695)", "ark-ed-on-bls12-381-bandersnatch", @@ -2876,7 +2876,7 @@ dependencies = [ [[package]] name = "ipa-multipoint" version = "0.1.0" -source = "git+https://github.com/megaeth-labs/salt.git?rev=v1.0.2#2bb00254bbe9fd6671afac8a1bf3464614638b1c" +source = "git+https://github.com/megaeth-labs/salt.git?rev=a04647065f12dbd8461dc40569731656d160d694#a04647065f12dbd8461dc40569731656d160d694" dependencies = [ "banderwagon", "hashbrown 0.16.1", @@ -5116,8 +5116,8 @@ checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" [[package]] name = "salt" -version = "1.0.2" -source = "git+https://github.com/megaeth-labs/salt.git?rev=v1.0.2#2bb00254bbe9fd6671afac8a1bf3464614638b1c" +version = "1.0.3" +source = "git+https://github.com/megaeth-labs/salt.git?rev=a04647065f12dbd8461dc40569731656d160d694#a04647065f12dbd8461dc40569731656d160d694" dependencies = [ "auto_impl", "banderwagon", @@ -5139,7 +5139,7 @@ dependencies = [ [[package]] name = "salt-macros" version = "0.1.0" -source = "git+https://github.com/megaeth-labs/salt.git?rev=v1.0.2#2bb00254bbe9fd6671afac8a1bf3464614638b1c" +source = "git+https://github.com/megaeth-labs/salt.git?rev=a04647065f12dbd8461dc40569731656d160d694#a04647065f12dbd8461dc40569731656d160d694" dependencies = [ "rayon", ] diff --git a/Cargo.toml b/Cargo.toml index eacebb3..105e2b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,7 @@ alloy-trie = { version = "0.9.0", default-features = false } # mega mega-evm = { git = "https://github.com/megaeth-labs/mega-evm.git", rev = "915f71e324141140c7f08687fc23db63402e06e0", default-features = false } -salt = { git = "https://github.com/megaeth-labs/salt.git", rev = "v1.0.2", default-features = false } +salt = { git = "https://github.com/megaeth-labs/salt.git", rev = "a04647065f12dbd8461dc40569731656d160d694", default-features = false } # op op-alloy-network = { version = "0.18.12", default-features = false } diff --git a/crates/stateless-core/src/light_witness.rs b/crates/stateless-core/src/light_witness.rs index feeeb16..95c7e37 100644 --- a/crates/stateless-core/src/light_witness.rs +++ b/crates/stateless-core/src/light_witness.rs @@ -32,7 +32,12 @@ type FxHashMap = HashMap; pub struct LightWitness { /// All witnessed key-value pairs (same as SaltWitness.kvs) pub kvs: BTreeMap>, - /// Bucket subtree levels (same as SaltProof.levels) + /// Bucket subtree levels (same as SaltProof.levels). + /// + /// Routed through [`salt::fx_hashmap_serde`] so we don't have to enable + /// `hashbrown/serde` (which transitively pulls in `serde_core 1.0.221+` + /// and breaks downstream `alloy-tx-macros 1.0.23`). + #[serde(with = "salt::fx_hashmap_serde")] pub levels: FxHashMap, } @@ -198,4 +203,27 @@ mod tests { assert!(fast.kvs.is_empty()); assert!(fast.levels.is_empty()); } + + /// Round-trip a populated `LightWitness` through bincode to confirm the + /// `#[serde(with = "salt::fx_hashmap_serde")]` wiring on the `levels` + /// field actually works end-to-end. The adapter itself is covered by + /// salt's own tests; this test just guards the integration. + #[test] + fn round_trip_through_bincode() { + let mut levels: FxHashMap = HashMap::with_hasher(FxBuildHasher); + for (k, v) in [(0u32, 0u8), (42, 3), (1_000_000, 7), (BucketId::MAX, 255)] { + levels.insert(k, v); + } + let original = LightWitness { kvs: BTreeMap::new(), levels }; + + let bytes = bincode::serde::encode_to_vec(&original, bincode::config::standard()).unwrap(); + let (decoded, _): (LightWitness, _) = + bincode::serde::decode_from_slice(&bytes, bincode::config::standard()).unwrap(); + + assert_eq!(original.kvs, decoded.kvs); + assert_eq!(original.levels.len(), decoded.levels.len()); + for (k, v) in &original.levels { + assert_eq!(decoded.levels.get(k), Some(v)); + } + } }