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

update

parent 11e211a9
......@@ -15,6 +15,12 @@ var (
Value: "config.toml",
}
debugFlag = &cli.BoolFlag{
Name: "debug",
Usage: "Enable debug mode",
Value: false,
}
dataDirFlag = &cli.StringFlag{
Name: "data-dir",
Aliases: []string{"d"},
......@@ -25,25 +31,13 @@ var (
metricsListenAddrFlag = &cli.StringFlag{
Name: "metrics-listen",
Usage: "The listen address of the metrics server",
Value: "0.0.0.0:9429",
}
logLevelFlag = &cli.StringFlag{
Name: "log-level",
Usage: "The log level",
Value: "info",
}
grpcListenAddrFlag = &cli.StringFlag{
Name: "grpc-listen",
Usage: "The listen address of the grpc server",
Value: "0.0.0.0:9430",
Value: "0.0.0.0:20010",
}
rpcListenAddrFlag = &cli.StringFlag{
Name: "rpc-listen",
Usage: "The listen address of the jsonrpc server",
Value: "0.0.0.0:9431",
Value: "0.0.0.0:20012",
}
privateKeyFlag = &cli.StringFlag{
......@@ -67,9 +61,9 @@ var (
Usage: "The address of the reward contract",
}
commitTimeFlag = &cli.IntFlag{
Name: "commit-time",
Usage: "The time to commit the proof",
commitOffsetFlag = &cli.IntFlag{
Name: "commit-offset",
Usage: "The offset of the commit time, based on UTC, in seconds",
}
)
......
......@@ -19,14 +19,13 @@ var (
configFileFlag,
dataDirFlag,
metricsListenAddrFlag,
logLevelFlag,
grpcListenAddrFlag,
debugFlag,
rpcListenAddrFlag,
privateKeyFlag,
chainRPCFlag,
storeContractFlag,
validatorContractFlag,
commitTimeFlag,
commitOffsetFlag,
questHostFlag,
questPortFlag,
questUserFlag,
......@@ -56,18 +55,20 @@ func main() {
func run(ctx *cli.Context) {
cfg := &conf.Config{
MetricsListenAddr: ctx.String(metricsListenAddrFlag.Name),
LogLevel: ctx.String(logLevelFlag.Name),
GRPCListenAddr: ctx.String(grpcListenAddrFlag.Name),
Debug: ctx.Bool(debugFlag.Name),
RPCListenAddr: ctx.String(rpcListenAddrFlag.Name),
PrivateKey: ctx.String(privateKeyFlag.Name),
ChainRPC: ctx.String(chainRPCFlag.Name),
StoreContract: ctx.String(storeContractFlag.Name),
ValidatorContract: ctx.String(validatorContractFlag.Name),
DataDir: ctx.String(dataDirFlag.Name),
CommitTime: ctx.Int(commitTimeFlag.Name),
CommitOffset: ctx.Int(commitOffsetFlag.Name),
}
if cfg.Debug {
log.SetLevel(log.DebugLevel)
}
setLogLevel(cfg.LogLevel)
runMetrics(cfg.MetricsListenAddr)
qCfg := &conf.QuestConfig{
......@@ -76,6 +77,7 @@ func run(ctx *cli.Context) {
User: ctx.String(questUserFlag.Name),
Password: ctx.String(questPassFlag.Name),
Database: ctx.String(questDBFlag.Name),
Debug: cfg.Debug,
}
q := quest.NewQuest(qCfg)
......@@ -85,16 +87,6 @@ func run(ctx *cli.Context) {
select {}
}
func setLogLevel(level string) {
_level, err := log.ParseLevel(level)
if err != nil {
log.WithError(err).Error("failed to parse log level")
return
}
log.WithField("log level", _level).Info("set log level")
log.SetLevel(_level)
}
func runMetrics(listen string) {
http.Handle("/metrics", promhttp.Handler())
log.WithField("listen", listen).Info("start prometheus metrics server")
......
......@@ -2,8 +2,7 @@ package conf
type Config struct {
MetricsListenAddr string
LogLevel string
GRPCListenAddr string
Debug bool
RPCListenAddr string
ChainRPC string
PrivateKey string
......@@ -11,7 +10,7 @@ type Config struct {
ValidatorContract string
RewardContract string
DataDir string
CommitTime int
CommitOffset int
}
type QuestConfig struct {
......
log-level = "debug"
debug = true
metrics-listen = "0.0.0.0:20010"
data-dir = "./data"
grpc-listen = "0.0.0.0:20011"
metrics-listen = "0.0.0.0:20010"
rpc-listen = "0.0.0.0:20012"
chain-rpc = "https://ethereum-holesky-rpc.publicnode.com"
private-key = "529f4efb80ac534f17d873104c71881c0970dbd5a886f183f63c5c6bb7a1fcd9"
chain-rpc = "https://ethereum-holesky-rpc.publicnode.com"
store-contract = "0x7Cd36Bc2a477f60A14f08442179B2f626bE026Ea"
witness-contract = "0x60376A7A4F5013CCca347A9B320D0b8dD57D87F4"
validator-contract = "0x6c77B761DC30e7844D40C8CA681731db8Ee61Cbd"
commit-time = 3600 # utc + n seconds
commit-offset = 3600 # utc + n seconds
quest-host = "43.198.252.255"
......
This diff is collapsed.
......@@ -77,10 +77,10 @@ func (r *ChainRPC) GetNMAddresses() (addrs []common.Address, err error) {
}
func (r *ChainRPC) GetWorkloadThreshold(totalWorkload uint64) (threshold *big.Int, err error) {
// return r.storageContract.GetWorkloadPercent(nil)
return big.NewInt(1), nil
return r.validatorContract.GetWorkloadThreshold(nil, big.NewInt(int64(totalWorkload)))
}
// SubmitProofs 调用合约提交root
func (r *ChainRPC) SubmitProofs(dateTimestamp int64, merkleSumTreeRoot, merkleTreeRoot common.Hash) (txHash common.Hash, err error) {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
......
......@@ -9,6 +9,7 @@ import (
log "github.com/sirupsen/logrus"
)
// LoadPendingProofs 从questdb读取当天proofs并验证
func (v *Validator) LoadPendingProofs(startTimestamp, endTimestamp int64) {
defaultLimit := 100
lastTaskID := ""
......
......@@ -16,7 +16,7 @@ import (
"github.com/syndtr/goleveldb/leveldb/errors"
)
// CommitMST commit workload of per day
// CommitMST merkle sum tree 保存当天的workload
func (v *Validator) CommitMST(proofMap map[common.Address]*validatorv1.ValidatedProof) (root common.Hash, sum *big.Int, err error) {
if len(proofMap) == 0 {
return common.Hash{}, big.NewInt(0), nil
......@@ -71,7 +71,7 @@ func (v *Validator) CommitMST(proofMap map[common.Address]*validatorv1.Validated
return rootNode.Value.Hash, rootNode.Value.BigValue, nil
}
// CommitMT commit all workload
// CommitMT merkle tree 保存 获取到的总余额(已提取+未提取)
func (v *Validator) CommitMT(objects []*validatorv1.MinerObject) (root common.Hash, err error) {
if len(objects) == 0 {
return common.Hash{}, nil
......@@ -120,6 +120,7 @@ func (v *Validator) CommitMT(objects []*validatorv1.MinerObject) (root common.Ha
return
}
// LoadMerkleTree 从leveldb加载merkle tree
func (v *Validator) LoadMerkleTree(date string) (ok bool) {
if date == "" {
return false
......@@ -156,6 +157,7 @@ func (v *Validator) LoadMerkleTree(date string) (ok bool) {
return true
}
// LoadMerkleSumTree 从leveldb加载merkle sum tree
func (v *Validator) LoadMerkleSumTree(date string) (ok bool) {
if date == "" {
return false
......
......@@ -85,9 +85,6 @@ func RunValidator(q *quest.Quest, cfg *conf.Config) *Validator {
go v.UpdateGlobalWorkloadJob()
<-time.After(time.Second * 3)
go v.Ticker()
// go v.Mock()
// go v.ProcessDay()
return v
}
......@@ -114,8 +111,14 @@ func (v *Validator) AddPendingProof(miner common.Address, proof *validatorv1.Val
}).Debug("add validated proof")
}
// ProcessDayJob 每日任务
func (v *Validator) ProcessDayJob() {
log.Debugln("process day job", v.yesterdayTimestamp(), v.todayTimestamp())
log.WithFields(log.Fields{
"today": v.todayString(),
"today timestamp": v.todayTimestamp(),
"yesterday": v.yesterdayString(),
"yesterday timestamp": v.yesterdayTimestamp(),
}).Debug("process day job")
v.LoadPendingProofs(v.yesterdayTimestamp(), v.todayTimestamp())
v.date = v.yesterdayString()
dayProof := v.Commit()
......@@ -149,6 +152,7 @@ func (v *Validator) ProcessDayJob() {
log.Info("process day done")
}
// Commit statedb提交
func (v *Validator) Commit() (dayProofs map[common.Address]*validatorv1.ValidatedProof) {
st := time.Now()
proof, totalWorkload := v.RefreshPendingProof()
......@@ -157,6 +161,7 @@ func (v *Validator) Commit() (dayProofs map[common.Address]*validatorv1.Validate
log.WithError(err).Error("failed to get workload threshold")
return
}
log.WithField("balance_per_workload", balancePerWorkload.String()).Info("get workload threshold")
for miner, proof := range proof {
balance := big.NewInt(0).Mul(balancePerWorkload, big.NewInt(int64(proof.Workload)))
......@@ -214,18 +219,23 @@ func (v *Validator) RefreshPendingProof() (proof map[common.Address]*validatorv1
}
func (v *Validator) Ticker() {
executionTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, v.cfg.CommitTime, 0, time.UTC).Add(v.duration())
// executionTime := time.Now().Add(v.duration())
executionTime := time.Now().Add(v.duration())
waitTime := executionTime.Sub(time.Now())
timer := time.NewTimer(waitTime)
log.WithField("wait_time", waitTime.String()).Info("prepare commit task")
log.WithFields(log.Fields{
"execution_time": executionTime.String(),
"wait_time": waitTime.String(),
}).Info("prepare commit task")
for {
<-timer.C
v.ProcessDayJob()
executionTime = executionTime.Add(v.duration())
waitTime = executionTime.Sub(time.Now())
timer.Reset(waitTime)
log.WithField("wait time", waitTime.String()).Info("prepare commit task")
log.WithFields(log.Fields{
"execution_time": executionTime.String(),
"wait_time": waitTime.String(),
}).Info("prepare commit task")
}
}
......@@ -275,8 +285,7 @@ func (v *Validator) yesterdayString() string {
func (v *Validator) todayTimestamp() int64 {
now := time.Now().UTC()
// today := time.Date(nov.Year(), nov.Month(), nov.Day(), 0, 0, 0, 0, time.UTC)
today := time.Date(now.Year(), now.Month(), 6, 0, 0, 0, 0, time.UTC)
today := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC)
return today.Unix()
}
......
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