mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-05 15:23:06 +00:00
Packed rlp prover inputs (#1460)
* Pack rlp prover inputs * Fix endianness bug * Remove debug info and fix clippy
This commit is contained in:
parent
b119e96f7f
commit
219365d61b
@ -2,7 +2,7 @@
|
||||
// segment of memory.
|
||||
|
||||
// Pre stack: retdest
|
||||
// Post stack: (empty)
|
||||
// Post stack: txn_rlp_len
|
||||
|
||||
global read_rlp_to_memory:
|
||||
// stack: retdest
|
||||
@ -13,21 +13,18 @@ global read_rlp_to_memory:
|
||||
|
||||
PUSH @SEGMENT_RLP_RAW // ctx == virt == 0
|
||||
// stack: addr, final_addr, retdest
|
||||
|
||||
read_rlp_to_memory_loop:
|
||||
// stack: addr, final_addr, retdest
|
||||
DUP2
|
||||
DUP2
|
||||
EQ
|
||||
// stack: addr == final_addr, addr, final_addr, retdest
|
||||
LT
|
||||
ISZERO
|
||||
// stack: addr >= final_addr, addr, final_addr, retdest
|
||||
%jumpi(read_rlp_to_memory_finish)
|
||||
// stack: addr, len, retdest
|
||||
DUP1
|
||||
PROVER_INPUT(rlp)
|
||||
// stack: byte, addr, addr, final_addr, retdest
|
||||
MSTORE_GENERAL
|
||||
// stack: addr, final_addr, retdest
|
||||
%increment
|
||||
PROVER_INPUT(rlp)
|
||||
SWAP1
|
||||
MSTORE_32BYTES_32
|
||||
// stack: addr', final_addr, retdest
|
||||
%jump(read_rlp_to_memory_loop)
|
||||
|
||||
@ -35,7 +32,7 @@ read_rlp_to_memory_finish:
|
||||
// stack: addr, final_addr, retdest
|
||||
// we recover the offset here
|
||||
PUSH @SEGMENT_RLP_RAW // ctx == virt == 0
|
||||
DUP2 SUB
|
||||
DUP3 SUB
|
||||
// stack: pos, addr, final_addr, retdest
|
||||
%stack(pos, addr, final_addr, retdest) -> (retdest, pos)
|
||||
JUMP
|
||||
JUMP
|
||||
@ -9,8 +9,14 @@ pub(crate) fn all_rlp_prover_inputs_reversed(signed_txn: &[u8]) -> Vec<U256> {
|
||||
fn all_rlp_prover_inputs(signed_txn: &[u8]) -> Vec<U256> {
|
||||
let mut prover_inputs = vec![];
|
||||
prover_inputs.push(signed_txn.len().into());
|
||||
for &byte in signed_txn {
|
||||
prover_inputs.push(byte.into());
|
||||
let mut chunks = signed_txn.chunks_exact(32);
|
||||
for bytes in chunks.by_ref() {
|
||||
prover_inputs.push(U256::from_big_endian(bytes));
|
||||
}
|
||||
let mut last_chunk = chunks.remainder().to_vec();
|
||||
if !last_chunk.is_empty() {
|
||||
last_chunk.extend_from_slice(&vec![0u8; 32 - last_chunk.len()]);
|
||||
prover_inputs.push(U256::from_big_endian(&last_chunk));
|
||||
}
|
||||
prover_inputs
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user