From 9ab71ab762f7a1fa6b37c339bc8c37ff53b422db Mon Sep 17 00:00:00 2001 From: Vladimir Trifonov Date: Tue, 19 Dec 2023 10:15:07 +0200 Subject: [PATCH] fix: fix tx circuit --- bus-mapping/src/circuit_input_builder.rs | 2 +- bus-mapping/src/circuit_input_builder/transaction.rs | 2 +- zkevm-circuits/src/evm_circuit/execution/begin_tx.rs | 5 +---- zkevm-circuits/src/evm_circuit/execution/end_tx.rs | 4 ++-- zkevm-circuits/src/super_circuit/test.rs | 1 - zkevm-circuits/src/tx_circuit.rs | 8 ++++---- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/bus-mapping/src/circuit_input_builder.rs b/bus-mapping/src/circuit_input_builder.rs index f0d90f52e81..f794b60955a 100644 --- a/bus-mapping/src/circuit_input_builder.rs +++ b/bus-mapping/src/circuit_input_builder.rs @@ -558,7 +558,7 @@ impl<'a> CircuitInputBuilder { let mut tx = self.new_tx(eth_tx, !geth_trace.failed)?; // Sanity check for transaction L1 fee. - let tx_l1_fee = if tx.tx_type.is_l1_msg() { + let tx_l1_fee = if tx.tx_type.is_l1_msg() || tx.tx_type.is_l1_block_hashes() { 0 } else { tx.l1_fee() diff --git a/bus-mapping/src/circuit_input_builder/transaction.rs b/bus-mapping/src/circuit_input_builder/transaction.rs index d737ab8bbd6..986f8afbba1 100644 --- a/bus-mapping/src/circuit_input_builder/transaction.rs +++ b/bus-mapping/src/circuit_input_builder/transaction.rs @@ -369,7 +369,7 @@ impl Transaction { ); let tx_type = TxType::get_tx_type(eth_tx); - let (l1_fee, l1_fee_committed) = if tx_type.is_l1_msg() { + let (l1_fee, l1_fee_committed) = if tx_type.is_l1_msg() || tx_type.is_l1_block_hashes() { Default::default() } else { ( diff --git a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs index 0ea428ad475..008ac38fa4d 100644 --- a/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/begin_tx.rs @@ -181,10 +181,7 @@ impl ExecutionGadget for BeginTxGadget { let tx_caller_address_is_zero = IsZeroGadget::construct(cb, tx_caller_address.expr()); cb.require_equal( "CallerAddress != 0 (not a padding tx)", - and::expr([ - not::expr(tx_l1_block_hashes.is_l1_block_hashes()), - tx_caller_address_is_zero.expr(), - ]), + tx_caller_address_is_zero.expr(), false.expr(), ); let tx_callee_address_is_zero = IsZeroGadget::construct(cb, tx_callee_address.expr()); diff --git a/zkevm-circuits/src/evm_circuit/execution/end_tx.rs b/zkevm-circuits/src/evm_circuit/execution/end_tx.rs index e29e7ddbd10..379956de712 100644 --- a/zkevm-circuits/src/evm_circuit/execution/end_tx.rs +++ b/zkevm-circuits/src/evm_circuit/execution/end_tx.rs @@ -140,7 +140,7 @@ impl ExecutionGadget for EndTxGadget { let effective_fee = cb.query_word_rlc(); cb.condition(tx_l1_custom_tx.expr(), |cb| { - cb.require_zero("l1fee is 0 for l1msg", tx_l1_fee.expr()); + cb.require_zero("l1fee is 0 for l1msg and l1 block hashesg", tx_l1_fee.expr()); }); cb.require_equal( "tx_fee == l1_fee + l2_fee", @@ -405,7 +405,7 @@ impl ExecutionGadget for EndTxGadget { )?; let tx_l1_fee = if tx.tx_type.is_l1_custom_tx() { - log::trace!("tx is l1msg and l1 fee is 0"); + log::trace!("tx is l1msg or l1 block hashes and l1 fee is 0"); 0 } else { tx.l1_fee.tx_l1_fee(tx.tx_data_gas_cost).0 diff --git a/zkevm-circuits/src/super_circuit/test.rs b/zkevm-circuits/src/super_circuit/test.rs index bc7108a5ba8..da503006974 100644 --- a/zkevm-circuits/src/super_circuit/test.rs +++ b/zkevm-circuits/src/super_circuit/test.rs @@ -105,7 +105,6 @@ fn test_super_circuit< ); block.txs[0].tx_type = TxType::L1BlockHashes; - block.txs[0].caller_address = address!("0x0000000000000000000000000000000000000000"); let active_row_num =SuperCircuit::< Fr, diff --git a/zkevm-circuits/src/tx_circuit.rs b/zkevm-circuits/src/tx_circuit.rs index c3495bbb324..7a31b7194a7 100644 --- a/zkevm-circuits/src/tx_circuit.rs +++ b/zkevm-circuits/src/tx_circuit.rs @@ -1180,14 +1180,14 @@ impl SubCircuitConfig for TxCircuitConfig { }); meta.lookup_any("l1 block hashes calldata in block table", |meta| { - let is_tag_block_num = meta.query_advice(is_tag_block_num, Rotation::cur()); - let block_num = meta.query_advice(tx_table.value, Rotation::cur()); - let calldata_rlc = meta.query_advice(calldata_rlc, Rotation::cur()); + let is_tag_good = meta.query_advice(is_calldata, Rotation::cur()); + let block_num = meta.query_advice(tx_table.value, Rotation(16)); + let calldata_rlc = meta.query_advice(tx_table.value, Rotation::cur()); let input_expr = vec![L1BlockHashesCalldata.expr(), block_num, calldata_rlc]; let table_expr = block_table.table_exprs(meta); let condition = and::expr([ - is_tag_block_num, + is_tag_good, meta.query_advice(is_l1_block_hashes, Rotation::cur()), meta.query_fixed(q_enable, Rotation::cur()), ]);