Skip to content

Commit ddded14

Browse files
committed
fixes after rebase
1 parent 1ff824d commit ddded14

File tree

13 files changed

+128
-104
lines changed

13 files changed

+128
-104
lines changed

blockchain/blockchain.go

Lines changed: 78 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ var _ Reader = (*Blockchain)(nil)
7676
type Blockchain struct {
7777
network *utils.Network
7878
database db.KeyValueStore
79-
trieDB *triedb.Database
8079
stateDB *state.StateDB
8180
listener EventListener
8281
l1HeadFeed *feed.Feed[*core.L1Head]
@@ -87,7 +86,7 @@ type Blockchain struct {
8786
}
8887

8988
func New(database db.KeyValueStore, network *utils.Network, stateVersion bool) *Blockchain {
90-
trieDB, err := triedb.New(database, nil) // TODO: handle hashdb
89+
trieDB, err := triedb.New(database, nil) // TODO: handle hashdb and pathdb
9190
if err != nil {
9291
panic(err)
9392
}
@@ -108,7 +107,6 @@ func New(database db.KeyValueStore, network *utils.Network, stateVersion bool) *
108107

109108
return &Blockchain{
110109
database: database,
111-
trieDB: trieDB,
112110
stateDB: stateDB,
113111
network: network,
114112
listener: &SelectiveListener{},
@@ -374,6 +372,7 @@ func (b *Blockchain) deprecatedStore(
374372
}
375373

376374
err = storeCasmHashMetadata(
375+
txn,
377376
txn,
378377
block.Number,
379378
block.ProtocolVersion,
@@ -406,22 +405,27 @@ func (b *Blockchain) store(
406405
if err := verifyBlock(b.database, block); err != nil {
407406
return err
408407
}
408+
409409
state, err := b.StateFactory.NewState(stateUpdate.OldRoot, nil)
410410
if err != nil {
411411
return err
412412
}
413413
if err := state.Update(block.Number, stateUpdate, newClasses, false, true); err != nil {
414414
return err
415415
}
416+
416417
batch := b.database.NewBatch()
417418
if err := core.WriteBlockHeader(batch, block.Header); err != nil {
418419
return err
419420
}
420-
for i, tx := range block.Transactions {
421-
if err := core.WriteTxAndReceipt(batch, block.Number, uint64(i), tx,
422-
block.Receipts[i]); err != nil {
423-
return err
424-
}
421+
err = b.transactionLayout.WriteTransactionsAndReceipts(
422+
batch,
423+
block.Number,
424+
block.Transactions,
425+
block.Receipts,
426+
)
427+
if err != nil {
428+
return err
425429
}
426430
if err := core.WriteStateUpdateByBlockNum(batch, block.Number, stateUpdate); err != nil {
427431
return err
@@ -435,6 +439,18 @@ func (b *Blockchain) store(
435439
return err
436440
}
437441

442+
err = storeCasmHashMetadata(
443+
b.database,
444+
batch,
445+
block.Number,
446+
block.ProtocolVersion,
447+
stateUpdate,
448+
newClasses,
449+
)
450+
if err != nil {
451+
return err
452+
}
453+
438454
if err := core.WriteChainHeight(batch, block.Number); err != nil {
439455
return err
440456
}
@@ -449,7 +465,8 @@ func (b *Blockchain) store(
449465
// storeCasmHashMetadata stores CASM hash metadata for declared and migrated classes.
450466
// See [core.ClassCasmHashMetadata]
451467
func storeCasmHashMetadata(
452-
txn db.IndexedBatch,
468+
reader db.KeyValueReader,
469+
writer db.KeyValueWriter,
453470
blockNumber uint64,
454471
protocolVersion string,
455472
stateUpdate *core.StateUpdate,
@@ -463,16 +480,17 @@ func storeCasmHashMetadata(
463480
isV2Protocol := ver.GreaterThanEqual(core.Ver0_14_1)
464481

465482
if isV2Protocol {
466-
return storeCasmHashMetadataV2(txn, blockNumber, stateUpdate)
483+
return storeCasmHashMetadataV2(reader, writer, blockNumber, stateUpdate)
467484
}
468485

469-
return storeCasmHashMetadataV1(txn, blockNumber, stateUpdate, newClasses)
486+
return storeCasmHashMetadataV1(reader, writer, blockNumber, stateUpdate, newClasses)
470487
}
471488

472489
// storeCasmHashMetadataV2 stores metadata for classes declared with casm hash v2 or
473490
// migrated from v1. casm hash v2 is after protocol version >= 0.14.1.
474491
func storeCasmHashMetadataV2(
475-
txn db.IndexedBatch,
492+
reader db.KeyValueReader,
493+
writer db.KeyValueWriter,
476494
blockNumber uint64,
477495
stateUpdate *core.StateUpdate,
478496
) error {
@@ -482,7 +500,7 @@ func storeCasmHashMetadataV2(
482500
(*felt.CasmClassHash)(casmHash),
483501
)
484502
err := core.WriteClassCasmHashMetadata(
485-
txn,
503+
writer,
486504
(*felt.SierraClassHash)(&sierraClassHash),
487505
&metadata,
488506
)
@@ -492,7 +510,7 @@ func storeCasmHashMetadataV2(
492510
}
493511

494512
for sierraClassHash := range stateUpdate.StateDiff.MigratedClasses {
495-
metadata, err := core.GetClassCasmHashMetadata(txn, &sierraClassHash)
513+
metadata, err := core.GetClassCasmHashMetadata(reader, &sierraClassHash)
496514
if err != nil {
497515
return fmt.Errorf("cannot migrate class %s: metadata not found",
498516
sierraClassHash.String(),
@@ -507,7 +525,7 @@ func storeCasmHashMetadataV2(
507525
)
508526
}
509527

510-
err = core.WriteClassCasmHashMetadata(txn, &sierraClassHash, &metadata)
528+
err = core.WriteClassCasmHashMetadata(writer, &sierraClassHash, &metadata)
511529
if err != nil {
512530
return err
513531
}
@@ -518,7 +536,8 @@ func storeCasmHashMetadataV2(
518536
// storeDeclaredV1Classes stores metadata for classes declared with V1 hash (protocol < 0.14.1).
519537
// It computes the V2 hash from the class definition.
520538
func storeCasmHashMetadataV1(
521-
txn db.IndexedBatch,
539+
reader db.KeyValueReader,
540+
writer db.KeyValueWriter,
522541
blockNumber uint64,
523542
stateUpdate *core.StateUpdate,
524543
newClasses map[felt.Felt]core.ClassDefinition,
@@ -547,7 +566,7 @@ func storeCasmHashMetadataV1(
547566

548567
metadata := core.NewCasmHashMetadataDeclaredV1(blockNumber, casmHashV1, &casmHashV2)
549568
err := core.WriteClassCasmHashMetadata(
550-
txn,
569+
writer,
551570
(*felt.SierraClassHash)(&sierraClassHash),
552571
&metadata,
553572
)
@@ -754,8 +773,6 @@ func (b *Blockchain) GetReverseStateDiff() (core.StateDiff, error) {
754773

755774
// TODO(maksymmalick): remove this once we have a new state integrated
756775
func (b *Blockchain) deprecatedGetReverseStateDiff() (core.StateDiff, error) {
757-
var reverseStateDiff *core.StateDiff
758-
759776
txn := b.database.NewIndexedBatch()
760777
blockNum, err := core.GetChainHeight(txn)
761778
if err != nil {
@@ -835,7 +852,7 @@ func (b *Blockchain) deprecatedRevertHead(txn db.IndexedBatch) error {
835852
}
836853
}
837854

838-
if err := b.transactionLayout.DeleteTxsAndReceipts(txn, blockNumber); err != nil {
855+
if err := b.transactionLayout.DeleteTxsAndReceipts(b.database, txn, blockNumber); err != nil {
839856
return err
840857
}
841858

@@ -863,24 +880,30 @@ func (b *Blockchain) revertHead() error {
863880
if err != nil {
864881
return err
865882
}
883+
866884
stateUpdate, err := core.GetStateUpdateByBlockNum(b.database, blockNumber)
867885
if err != nil {
868886
return err
869887
}
888+
870889
state, err := state.New(stateUpdate.NewRoot, b.stateDB)
871890
if err != nil {
872891
return err
873892
}
893+
874894
// revert state
875895
if err = state.Revert(blockNumber, stateUpdate); err != nil {
876896
return err
877897
}
898+
878899
header, err := core.GetBlockHeaderByNumber(b.database, blockNumber)
879900
if err != nil {
880901
return err
881902
}
903+
882904
genesisBlock := blockNumber == 0
883905

906+
// remove block header
884907
batch := b.database.NewBatch()
885908
for _, key := range [][]byte{
886909
db.BlockHeaderByNumberKey(header.Number),
@@ -891,26 +914,30 @@ func (b *Blockchain) revertHead() error {
891914
return err
892915
}
893916
}
894-
if err = core.DeleteTxsAndReceipts(
895-
b.database,
896-
batch,
897-
blockNumber,
898-
header.TransactionCount,
899-
); err != nil {
917+
918+
if err := b.transactionLayout.DeleteTxsAndReceipts(b.database, batch, blockNumber); err != nil {
900919
return err
901920
}
902-
if err = core.DeleteStateUpdateByBlockNum(batch, blockNumber); err != nil {
921+
922+
// remove state update
923+
if err := core.DeleteStateUpdateByBlockNum(batch, blockNumber); err != nil {
903924
return err
904925
}
926+
927+
// Revert chain height.
905928
if genesisBlock {
906-
if err := core.DeleteChainHeight(batch); err != nil {
907-
return err
908-
}
909-
} else {
910-
if err := core.WriteChainHeight(batch, blockNumber-1); err != nil {
911-
return err
912-
}
929+
return core.DeleteChainHeight(batch)
930+
}
931+
932+
if err = core.WriteChainHeight(batch, blockNumber-1); err != nil {
933+
return err
934+
}
935+
936+
// Remove the block events bloom from the cache
937+
if err := b.runningFilter.OnReorg(); err != nil {
938+
return err
913939
}
940+
914941
return batch.Write()
915942
}
916943

@@ -979,10 +1006,19 @@ func (b *Blockchain) Finalise(
9791006
if err := b.storeBlockData(txn, block, stateUpdate, commitments); err != nil {
9801007
return err
9811008
}
982-
err = storeCasmClassHashesV2ForBlock(txn, block.ProtocolVersion, newClasses, stateUpdate)
1009+
1010+
err = storeCasmHashMetadata(
1011+
txn,
1012+
txn,
1013+
block.Number,
1014+
block.ProtocolVersion,
1015+
stateUpdate,
1016+
newClasses,
1017+
)
9831018
if err != nil {
9841019
return err
9851020
}
1021+
9861022
return core.WriteChainHeight(txn, block.Number)
9871023
})
9881024
if err != nil {
@@ -1007,7 +1043,8 @@ func (b *Blockchain) Finalise(
10071043
}
10081044

10091045
err = storeCasmHashMetadata(
1010-
txn,
1046+
b.database,
1047+
batch,
10111048
block.Number,
10121049
block.ProtocolVersion,
10131050
stateUpdate,
@@ -1115,13 +1152,13 @@ func (b *Blockchain) signBlock(
11151152

11161153
// storeBlockData persists all block-related data to the database
11171154
func (b *Blockchain) storeBlockData(
1118-
w db.KeyValueWriter,
1155+
txn db.KeyValueWriter,
11191156
block *core.Block,
11201157
stateUpdate *core.StateUpdate,
11211158
commitments *core.BlockCommitments,
11221159
) error {
11231160
// Store block header
1124-
if err := core.WriteBlockHeader(w, block.Header); err != nil {
1161+
if err := core.WriteBlockHeader(txn, block.Header); err != nil {
11251162
return err
11261163
}
11271164

@@ -1136,17 +1173,17 @@ func (b *Blockchain) storeBlockData(
11361173
}
11371174

11381175
// Store state update
1139-
if err := core.WriteStateUpdateByBlockNum(w, block.Number, stateUpdate); err != nil {
1176+
if err := core.WriteStateUpdateByBlockNum(txn, block.Number, stateUpdate); err != nil {
11401177
return err
11411178
}
11421179

11431180
// Store block commitments
1144-
if err := core.WriteBlockCommitment(w, block.Number, commitments); err != nil {
1181+
if err := core.WriteBlockCommitment(txn, block.Number, commitments); err != nil {
11451182
return err
11461183
}
11471184

11481185
// Store L1 handler message hashes
1149-
if err := core.WriteL1HandlerMsgHashes(w, block.Transactions); err != nil {
1186+
if err := core.WriteL1HandlerMsgHashes(txn, block.Transactions); err != nil {
11501187
return err
11511188
}
11521189

@@ -1188,20 +1225,3 @@ func (b *Blockchain) StoreGenesis(
11881225
func (b *Blockchain) WriteRunningEventFilter() error {
11891226
return b.runningFilter.Write()
11901227
}
1191-
1192-
func (b *Blockchain) Stop() error {
1193-
if b.trieDB.Scheme() == triedb.PathScheme && b.StateFactory.UseNewState {
1194-
head, err := b.HeadsHeader()
1195-
if err != nil {
1196-
return err
1197-
}
1198-
1199-
stateUpdate, err := b.StateUpdateByNumber(head.Number)
1200-
if err != nil {
1201-
return err
1202-
}
1203-
1204-
return b.trieDB.Journal(stateUpdate.NewRoot)
1205-
}
1206-
return nil
1207-
}

cmd/juno/dbcmd_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ func prepareDB(t *testing.T, network *utils.Network, syncToBlock uint64) string
9797

9898
require.NoError(t, chain.Store(block, &emptyCommitments, stateUpdate, nil))
9999
}
100-
require.NoError(t, chain.Stop())
101100
require.NoError(t, testDB.Close())
102101

103102
return dbPath

core/state/object.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ func (s *stateObject) getStorage(key *felt.Felt) (felt.Felt, error) {
5151

5252
path := tr.FeltToPath(key)
5353
reader, err := s.state.db.triedb.NodeReader(
54-
trieutils.NewContractStorageTrieID(s.state.initRoot, s.addr),
54+
trieutils.NewContractStorageTrieID(felt.StateRootHash(s.state.initRoot), felt.Address(s.addr)),
5555
)
5656
if err != nil {
5757
return felt.Zero, err
5858
}
59-
v, err := reader.Node(&s.addr, &path, nil, true)
59+
// todo: remove felt cast
60+
v, err := reader.Node((*felt.Address)(&s.addr), &path, nil, true)
6061
if err != nil {
6162
return felt.Zero, err
6263
}
@@ -73,7 +74,8 @@ func (s *stateObject) getStorageTrie() (*trie2.Trie, error) {
7374
}
7475

7576
storageTrie, err := s.state.db.ContractStorageTrie(
76-
&s.state.initRoot,
77+
// todo: remove felt cast
78+
(*felt.Felt)(&s.state.initRoot),
7779
&s.addr,
7880
)
7981
if err != nil {

0 commit comments

Comments
 (0)