@@ -2,6 +2,7 @@ package torrentfs
2
2
3
3
import (
4
4
"encoding/json"
5
+ "github.com/CortexFoundation/CortexTheseus/params"
5
6
"errors"
6
7
//"fmt"
7
8
"os"
@@ -54,8 +55,8 @@ func (mc *MutexCounter) IsZero() bool {
54
55
55
56
type FileStorage struct {
56
57
filesContractAddr map [common.Address ]* FileInfo
57
- files []* FileInfo
58
- blocks []* Block
58
+ files []* FileInfo //only storage init files from local storage
59
+ blocks []* Block //only storage init ckp blocks from local storage
59
60
db * bolt.DB
60
61
version string
61
62
@@ -112,13 +113,21 @@ func NewFileStorage(config *Config) (*FileStorage, error) {
112
113
113
114
fs .version = "1"
114
115
115
- fs .initBlockNumber ()
116
- fs .initCheckPoint ()
117
- fs .initBlocks ()
118
- //fs.readLastFileIndex()
119
- fs .initFiles ()
120
- fs .initMerkleTree ()
121
- //tmpCache, _ := lru.New(120)
116
+ if err := fs .initBlockNumber (); err != nil {
117
+ return nil , err
118
+ }
119
+ if err := fs .initCheckPoint (); err != nil {
120
+ return nil , err
121
+ }
122
+ if err := fs .initBlocks (); err != nil {
123
+ return nil , err
124
+ }
125
+ if err := fs .initFiles (); err != nil {
126
+ return nil , err
127
+ }
128
+ if err := fs .initMerkleTree (); err != nil {
129
+ return nil , err
130
+ }
122
131
123
132
return fs , nil
124
133
}
@@ -167,14 +176,16 @@ func (fs *FileStorage) NewFileInfo(Meta *FileMeta) *FileInfo {
167
176
//}
168
177
169
178
func (fs * FileStorage ) initMerkleTree () error {
170
- fs .leaves = append (fs .leaves , BlockContent {x : "0x21d6ce908e2d1464bd74bbdbf7249845493cc1ba10460758169b978e187762c1" })
179
+ fs .leaves = append (fs .leaves , BlockContent {x : params . MainnetGenesisHash . String ()}) // "0x21d6ce908e2d1464bd74bbdbf7249845493cc1ba10460758169b978e187762c1"})
171
180
tr , err := NewTree (fs .leaves )
172
181
if err != nil {
173
182
return err
174
183
}
175
184
fs .tree = tr
176
185
for _ , block := range fs .blocks {
177
- fs .addLeaf (block )
186
+ if err := fs .addLeaf (block ); err != nil {
187
+ panic ("Storage merkletree construct failed" )
188
+ }
178
189
}
179
190
180
191
log .Info ("Storage merkletree initialization" , "root" , common .ToHex (fs .tree .MerkleRoot ()))
@@ -184,11 +195,17 @@ func (fs *FileStorage) initMerkleTree() error {
184
195
185
196
func (fs * FileStorage ) addLeaf (block * Block ) error {
186
197
fs .leaves = append (fs .leaves , BlockContent {x : block .Hash .String ()})
187
- fs .tree .RebuildTreeWith (fs .leaves )
188
- fs .writeRoot (block .Number , fs .tree .MerkleRoot ())
189
- log .Debug ("Add a new leaf" , "number" , block .Number , "root" , common .ToHex (fs .tree .MerkleRoot ())) //, "version", common.ToHex(version)) //MerkleRoot())
198
+ if err := fs .tree .RebuildTreeWith (fs .leaves ); err == nil {
199
+ if err := fs .writeRoot (block .Number , fs .tree .MerkleRoot ()); err != nil {
200
+ return err
201
+ }
190
202
191
- return nil
203
+ log .Debug ("Add a new leaf" , "number" , block .Number , "root" , common .ToHex (fs .tree .MerkleRoot ())) //, "version", common.ToHex(version)) //MerkleRoot())
204
+
205
+ return nil
206
+ } else {
207
+ return err
208
+ }
192
209
}
193
210
194
211
func (fs * FileStorage ) Root () common.Hash {
@@ -466,9 +483,9 @@ func (fs *FileStorage) Version() string {
466
483
}
467
484
468
485
func (fs * FileStorage ) initBlocks () error {
469
- return fs .db .View (func (tx * bolt.Tx ) error {
470
- if buk := tx .Bucket ([]byte ("blocks_" + fs .version )); buk = = nil {
471
- return ErrReadDataFromBoltDB
486
+ return fs .db .Update (func (tx * bolt.Tx ) error {
487
+ if buk , err := tx .CreateBucketIfNotExists ([]byte ("blocks_" + fs .version )); err ! = nil {
488
+ return err
472
489
} else {
473
490
c := buk .Cursor ()
474
491
@@ -491,9 +508,9 @@ func (fs *FileStorage) initBlocks() error {
491
508
}
492
509
493
510
func (fs * FileStorage ) initFiles () error {
494
- return fs .db .View (func (tx * bolt.Tx ) error {
495
- if buk := tx .Bucket ([]byte ("files_" + fs .version )); buk == nil {
496
- return ErrReadDataFromBoltDB
511
+ return fs .db .Update (func (tx * bolt.Tx ) error {
512
+ if buk , err := tx .CreateBucketIfNotExists ([]byte ("files_" + fs .version )); buk == nil || err ! = nil {
513
+ return err
497
514
} else {
498
515
c := buk .Cursor ()
499
516
@@ -552,16 +569,17 @@ func (fs *FileStorage) initFiles() error {
552
569
})
553
570
}*/
554
571
func (fs * FileStorage ) initCheckPoint () error {
555
- return fs .db .View (func (tx * bolt.Tx ) error {
556
- buk := tx .Bucket ([]byte ("checkpoint_" + fs .version ))
557
- if buk = = nil {
558
- return ErrReadDataFromBoltDB
572
+ return fs .db .Update (func (tx * bolt.Tx ) error {
573
+ buk , err := tx .CreateBucketIfNotExists ([]byte ("checkpoint_" + fs .version ))
574
+ if err ! = nil {
575
+ return err
559
576
}
560
577
561
578
v := buk .Get ([]byte ("key" ))
562
579
563
580
if v == nil {
564
- return ErrReadDataFromBoltDB
581
+ //return ErrReadDataFromBoltDB
582
+ return nil
565
583
}
566
584
567
585
number , err := strconv .ParseUint (string (v ), 16 , 64 )
@@ -576,16 +594,18 @@ func (fs *FileStorage) initCheckPoint() error {
576
594
}
577
595
578
596
func (fs * FileStorage ) initBlockNumber () error {
579
- return fs .db .View (func (tx * bolt.Tx ) error {
580
- buk := tx .Bucket ([]byte ("currentBlockNumber_" + fs .version ))
581
- if buk == nil {
582
- return ErrReadDataFromBoltDB
597
+ return fs .db .Update (func (tx * bolt.Tx ) error {
598
+ //buk := tx.Bucket([]byte("currentBlockNumber_" + fs.version))
599
+ buk , err := tx .CreateBucketIfNotExists ([]byte ("currentBlockNumber_" + fs .version ))
600
+ if err != nil {
601
+ return err
583
602
}
584
603
585
604
v := buk .Get ([]byte ("key" ))
586
605
587
606
if v == nil {
588
- return ErrReadDataFromBoltDB
607
+ //return ErrReadDataFromBoltDB
608
+ return nil
589
609
}
590
610
591
611
number , err := strconv .ParseUint (string (v ), 16 , 64 )
@@ -636,9 +656,9 @@ func (fs *FileStorage) writeRoot(number uint64, root []byte) error {
636
656
637
657
func (fs * FileStorage ) GetRootByNumber (number uint64 ) (root []byte ) {
638
658
cb := func (tx * bolt.Tx ) error {
639
- buk := tx .Bucket ([]byte ("version_" + fs .version ))
640
- if buk = = nil {
641
- return ErrReadDataFromBoltDB
659
+ buk , err := tx .CreateBucketIfNotExists ([]byte ("version_" + fs .version ))
660
+ if err ! = nil {
661
+ return err
642
662
}
643
663
644
664
v := buk .Get ([]byte (strconv .FormatUint (number , 16 )))
0 commit comments