Skip to content
This repository was archived by the owner on Jul 5, 2024. It is now read-only.

Big block issues #1808

Draft
wants to merge 7 commits into
base: extension-into-branch
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions bin/mpt-test/src/circuit/witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ use std::{
time::Duration,
};



use eth_types::{Field, ToScalar};

use ethers::{
Expand Down
7 changes: 6 additions & 1 deletion geth-utils/gethutil/mpt/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -457,9 +457,14 @@ func (s *StateDB) SetStateObjectIfExists(addr common.Address) {
ap := oracle.PrefetchAccount(s.Db.BlockNumber, addr, nil)
if len(ap) > 0 {
ret, _ := hex.DecodeString(ap[len(ap)-1][2:])

data := new(Account)
keyLen := ret[2] - 128

if int(3+keyLen+2) > len(ret) {
// Not account leaf, it's extension node
return
}

accData := ret[3+keyLen+2:]

if err := rlp.DecodeBytes(accData, data); err != nil {
Expand Down
1 change: 0 additions & 1 deletion geth-utils/gethutil/mpt/witness/prepare_witness.go
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,6 @@ func convertProofToWitness(statedb *state.StateDB, addr common.Address, addrh []
extensionNibblesS, extensionNibblesC,
leafRow0, key,
keyIndex, isShorterProofLastLeaf)

nodes = append(nodes, bNode)

var leafNode Node
Expand Down
1 change: 1 addition & 0 deletions zkevm-circuits/src/mpt_circuit/account_leaf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ impl<F: Field> AccountLeafConfig<F> {
ctx.clone(),
parent_data,
key_data,
true,
);
}};

Expand Down
85 changes: 46 additions & 39 deletions zkevm-circuits/src/mpt_circuit/mod_extension.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use super::{
ext_key_rlc_calc_value, KeyData, ListKeyGadget, ListKeyWitness, MPTConstraintBuilder,
},
rlp_gadgets::RLPItemWitness,
witness_row::AccountRowType,
MPTContext,
};
use crate::{
Expand Down Expand Up @@ -36,6 +37,7 @@ pub(crate) struct ModExtensionGadget<F> {
is_short_branch: IsEqualGadget<F>,
is_key_part_odd: [Cell<F>; 2], // Whether the number of nibbles is odd or not.
mult_key: Cell<F>,
is_account: bool,
}

impl<F: Field> ModExtensionGadget<F> {
Expand All @@ -45,51 +47,39 @@ impl<F: Field> ModExtensionGadget<F> {
ctx: MPTContext<F>,
parent_data: &mut [ParentData<F>; 2],
key_data: &mut [KeyData<F>; 2],
is_account: bool,
) -> Self {
let mut config = ModExtensionGadget::default();
config.is_account = is_account;

let mut long_ext_node_key = StorageRowType::LongExtNodeKey as usize;
let mut short_ext_node_key = StorageRowType::ShortExtNodeKey as usize;
let mut long_ext_node_nibbles = StorageRowType::LongExtNodeNibbles as usize;
let mut short_ext_node_nibbles = StorageRowType::ShortExtNodeNibbles as usize;
let mut long_ext_node_value = StorageRowType::LongExtNodeValue as usize;
let mut short_ext_node_value = StorageRowType::ShortExtNodeValue as usize;

if is_account {
long_ext_node_key = AccountRowType::LongExtNodeKey as usize;
short_ext_node_key = AccountRowType::ShortExtNodeKey as usize;
long_ext_node_nibbles = AccountRowType::LongExtNodeNibbles as usize;
short_ext_node_nibbles = AccountRowType::ShortExtNodeNibbles as usize;
long_ext_node_value = AccountRowType::LongExtNodeValue as usize;
short_ext_node_value = AccountRowType::ShortExtNodeValue as usize;
}

circuit!([meta, cb], {
let key_items = [
ctx.rlp_item(
meta,
cb,
StorageRowType::LongExtNodeKey as usize,
RlpItemType::Key,
),
ctx.rlp_item(
meta,
cb,
StorageRowType::ShortExtNodeKey as usize,
RlpItemType::Key,
),
ctx.rlp_item(meta, cb, long_ext_node_key, RlpItemType::Key),
ctx.rlp_item(meta, cb, short_ext_node_key, RlpItemType::Key),
];
let key_nibbles = [
ctx.rlp_item(
meta,
cb,
StorageRowType::LongExtNodeNibbles as usize,
RlpItemType::Nibbles,
),
ctx.rlp_item(
meta,
cb,
StorageRowType::ShortExtNodeNibbles as usize,
RlpItemType::Nibbles,
),
ctx.rlp_item(meta, cb, long_ext_node_nibbles, RlpItemType::Nibbles),
ctx.rlp_item(meta, cb, short_ext_node_nibbles, RlpItemType::Nibbles),
];
let rlp_value = [
ctx.rlp_item(
meta,
cb,
StorageRowType::LongExtNodeValue as usize,
RlpItemType::Value,
),
ctx.rlp_item(
meta,
cb,
StorageRowType::ShortExtNodeValue as usize,
RlpItemType::Value,
),
ctx.rlp_item(meta, cb, long_ext_node_value, RlpItemType::Value),
ctx.rlp_item(meta, cb, short_ext_node_value, RlpItemType::Value),
];

let is_insert = parent_data[0].is_placeholder.expr(); // insert or delete
Expand Down Expand Up @@ -272,22 +262,39 @@ impl<F: Field> ModExtensionGadget<F> {
rlp_values: &[RLPItemWitness],
list_rlp_bytes: [&[u8]; 2],
) -> Result<(), Error> {
let key_items = [
let mut key_items = [
rlp_values[StorageRowType::LongExtNodeKey as usize].clone(),
rlp_values[StorageRowType::ShortExtNodeKey as usize].clone(),
];

let mut rlp_key = vec![ListKeyWitness::default(); 2];
let mut key_rlc = vec![];

let items_s = [
let mut items_s = [
rlp_values[StorageRowType::LongExtNodeKey as usize].clone(),
rlp_values[StorageRowType::LongExtNodeNibbles as usize].clone(),
];
let items_c = [
let mut items_c = [
rlp_values[StorageRowType::ShortExtNodeKey as usize].clone(),
rlp_values[StorageRowType::ShortExtNodeNibbles as usize].clone(),
];

if self.is_account {
key_items = [
rlp_values[AccountRowType::LongExtNodeKey as usize].clone(),
rlp_values[AccountRowType::ShortExtNodeKey as usize].clone(),
];

items_s = [
rlp_values[AccountRowType::LongExtNodeKey as usize].clone(),
rlp_values[AccountRowType::LongExtNodeNibbles as usize].clone(),
];
items_c = [
rlp_values[AccountRowType::ShortExtNodeKey as usize].clone(),
rlp_values[AccountRowType::ShortExtNodeNibbles as usize].clone(),
];
}

let items = vec![items_s, items_c];

for is_s in [true, false] {
Expand Down
1 change: 1 addition & 0 deletions zkevm-circuits/src/mpt_circuit/storage_leaf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ impl<F: Field> StorageLeafConfig<F> {
ctx.clone(),
parent_data,
key_data,
false,
);
}};

Expand Down
12 changes: 6 additions & 6 deletions zkevm-circuits/src/mpt_circuit/tests/AccountAfterFirstLevel.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
"storage": null,
"mod_extension": null,
"values": [
"a0468d1a8b37720df40231d2a87c72b2ba41b6083102bf9dea6376d06129d33ae900",
"a0f27607e62c4a7a95dd1d5d63a72a129b1e42d14a59421045d8c11c29c7f8f70900"
"a043f881dc1d2c6d659d99d6d7a6f604c1cefab65f5d738ba36a2c4dcc17f38b6d00",
"a02447928309640f105342a5f255406deed3fede83875c31678bdb5e8dbf8ca86800"
],
"keccak_data": []
},
Expand Down Expand Up @@ -45,7 +45,7 @@
"values": [
"a0a47179bacb2563d64a4da3bfd1a3afc4e15e58cb7671232a1393aa56e84e210700",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf100",
"a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a9558900",
"80000000000000000000000000000000000000000000000000000000000000000000",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a0400",
Expand All @@ -57,7 +57,7 @@
"a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb00",
"80000000000000000000000000000000000000000000000000000000000000000000",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd1400",
"a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a000",
"a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f00900",
"80000000000000000000000000000000000000000000000000000000000000000000",
"00000000000000000000000000000000000000000000000000000000000000000000",
Expand All @@ -66,8 +66,8 @@
"00000000000000000000000000000000000000000000000000000000000000000000"
],
"keccak_data": [
"f9011180a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf18080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd14a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f0098080",
"f9013180a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf18080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd14a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f009a0a47179bacb2563d64a4da3bfd1a3afc4e15e58cb7671232a1393aa56e84e210780"
"f9011180a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a955898080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a0a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f0098080",
"f9013180a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a955898080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a0a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f009a0a47179bacb2563d64a4da3bfd1a3afc4e15e58cb7671232a1393aa56e84e210780"
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
"storage": null,
"mod_extension": null,
"values": [
"a0468d1a8b37720df40231d2a87c72b2ba41b6083102bf9dea6376d06129d33ae900",
"a0b220559455e7817aad815d51c2e1455060ddaaf60eeb300b69345eb407714c7e00"
"a043f881dc1d2c6d659d99d6d7a6f604c1cefab65f5d738ba36a2c4dcc17f38b6d00",
"a044f2c8ed463d2907429451b4f93d6c5e309247f253784b23c953fb269ec1440300"
],
"keccak_data": []
},
Expand Down Expand Up @@ -45,7 +45,7 @@
"values": [
"a0f5668715bad00d67745187cb0ca429735ffd25f9c22ea8a96b90752b9f11cde500",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf100",
"a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a9558900",
"80000000000000000000000000000000000000000000000000000000000000000000",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a0400",
Expand All @@ -57,7 +57,7 @@
"a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb00",
"80000000000000000000000000000000000000000000000000000000000000000000",
"80000000000000000000000000000000000000000000000000000000000000000000",
"a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd1400",
"a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a000",
"a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f00900",
"80000000000000000000000000000000000000000000000000000000000000000000",
"00000000000000000000000000000000000000000000000000000000000000000000",
Expand All @@ -66,8 +66,8 @@
"00000000000000000000000000000000000000000000000000000000000000000000"
],
"keccak_data": [
"f9011180a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf18080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd14a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f0098080",
"f9011180a0ab8cdb808c8303bb61fb48e276217be9770fa83ecf3f90f2234d558885f5abf18080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a085880d90258c3f5cfb586bc74bcde6c0a28149e7b7fa6bf6a69c08ae0836cd14a0f5668715bad00d67745187cb0ca429735ffd25f9c22ea8a96b90752b9f11cde58080"
"f9011180a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a955898080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a0a066a7662811491b3d352e969506b420d269e8b51a224f574b3b38b3463f43f0098080",
"f9011180a068b9c3ec22d2659defc34853ff95aac099b725449193be0ab7a61029a0a955898080a01a697e814758281972fcd13bc9707dbcd2f195986b05463d7b78426508445a04a0b5d7a91be5ee273cce27e2ad9a160d2faadd5a6ba518d384019b68728a4f62f4a0c2c799b60a0cd6acd42c1015512872e86c186bcf196e85061e76842f3b7cf86080a02e0d86c3befd177f574a20ac63804532889077e955320c9361cd10b7cc6f580980a06301b39b2ea8a44df8b0356120db64b788e71f52e1d7a6309d0d2e5b86fee7cb8080a01b7779e149cadf24d4ffb77ca7e11314b8db7097e4d70b2a173493153ca2e5a0a0f5668715bad00d67745187cb0ca429735ffd25f9c22ea8a96b90752b9f11cde58080"
]
},
{
Expand Down
Loading
Loading