( config Config, db ethdb.Database, storageMgr *es.StorageManager, api L1API, dr DataReader, chainHeadCh chan eth.L1BlockRef, prover MiningProver, lg log.Logger, )
| 134 | } |
| 135 | |
| 136 | func newWorker( |
| 137 | config Config, |
| 138 | db ethdb.Database, |
| 139 | storageMgr *es.StorageManager, |
| 140 | api L1API, |
| 141 | dr DataReader, |
| 142 | chainHeadCh chan eth.L1BlockRef, |
| 143 | prover MiningProver, |
| 144 | lg log.Logger, |
| 145 | ) *worker { |
| 146 | var submissionStates map[uint64]SubmissionState |
| 147 | if status, _ := db.Get(SubmissionStatusKey); status != nil { |
| 148 | if err := json.Unmarshal(status, &submissionStates); err != nil { |
| 149 | lg.Error("Failed to decode submission states", "err", err) |
| 150 | } |
| 151 | } |
| 152 | worker := &worker{ |
| 153 | config: config, |
| 154 | l1API: api, |
| 155 | dataReader: dr, |
| 156 | prover: prover, |
| 157 | chainHeadCh: chainHeadCh, |
| 158 | shardTaskMap: make(map[uint64]task), |
| 159 | exitCh: make(chan struct{}), |
| 160 | startCh: make(chan uint64, 1), |
| 161 | resultCh: make(chan struct{}, 1), |
| 162 | miningStates: make(map[uint64]*MiningState), |
| 163 | submissionStates: make(map[uint64]*SubmissionState), |
| 164 | resultLock: sync.Mutex{}, |
| 165 | resultMap: make(map[uint64]*result), |
| 166 | storageMgr: storageMgr, |
| 167 | db: db, |
| 168 | lg: lg, |
| 169 | } |
| 170 | for _, shardId := range storageMgr.Shards() { |
| 171 | worker.miningStates[shardId] = &MiningState{MiningPower: 0, SamplingTime: 0} |
| 172 | if submissionStates != nil { |
| 173 | if state, ok := submissionStates[shardId]; ok { |
| 174 | worker.submissionStates[shardId] = &state |
| 175 | continue |
| 176 | } |
| 177 | } |
| 178 | worker.submissionStates[shardId] = &SubmissionState{Submitted: 0, Failed: 0, Dropped: 0, LastSubmittedTime: 0} |
| 179 | } |
| 180 | worker.wg.Add(2) |
| 181 | go worker.newWorkLoop() |
| 182 | go worker.resultLoop() |
| 183 | return worker |
| 184 | } |
| 185 | |
| 186 | func (w *worker) start() { |
| 187 | w.lg.Info("Worker is being started...") |
no test coverage detected