@@ -1275,30 +1275,18 @@ impl<F: Field> WrongLeafGadget<F> {
1275
1275
for_placeholder_s : bool ,
1276
1276
is_parent_extension : bool ,
1277
1277
key_data : KeyDataWitness < F > ,
1278
- key_data_prev : KeyDataWitness < F > ,
1279
1278
r : F ,
1280
1279
) -> Result < ( F , F ) , Error > {
1281
1280
if is_non_existing {
1282
1281
let wrong_witness =
1283
1282
self . wrong_rlp_key
1284
1283
. assign ( region, offset, list_bytes, expected_item) ?;
1285
- let key_rlc_wrong: F ;
1286
- if !is_parent_extension {
1287
- ( key_rlc_wrong, _) = wrong_witness. key . key (
1288
- wrong_witness. key_item . clone ( ) ,
1289
- key_data. rlc ,
1290
- key_data. mult ,
1291
- r,
1292
- ) ;
1293
- } else {
1294
- ( key_rlc_wrong, _) = wrong_witness. key . key (
1295
- wrong_witness. key_item . clone ( ) ,
1296
- key_data_prev. rlc ,
1297
- key_data_prev. mult ,
1298
- r,
1299
- ) ;
1300
- }
1301
-
1284
+ let ( key_rlc_wrong, _) = wrong_witness. key . key (
1285
+ wrong_witness. key_item . clone ( ) ,
1286
+ key_data. rlc ,
1287
+ key_data. mult ,
1288
+ r,
1289
+ ) ;
1302
1290
let is_key_equal_witness = self . is_key_equal . assign (
1303
1291
region,
1304
1292
offset,
@@ -1318,7 +1306,6 @@ impl<F: Field> WrongLeafGadget<F> {
1318
1306
/// Handles wrong extension nodes
1319
1307
#[ derive( Clone , Debug , Default ) ]
1320
1308
pub struct WrongExtNodeGadget < F > {
1321
- wrong_rlp_key : ListKeyGadget < F > ,
1322
1309
is_key_equal : IsEqualGadget < F > ,
1323
1310
}
1324
1311
@@ -1346,7 +1333,7 @@ impl<F: Field> WrongExtNodeGadget<F> {
1346
1333
// tell us about the parity of the second part (depends on the third part as well).
1347
1334
1348
1335
let data0 = [ wrong_ext_middle. clone( ) , wrong_ext_middle_nibbles. clone( ) ] ;
1349
- let mut rlc = key_data_prev. rlc. expr( )
1336
+ let after_middle_rlc = key_data_prev. rlc. expr( )
1350
1337
+ ext_key_rlc_expr(
1351
1338
cb,
1352
1339
wrong_ext_middle. clone( ) ,
@@ -1373,7 +1360,7 @@ impl<F: Field> WrongExtNodeGadget<F> {
1373
1360
let third_part_is_odd = after_two_parts_is_odd. clone( ) ;
1374
1361
1375
1362
let data1 = [ wrong_ext_after. clone( ) , wrong_ext_after_nibbles. clone( ) ] ;
1376
- rlc = rlc
1363
+ let rlc = after_middle_rlc . clone ( )
1377
1364
+ ext_key_rlc_expr(
1378
1365
cb,
1379
1366
wrong_ext_after. clone( ) ,
@@ -1390,60 +1377,50 @@ impl<F: Field> WrongExtNodeGadget<F> {
1390
1377
) ;
1391
1378
1392
1379
require!( rlc => expected_key) ;
1380
+
1381
+ // Make sure the "after_middle" RLC of the wrong extension node and of
1382
+ // the "after_middle" enquired key/address are different.
1383
+ config. is_key_equal = IsEqualGadget :: construct(
1384
+ & mut cb. base,
1385
+ key_data. rlc. expr( ) ,
1386
+ after_middle_rlc. expr( ) ,
1387
+ ) ;
1388
+ require!( config. is_key_equal. expr( ) => false ) ;
1393
1389
} }
1394
1390
config
1395
1391
} )
1396
1392
}
1397
1393
1398
- #[ allow( clippy:: too_many_arguments) ]
1399
1394
pub ( crate ) fn assign (
1400
1395
& self ,
1401
1396
region : & mut CachedRegion < ' _ , ' _ , F > ,
1402
1397
offset : usize ,
1403
- is_non_existing : bool ,
1404
- key_rlc : & [ F ] ,
1405
- list_bytes : & [ u8 ] ,
1406
- expected_item : & RLPItemWitness ,
1407
- for_placeholder_s : bool ,
1408
- is_parent_extension : bool ,
1398
+ wrong_ext_middle : RLPItemWitness ,
1399
+ wrong_ext_middle_nibbles : RLPItemWitness ,
1409
1400
key_data : KeyDataWitness < F > ,
1410
1401
key_data_prev : KeyDataWitness < F > ,
1411
- r : F ,
1412
- ) -> Result < ( F , F ) , Error > {
1413
- if is_non_existing {
1414
- let wrong_witness =
1415
- self . wrong_rlp_key
1416
- . assign ( region, offset, list_bytes, expected_item) ?;
1417
- let key_rlc_wrong: F ;
1418
- if !is_parent_extension {
1419
- ( key_rlc_wrong, _) = wrong_witness. key . key (
1420
- wrong_witness. key_item . clone ( ) ,
1421
- key_data. rlc ,
1422
- key_data. mult ,
1423
- r,
1424
- ) ;
1425
- } else {
1426
- ( key_rlc_wrong, _) = wrong_witness. key . key (
1427
- wrong_witness. key_item . clone ( ) ,
1428
- key_data_prev. rlc ,
1429
- key_data_prev. mult ,
1430
- r,
1431
- ) ;
1432
- }
1433
-
1434
- let is_key_equal_witness = self . is_key_equal . assign (
1435
- region,
1436
- offset,
1437
- key_rlc[ for_placeholder_s. idx ( ) ] ,
1438
- key_rlc_wrong,
1439
- ) ?;
1402
+ ) {
1403
+ let items = [ wrong_ext_middle. clone ( ) , wrong_ext_middle_nibbles] ;
1404
+ let ( after_middle_rlc, _) = ext_key_rlc_calc_value (
1405
+ wrong_ext_middle,
1406
+ key_data_prev. mult ,
1407
+ key_data. is_odd ,
1408
+ key_data_prev. is_odd ,
1409
+ items
1410
+ . iter ( )
1411
+ . map ( |item| item. bytes . clone ( ) )
1412
+ . collect :: < Vec < _ > > ( )
1413
+ . try_into ( )
1414
+ . unwrap ( ) ,
1415
+ region. key_r ,
1416
+ ) ;
1440
1417
1441
- // When key is not equal, we have a non existing account
1442
- Ok ( ( key_rlc_wrong , is_key_equal_witness . neg ( ) ) )
1443
- } else {
1444
- // existing account
1445
- Ok ( ( key_rlc [ for_placeholder_s . idx ( ) ] , false . scalar ( ) ) )
1446
- }
1418
+ let _ = self . is_key_equal . assign (
1419
+ region ,
1420
+ offset ,
1421
+ key_data . rlc ,
1422
+ after_middle_rlc ,
1423
+ ) ;
1447
1424
}
1448
1425
}
1449
1426
0 commit comments