diff --git a/evm/src/proof.rs b/evm/src/proof.rs index ca6dbbfc..49fcd3f9 100644 --- a/evm/src/proof.rs +++ b/evm/src/proof.rs @@ -91,9 +91,9 @@ impl PublicValuesTarget { receipts_root: receipts_root_before, } = self.trie_roots_before; - buffer.write_target_vec(&state_root_before)?; - buffer.write_target_vec(&transactions_root_before)?; - buffer.write_target_vec(&receipts_root_before)?; + buffer.write_target_array(&state_root_before)?; + buffer.write_target_array(&transactions_root_before)?; + buffer.write_target_array(&receipts_root_before)?; let TrieRootsTarget { state_root: state_root_after, @@ -101,9 +101,9 @@ impl PublicValuesTarget { receipts_root: receipts_root_after, } = self.trie_roots_after; - buffer.write_target_vec(&state_root_after)?; - buffer.write_target_vec(&transactions_root_after)?; - buffer.write_target_vec(&receipts_root_after)?; + buffer.write_target_array(&state_root_after)?; + buffer.write_target_array(&transactions_root_after)?; + buffer.write_target_array(&receipts_root_after)?; let BlockMetadataTarget { block_beneficiary, @@ -116,7 +116,7 @@ impl PublicValuesTarget { block_bloom, } = self.block_metadata; - buffer.write_target_vec(&block_beneficiary)?; + buffer.write_target_array(&block_beneficiary)?; buffer.write_target(block_timestamp)?; buffer.write_target(block_number)?; buffer.write_target(block_difficulty)?; @@ -130,19 +130,19 @@ impl PublicValuesTarget { pub fn from_buffer(buffer: &mut Buffer) -> IoResult { let trie_roots_before = TrieRootsTarget { - state_root: buffer.read_target_vec()?.try_into().unwrap(), - transactions_root: buffer.read_target_vec()?.try_into().unwrap(), - receipts_root: buffer.read_target_vec()?.try_into().unwrap(), + state_root: buffer.read_target_array()?, + transactions_root: buffer.read_target_array()?, + receipts_root: buffer.read_target_array()?, }; let trie_roots_after = TrieRootsTarget { - state_root: buffer.read_target_vec()?.try_into().unwrap(), - transactions_root: buffer.read_target_vec()?.try_into().unwrap(), - receipts_root: buffer.read_target_vec()?.try_into().unwrap(), + state_root: buffer.read_target_array()?, + transactions_root: buffer.read_target_array()?, + receipts_root: buffer.read_target_array()?, }; let block_metadata = BlockMetadataTarget { - block_beneficiary: buffer.read_target_vec()?.try_into().unwrap(), + block_beneficiary: buffer.read_target_array()?, block_timestamp: buffer.read_target()?, block_number: buffer.read_target()?, block_difficulty: buffer.read_target()?, diff --git a/plonky2/src/util/serialization/mod.rs b/plonky2/src/util/serialization/mod.rs index 2751ec69..ca95b4a1 100644 --- a/plonky2/src/util/serialization/mod.rs +++ b/plonky2/src/util/serialization/mod.rs @@ -225,6 +225,15 @@ pub trait Read { Ok(ExtensionTarget(res)) } + /// Reads an array of Target from `self`. + #[inline] + fn read_target_array(&mut self) -> IoResult<[Target; N]> { + (0..N) + .map(|_| self.read_target()) + .collect::, _>>() + .map(|v| v.try_into().unwrap()) + } + /// Reads a vector of Target from `self`. #[inline] fn read_target_vec(&mut self) -> IoResult> { @@ -1313,6 +1322,16 @@ pub trait Write { Ok(()) } + /// Writes a vector of Target `v` to `self.` + #[inline] + fn write_target_array(&mut self, v: &[Target; N]) -> IoResult<()> { + for &elem in v.iter() { + self.write_target(elem)?; + } + + Ok(()) + } + /// Writes a vector of Target `v` to `self.` #[inline] fn write_target_vec(&mut self, v: &[Target]) -> IoResult<()> {