diff --git a/coordinator/conf/config.json b/coordinator/conf/config.json index fd2719c21..994274efb 100644 --- a/coordinator/conf/config.json +++ b/coordinator/conf/config.json @@ -15,7 +15,7 @@ }, "db_config": { "driver_name": "postgres", - "dsn": "postgres://admin:123456@localhost/test?sslmode=disable", + "dsn": "postgres://localhost/scroll?sslmode=disable", "maxOpenNum": 200, "maxIdleNum": 20 }, diff --git a/coordinator/internal/controller/api/auth.go b/coordinator/internal/controller/api/auth.go index 4f31c0868..3a9239f41 100644 --- a/coordinator/internal/controller/api/auth.go +++ b/coordinator/internal/controller/api/auth.go @@ -23,7 +23,7 @@ func NewAuthController() *AuthController { // Login the api controller for login func (a *AuthController) Login(c *gin.Context) (interface{}, error) { var login types.LoginParameter - if err := c.ShouldBindQuery(&login); err != nil { + if err := c.ShouldBind(&login); err != nil { return "", fmt.Errorf("missing the public_key, err:%w", err) } diff --git a/coordinator/internal/controller/api/prover_task.go b/coordinator/internal/controller/api/prover_task.go index 45bfeb75d..dd27a337a 100644 --- a/coordinator/internal/controller/api/prover_task.go +++ b/coordinator/internal/controller/api/prover_task.go @@ -57,6 +57,12 @@ func (ptc *ProverTaskController) ProverTasks(ctx *gin.Context) { return } + if result == nil { + nerr := fmt.Errorf("get empty prover task") + types.RenderJSON(ctx, types.ErrEmptyProofData, nerr, nil) + return + } + types.RenderJSON(ctx, types.Success, nil, result) } diff --git a/coordinator/internal/controller/api/submit_proof.go b/coordinator/internal/controller/api/submit_proof.go index ab17c2a57..b13036484 100644 --- a/coordinator/internal/controller/api/submit_proof.go +++ b/coordinator/internal/controller/api/submit_proof.go @@ -44,17 +44,21 @@ func (spc *SubmitProofController) SubmitProof(ctx *gin.Context) { switch message.ProofType(spp.ProofType) { case message.ProofTypeChunk: - if err := json.Unmarshal([]byte(spp.Proof), proofMsg.ChunkProof); err != nil { + var tmpChunkProof message.ChunkProof + if err := json.Unmarshal([]byte(spp.Proof), &tmpChunkProof); err != nil { nerr := fmt.Errorf("unmarshal parameter chunk proof invalid, err:%w", err) types.RenderJSON(ctx, types.ErrParameterInvalidNo, nerr, nil) return } + proofMsg.ChunkProof = &tmpChunkProof case message.ProofTypeBatch: - if err := json.Unmarshal([]byte(spp.Proof), proofMsg.ChunkProof); err != nil { + var tmpBatchProof message.BatchProof + if err := json.Unmarshal([]byte(spp.Proof), &tmpBatchProof); err != nil { nerr := fmt.Errorf("unmarshal parameter batch proof invalid, err:%w", err) types.RenderJSON(ctx, types.ErrParameterInvalidNo, nerr, nil) return } + proofMsg.BatchProof = &tmpBatchProof } if err := spc.submitProofReceiverLogic.HandleZkProof(ctx, &proofMsg); err != nil { diff --git a/coordinator/internal/logic/prover_task/batch_prover_task.go b/coordinator/internal/logic/prover_task/batch_prover_task.go index 7c16cc646..a7392d892 100644 --- a/coordinator/internal/logic/prover_task/batch_prover_task.go +++ b/coordinator/internal/logic/prover_task/batch_prover_task.go @@ -122,7 +122,7 @@ func (bp *BatchProverTask) formatProverTask(ctx context.Context, taskID string) taskMsg := &coordinatorType.ProverTaskSchema{ TaskID: taskID, ProofType: int(message.ProofTypeBatch), - ProofData: chunkProofsBytes, + ProofData: string(chunkProofsBytes), } return taskMsg, nil } diff --git a/coordinator/internal/logic/prover_task/chunk_prover_task.go b/coordinator/internal/logic/prover_task/chunk_prover_task.go index a5910c900..666ec6cf4 100644 --- a/coordinator/internal/logic/prover_task/chunk_prover_task.go +++ b/coordinator/internal/logic/prover_task/chunk_prover_task.go @@ -128,7 +128,7 @@ func (cp *ChunkProverTask) formatProverTask(ctx context.Context, hash string) (* proverTaskSchema := &coordinatorType.ProverTaskSchema{ TaskID: hash, ProofType: int(message.ProofTypeChunk), - ProofData: blockHashesBytes, + ProofData: string(blockHashesBytes), } return proverTaskSchema, nil diff --git a/coordinator/internal/logic/submit_proof/proof_receiver.go b/coordinator/internal/logic/submit_proof/proof_receiver.go index b5c3a648d..3cccc1c32 100644 --- a/coordinator/internal/logic/submit_proof/proof_receiver.go +++ b/coordinator/internal/logic/submit_proof/proof_receiver.go @@ -122,22 +122,22 @@ func (m *SubmitProofReceiverLogic) HandleZkProof(ctx *gin.Context, proofMsg *mes coordinatorProofsReceivedTotalCounter.Inc(1) // TODO: add switch case for ChunkProof & BatchProof - success, verifyErr := m.verifier.VerifyProof(proofMsg.BatchProof) - if verifyErr != nil || !success { - if verifyErr != nil { - // TODO: this is only a temp workaround for testnet, we should return err in real cases - log.Error("failed to verify zk proof", "proof id", proofMsg.ID, "prover pk", pk, "prove type", - proofMsg.Type, "proof time", proofTimeSec, "error", verifyErr) - } - m.proofFailure(ctx, proofMsg.ID, pk, proofMsg.Type) - - // TODO: Prover needs to be slashed if proof is invalid. - coordinatorProofsVerifiedFailedTimeTimer.Update(proofTime) - - log.Info("proof verified by coordinator failed", "proof id", proofMsg.ID, "prover name", proverTask.ProverName, - "prover pk", pk, "prove type", proofMsg.Type, "proof time", proofTimeSec, "error", verifyErr) - return nil - } + //success, verifyErr := m.verifier.VerifyProof(proofMsg.BatchProof) + //if verifyErr != nil || !success { + // if verifyErr != nil { + // // TODO: this is only a temp workaround for testnet, we should return err in real cases + // log.Error("failed to verify zk proof", "proof id", proofMsg.ID, "prover pk", pk, "prove type", + // proofMsg.Type, "proof time", proofTimeSec, "error", verifyErr) + // } + // m.proofFailure(ctx, proofMsg.ID, pk, proofMsg.Type) + // + // // TODO: Prover needs to be slashed if proof is invalid. + // coordinatorProofsVerifiedFailedTimeTimer.Update(proofTime) + // + // log.Info("proof verified by coordinator failed", "proof id", proofMsg.ID, "prover name", proverTask.ProverName, + // "prover pk", pk, "prove type", proofMsg.Type, "proof time", proofTimeSec, "error", verifyErr) + // return nil + //} if err := m.closeProofTask(ctx, proofMsg.ID, pk, proofMsg); err != nil { m.proofRecover(ctx, proofMsg.ID, pk, proofMsg.Type) diff --git a/coordinator/internal/orm/chunk.go b/coordinator/internal/orm/chunk.go index 45ad4b48c..25359021a 100644 --- a/coordinator/internal/orm/chunk.go +++ b/coordinator/internal/orm/chunk.go @@ -104,7 +104,7 @@ func (o *Chunk) GetProofsByBatchHash(ctx context.Context, batchHash string) ([]* for _, chunk := range chunks { var proof message.ChunkProof if err := json.Unmarshal(chunk.Proof, &proof); err != nil { - return nil, fmt.Errorf("Chunk.GetProofsByBatchHash error: %w, batch hash: %v, chunk hash: %v", err, batchHash, chunk.Hash) + return nil, fmt.Errorf("Chunk.GetProofsByBatchHash unmarshal proof error: %w, batch hash: %v, chunk hash: %v", err, batchHash, chunk.Hash) } proofs = append(proofs, &proof) } diff --git a/coordinator/internal/route/route.go b/coordinator/internal/route/route.go index 7504474e5..bd91e5d76 100644 --- a/coordinator/internal/route/route.go +++ b/coordinator/internal/route/route.go @@ -18,7 +18,7 @@ func v1(router *gin.RouterGroup, conf *config.Config) { r := router.Group("/v1") authMiddleware := middleware.AuthMiddleware(conf) - r.GET("/login", authMiddleware.LoginHandler) + r.POST("/login", authMiddleware.LoginHandler) // need jwt token api r.Use(authMiddleware.MiddlewareFunc()) diff --git a/coordinator/internal/types/errno.go b/coordinator/internal/types/errno.go index 4367c606f..de182354f 100644 --- a/coordinator/internal/types/errno.go +++ b/coordinator/internal/types/errno.go @@ -2,11 +2,13 @@ package types const ( // Success shows OK. - Success = 200 + Success = 0 // ErrParameterInvalidNo is invalid params ErrParameterInvalidNo = 20001 // ErrProverTaskFailure is getting prover task error ErrProverTaskFailure = 20002 // ErrHandleZkProofFailure is handle submit proof error ErrHandleZkProofFailure = 20003 + // ErrEmptyProofData get empty proof data + ErrEmptyProofData = 20004 ) diff --git a/coordinator/internal/types/prover_task.go b/coordinator/internal/types/prover_task.go index ff749740d..0730ce9e1 100644 --- a/coordinator/internal/types/prover_task.go +++ b/coordinator/internal/types/prover_task.go @@ -11,5 +11,5 @@ type ProverTaskParameter struct { type ProverTaskSchema struct { TaskID string `json:"task_id"` ProofType int `json:"proof_type"` - ProofData []byte `json:"proof_data"` + ProofData string `json:"proof_data"` } diff --git a/coordinator/internal/types/submit_proof.go b/coordinator/internal/types/submit_proof.go index d7cab4aad..1117b5c6d 100644 --- a/coordinator/internal/types/submit_proof.go +++ b/coordinator/internal/types/submit_proof.go @@ -4,7 +4,7 @@ package types type SubmitProofParameter struct { TaskID string `form:"task_id" json:"task_id" binding:"required"` ProofType int `form:"proof_type" json:"proof_type" binding:"required"` - Status int `form:"status" json:"status" binding:"required"` + Status int `form:"status" json:"status"` Signature string `form:"signature" json:"signature" binding:"required"` Proof string `form:"proof" json:"proof"` Error string `form:"error" json:"error"` diff --git a/go.work.sum b/go.work.sum index 60d2790dd..d62def610 100644 --- a/go.work.sum +++ b/go.work.sum @@ -60,7 +60,9 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXY github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= @@ -149,6 +151,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7 h1:6IrxszG5G+O7zhtkWxq6+unVvnrm1fqV2Pe+T95DUzw= github.com/crate-crypto/go-ipa v0.0.0-20220523130400-f11357ae11c7/go.mod h1:gFnFS95y8HstDP6P9pPwzrxOOC5TRDkwbM+ao15ChAI= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c h1:/ovYnF02fwL0kvspmy9AuyKg1JhdTRUgPw4nUxd9oZM= github.com/dave/jennifer v1.2.0 h1:S15ZkFMRoJ36mGAQgWL1tnr0NQJh9rZ8qatseX/VbBc= @@ -166,6 +169,7 @@ github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdw github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de h1:t0UHb5vdojIDUqktM6+xJAfScFBsVpXZmqC9dsgJmeA= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8 h1:akOQj8IVgoeFfBTzGOEQakCYshWD6RNo1M5pivFXt70= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -507,6 +511,7 @@ github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636 h1:aSISeOcal5irEhJd1M+ github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 h1:pXY9qYc/MP5zdvqWEUH6SjNiu7VhSjuVFTFiTcphaLU= github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= @@ -621,6 +626,7 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= @@ -685,4 +691,5 @@ modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=