@@ -163,7 +163,7 @@ func prepareAccountLeafNode(addr common.Address, addrh []byte, leafS, leafC, nei
163
163
driftedRlpBytes := []byte {0 }
164
164
keyDrifted := make ([]byte , valueLen )
165
165
if neighbourNode != nil {
166
- keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighbourNode , false , false )
166
+ keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighbourNode , false , false , false )
167
167
}
168
168
169
169
wrongValue := make ([]byte , valueLen )
@@ -349,12 +349,12 @@ func prepareLeafAndPlaceholderNode(addr common.Address, addrh []byte, proof1, pr
349
349
func prepareTxLeafNode (idx uint , leafS , leafC , key , neighborNode []byte , isSPlaceholder , isSModExtension , isCModExtension bool ) Node {
350
350
var rows [][]byte
351
351
352
- keyS , valueS , listRlpBytes1 , valueRlpBytes1 := prepareStorageLeafInfo (leafS , false , isSPlaceholder )
352
+ keyS , valueS , listRlpBytes1 , valueRlpBytes1 := prepareStorageLeafInfo (leafS , false , isSPlaceholder , true )
353
353
354
354
rows = append (rows , keyS )
355
355
rows = append (rows , valueS )
356
356
357
- keyC , valueC , listRlpBytes2 , valueRlpBytes2 := prepareStorageLeafInfo (leafC , false , false )
357
+ keyC , valueC , listRlpBytes2 , valueRlpBytes2 := prepareStorageLeafInfo (leafC , false , false , true )
358
358
359
359
rows = append (rows , keyC )
360
360
rows = append (rows , valueC )
@@ -370,15 +370,10 @@ func prepareTxLeafNode(idx uint, leafS, leafC, key, neighborNode []byte, isSPlac
370
370
driftedRlpBytes := []byte {0 }
371
371
keyDrifted := make ([]byte , valueLen )
372
372
if neighborNode != nil {
373
- keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighborNode , false , false )
373
+ keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighborNode , false , false , true )
374
374
}
375
375
rows = append (rows , keyDrifted )
376
376
377
- // var nonExistingStorageRow []byte
378
- // var wrongRlpBytes []byte
379
- // nonExistingStorageRow = prepareEmptyNonExistingStorageRow()
380
- // rows = append(rows, nonExistingStorageRow)
381
-
382
377
// These rows are only used in the case of a modified extension node.
383
378
// These rows are actually set in equipLeafWithModExtensionNode function.
384
379
for i := 0 ; i < modifiedExtensionNodeRowLen ; i ++ {
@@ -489,7 +484,7 @@ func prepareStorageLeafPlaceholderNode(storage_key common.Hash, key []byte, keyI
489
484
return prepareStorageLeafNode (leaf , leaf , nil , storage_key , key , false , true , true , false , false )
490
485
}
491
486
492
- func prepareStorageLeafInfo (row []byte , valueIsZero , isPlaceholder bool ) ([]byte , []byte , []byte , []byte ) {
487
+ func prepareStorageLeafInfo (row []byte , valueIsZero , isPlaceholder , isTxLeaf bool ) ([]byte , []byte , []byte , []byte ) {
493
488
var keyRlp []byte
494
489
var valueRlp []byte
495
490
var keyRlpLen byte
@@ -520,51 +515,62 @@ func prepareStorageLeafInfo(row []byte, valueIsZero, isPlaceholder bool) ([]byte
520
515
521
516
keyLen := byte (0 )
522
517
offset := byte (1 )
523
- if len ( row ) < 32 { // the node doesn't get hashed in this case
518
+ if isTxLeaf {
524
519
keyRlpLen = 1
525
520
keyRlp = make ([]uint8 , keyRlpLen )
526
521
copy (keyRlp , row [:keyRlpLen ])
527
-
528
- // 192 + 32 = 224
529
- if row [1 ] < 128 {
530
- // last level: [194,32,1]
531
- // or
532
- // only one nibble in a leaf (as soon as the leaf has two nibbles, row[1] will have 128 + length)
533
- // [194,48,1] - this one contains nibble 0 = 48 - 48
534
- keyLen = byte (1 )
535
- copy (key , row [keyRlpLen :keyLen + 1 ])
536
- offset = byte (1 )
537
- } else {
538
- // [196,130,32,0,1]
539
- keyLen = row [1 ] - 128
540
- copy (key , row [keyRlpLen :keyLen + 2 ])
541
- offset = byte (2 )
542
- }
543
- } else if row [0 ] == 248 {
544
- // [248,67,160,59,138,106,70,105,186,37,13,38,205,122,69,158,202,157,33,95,131,7,227,58,235,229,3,121,188,90,54,23,236,52,68,161,160,...
545
- keyRlpLen = 2
546
- keyLen = row [2 ] - 128
547
- keyRlp = row [:keyRlpLen ]
548
- copy (key , row [keyRlpLen :keyLen + 3 ])
549
- offset = byte (3 )
522
+ // [248 200 129 128 131 4 147 224 98 148 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 5 9 184 100 0 0 0 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 ...]
523
+ key [0 ] = row [0 ]
524
+ key [1 ] = row [1 ]
525
+ keyLen = byte (2 )
526
+ offset = byte (0 )
550
527
} else {
551
- keyRlpLen = 1
552
- keyRlp = make ([]uint8 , keyRlpLen )
553
- copy (keyRlp , row [:keyRlpLen ])
554
- if row [1 ] < 128 {
555
- // last level:
556
- // [227,32,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
557
- // one nibble:
558
- // [227,48,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
559
- key [0 ] = row [0 ]
560
- key [1 ] = row [1 ]
561
- keyLen = byte (2 )
562
- offset = byte (0 )
528
+ if len (row ) < 32 { // the node doesn't get hashed in this case
529
+ keyRlpLen = 1
530
+ keyRlp = make ([]uint8 , keyRlpLen )
531
+ copy (keyRlp , row [:keyRlpLen ])
532
+
533
+ // 192 + 32 = 224
534
+ if row [1 ] < 128 {
535
+ // last level: [194,32,1]
536
+ // or
537
+ // only one nibble in a leaf (as soon as the leaf has two nibbles, row[1] will have 128 + length)
538
+ // [194,48,1] - this one contains nibble 0 = 48 - 48
539
+ keyLen = byte (1 )
540
+ copy (key , row [keyRlpLen :keyLen + 1 ])
541
+ offset = byte (1 )
542
+ } else {
543
+ // [196,130,32,0,1]
544
+ keyLen = row [1 ] - 128
545
+ copy (key , row [keyRlpLen :keyLen + 2 ])
546
+ offset = byte (2 )
547
+ }
548
+ } else if row [0 ] == 248 {
549
+ // [248,67,160,59,138,106,70,105,186,37,13,38,205,122,69,158,202,157,33,95,131,7,227,58,235,229,3,121,188,90,54,23,236,52,68,161,160,...
550
+ keyRlpLen = 2
551
+ keyLen = row [2 ] - 128
552
+ keyRlp = row [:keyRlpLen ]
553
+ copy (key , row [keyRlpLen :keyLen + 3 ])
554
+ offset = byte (3 )
563
555
} else {
564
- // [226,160,59,138,106,70,105,186,37,13,38[227,32,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
565
- keyLen = row [1 ] - 128
566
- copy (key , row [keyRlpLen :keyLen + 2 ])
567
- offset = byte (2 )
556
+ keyRlpLen = 1
557
+ keyRlp = make ([]uint8 , keyRlpLen )
558
+ copy (keyRlp , row [:keyRlpLen ])
559
+ if row [1 ] < 128 {
560
+ // last level:
561
+ // [227,32,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
562
+ // one nibble:
563
+ // [227,48,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
564
+ key [0 ] = row [0 ]
565
+ key [1 ] = row [1 ]
566
+ keyLen = byte (2 )
567
+ offset = byte (0 )
568
+ } else {
569
+ // [226,160,59,138,106,70,105,186,37,13,38[227,32,161,160,187,239,170,18,88,1,56,188,38,60,149,117,120,38,223,78,36,235,129,201,170,170,170,170,170,170,170,170,170,170,170,170]
570
+ keyLen = row [1 ] - 128
571
+ copy (key , row [keyRlpLen :keyLen + 2 ])
572
+ offset = byte (2 )
573
+ }
568
574
}
569
575
}
570
576
setKeyValue (keyLen , offset )
@@ -575,12 +581,12 @@ func prepareStorageLeafInfo(row []byte, valueIsZero, isPlaceholder bool) ([]byte
575
581
func prepareStorageLeafNode (leafS , leafC , neighbourNode []byte , storage_key common.Hash , key []byte , nonExistingStorageProof , isSPlaceholder , isCPlaceholder , isSModExtension , isCModExtension bool ) Node {
576
582
var rows [][]byte
577
583
578
- keyS , valueS , listRlpBytes1 , valueRlpBytes1 := prepareStorageLeafInfo (leafS , false , isSPlaceholder )
584
+ keyS , valueS , listRlpBytes1 , valueRlpBytes1 := prepareStorageLeafInfo (leafS , false , isSPlaceholder , false )
579
585
580
586
rows = append (rows , keyS )
581
587
rows = append (rows , valueS )
582
588
583
- keyC , valueC , listRlpBytes2 , valueRlpBytes2 := prepareStorageLeafInfo (leafC , false , isCPlaceholder )
589
+ keyC , valueC , listRlpBytes2 , valueRlpBytes2 := prepareStorageLeafInfo (leafC , false , isCPlaceholder , false )
584
590
585
591
fmt .Println ("-" , key )
586
592
fmt .Println ("-" , keyS , leafS )
@@ -600,7 +606,7 @@ func prepareStorageLeafNode(leafS, leafC, neighbourNode []byte, storage_key comm
600
606
driftedRlpBytes := []byte {0 }
601
607
keyDrifted := make ([]byte , valueLen )
602
608
if neighbourNode != nil {
603
- keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighbourNode , false , false )
609
+ keyDrifted , _ , driftedRlpBytes , _ = prepareStorageLeafInfo (neighbourNode , false , false , false )
604
610
}
605
611
rows = append (rows , keyDrifted )
606
612
0 commit comments