@@ -1379,6 +1379,11 @@ impl<F: Field> PiCircuitConfig<F> {
1379
1379
Coinbase , Timestamp , Number , Difficulty , GasLimit , BaseFee , ChainId , NumTxs ,
1380
1380
CumNumTxs , NumAllTxs ,
1381
1381
] ;
1382
+
1383
+ // index_cells of same block are equal to block_number.
1384
+ let mut index_cells = vec ! [ ] ;
1385
+ let mut block_number_cell = None ;
1386
+
1382
1387
let mut cum_num_txs_field = F :: from ( cum_num_txs as u64 ) ;
1383
1388
cum_num_txs += num_txs;
1384
1389
for ( row, tag) in block_ctx
@@ -1392,9 +1397,6 @@ impl<F: Field> PiCircuitConfig<F> {
1392
1397
offset,
1393
1398
|| row[ 0 ] ,
1394
1399
) ?;
1395
- // index_cells of same block are equal to block_number.
1396
- let mut index_cells = vec ! [ ] ;
1397
- let mut block_number_cell = None ;
1398
1400
for ( column, value) in block_table_columns. iter ( ) . zip_eq ( & row[ 1 ..] ) {
1399
1401
let cell = region. assign_advice (
1400
1402
|| format ! ( "block table row {offset}" ) ,
@@ -1412,15 +1414,6 @@ impl<F: Field> PiCircuitConfig<F> {
1412
1414
block_value_cells. push ( cell) ;
1413
1415
}
1414
1416
}
1415
- for i in 0 ..( index_cells. len ( ) - 1 ) {
1416
- region. constrain_equal ( index_cells[ i] . cell ( ) , index_cells[ i + 1 ] . cell ( ) ) ?;
1417
- }
1418
- if * tag == Number {
1419
- region. constrain_equal (
1420
- block_number_cell. unwrap ( ) . cell ( ) ,
1421
- index_cells[ 0 ] . cell ( ) ,
1422
- ) ?;
1423
- }
1424
1417
1425
1418
region. assign_fixed (
1426
1419
|| "is_block_num_txs" ,
@@ -1460,6 +1453,12 @@ impl<F: Field> PiCircuitConfig<F> {
1460
1453
}
1461
1454
offset += 1 ;
1462
1455
}
1456
+ // block_num == index[0]
1457
+ region. constrain_equal ( block_number_cell. unwrap ( ) . cell ( ) , index_cells[ 0 ] . cell ( ) ) ?;
1458
+ // index[i] == index[i+1]
1459
+ for i in 0 ..( index_cells. len ( ) - 1 ) {
1460
+ region. constrain_equal ( index_cells[ i] . cell ( ) , index_cells[ i + 1 ] . cell ( ) ) ?;
1461
+ }
1463
1462
}
1464
1463
1465
1464
Ok ( block_value_cells)
0 commit comments