Commit bcd7e288 authored by 贾浩@五瓣科技's avatar 贾浩@五瓣科技

update sync

parent fa8ca32e
......@@ -60,6 +60,24 @@ func RunValidator(q *quest.Quest, cfg *conf.Config) *Validator {
cfg: cfg,
q: q,
}
if v.date != "" {
// 当前5号,假设db 1号
// v.date = 1, 2,需要处理的是 2,3号
for v.dateToTimestamp(v.date) < v.yesterdayTimestamp()-86400 {
if err = v.SyncDayJob(v.dateToTimestamp(v.date) + 86400); err != nil {
return nil
}
}
// v.date = 3, 如果当前时间超过提交昨天的时间,需要提交昨天的
if v.dateToTimestamp(v.date) < v.yesterdayTimestamp() &&
time.Now().After(time.Unix(v.todayTimestamp()+int64(cfg.CommitOffset), 0)) {
if err = v.SyncDayJob(v.dateToTimestamp(v.date) + 86400); err != nil {
return nil
}
}
}
v.LoadMerkleTree(lastDay)
v.LoadMerkleSumTree(lastDay)
go v.UpdateContractAddressJob()
......@@ -157,6 +175,51 @@ func (v *Validator) ProcessDayJob() {
log.Info("process day done")
}
// SyncDayJob 同步任务
func (v *Validator) SyncDayJob(dateTimestamp int64) (err error) {
dbLastDay, _ := getDBLastDayRoot(v.lvdb)
if dbLastDay == v.yesterdayString() && v.date != "" {
log.WithField("date", v.date).Warn("already process day job")
return
}
log.WithFields(log.Fields{
"date": v.timestampToDate(dateTimestamp),
"date timestamp": dateTimestamp,
}).Debug("sync day job")
v.LoadPendingProofs(dateTimestamp, dateTimestamp+86400)
v.date = v.timestampToDate(dateTimestamp)
dayProof := v.Commit()
mstRoot, _, err := v.CommitMST(dayProof)
if err != nil {
log.WithError(err).Error("failed to commit merkle sum tree")
return
}
objects := v.state.IterAllObject()
mtRoot, err := v.CommitMT(objects)
if err != nil {
log.WithError(err).Error("failed to commit merkle tree")
return
}
txHash, err := v.rpc.SubmitProofs(dateTimestamp, mstRoot, mtRoot)
if err != nil {
log.WithError(err).Error("submit proofs")
return
}
err = v.lvdb.Put([]byte(fmt.Sprintf("txid:%s", v.date)), txHash.Bytes())
if err != nil {
log.WithError(err).Error("db failed to save txid")
return
}
log.WithField("tx hash", txHash.Hex()).Info("submit proofs to contract")
err = v.lvdb.Put([]byte("lastday"), []byte(v.date))
if err != nil {
log.WithError(err).Error("db failed to update last day")
return
}
log.Info("sync day done")
return
}
// Commit statedb提交
func (v *Validator) Commit() (dayProofs map[common.Address]*validatorv1.ValidatedProof) {
st := time.Now()
......@@ -310,6 +373,10 @@ func (v *Validator) dateToTimestamp(date string) int64 {
return t.Unix()
}
func (v *Validator) timestampToDate(timestamp int64) string {
return time.Unix(timestamp, 0).Format("2006-01-02")
}
func (v *Validator) duration() time.Duration {
return 3600 * 24 * time.Second
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment