@@ -83,6 +83,8 @@ type Monitor struct {
83
83
lock sync.RWMutex
84
84
85
85
callback chan any
86
+
87
+ srv atomic.Int32
86
88
}
87
89
88
90
// NewMonitor creates a new instance of monitor.
@@ -116,6 +118,7 @@ func New(flag *params.Config, cache, compress, listen bool, callback chan any) (
116
118
//start: mclock.Now(),
117
119
}
118
120
121
+ // TODO https://github.com/ucwong/golang-kv
119
122
if fs_ , err := backend .NewChainDB (flag ); err != nil {
120
123
log .Error ("file storage failed" , "err" , err )
121
124
return nil , err
@@ -137,6 +140,8 @@ func New(flag *params.Config, cache, compress, listen bool, callback chan any) (
137
140
138
141
m .mode = flag .Mode
139
142
143
+ m .srv .Store (SRV_MODEL )
144
+
140
145
/*torrents, _ := fs.initTorrents()
141
146
if m.mode != params.LAZY {
142
147
for k, v := range torrents {
@@ -222,7 +227,7 @@ func (m *Monitor) indexCheck() error {
222
227
// return err
223
228
//}
224
229
}
225
- log .Warn ("Fs storage is reloading ..." , "name" , m .ckp .Name , "number" , checkpoint .TfsCheckPoint , "version" , common .BytesToHash (version ), "checkpoint" , checkpoint .TfsRoot , "blocks" , len (m .fs .Blocks ()), "files" , len (m .fs .Files ()), "txs" , m .fs .Txs (), "lastNumber" , m .lastNumber .Load (), "last in db " , m .fs .LastListenBlockNumber ())
230
+ log .Warn ("Fs storage is reloading ..." , "name" , m .ckp .Name , "number" , checkpoint .TfsCheckPoint , "version" , common .BytesToHash (version ), "checkpoint" , checkpoint .TfsRoot , "blocks" , len (m .fs .Blocks ()), "files" , len (m .fs .Files ()), "txs" , m .fs .Txs (), "lastNumber" , m .lastNumber .Load (), "last" , m .fs .LastListenBlockNumber ())
226
231
} else {
227
232
log .Info ("Fs storage version check passed" , "name" , m .ckp .Name , "number" , checkpoint .TfsCheckPoint , "version" , common .BytesToHash (version ), "blocks" , len (m .fs .Blocks ()), "files" , len (m .fs .Files ()), "txs" , m .fs .Txs ())
228
233
}
@@ -646,7 +651,7 @@ func (m *Monitor) syncLatestBlock() {
646
651
elapsed := time .Duration (mclock .Now ()) - time .Duration (m .start )
647
652
log .Info ("Finish sync, listener will be paused" , "current" , m .currentNumber .Load (), "elapsed" , common .PrettyDuration (elapsed ), "progress" , progress , "end" , end , "last" , m .lastNumber .Load ())
648
653
//return
649
- timer .Reset (time .Millisecond * 1000 * 180 )
654
+ timer .Reset (time .Millisecond * 1000 * 60 )
650
655
end = false
651
656
continue
652
657
}
@@ -682,6 +687,10 @@ func (m *Monitor) currentBlock() (uint64, error) {
682
687
}
683
688
684
689
func (m * Monitor ) skip (i uint64 ) bool {
690
+ if m .srv .Load () != SRV_MODEL {
691
+ return false
692
+ }
693
+
685
694
if len (m .ckp .Skips ) == 0 || i > m .ckp .Skips [len (m .ckp .Skips )- 1 ].To || i < m .ckp .Skips [0 ].From {
686
695
return false
687
696
}
@@ -753,6 +762,8 @@ func (m *Monitor) syncLastBlock() uint64 {
753
762
m .lastNumber .Store (i - 1 )
754
763
return 0
755
764
}
765
+
766
+ // batch blocks operation according service category
756
767
for _ , rpcBlock := range blocks {
757
768
if err := m .solve (rpcBlock ); err != nil {
758
769
m .lastNumber .Store (i - 1 )
@@ -808,7 +819,48 @@ func (m *Monitor) syncLastBlock() uint64 {
808
819
return uint64 (maxNumber - minNumber )
809
820
}
810
821
822
+ // solve block from node
811
823
func (m * Monitor ) solve (block * types.Block ) error {
824
+ switch m .srv .Load () {
825
+ case SRV_MODEL :
826
+ return m .forModelService (block )
827
+ //case 1:
828
+ // return m.forExplorerService(block) // others service, explorer, exchange, zkp, nft, etc.
829
+ //case 2:
830
+ // return m.forExchangeService(block)
831
+ case SRV_PRINT :
832
+ return m .forPrintService (block )
833
+ default :
834
+ return errors .New ("no block operation service found" )
835
+ }
836
+ }
837
+
838
+ func (m * Monitor ) SwitchService (srv int ) error {
839
+ m .srv .Store (int32 (srv ))
840
+ return nil
841
+ }
842
+
843
+ // only for examples
844
+ func (m * Monitor ) forExplorerService (block * types.Block ) error {
845
+ return errors .New ("not support" )
846
+ }
847
+
848
+ func (m * Monitor ) forExchangeService (block * types.Block ) error {
849
+ return errors .New ("not support" )
850
+ }
851
+
852
+ func (m * Monitor ) forPrintService (block * types.Block ) error {
853
+ log .Info ("Block print" , "num" , block .Number , "hash" , block .Hash , "txs" , len (block .Txs ))
854
+ if len (block .Txs ) > 0 {
855
+ for _ , t := range block .Txs {
856
+ log .Info ("Tx print" , "hash" , t .Hash , "amount" , t .Amount , "gas" , t .GasLimit , "receipt" , t .Recipient , "payload" , t .Payload )
857
+ }
858
+ }
859
+ m .fs .Anchor (block .Number )
860
+ return nil
861
+ }
862
+
863
+ func (m * Monitor ) forModelService (block * types.Block ) error {
812
864
i := block .Number
813
865
if i % 65536 == 0 {
814
866
defer func () {
@@ -836,7 +888,6 @@ func (m *Monitor) solve(block *types.Block) error {
836
888
log .Debug ("Seal fs record" , "number" , i , "record" , record , "root" , m .fs .Root ().Hex (), "blocks" , len (m .fs .Blocks ()), "txs" , m .fs .Txs (), "files" , len (m .fs .Files ()), "ckp" , m .fs .CheckPoint ())
837
889
} else {
838
890
if m .fs .LastListenBlockNumber () < i {
839
- //m.fs.LastListenBlockNumber = i
840
891
m .fs .Anchor (i )
841
892
}
842
893
0 commit comments