Skip to content

Commit 80d457b

Browse files
author
colinlyguo
committed
simplify coordinator
1 parent a18fe06 commit 80d457b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+104
-8024
lines changed

common/types/message/message.go

Lines changed: 11 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const (
1414
EuclidFork = "euclid"
1515
EuclidV2Fork = "euclidV2"
1616

17-
EuclidForkNameForProver = "euclidv1"
1817
EuclidV2ForkNameForProver = "euclidv2"
1918
)
2019

@@ -99,22 +98,22 @@ func (e *Byte48) UnmarshalJSON(input []byte) error {
9998
// BatchTaskDetail is a type containing BatchTask detail.
10099
type BatchTaskDetail struct {
101100
// use one of the string of EuclidFork / EuclidV2Fork
102-
ForkName string `json:"fork_name"`
103-
ChunkInfos []*ChunkInfo `json:"chunk_infos"`
104-
ChunkProofs []ChunkProof `json:"chunk_proofs"`
105-
BatchHeader interface{} `json:"batch_header"`
106-
BlobBytes []byte `json:"blob_bytes"`
107-
KzgProof Byte48 `json:"kzg_proof,omitempty"`
108-
KzgCommitment Byte48 `json:"kzg_commitment,omitempty"`
109-
ChallengeDigest common.Hash `json:"challenge_digest,omitempty"`
101+
ForkName string `json:"fork_name"`
102+
ChunkInfos []*ChunkInfo `json:"chunk_infos"`
103+
ChunkProofs []*OpenVMChunkProof `json:"chunk_proofs"`
104+
BatchHeader interface{} `json:"batch_header"`
105+
BlobBytes []byte `json:"blob_bytes"`
106+
KzgProof Byte48 `json:"kzg_proof,omitempty"`
107+
KzgCommitment Byte48 `json:"kzg_commitment,omitempty"`
108+
ChallengeDigest common.Hash `json:"challenge_digest,omitempty"`
110109
}
111110

112111
// BundleTaskDetail consists of all the information required to describe the task to generate a proof for a bundle of batches.
113112
type BundleTaskDetail struct {
114113
// use one of the string of EuclidFork / EuclidV2Fork
115-
ForkName string `json:"fork_name"`
116-
BatchProofs []BatchProof `json:"batch_proofs"`
117-
BundleInfo *OpenVMBundleInfo `json:"bundle_info,omitempty"`
114+
ForkName string `json:"fork_name"`
115+
BatchProofs []*OpenVMBatchProof `json:"batch_proofs"`
116+
BundleInfo *OpenVMBundleInfo `json:"bundle_info,omitempty"`
118117
}
119118

120119
// ChunkInfo is for calculating pi_hash for chunk
@@ -143,157 +142,6 @@ type BlockContextV2 struct {
143142
NumL1Msgs uint16 `json:"num_l1_msgs"`
144143
}
145144

146-
// SubCircuitRowUsage tracing info added in v0.11.0rc8
147-
type SubCircuitRowUsage struct {
148-
Name string `json:"name"`
149-
RowNumber uint64 `json:"row_number"`
150-
}
151-
152-
// ChunkProof
153-
type ChunkProof interface {
154-
Proof() []byte
155-
}
156-
157-
// NewChunkProof creates a new ChunkProof instance.
158-
func NewChunkProof(hardForkName string) ChunkProof {
159-
switch hardForkName {
160-
case EuclidFork, EuclidV2Fork:
161-
return &OpenVMChunkProof{}
162-
default:
163-
return &Halo2ChunkProof{}
164-
}
165-
}
166-
167-
// Halo2ChunkProof includes the proof info that are required for chunk verification and rollup.
168-
type Halo2ChunkProof struct {
169-
StorageTrace []byte `json:"storage_trace,omitempty"`
170-
Protocol []byte `json:"protocol"`
171-
RawProof []byte `json:"proof"`
172-
Instances []byte `json:"instances"`
173-
Vk []byte `json:"vk"`
174-
// cross-reference between cooridinator computation and prover compution
175-
ChunkInfo *ChunkInfo `json:"chunk_info,omitempty"`
176-
GitVersion string `json:"git_version,omitempty"`
177-
RowUsages []SubCircuitRowUsage `json:"row_usages,omitempty"`
178-
}
179-
180-
// Proof returns the proof bytes of a ChunkProof
181-
func (ap *Halo2ChunkProof) Proof() []byte {
182-
return ap.RawProof
183-
}
184-
185-
// BatchProof
186-
type BatchProof interface {
187-
SanityCheck() error
188-
Proof() []byte
189-
}
190-
191-
// NewBatchProof creates a new BatchProof instance.
192-
func NewBatchProof(hardForkName string) BatchProof {
193-
switch hardForkName {
194-
case EuclidFork, EuclidV2Fork:
195-
return &OpenVMBatchProof{}
196-
default:
197-
return &Halo2BatchProof{}
198-
}
199-
}
200-
201-
// Halo2BatchProof includes the proof info that are required for batch verification and rollup.
202-
type Halo2BatchProof struct {
203-
Protocol []byte `json:"protocol"`
204-
RawProof []byte `json:"proof"`
205-
Instances []byte `json:"instances"`
206-
Vk []byte `json:"vk"`
207-
// cross-reference between cooridinator computation and prover compution
208-
BatchHash common.Hash `json:"batch_hash"`
209-
GitVersion string `json:"git_version,omitempty"`
210-
}
211-
212-
// Proof returns the proof bytes of a BatchProof
213-
func (ap *Halo2BatchProof) Proof() []byte {
214-
return ap.RawProof
215-
}
216-
217-
// SanityCheck checks whether a BatchProof is in a legal format
218-
func (ap *Halo2BatchProof) SanityCheck() error {
219-
if ap == nil {
220-
return errors.New("agg_proof is nil")
221-
}
222-
223-
if len(ap.RawProof) == 0 {
224-
return errors.New("proof not ready")
225-
}
226-
227-
if len(ap.RawProof)%32 != 0 {
228-
return fmt.Errorf("proof buffer length must be a multiple of 32, got: %d", len(ap.RawProof))
229-
}
230-
231-
if len(ap.Instances) == 0 {
232-
return errors.New("instance not ready")
233-
}
234-
235-
if len(ap.Vk) == 0 {
236-
return errors.New("vk not ready")
237-
}
238-
239-
return nil
240-
}
241-
242-
// BundleProof
243-
type BundleProof interface {
244-
SanityCheck() error
245-
Proof() []byte
246-
}
247-
248-
// NewBundleProof creates a new BundleProof instance.
249-
func NewBundleProof(hardForkName string) BundleProof {
250-
switch hardForkName {
251-
case EuclidFork, EuclidV2Fork:
252-
return &OpenVMBundleProof{}
253-
default:
254-
return &Halo2BundleProof{}
255-
}
256-
}
257-
258-
// BundleProof includes the proof info that are required for verification of a bundle of batch proofs.
259-
type Halo2BundleProof struct {
260-
RawProof []byte `json:"proof"`
261-
Instances []byte `json:"instances"`
262-
Vk []byte `json:"vk"`
263-
// cross-reference between cooridinator computation and prover compution
264-
GitVersion string `json:"git_version,omitempty"`
265-
}
266-
267-
// Proof returns the proof bytes of a BundleProof
268-
func (ap *Halo2BundleProof) Proof() []byte {
269-
return ap.RawProof
270-
}
271-
272-
// SanityCheck checks whether a BundleProof is in a legal format
273-
func (ap *Halo2BundleProof) SanityCheck() error {
274-
if ap == nil {
275-
return errors.New("agg_proof is nil")
276-
}
277-
278-
if len(ap.RawProof) == 0 {
279-
return errors.New("proof not ready")
280-
}
281-
282-
if len(ap.RawProof)%32 != 0 {
283-
return fmt.Errorf("proof buffer length must be a multiple of 32, got: %d", len(ap.RawProof))
284-
}
285-
286-
if len(ap.Instances) == 0 {
287-
return errors.New("instance not ready")
288-
}
289-
290-
if len(ap.Vk) == 0 {
291-
return errors.New("vk not ready")
292-
}
293-
294-
return nil
295-
}
296-
297145
// Proof for flatten VM proof
298146
type OpenVMProof struct {
299147
Proof []byte `json:"proofs"`

coordinator/cmd/api/app/mock_app.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,6 @@ func (c *CoordinatorApp) MockConfig(store bool) error {
9090
cfg.ProverManager = &coordinatorConfig.ProverManager{
9191
ProversPerSession: 1,
9292
Verifier: &coordinatorConfig.VerifierConfig{
93-
MockMode: true,
94-
LowVersionCircuit: &coordinatorConfig.CircuitConfig{
95-
ParamsPath: "",
96-
AssetsPath: "",
97-
ForkName: "darwin",
98-
MinProverVersion: "v4.4.57",
99-
},
10093
HighVersionCircuit: &coordinatorConfig.CircuitConfig{
10194
ParamsPath: "",
10295
AssetsPath: "",

coordinator/cmd/tool/tool.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ func action(ctx *cli.Context) error {
6262
return fmt.Errorf("failed to get batch proofs for bundle task id:%s, no batch found", taskID)
6363
}
6464

65-
var batchProofs []message.BatchProof
65+
var batchProofs []*message.OpenVMBatchProof
6666
for _, batch := range batches {
67-
proof := message.NewBatchProof("darwinV2")
67+
proof := &message.OpenVMBatchProof{}
6868
if encodeErr := json.Unmarshal(batch.Proof, &proof); encodeErr != nil {
6969
log.Error("failed to unmarshal batch proof")
7070
return fmt.Errorf("failed to unmarshal proof: %w, bundle hash: %v, batch hash: %v", encodeErr, taskID, batch.Hash)

coordinator/conf/config.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@
77
"batch_collection_time_sec": 180,
88
"chunk_collection_time_sec": 180,
99
"verifier": {
10-
"mock_mode": true,
11-
"low_version_circuit": {
12-
"params_path": "params",
13-
"assets_path": "assets",
14-
"fork_name": "darwin",
15-
"min_prover_version": "v4.4.43"
16-
},
1710
"high_version_circuit": {
1811
"params_path": "params",
1912
"assets_path": "assets",

coordinator/internal/config/config.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ type CircuitConfig struct {
5959

6060
// VerifierConfig load zk verifier config.
6161
type VerifierConfig struct {
62-
MockMode bool `json:"mock_mode"`
63-
LowVersionCircuit *CircuitConfig `json:"low_version_circuit"`
6462
HighVersionCircuit *CircuitConfig `json:"high_version_circuit"`
6563
}
6664

coordinator/internal/controller/api/controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func InitController(cfg *config.Config, chainCfg *params.ChainConfig, db *gorm.D
2626
panic("proof receiver new verifier failure")
2727
}
2828

29-
log.Info("verifier created", "chunkVerifier", vf.ChunkVKMap, "batchVerifier", vf.BatchVKMap, "bundleVerifier", vf.BundleVkMap, "openVmVerifier", vf.OpenVMVkMap)
29+
log.Info("verifier created", "openVmVerifier", vf.OpenVMVkMap)
3030

3131
Auth = NewAuthController(db, cfg, vf)
3232
GetTask = NewGetTaskController(cfg, chainCfg, db, reg)

coordinator/internal/logic/auth/login.go

Lines changed: 15 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ import (
2222
type LoginLogic struct {
2323
cfg *config.Config
2424
challengeOrm *orm.Challenge
25-
chunkVks map[string]struct{}
26-
batchVKs map[string]struct{}
27-
bundleVks map[string]struct{}
2825

2926
openVmVks map[string]struct{}
3027

@@ -34,28 +31,14 @@ type LoginLogic struct {
3431
// NewLoginLogic new a LoginLogic
3532
func NewLoginLogic(db *gorm.DB, cfg *config.Config, vf *verifier.Verifier) *LoginLogic {
3633
proverVersionHardForkMap := make(map[string][]string)
37-
if version.CheckScrollRepoVersion(cfg.ProverManager.Verifier.LowVersionCircuit.MinProverVersion, cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion) {
38-
log.Error("config file error, low verifier min_prover_version should not more than high verifier min_prover_version",
39-
"low verifier min_prover_version", cfg.ProverManager.Verifier.LowVersionCircuit.MinProverVersion,
40-
"high verifier min_prover_version", cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion)
41-
panic("verifier config file error")
42-
}
4334

4435
var highHardForks []string
4536
highHardForks = append(highHardForks, cfg.ProverManager.Verifier.HighVersionCircuit.ForkName)
46-
if cfg.ProverManager.Verifier.HighVersionCircuit.ForkName != message.EuclidFork && cfg.ProverManager.Verifier.HighVersionCircuit.ForkName != message.EuclidV2Fork {
47-
highHardForks = append(highHardForks, cfg.ProverManager.Verifier.LowVersionCircuit.ForkName)
48-
}
4937
highHardForks = append(highHardForks, message.EuclidFork, message.EuclidV2Fork)
5038
proverVersionHardForkMap[cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion] = highHardForks
5139

52-
proverVersionHardForkMap[cfg.ProverManager.Verifier.LowVersionCircuit.MinProverVersion] = []string{cfg.ProverManager.Verifier.LowVersionCircuit.ForkName}
53-
5440
return &LoginLogic{
5541
cfg: cfg,
56-
chunkVks: vf.ChunkVKMap,
57-
batchVKs: vf.BatchVKMap,
58-
bundleVks: vf.BundleVkMap,
5942
openVmVks: vf.OpenVMVkMap,
6043
challengeOrm: orm.NewChallenge(db),
6144
proverVersionHardForkMap: proverVersionHardForkMap,
@@ -75,49 +58,25 @@ func (l *LoginLogic) Check(login *types.LoginParameter) error {
7558
return errors.New("auth message verify failure")
7659
}
7760

78-
// FIXME: for backward compatibility, set prover version as darwin prover version,
79-
// change v4.4.56 to l.cfg.ProverManager.Verifier.LowVersionCircuit.MinProverVersion after Euclid upgrade, including the log.
80-
// hardcode the prover version because l.cfg.ProverManager.Verifier.LowVersionCircuit.MinProverVersion is used in another check and should be set as v4.4.89 for darwinV2 provers.
81-
if !version.CheckScrollRepoVersion(login.Message.ProverVersion, "v4.4.56") {
82-
return fmt.Errorf("incompatible prover version. please upgrade your prover, minimum allowed version: %s, actual version: %s",
83-
"v4.4.56", login.Message.ProverVersion)
61+
if !version.CheckScrollRepoVersion(login.Message.ProverVersion, l.cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion) {
62+
return fmt.Errorf("incompatible prover version. please upgrade your prover, minimum allowed version: %s, actual version: %s", l.cfg.ProverManager.Verifier.HighVersionCircuit.MinProverVersion, login.Message.ProverVersion)
8463
}
8564

86-
if len(login.Message.ProverTypes) > 0 {
87-
vks := make(map[string]struct{})
88-
for _, proverType := range login.Message.ProverTypes {
89-
switch proverType {
90-
case types.ProverTypeChunk:
91-
for vk := range l.chunkVks {
92-
vks[vk] = struct{}{}
93-
}
94-
case types.ProverTypeBatch:
95-
for vk := range l.batchVKs {
96-
vks[vk] = struct{}{}
97-
}
98-
for vk := range l.bundleVks {
99-
vks[vk] = struct{}{}
100-
}
101-
case types.ProverTypeOpenVM:
102-
for vk := range l.openVmVks {
103-
vks[vk] = struct{}{}
104-
}
105-
default:
106-
log.Error("invalid prover_type", "value", proverType, "prover name", login.Message.ProverName, "prover_version", login.Message.ProverVersion)
107-
}
108-
}
65+
vks := make(map[string]struct{})
66+
for vk := range l.openVmVks {
67+
vks[vk] = struct{}{}
68+
}
10969

110-
for _, vk := range login.Message.VKs {
111-
if _, ok := vks[vk]; !ok {
112-
log.Error("vk inconsistency", "prover vk", vk, "prover name", login.Message.ProverName,
113-
"prover_version", login.Message.ProverVersion, "message", login.Message)
114-
if !version.CheckScrollProverVersion(login.Message.ProverVersion) {
115-
return fmt.Errorf("incompatible prover version. please upgrade your prover, expect version: %s, actual version: %s",
116-
version.Version, login.Message.ProverVersion)
117-
}
118-
// if the prover reports a same prover version
119-
return errors.New("incompatible vk. please check your params files or config files")
70+
for _, vk := range login.Message.VKs {
71+
if _, ok := vks[vk]; !ok {
72+
log.Error("vk inconsistency", "prover vk", vk, "prover name", login.Message.ProverName,
73+
"prover_version", login.Message.ProverVersion, "message", login.Message)
74+
if !version.CheckScrollProverVersion(login.Message.ProverVersion) {
75+
return fmt.Errorf("incompatible prover version. please upgrade your prover, expect version: %s, actual version: %s",
76+
version.Version, login.Message.ProverVersion)
12077
}
78+
// if the prover reports a same prover version
79+
return errors.New("incompatible vk. please check your params files or config files")
12180
}
12281
}
12382

@@ -142,12 +101,6 @@ func (l *LoginLogic) ProverHardForkName(login *types.LoginParameter) (string, er
142101
}
143102

144103
proverVersion := proverVersionSplits[0]
145-
146-
// allowing darwin provers to login, because darwin provers can prove darwinV2 chunk tasks
147-
if proverVersion == "v4.4.56" {
148-
return "darwin", nil
149-
}
150-
151104
if hardForkNames, ok := l.proverVersionHardForkMap[proverVersion]; ok {
152105
return strings.Join(hardForkNames, ","), nil
153106
}

0 commit comments

Comments
 (0)