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

update

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