diff --git a/cmd/console/increase.go b/cmd/console/increase.go index fb25728c..e43f96e0 100644 --- a/cmd/console/increase.go +++ b/cmd/console/increase.go @@ -28,11 +28,11 @@ const increase_cmd_short = "increase [staking | space]" const increaseStaking_cmd = "staking" const increaseStaking_cmd_use = increaseStaking_cmd -const increaseStaking_cmd_short = "increase staking" +const increaseStaking_cmd_short = "increase staking, the unit is TCESS" const increaseSpace_cmd = "space" const increaseSpace_cmd_use = increaseSpace_cmd -const increaseSpace_cmd_short = "increase space" +const increaseSpace_cmd_short = "increase space, the unit is TiB" var increaseCmd = &cobra.Command{ Use: increase_cmd_use, @@ -71,6 +71,12 @@ func increaseStakingCmd_Runfunc(cmd *cobra.Command, args []string) { os.Exit(1) } + _, err := strconv.ParseUint(os.Args[3], 10, 64) + if err != nil { + out.Err(err.Error()) + os.Exit(1) + } + cfg, err := buildAuthenticationConfig(cmd) if err != nil { out.Err(err.Error()) @@ -95,8 +101,8 @@ func increaseStakingCmd_Runfunc(cmd *cobra.Command, args []string) { out.Err("The rpc address does not match the software version, please check the rpc address.") os.Exit(1) } - - txhash, err := cli.IncreaseCollateral(cli.GetSignatureAccPulickey(), os.Args[3]) + addStaking := os.Args[3] + chain.TokenPrecision_CESS + txhash, err := cli.IncreaseCollateral(cli.GetSignatureAccPulickey(), addStaking) if err != nil { if txhash == "" { out.Err(err.Error()) diff --git a/cmd/console/run.go b/cmd/console/run.go index 1c6051dd..a2bc5e90 100644 --- a/cmd/console/run.go +++ b/cmd/console/run.go @@ -407,16 +407,16 @@ func runCmd(cmd *cobra.Command, args []string) { if len(attestationIdleCh) > 0 { <-attestationIdleCh - go node.AttestationIdle(cli, peernode, p, runtime, minerPoisInfo, teeRecord, l, attestationIdleCh) + go node.AttestationIdle(cli, peernode, p, runtime, minerPoisInfo, teeRecord, l, cfg, attestationIdleCh) } if len(calcTagCh) > 0 { <-calcTagCh - go node.CalcTag(cli, cace, l, runtime, teeRecord, wspace.GetFileDir(), calcTagCh) + go node.CalcTag(cli, cace, l, runtime, teeRecord, cfg, wspace.GetFileDir(), calcTagCh) } if len(idleChallCh) > 0 || len(serviceChallCh) > 0 { - go node.ChallengeMgt(cli, l, wspace, runtime, teeRecord, peernode, minerPoisInfo, rsakey, p, cace, idleChallCh, serviceChallCh) + go node.ChallengeMgt(cli, l, wspace, runtime, teeRecord, peernode, minerPoisInfo, rsakey, p, cfg, cace, idleChallCh, serviceChallCh) time.Sleep(chain.BlockInterval) } @@ -1144,7 +1144,7 @@ func registerPoisKey( responseMinerInitParam *pb.ResponseMinerInitParam rsakey *node.RSAKeyPair chainPublickey = make([]byte, chain.WorkerPublicKeyLen) - teeEndPointList = make([]string, len(priorityTeeList)) + teeEndPointList = make([]string, 0) ) copy(teeEndPointList, priorityTeeList) for { diff --git a/configs/system.go b/configs/system.go index a196f307..ec361619 100644 --- a/configs/system.go +++ b/configs/system.go @@ -22,7 +22,7 @@ const ( // Name is the name of the program Name = "miner" // version - Version = "v0.7.12" + Version = "v0.7.13" // Description is the description of the program Description = "Storage miner implementation in CESS networks" // NameSpace is the cached namespace diff --git a/go.mod b/go.mod index d00299e4..65bf1534 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21 toolchain go1.21.12 require ( - github.com/CESSProject/cess-go-sdk v0.6.2-0.20240805070224-ca5be6963b49 + github.com/CESSProject/cess-go-sdk v0.6.2-0.20240822075251-93843c2a4017 github.com/CESSProject/cess_pois v0.5.16 github.com/CESSProject/p2p-go v0.4.1-0.20240809013702-e989d204843e github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce diff --git a/go.sum b/go.sum index f9fedf0c..4062edd1 100644 --- a/go.sum +++ b/go.sum @@ -9,8 +9,8 @@ dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CESSProject/cess-go-sdk v0.6.2-0.20240805070224-ca5be6963b49 h1:6a58IgBudMSK0YsRvdxDsNgAPqyowfrrgKCXfQ5IP6I= -github.com/CESSProject/cess-go-sdk v0.6.2-0.20240805070224-ca5be6963b49/go.mod h1:L5IDeS2ydsdgtdybzhWk9fIdBsDkU2XrQyo5mrWHkdQ= +github.com/CESSProject/cess-go-sdk v0.6.2-0.20240822075251-93843c2a4017 h1:q488VDsCSykpJ1v+QmOxPVolkCBHvSxEP8dW3/+/MH0= +github.com/CESSProject/cess-go-sdk v0.6.2-0.20240822075251-93843c2a4017/go.mod h1:L5IDeS2ydsdgtdybzhWk9fIdBsDkU2XrQyo5mrWHkdQ= github.com/CESSProject/cess_pois v0.5.16 h1:OYPmmuvGH9ikTyDS2BlmcNw3ZBX8udew+gNnIBTJSa8= github.com/CESSProject/cess_pois v0.5.16/go.mod h1:rztEZjjG+MbKzVgh5WtQcZc/7ZDkBvDNABc7Em8BKPc= github.com/CESSProject/p2p-go v0.4.1-0.20240809013702-e989d204843e h1:jaU/Pqsyu2BQL0ewamgsYmbfrTKLCqRBHh7RL0+bv6Q= diff --git a/node/attestation_idle.go b/node/attestation_idle.go index eec36eb7..f4b96ea9 100644 --- a/node/attestation_idle.go +++ b/node/attestation_idle.go @@ -14,6 +14,7 @@ import ( "github.com/CESSProject/cess-go-sdk/chain" "github.com/CESSProject/cess-miner/configs" + "github.com/CESSProject/cess-miner/pkg/confile" "github.com/CESSProject/cess-miner/pkg/logger" "github.com/CESSProject/cess-miner/pkg/utils" "github.com/CESSProject/cess_pois/acc" @@ -26,7 +27,7 @@ import ( "google.golang.org/protobuf/proto" ) -func AttestationIdle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r *RunningState, m *pb.MinerPoisInfo, teeRecord *TeeRecord, l *logger.Lg, ch chan<- bool) { +func AttestationIdle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r *RunningState, m *pb.MinerPoisInfo, teeRecord *TeeRecord, l *logger.Lg, cfg *confile.Confile, ch chan<- bool) { defer func() { ch <- true if err := recover(); err != nil { @@ -34,7 +35,7 @@ func AttestationIdle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r } }() for { - err := attestation_idle(cli, peernode, p, r, teeRecord, m, l) + err := attestation_idle(cli, peernode, p, r, teeRecord, m, l, cfg) if err != nil { l.Space("err", err.Error()) time.Sleep(time.Minute) @@ -43,7 +44,7 @@ func AttestationIdle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r } } -func attestation_idle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r *RunningState, teeRecord *TeeRecord, m *pb.MinerPoisInfo, l logger.Logger) error { +func attestation_idle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, r *RunningState, teeRecord *TeeRecord, m *pb.MinerPoisInfo, l *logger.Lg, cfg *confile.Confile) error { defer func() { if err := recover(); err != nil { l.Pnc(utils.RecoverError(err)) @@ -114,8 +115,12 @@ func attestation_idle(cli *chain.ChainClient, peernode *core.PeerNode, p *Pois, } l.Space("info", fmt.Sprintf("front: %v rear: %v", p.Prover.GetFront(), p.Prover.GetRear())) - - teeEndPoints := teeRecord.GetAllMarkerTeeEndpoint() + var teeEndPoints = cfg.ReadPriorityTeeList() + if len(teeEndPoints) > 0 { + teeEndPoints = append(teeEndPoints, cfg.ReadPriorityTeeList()...) + teeEndPoints = append(teeEndPoints, cfg.ReadPriorityTeeList()...) + } + teeEndPoints = append(teeEndPoints, teeRecord.GetAllMarkerTeeEndpoint()...) var usedTeeEndPoint string var usedTeeWorkAccount string diff --git a/node/calculate_tag.go b/node/calculate_tag.go index 034cd910..f8025e41 100644 --- a/node/calculate_tag.go +++ b/node/calculate_tag.go @@ -22,6 +22,7 @@ import ( sutils "github.com/CESSProject/cess-go-sdk/utils" "github.com/CESSProject/cess-miner/configs" "github.com/CESSProject/cess-miner/pkg/cache" + "github.com/CESSProject/cess-miner/pkg/confile" "github.com/CESSProject/cess-miner/pkg/logger" "github.com/CESSProject/cess-miner/pkg/utils" "github.com/CESSProject/p2p-go/pb" @@ -39,7 +40,7 @@ type TagfileType struct { Index uint16 `protobuf:"bytes,6,opt,name=index,json=index,proto3" json:"index,omitempty"` } -func CalcTag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, r *RunningState, teeRecord *TeeRecord, fileDir string, ch chan<- bool) { +func CalcTag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, r *RunningState, teeRecord *TeeRecord, cfg *confile.Confile, fileDir string, ch chan<- bool) { r.SetCalcTagFlag(true) defer func() { ch <- true @@ -58,7 +59,7 @@ func CalcTag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, r *Runni l.Stag("info", fmt.Sprintf("[roothashs] %v", roothashs)) for _, fileDir := range roothashs { - err = calc_tag(cli, cace, l, teeRecord, fileDir) + err = calc_tag(cli, cace, l, teeRecord, cfg, fileDir) if err != nil { l.Stag("err", fmt.Sprintf("[%s] [calc_tag] %v", filepath.Base(fileDir), roothashs)) } @@ -66,7 +67,7 @@ func CalcTag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, r *Runni } } -func calc_tag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, teeRecord *TeeRecord, file string) error { +func calc_tag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, teeRecord *TeeRecord, cfg *confile.Confile, file string) error { var ok bool var isReportTag bool var err error @@ -146,7 +147,7 @@ func calc_tag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, teeReco l.Stag("err", fmt.Sprintf("[%s] The file's tag stat err: %v", fid, err)) } - isreport, err := calcTheFragmentTag(l, teeRecord, cli.GetSignatureAccPulickey(), fid, fragments[i], maxIndex, latestSig, digest) + isreport, err := calcTheFragmentTag(l, teeRecord, cfg, cli.GetSignatureAccPulickey(), fid, fragments[i], maxIndex, latestSig, digest) if err != nil { l.Stag("err", fmt.Sprintf("[%s] [calcFragmentTag] %v", fid, err)) return nil @@ -208,7 +209,7 @@ func calc_tag(cli *chain.ChainClient, cace cache.Cache, l logger.Logger, teeReco return nil } -func calcTheFragmentTag(l logger.Logger, teeRecord *TeeRecord, signPublicKey []byte, fid, fragmentFile string, maxIndex uint16, lastSign []byte, digest []*pb.DigestInfo) (bool, error) { +func calcTheFragmentTag(l logger.Logger, teeRecord *TeeRecord, cfg *confile.Confile, signPublicKey []byte, fid, fragmentFile string, maxIndex uint16, lastSign []byte, digest []*pb.DigestInfo) (bool, error) { var err error var isReportTag bool //var teeSign chain.TeeSig @@ -216,7 +217,7 @@ func calcTheFragmentTag(l logger.Logger, teeRecord *TeeRecord, signPublicKey []b var teePubkey string var fragmentHash = filepath.Base(fragmentFile) - genTag, teePubkey, err = requestTeeTag(l, teeRecord, signPublicKey, fid, fragmentFile, lastSign, digest) + genTag, teePubkey, err = requestTeeTag(l, teeRecord, cfg, signPublicKey, fid, fragmentFile, lastSign, digest) if err != nil { return false, fmt.Errorf("requestTeeTag: %v", err) } @@ -263,11 +264,16 @@ func calcTheFragmentTag(l logger.Logger, teeRecord *TeeRecord, signPublicKey []b return isReportTag, nil } -func requestTeeTag(l logger.Logger, teeRecord *TeeRecord, signPubkey []byte, fid, fragmentFile string, lastSign []byte, digest []*pb.DigestInfo) (pb.GenTagMsg, string, error) { +func requestTeeTag(l logger.Logger, teeRecord *TeeRecord, cfg *confile.Confile, signPubkey []byte, fid, fragmentFile string, lastSign []byte, digest []*pb.DigestInfo) (pb.GenTagMsg, string, error) { var err error var teePubkey string var tagInfo pb.GenTagMsg - teeEndPoints := teeRecord.GetAllMarkerTeeEndpoint() + var teeEndPoints = cfg.ReadPriorityTeeList() + if len(teeEndPoints) > 0 { + teeEndPoints = append(teeEndPoints, cfg.ReadPriorityTeeList()...) + teeEndPoints = append(teeEndPoints, cfg.ReadPriorityTeeList()...) + } + teeEndPoints = append(teeEndPoints, teeRecord.GetAllMarkerTeeEndpoint()...) l.Stag("info", fmt.Sprintf("[%s] To calc the fragment tag: %v", fid, filepath.Base(fragmentFile))) for j := 0; j < len(teeEndPoints); j++ { diff --git a/node/challenge.go b/node/challenge.go index b0a61498..a853958d 100644 --- a/node/challenge.go +++ b/node/challenge.go @@ -12,6 +12,7 @@ import ( "github.com/CESSProject/cess-go-sdk/chain" "github.com/CESSProject/cess-miner/pkg/cache" + "github.com/CESSProject/cess-miner/pkg/confile" "github.com/CESSProject/cess-miner/pkg/logger" "github.com/CESSProject/p2p-go/core" "github.com/CESSProject/p2p-go/pb" @@ -27,6 +28,7 @@ func ChallengeMgt( m *pb.MinerPoisInfo, rsa *RSAKeyPair, p *Pois, + cfg *confile.Confile, cace cache.Cache, idleChallTaskCh chan bool, serviceChallTaskCh chan bool, @@ -118,7 +120,7 @@ func ChallengeMgt( if len(serviceChallTaskCh) > 0 { <-serviceChallTaskCh go serviceChallenge( - cli, r, l, teeRecord, peernode, ws, cace, rsa, + cli, r, l, teeRecord, peernode, ws, cace, rsa, cfg, serviceChallTaskCh, true, latestBlock, @@ -140,7 +142,7 @@ func ChallengeMgt( <-serviceChallTaskCh r.SetServiceChallengeFlag(true) go serviceChallenge( - cli, r, l, teeRecord, peernode, ws, cace, rsa, + cli, r, l, teeRecord, peernode, ws, cace, rsa, cfg, serviceChallTaskCh, false, latestBlock, diff --git a/node/challenge_idle.go b/node/challenge_idle.go index 6a822e53..592682a0 100644 --- a/node/challenge_idle.go +++ b/node/challenge_idle.go @@ -40,6 +40,8 @@ type idleProofInfo struct { ChainFront int64 `json:"chainFront"` ChainRear int64 `json:"chainRear"` IdleResult bool `json:"idleResult"` + SubmintProof bool `json:"submintProof"` + SubmintResult bool `json:"submintResult"` AllocatedTeeWorkpuk chain.WorkerPublicKey `json:"allocatedTeeWorkpuk"` IdleProof []byte `json:"idleProof"` Acc []byte `json:"acc"` @@ -104,6 +106,8 @@ func idleChallenge( idleProofRecord.Start = challStart idleProofRecord.ChainFront = minerChallFront idleProofRecord.ChainRear = minerChallRear + idleProofRecord.SubmintProof = true + idleProofRecord.SubmintResult = true var acc = make([]byte, len(chain.Accumulator{})) for i := 0; i < len(acc); i++ { @@ -253,13 +257,22 @@ func idleChallenge( } ws.SaveIdleProve(idleProofRecord) - l.Ichal("info", fmt.Sprintf("[start sub] %v", time.Now())) - txhash, err := n.SubmitIdleProof(idleProve) - if err != nil { - l.Ichal("err", fmt.Sprintf("[SubmitIdleProof] %v", err)) - return + + txhash := "" + for i := 0; i < 5; i++ { + l.Ichal("info", fmt.Sprintf("[start sub] %v", time.Now())) + txhash, err = n.SubmitIdleProof(idleProve) + l.Ichal("info", fmt.Sprintf("SubmitIdleProof: %s", txhash)) + if err != nil { + l.Ichal("err", fmt.Sprintf("[SubmitIdleProof] %v", err)) + time.Sleep(time.Minute) + continue + } + break } - l.Ichal("info", fmt.Sprintf("SubmitIdleProof: %s", txhash)) + idleProofRecord.SubmintProof = false + ws.SaveIdleProve(idleProofRecord) + // time.Sleep(chain.BlockInterval * 2) @@ -394,28 +407,39 @@ func idleChallenge( for j := 0; j < len(teeSig); j++ { teeSignBytes[j] = byte(teeSig[j]) } - txHash, err := n.SubmitVerifyIdleResult( - idleProve, - types.U64(idleProofRecord.ChainFront), - types.U64(idleProofRecord.ChainRear), - minerAccumulator, - types.Bool(spaceProofVerifyTotal.IdleResult), - teeSignBytes, - idleProofRecord.AllocatedTeeWorkpuk, - ) - if err != nil { - l.Ichal("err", fmt.Sprintf("[SubmitIdleProofResult] hash: %s, err: %v", txHash, err)) - return + for i := 0; i < 5; i++ { + txHash, err := n.SubmitVerifyIdleResult( + idleProve, + types.U64(idleProofRecord.ChainFront), + types.U64(idleProofRecord.ChainRear), + minerAccumulator, + types.Bool(spaceProofVerifyTotal.IdleResult), + teeSignBytes, + idleProofRecord.AllocatedTeeWorkpuk, + ) + if err != nil { + l.Ichal("err", fmt.Sprintf("[SubmitIdleProofResult] hash: %s, err: %v", txHash, err)) + time.Sleep(time.Minute) + continue + } + l.Ichal("info", fmt.Sprintf("submit idle proof result suc: %s", txHash)) + break } - - l.Ichal("info", fmt.Sprintf("submit idle proof result suc: %s", txHash)) + idleProofRecord.SubmintResult = false + ws.SaveIdleProve(idleProofRecord) } else { - txhash, err := n.SubmitIdleProof([]types.U8{}) - if err != nil { - l.Ichal("err", fmt.Sprintf("[SubmitIdleProof] %v", err)) - return + for i := 0; i < 5; i++ { + txhash, err := n.SubmitIdleProof([]types.U8{}) + if err != nil { + l.Ichal("err", fmt.Sprintf("[SubmitIdleProof] %v", err)) + time.Sleep(time.Minute) + continue + } + l.Ichal("info", fmt.Sprintf("SubmitIdleProof: %s", txhash)) + break } - l.Ichal("info", fmt.Sprintf("SubmitIdleProof: %s", txhash)) + idleProofRecord.SubmintResult = false + ws.SaveIdleProve(idleProofRecord) } } @@ -454,7 +478,14 @@ func checkIdleProofRecord( l.Ichal("info", fmt.Sprintf("local idle proof file challenge: %v", idleProofRecord.Start)) if !idleProofSubmited { - return errors.New("Idle proof not submited") + if idleProofRecord.SubmintProof { + return errors.New("Idle proof not submited") + } + return nil + } + + if !idleProofRecord.SubmintResult { + return nil } if chain.IsWorkerPublicKeyAllZero(teePubkey) { diff --git a/node/challenge_service.go b/node/challenge_service.go index fdd8aae8..444748cb 100644 --- a/node/challenge_service.go +++ b/node/challenge_service.go @@ -21,6 +21,7 @@ import ( sutils "github.com/CESSProject/cess-go-sdk/utils" "github.com/CESSProject/cess-miner/configs" "github.com/CESSProject/cess-miner/pkg/cache" + "github.com/CESSProject/cess-miner/pkg/confile" "github.com/CESSProject/cess-miner/pkg/logger" "github.com/CESSProject/cess-miner/pkg/utils" "github.com/CESSProject/p2p-go/core" @@ -42,6 +43,8 @@ type serviceProofInfo struct { Sigma string `json:"sigma"` Start uint32 `json:"start"` ServiceResult bool `json:"serviceResult"` + SubmitProof bool `json:"submitProof"` + SubmitResult bool `json:"submitResult"` } type RandomList struct { @@ -58,6 +61,7 @@ func serviceChallenge( ws *Workspace, cace cache.Cache, rsaKey *RSAKeyPair, + cfg *confile.Confile, ch chan<- bool, serviceProofSubmited bool, latestBlock, @@ -80,8 +84,7 @@ func serviceChallenge( return } - var serviceProofRecord serviceProofInfo - err := checkServiceProofRecord(cli, l, peernode, ws, teeRecord, cace, rsaKey, serviceProofSubmited, challStart, randomIndexList, randomList, teePubkey) + err := checkServiceProofRecord(cli, l, peernode, ws, teeRecord, cace, rsaKey, cfg, serviceProofSubmited, challStart, randomIndexList, randomList, teePubkey) if err == nil { return } @@ -106,13 +109,15 @@ func serviceChallenge( l.Schal("err", fmt.Sprintf("Save service file challenge random err: %v", err)) } - serviceProofRecord = serviceProofInfo{} + var serviceProofRecord serviceProofInfo serviceProofRecord.Start = uint32(challStart) + serviceProofRecord.SubmitProof = true + serviceProofRecord.SubmitResult = true serviceProofRecord.Names, serviceProofRecord.Us, serviceProofRecord.Mus, serviceProofRecord.Sigma, - serviceProofRecord.Usig, err = calcSigma(cli, ws, cace, l, teeRecord, rsaKey, challStart, randomIndexList, randomList) + serviceProofRecord.Usig, err = calcSigma(cli, ws, cace, l, teeRecord, rsaKey, cfg, challStart, randomIndexList, randomList) if err != nil { l.Schal("err", fmt.Sprintf("[calcSigma] %v", err)) return @@ -125,13 +130,18 @@ func serviceChallenge( serviceProof[i] = types.U8(serviceProofRecord.Sigma[i]) } - txhash, err := cli.SubmitServiceProof(serviceProof) - if err != nil { - l.Schal("err", fmt.Sprintf("[SubmitServiceProof] %v", err)) - return + for i := 0; i < 5; i++ { + txhash, err := cli.SubmitServiceProof(serviceProof) + if err != nil { + l.Schal("err", fmt.Sprintf("[SubmitServiceProof] %v", err)) + time.Sleep(time.Minute) + continue + } + l.Schal("info", fmt.Sprintf("submit service aggr proof suc: %s", txhash)) + break } - l.Schal("info", fmt.Sprintf("submit service aggr proof suc: %s", txhash)) - + serviceProofRecord.SubmitProof = false + ws.SaveServiceProve(serviceProofRecord) time.Sleep(chain.BlockInterval * 3) _, chall, err := cli.QueryChallengeSnapShot(cli.GetSignatureAccPulickey(), -1) @@ -201,8 +211,8 @@ func serviceChallenge( for j := 0; j < len(signature); j++ { teeSignBytes[j] = byte(signature[j]) } - for i := 2; i < 10; i++ { - txhash, err = cli.SubmitVerifyServiceResult( + for i := 0; i < 5; i++ { + txhash, err := cli.SubmitVerifyServiceResult( types.Bool(serviceProofRecord.ServiceResult), teeSignBytes, bloomFilter, @@ -210,12 +220,14 @@ func serviceChallenge( ) if err != nil { l.Schal("err", fmt.Sprintf("[SubmitServiceProofResult] hash: %s, err: %v", txhash, err)) - time.Sleep(time.Minute * time.Duration(i)) + time.Sleep(time.Minute) continue } l.Schal("info", fmt.Sprintf("submit service aggr proof result suc: %s", txhash)) - return + break } + serviceProofRecord.SubmitResult = false + ws.SaveServiceProve(serviceProofRecord) } // calc sigma @@ -226,6 +238,7 @@ func calcSigma( l logger.Logger, teeRecord *TeeRecord, rsaKey *RSAKeyPair, + cfg *confile.Confile, challStart uint32, randomIndexList []types.U32, randomList []chain.Random, @@ -349,7 +362,7 @@ func calcSigma( serviceTagPath := fmt.Sprintf("%s.tag", fragments[j]) buf, err := os.ReadFile(serviceTagPath) if err != nil { - err = calcFragmentTag(cli, l, teeRecord, ws, roothash, fragments[j]) + err = calcFragmentTag(cli, l, teeRecord, ws, cfg, roothash, fragments[j]) if err != nil { l.Schal("err", fmt.Sprintf("calcFragmentTag %v err: %v", fragments[j], err)) cli.GenerateRestoralOrder(roothash, fragmentHash) @@ -417,6 +430,7 @@ func checkServiceProofRecord( teeRecord *TeeRecord, cace cache.Cache, rasKey *RSAKeyPair, + cfg *confile.Confile, serviceProofSubmited bool, challStart uint32, randomIndexList []types.U32, @@ -434,9 +448,13 @@ func checkServiceProofRecord( return errors.New("Local service file challenge record is outdated") } + if !serviceProofRecord.SubmitProof && !serviceProofRecord.SubmitResult { + return nil + } + l.Schal("info", fmt.Sprintf("local service proof file challenge: %v", serviceProofRecord.Start)) - if !serviceProofSubmited { + if !serviceProofSubmited && serviceProofRecord.SubmitProof { if serviceProofRecord.Names == nil || serviceProofRecord.Us == nil || serviceProofRecord.Mus == nil { @@ -444,7 +462,7 @@ func checkServiceProofRecord( serviceProofRecord.Us, serviceProofRecord.Mus, serviceProofRecord.Sigma, - serviceProofRecord.Usig, err = calcSigma(cli, ws, cace, l, teeRecord, rasKey, challStart, randomIndexList, randomList) + serviceProofRecord.Usig, err = calcSigma(cli, ws, cace, l, teeRecord, rasKey, cfg, challStart, randomIndexList, randomList) if err != nil { l.Schal("err", fmt.Sprintf("[calcSigma] %v", err)) return nil @@ -489,6 +507,10 @@ func checkServiceProofRecord( } } + if !serviceProofRecord.SubmitResult { + return nil + } + for { if serviceProofRecord.ServiceBloomFilter != nil && serviceProofRecord.Signature != nil { @@ -504,17 +526,23 @@ func checkServiceProofRecord( for i := 0; i < chain.BloomFilterLen; i++ { bloomFilter[i] = types.U64(serviceProofRecord.ServiceBloomFilter[i]) } - txhash, err := cli.SubmitVerifyServiceResult( - types.Bool(serviceProofRecord.ServiceResult), - serviceProofRecord.Signature[:], - bloomFilter, - serviceProofRecord.AllocatedTeeWorkpuk, - ) - if err != nil { - l.Schal("err", fmt.Sprintf("[SubmitServiceProofResult] hash: %s, err: %v", txhash, err)) + for i := 0; i < 5; i++ { + txhash, err := cli.SubmitVerifyServiceResult( + types.Bool(serviceProofRecord.ServiceResult), + serviceProofRecord.Signature[:], + bloomFilter, + serviceProofRecord.AllocatedTeeWorkpuk, + ) + if err != nil { + l.Schal("err", fmt.Sprintf("[SubmitServiceProofResult] hash: %s, err: %v", txhash, err)) + time.Sleep(time.Minute) + continue + } + l.Schal("info", fmt.Sprintf("submit service aggr proof result suc: %s", txhash)) break } - l.Schal("info", fmt.Sprintf("submit service aggr proof result suc: %s", txhash)) + serviceProofRecord.SubmitResult = false + ws.SaveServiceProve(serviceProofRecord) return nil } break @@ -562,17 +590,24 @@ func checkServiceProofRecord( bloomFilter[i] = types.U64(serviceProofRecord.ServiceBloomFilter[i]) } ws.SaveServiceProve(serviceProofRecord) - txhash, err := cli.SubmitVerifyServiceResult( - types.Bool(serviceProofRecord.ServiceResult), - serviceProofRecord.Signature[:], - bloomFilter, - serviceProofRecord.AllocatedTeeWorkpuk, - ) - if err != nil { - l.Schal("err", fmt.Sprintf("[SubmitServiceProofResult] hash: %s, err: %v", txhash, err)) - return nil + + for i := 0; i < 5; i++ { + txhash, err := cli.SubmitVerifyServiceResult( + types.Bool(serviceProofRecord.ServiceResult), + serviceProofRecord.Signature[:], + bloomFilter, + serviceProofRecord.AllocatedTeeWorkpuk, + ) + if err != nil { + l.Schal("err", fmt.Sprintf("[SubmitServiceProofResult] hash: %s, err: %v", txhash, err)) + time.Sleep(time.Minute) + continue + } + l.Schal("info", fmt.Sprintf("submit service aggr proof result suc: %s", txhash)) + break } - l.Schal("info", fmt.Sprintf("submit service aggr proof result suc: %s", txhash)) + serviceProofRecord.SubmitResult = false + ws.SaveServiceProve(serviceProofRecord) return nil } diff --git a/node/restore.go b/node/restore.go index 436a1b5b..f8670001 100644 --- a/node/restore.go +++ b/node/restore.go @@ -21,6 +21,7 @@ import ( sutils "github.com/CESSProject/cess-go-sdk/utils" "github.com/CESSProject/cess-miner/configs" "github.com/CESSProject/cess-miner/pkg/cache" + "github.com/CESSProject/cess-miner/pkg/confile" "github.com/CESSProject/cess-miner/pkg/logger" "github.com/CESSProject/cess-miner/pkg/utils" "github.com/CESSProject/p2p-go/core" @@ -318,7 +319,7 @@ func restoreFragment(signAcc string, l logger.Logger, roothash, fragmentHash, fi return nil } -func calcFragmentTag(cli *chain.ChainClient, l logger.Logger, teeRecord *TeeRecord, ws *Workspace, fid, fragment string) error { +func calcFragmentTag(cli *chain.ChainClient, l logger.Logger, teeRecord *TeeRecord, ws *Workspace, cfg *confile.Confile, fid, fragment string) error { buf, err := os.ReadFile(fragment) if err != nil { return err @@ -328,7 +329,7 @@ func calcFragmentTag(cli *chain.ChainClient, l logger.Logger, teeRecord *TeeReco } fragmentHash := filepath.Base(fragment) - genTag, teePubkey, err := requestTeeTag(l, teeRecord, cli.GetSignatureAccPulickey(), fid, fragment, nil, nil) + genTag, teePubkey, err := requestTeeTag(l, teeRecord, cfg, cli.GetSignatureAccPulickey(), fid, fragment, nil, nil) if err != nil { return err }