mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-03 14:23:07 +00:00
Fix genesis block number in prove_block (#1382)
* Fix genesis block number target * Add consistency check * Fix genesis block number * Revert pruning * Cleanup * Update error message with hashes * Fix and add comment * Make comment more explicit
This commit is contained in:
parent
acd3b1ad54
commit
2039e18f29
@ -663,14 +663,14 @@ where
|
||||
builder.connect(pvs.txn_number_before, lhs.txn_number_before);
|
||||
builder.connect(pvs.txn_number_after, rhs.txn_number_after);
|
||||
|
||||
// Connect lhs `txn_number_after`with rhs `txn_number_before`.
|
||||
// Connect lhs `txn_number_after` with rhs `txn_number_before`.
|
||||
builder.connect(lhs.txn_number_after, rhs.txn_number_before);
|
||||
|
||||
// Connect the gas used in public values to the lhs and rhs values correctly.
|
||||
builder.connect(pvs.gas_used_before, lhs.gas_used_before);
|
||||
builder.connect(pvs.gas_used_after, rhs.gas_used_after);
|
||||
|
||||
// Connect lhs `gas_used_after`with rhs `gas_used_before`.
|
||||
// Connect lhs `gas_used_after` with rhs `gas_used_before`.
|
||||
builder.connect(lhs.gas_used_after, rhs.gas_used_before);
|
||||
|
||||
// Connect the `block_bloom` in public values to the lhs and rhs values correctly.
|
||||
@ -680,7 +680,8 @@ where
|
||||
for (&limb0, &limb1) in pvs.block_bloom_before.iter().zip(&lhs.block_bloom_before) {
|
||||
builder.connect(limb0, limb1);
|
||||
}
|
||||
// Connect lhs `block_bloom_after`with rhs `block_bloom_before`.
|
||||
|
||||
// Connect lhs `block_bloom_after` with rhs `block_bloom_before`.
|
||||
for (&limb0, &limb1) in lhs.block_bloom_after.iter().zip(&rhs.block_bloom_before) {
|
||||
builder.connect(limb0, limb1);
|
||||
}
|
||||
@ -819,7 +820,7 @@ where
|
||||
let has_not_parent_block = builder.sub(one, has_parent_block.target);
|
||||
|
||||
// Check that the genesis block number is 0.
|
||||
let gen_block_constr = builder.mul(has_not_parent_block, rhs.block_metadata.block_number);
|
||||
let gen_block_constr = builder.mul(has_not_parent_block, lhs.block_metadata.block_number);
|
||||
builder.assert_zero(gen_block_constr);
|
||||
|
||||
// Check that the genesis block has the predetermined state trie root in `ExtraBlockData`.
|
||||
@ -1033,7 +1034,18 @@ where
|
||||
block_inputs
|
||||
.set_proof_with_pis_target(&self.block.parent_block_proof, parent_block_proof);
|
||||
} else {
|
||||
// Initialize genesis_state_trie, state_root_after, block hashes and the block number for correct connection between blocks.
|
||||
// Initialize genesis_state_trie, state_root_after, and the previous block hashes for correct connection between blocks.
|
||||
// Block number does not need to be initialized as genesis block is constrained to have number 0.
|
||||
|
||||
if public_values.trie_roots_before.state_root
|
||||
!= public_values.extra_block_data.genesis_state_trie_root
|
||||
{
|
||||
return Err(anyhow::Error::msg(format!(
|
||||
"Inconsistent pre-state for first block {:?} with genesis state {:?}.",
|
||||
public_values.trie_roots_before.state_root,
|
||||
public_values.extra_block_data.genesis_state_trie_root,
|
||||
)));
|
||||
}
|
||||
// Initialize `state_root_after`.
|
||||
let state_trie_root_after_keys =
|
||||
TrieRootsTarget::SIZE..TrieRootsTarget::SIZE + TrieRootsTarget::HASH_SIZE;
|
||||
@ -1071,15 +1083,15 @@ where
|
||||
nonzero_pis.insert(block_hashes_keys.start + 8 * (i + 1) + j, targets[j]);
|
||||
}
|
||||
}
|
||||
let block_hashes_current_start = TrieRootsTarget::SIZE * 2
|
||||
+ BlockMetadataTarget::SIZE
|
||||
+ BlockHashesTarget::BLOCK_HASHES_SIZE
|
||||
- 8;
|
||||
let cur_targets = h256_limbs::<F>(public_values.block_hashes.prev_hashes[255]);
|
||||
for i in 0..8 {
|
||||
nonzero_pis.insert(block_hashes_keys.end + i, cur_targets[i]);
|
||||
nonzero_pis.insert(block_hashes_current_start + i, cur_targets[i]);
|
||||
}
|
||||
|
||||
// Initialize the block number.
|
||||
let block_number_key = TrieRootsTarget::SIZE * 2 + 6;
|
||||
nonzero_pis.insert(block_number_key, F::NEG_ONE);
|
||||
|
||||
block_inputs.set_proof_with_pis_target(
|
||||
&self.block.parent_block_proof,
|
||||
&cyclic_base_proof(
|
||||
|
||||
@ -31,7 +31,10 @@ fn test_empty_txn_list() -> anyhow::Result<()> {
|
||||
let all_stark = AllStark::<F, D>::default();
|
||||
let config = StarkConfig::standard_fast_config();
|
||||
|
||||
let block_metadata = BlockMetadata::default();
|
||||
let block_metadata = BlockMetadata {
|
||||
block_number: 1.into(),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let state_trie = HashedPartialTrie::from(Node::Empty);
|
||||
let transactions_trie = HashedPartialTrie::from(Node::Empty);
|
||||
|
||||
@ -354,7 +354,7 @@ fn test_log_with_aggreg() -> anyhow::Result<()> {
|
||||
let block_metadata = BlockMetadata {
|
||||
block_beneficiary: Address::from(beneficiary),
|
||||
block_timestamp: 0x03e8.into(),
|
||||
block_number: 0.into(),
|
||||
block_number: 1.into(),
|
||||
block_difficulty: 0x020000.into(),
|
||||
block_gaslimit: 0x445566u32.into(),
|
||||
block_chain_id: 1.into(),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user