Fix genesis state trie root when calling prove_root (#1271)

* Fix genesis state trie root in some tests

* Just do it in tests calling prove_block
This commit is contained in:
wborgeaud 2023-10-03 17:47:10 +02:00 committed by GitHub
parent cd36e96cb8
commit 3ac0c4ae18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 39 additions and 27 deletions

View File

@ -644,10 +644,18 @@ where
rhs: &ExtraBlockDataTarget,
) {
// Connect genesis state root values.
for (&limb0, &limb1) in pvs.genesis_state_root.iter().zip(&rhs.genesis_state_root) {
for (&limb0, &limb1) in pvs
.genesis_state_trie_root
.iter()
.zip(&rhs.genesis_state_trie_root)
{
builder.connect(limb0, limb1);
}
for (&limb0, &limb1) in pvs.genesis_state_root.iter().zip(&lhs.genesis_state_root) {
for (&limb0, &limb1) in pvs
.genesis_state_trie_root
.iter()
.zip(&lhs.genesis_state_trie_root)
{
builder.connect(limb0, limb1);
}
@ -793,9 +801,9 @@ where
// Between blocks, the genesis state trie remains unchanged.
for (&limb0, limb1) in lhs
.extra_block_data
.genesis_state_root
.genesis_state_trie_root
.iter()
.zip(rhs.extra_block_data.genesis_state_root)
.zip(rhs.extra_block_data.genesis_state_trie_root)
{
builder.connect(limb0, limb1);
}
@ -834,7 +842,7 @@ where
.trie_roots_before
.state_root
.iter()
.zip(x.extra_block_data.genesis_state_root)
.zip(x.extra_block_data.genesis_state_trie_root)
{
let mut constr = builder.sub(limb0, limb1);
constr = builder.mul(has_not_parent_block, constr);
@ -1037,7 +1045,7 @@ where
+ BlockHashesTarget::BLOCK_HASHES_SIZE
+ 8;
for (key, &value) in genesis_state_trie_keys.zip_eq(&h256_limbs::<F>(
public_values.extra_block_data.genesis_state_root,
public_values.extra_block_data.genesis_state_trie_root,
)) {
nonzero_pis.insert(key, value);
}

View File

@ -261,7 +261,7 @@ pub fn generate_traces<F: RichField + Extendable<D>, const D: usize>(
let txn_number_after = read_metadata(GlobalMetadata::TxnNumberAfter);
let extra_block_data = ExtraBlockData {
genesis_state_root: inputs.genesis_state_trie_root,
genesis_state_trie_root: inputs.genesis_state_trie_root,
txn_number_before: inputs.txn_number_before,
txn_number_after,
gas_used_before: inputs.gas_used_before,

View File

@ -109,7 +109,7 @@ fn observe_extra_block_data<
challenger: &mut Challenger<F, C::Hasher>,
extra_data: &ExtraBlockData,
) -> Result<(), ProgramError> {
challenger.observe_elements(&h256_limbs(extra_data.genesis_state_root));
challenger.observe_elements(&h256_limbs(extra_data.genesis_state_trie_root));
challenger.observe_element(u256_to_u32(extra_data.txn_number_before)?);
challenger.observe_element(u256_to_u32(extra_data.txn_number_after)?);
let gas_used_before = u256_to_u64(extra_data.gas_used_before)?;
@ -138,7 +138,7 @@ fn observe_extra_block_data_target<
) where
C::Hasher: AlgebraicHasher<F>,
{
challenger.observe_elements(&extra_data.genesis_state_root);
challenger.observe_elements(&extra_data.genesis_state_trie_root);
challenger.observe_element(extra_data.txn_number_before);
challenger.observe_element(extra_data.txn_number_after);
challenger.observe_elements(&extra_data.gas_used_before);

View File

@ -125,7 +125,7 @@ pub struct BlockMetadata {
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ExtraBlockData {
/// The state trie digest of the genesis block.
pub genesis_state_root: H256,
pub genesis_state_trie_root: H256,
/// The transaction count prior execution of the local state transition, starting
/// at 0 for the initial transaction of a block.
pub txn_number_before: U256,
@ -210,7 +210,7 @@ impl PublicValuesTarget {
buffer.write_target_array(&cur_hash)?;
let ExtraBlockDataTarget {
genesis_state_root,
genesis_state_trie_root: genesis_state_root,
txn_number_before,
txn_number_after,
gas_used_before,
@ -261,7 +261,7 @@ impl PublicValuesTarget {
};
let extra_block_data = ExtraBlockDataTarget {
genesis_state_root: buffer.read_target_array()?,
genesis_state_trie_root: buffer.read_target_array()?,
txn_number_before: buffer.read_target()?,
txn_number_after: buffer.read_target()?,
gas_used_before: buffer.read_target_array()?,
@ -571,7 +571,7 @@ impl BlockHashesTarget {
#[derive(Eq, PartialEq, Debug, Copy, Clone)]
pub struct ExtraBlockDataTarget {
pub genesis_state_root: [Target; 8],
pub genesis_state_trie_root: [Target; 8],
pub txn_number_before: Target,
pub txn_number_after: Target,
pub gas_used_before: [Target; 2],
@ -584,7 +584,7 @@ impl ExtraBlockDataTarget {
const SIZE: usize = 142;
pub fn from_public_inputs(pis: &[Target]) -> Self {
let genesis_state_root = pis[0..8].try_into().unwrap();
let genesis_state_trie_root = pis[0..8].try_into().unwrap();
let txn_number_before = pis[8];
let txn_number_after = pis[9];
let gas_used_before = pis[10..12].try_into().unwrap();
@ -593,7 +593,7 @@ impl ExtraBlockDataTarget {
let block_bloom_after = pis[78..142].try_into().unwrap();
Self {
genesis_state_root,
genesis_state_trie_root,
txn_number_before,
txn_number_after,
gas_used_before,
@ -610,11 +610,11 @@ impl ExtraBlockDataTarget {
ed1: Self,
) -> Self {
Self {
genesis_state_root: core::array::from_fn(|i| {
genesis_state_trie_root: core::array::from_fn(|i| {
builder.select(
condition,
ed0.genesis_state_root[i],
ed1.genesis_state_root[i],
ed0.genesis_state_trie_root[i],
ed1.genesis_state_trie_root[i],
)
}),
txn_number_before: builder.select(
@ -652,7 +652,10 @@ impl ExtraBlockDataTarget {
ed1: Self,
) {
for i in 0..8 {
builder.connect(ed0.genesis_state_root[i], ed1.genesis_state_root[i]);
builder.connect(
ed0.genesis_state_trie_root[i],
ed1.genesis_state_trie_root[i],
);
}
builder.connect(ed0.txn_number_before, ed1.txn_number_before);
builder.connect(ed0.txn_number_after, ed1.txn_number_after);

View File

@ -813,7 +813,7 @@ pub(crate) fn add_virtual_block_hashes<F: RichField + Extendable<D>, const D: us
pub(crate) fn add_virtual_extra_block_data<F: RichField + Extendable<D>, const D: usize>(
builder: &mut CircuitBuilder<F, D>,
) -> ExtraBlockDataTarget {
let genesis_state_root = builder.add_virtual_public_input_arr();
let genesis_state_trie_root = builder.add_virtual_public_input_arr();
let txn_number_before = builder.add_virtual_public_input();
let txn_number_after = builder.add_virtual_public_input();
let gas_used_before = builder.add_virtual_public_input_arr();
@ -821,7 +821,7 @@ pub(crate) fn add_virtual_extra_block_data<F: RichField + Extendable<D>, const D
let block_bloom_before: [Target; 64] = builder.add_virtual_public_input_arr();
let block_bloom_after: [Target; 64] = builder.add_virtual_public_input_arr();
ExtraBlockDataTarget {
genesis_state_root,
genesis_state_trie_root,
txn_number_before,
txn_number_after,
gas_used_before,
@ -1084,8 +1084,8 @@ where
W: Witness<F>,
{
witness.set_target_arr(
&ed_target.genesis_state_root,
&h256_limbs::<F>(ed.genesis_state_root),
&ed_target.genesis_state_trie_root,
&h256_limbs::<F>(ed.genesis_state_trie_root),
);
witness.set_target(
ed_target.txn_number_before,

View File

@ -339,6 +339,7 @@ fn test_log_with_aggreg() -> anyhow::Result<()> {
to_second_nibbles,
rlp::encode(&to_account_second_before).to_vec(),
);
let genesis_state_trie_root = state_trie_before.hash();
let tries_before = TrieInputs {
state_trie: state_trie_before,
@ -439,7 +440,7 @@ fn test_log_with_aggreg() -> anyhow::Result<()> {
tries: tries_before,
trie_roots_after: tries_after,
contract_code,
genesis_state_trie_root: HashedPartialTrie::from(Node::Empty).hash(),
genesis_state_trie_root,
block_metadata: block_metadata.clone(),
txn_number_before: 0.into(),
gas_used_before: 0.into(),
@ -583,7 +584,7 @@ fn test_log_with_aggreg() -> anyhow::Result<()> {
tries: tries_before,
trie_roots_after,
contract_code,
genesis_state_trie_root: HashedPartialTrie::from(Node::Empty).hash(),
genesis_state_trie_root,
block_metadata,
txn_number_before: 1.into(),
gas_used_before: gas_used_second,
@ -609,7 +610,7 @@ fn test_log_with_aggreg() -> anyhow::Result<()> {
trie_roots_before: first_public_values.trie_roots_before,
trie_roots_after: public_values.trie_roots_after,
extra_block_data: ExtraBlockData {
genesis_state_root: first_public_values.extra_block_data.genesis_state_root,
genesis_state_trie_root,
txn_number_before: first_public_values.extra_block_data.txn_number_before,
txn_number_after: public_values.extra_block_data.txn_number_after,
gas_used_before: first_public_values.extra_block_data.gas_used_before,

View File

@ -216,7 +216,7 @@ fn test_four_transactions() -> anyhow::Result<()> {
trie_roots_after,
genesis_state_trie_root: HashedPartialTrie::from(Node::Empty).hash(),
contract_code,
block_metadata: block_metadata.clone(),
block_metadata,
addresses: vec![],
block_bloom_before: [0.into(); 8],
gas_used_before: 0.into(),