Skip to content
This repository was archived by the owner on May 11, 2024. It is now read-only.

Commit 9b12c2f

Browse files
committed
feat(prover): introduce TierGuardianMinority
1 parent a352b40 commit 9b12c2f

15 files changed

+61
-48
lines changed

bindings/encoding/struct.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@ import (
1010

1111
// Tier IDs defined in protocol.
1212
var (
13-
TierOptimisticID uint16 = 100
14-
TierSgxID uint16 = 200
15-
TierSgxAndZkVMID uint16 = 300
16-
TierGuardianID uint16 = 1000
17-
ProtocolTiers = []uint16{
13+
TierOptimisticID uint16 = 100
14+
TierSgxID uint16 = 200
15+
TierSgxAndZkVMID uint16 = 300
16+
TierGuardianMinorityID uint16 = 900
17+
TierGuardianMajorityID uint16 = 1000
18+
ProtocolTiers = []uint16{
1819
TierOptimisticID,
1920
TierSgxID,
2021
TierSgxAndZkVMID,
21-
TierGuardianID,
22+
TierGuardianMinorityID,
23+
TierGuardianMajorityID,
2224
}
2325
GoldenTouchPrivKey = "92954368afd3caa1f3ce3ead0069c1af414054aefe1ef9aeacc1bf426222ce38"
2426
)

cmd/flags/prover.go

+14-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package flags
33
import (
44
"time"
55

6+
"github.com/taikoxyz/taiko-client/pkg/rpc"
67
"github.com/urfave/cli/v2"
78
)
89

@@ -164,11 +165,18 @@ var (
164165
EnvVars: []string{"PROVER_GUARDIAN_PROVER_HEALTH_CHECK_SERVER_ENDPOINT"},
165166
}
166167
// Guardian prover specific flag
167-
GuardianProver = &cli.StringFlag{
168-
Name: "guardianProver",
169-
Usage: "GuardianProver contract `address`",
168+
GuardianProverMinority = &cli.StringFlag{
169+
Name: "guardianProverMinority",
170+
Usage: "GuardianProverMinority contract `address`",
171+
Value: rpc.ZeroAddress.Hex(),
170172
Category: proverCategory,
171-
EnvVars: []string{"GUARDIAN_PROVER"},
173+
EnvVars: []string{"GUARDIAN_PROVER_MINORITY"},
174+
}
175+
GuardianProverMajority = &cli.StringFlag{
176+
Name: "guardianProverMajority",
177+
Usage: "GuardianProverMajority contract `address`",
178+
Category: proverCategory,
179+
EnvVars: []string{"GUARDIAN_PROVER_MAJORITY"},
172180
}
173181
GuardianProofSubmissionDelay = &cli.DurationFlag{
174182
Name: "guardian.submissionDelay",
@@ -224,7 +232,8 @@ var ProverFlags = MergeFlags(CommonFlags, []cli.Flag{
224232
MinTaikoTokenBalance,
225233
StartingBlockID,
226234
Dummy,
227-
GuardianProver,
235+
GuardianProverMinority,
236+
GuardianProverMajority,
228237
GuardianProofSubmissionDelay,
229238
GuardianProverHealthCheckServerEndpoint,
230239
Graffiti,

proposer/proposer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ func (p *Proposer) initTierFees() error {
433433
p.tierFees = append(p.tierFees, encoding.TierFee{Tier: tier.ID, Fee: p.OptimisticTierFee})
434434
case encoding.TierSgxID:
435435
p.tierFees = append(p.tierFees, encoding.TierFee{Tier: tier.ID, Fee: p.SgxTierFee})
436-
case encoding.TierGuardianID:
436+
case encoding.TierGuardianMajorityID:
437437
// Guardian prover should not charge any fee.
438438
p.tierFees = append(p.tierFees, encoding.TierFee{Tier: tier.ID, Fee: common.Big0})
439439
default:

prover/config.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ type Config struct {
3333
L1ProverPrivKey *ecdsa.PrivateKey
3434
StartingBlockID *big.Int
3535
Dummy bool
36-
GuardianProverAddress common.Address
36+
GuardianProverMinorityAddress common.Address
37+
GuardianProverMajorityAddress common.Address
3738
GuardianProofSubmissionDelay time.Duration
3839
Graffiti string
3940
BackOffMaxRetries uint64
@@ -101,7 +102,7 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
101102
}
102103

103104
// If we are running a guardian prover, we need to prove unassigned blocks and run in contester mode by default.
104-
if c.IsSet(flags.GuardianProver.Name) {
105+
if c.IsSet(flags.GuardianProverMajority.Name) {
105106
if err := c.Set(flags.ProveUnassignedBlocks.Name, "true"); err != nil {
106107
return nil, err
107108
}
@@ -119,7 +120,7 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
119120
}
120121

121122
// If we are not running a guardian prover, a raiko host endpoint is required.
122-
if !c.IsSet(flags.GuardianProver.Name) && !c.IsSet(flags.RaikoHostEndpoint.Name) {
123+
if !c.IsSet(flags.GuardianProverMajority.Name) && !c.IsSet(flags.RaikoHostEndpoint.Name) {
123124
return nil, errors.New("raiko host not provided")
124125
}
125126

@@ -180,7 +181,8 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
180181
RaikoL2Endpoint: raikoL2Endpoint,
181182
StartingBlockID: startingBlockID,
182183
Dummy: c.Bool(flags.Dummy.Name),
183-
GuardianProverAddress: common.HexToAddress(c.String(flags.GuardianProver.Name)),
184+
GuardianProverMinorityAddress: common.HexToAddress(c.String(flags.GuardianProverMinority.Name)),
185+
GuardianProverMajorityAddress: common.HexToAddress(c.String(flags.GuardianProverMajority.Name)),
184186
GuardianProofSubmissionDelay: c.Duration(flags.GuardianProofSubmissionDelay.Name),
185187
GuardianProverHealthCheckServerEndpoint: guardianProverHealthCheckServerEndpoint,
186188
Graffiti: c.String(flags.Graffiti.Name),

prover/config_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (s *ProverTestSuite) TestNewConfigFromCliContextGuardianProver() {
8484
"--" + flags.MinOptimisticTierFee.Name, fmt.Sprint(minTierFee),
8585
"--" + flags.MinSgxTierFee.Name, fmt.Sprint(minTierFee),
8686
"--" + flags.ProverCapacity.Name, "8",
87-
"--" + flags.GuardianProver.Name, os.Getenv("GUARDIAN_PROVER_CONTRACT_ADDRESS"),
87+
"--" + flags.GuardianProverMajority.Name, os.Getenv("GUARDIAN_PROVER_CONTRACT_ADDRESS"),
8888
"--" + flags.AssignmentHookAddress.Name, os.Getenv("ASSIGNMENT_HOOK_ADDRESS"),
8989
"--" + flags.Graffiti.Name, "",
9090
"--" + flags.ProveUnassignedBlocks.Name,
@@ -117,7 +117,7 @@ func (s *ProverTestSuite) SetupApp() *cli.App {
117117
&cli.StringFlag{Name: flags.L1ProverPrivKey.Name},
118118
&cli.Uint64Flag{Name: flags.StartingBlockID.Name},
119119
&cli.BoolFlag{Name: flags.Dummy.Name},
120-
&cli.StringFlag{Name: flags.GuardianProver.Name},
120+
&cli.StringFlag{Name: flags.GuardianProverMajority.Name},
121121
&cli.StringFlag{Name: flags.Graffiti.Name},
122122
&cli.BoolFlag{Name: flags.ProveUnassignedBlocks.Name},
123123
&cli.DurationFlag{Name: flags.RPCTimeout.Name},

prover/event_handler/block_proposed.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ type BlockProposedEventHandler struct {
4343
backOffMaxRetrys uint64
4444
contesterMode bool
4545
proveUnassignedBlocks bool
46-
tierToOverride uint16
47-
submissionDelay time.Duration
46+
// Guardian prover related.
47+
isGuardian bool
48+
submissionDelay time.Duration
4849
}
4950

5051
// NewBlockProposedEventHandlerOps is the options for creating a new BlockProposedEventHandler.
@@ -79,7 +80,7 @@ func NewBlockProposedEventHandler(opts *NewBlockProposedEventHandlerOps) *BlockP
7980
opts.BackOffMaxRetrys,
8081
opts.ContesterMode,
8182
opts.ProveUnassignedBlocks,
82-
0,
83+
false,
8384
opts.SubmissionDelay,
8485
}
8586
}
@@ -347,8 +348,8 @@ func (h *BlockProposedEventHandler) checkExpirationAndSubmitProof(
347348
return err
348349
}
349350

350-
if h.tierToOverride != 0 {
351-
tier = h.tierToOverride
351+
if h.isGuardian {
352+
tier = encoding.TierGuardianMinorityID
352353
}
353354

354355
log.Info(
@@ -388,8 +389,7 @@ func NewBlockProposedEventGuardianHandler(
388389
opts *NewBlockProposedGuardianEventHandlerOps,
389390
) *BlockProposedGuaridanEventHandler {
390391
blockProposedEventHandler := NewBlockProposedEventHandler(opts.NewBlockProposedEventHandlerOps)
391-
// For guardian provers, we only send top tier proofs.
392-
blockProposedEventHandler.tierToOverride = encoding.TierGuardianID
392+
blockProposedEventHandler.isGuardian = true
393393

394394
return &BlockProposedGuaridanEventHandler{
395395
BlockProposedEventHandler: blockProposedEventHandler,

prover/event_handler/util_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ type ProverEventHandlerTestSuite struct {
2020
func (s *ProverEventHandlerTestSuite) TestGetProvingWindowNotFound() {
2121
_, err := getProvingWindow(&bindings.TaikoL1ClientBlockProposed{
2222
Meta: bindings.TaikoDataBlockMetadata{
23-
MinTier: encoding.TierGuardianID + 1,
23+
MinTier: encoding.TierGuardianMajorityID + 1,
2424
},
2525
}, []*rpc.TierProviderTierWithID{})
2626
s.ErrorIs(err, errTierNotFound)

prover/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func (p *Prover) initProofSubmitters(
112112
L2Endpoint: p.cfg.RaikoL2Endpoint,
113113
Dummy: p.cfg.Dummy,
114114
}
115-
case encoding.TierGuardianID:
115+
case encoding.TierGuardianMajorityID:
116116
producer = proofProducer.NewGuardianProofProducer(p.cfg.EnableLivenessBondProof)
117117
default:
118118
return fmt.Errorf("unsupported tier: %d", tier.ID)

prover/proof_producer/guardian_producer.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,5 @@ func (g *GuardianProofProducer) RequestProof(
5656

5757
// Tier implements the ProofProducer interface.
5858
func (g *GuardianProofProducer) Tier() uint16 {
59-
return encoding.TierGuardianID
59+
return encoding.TierGuardianMajorityID
6060
}

prover/proof_producer/guardian_producer_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestGuardianProducerRequestProof(t *testing.T) {
4747

4848
require.Equal(t, res.BlockID, blockID)
4949
require.Equal(t, res.Header, header)
50-
require.Equal(t, res.Tier, encoding.TierGuardianID)
50+
require.Equal(t, res.Tier, encoding.TierGuardianMajorityID)
5151
require.NotEmpty(t, res.Proof)
5252
}
5353

@@ -84,7 +84,7 @@ func TestGuardianProducerRequestProofReturnLivenessBond(t *testing.T) {
8484

8585
require.Equal(t, res.BlockID, blockID)
8686
require.Equal(t, res.Header, header)
87-
require.Equal(t, res.Tier, encoding.TierGuardianID)
87+
require.Equal(t, res.Tier, encoding.TierGuardianMajorityID)
8888
require.NotEmpty(t, res.Proof)
8989
require.Equal(t, res.Proof, crypto.Keccak256([]byte("RETURN_LIVENESS_BOND")))
9090
}

prover/proof_submitter/proof_submitter.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ func (s *ProofSubmitter) SubmitProof(
170170
Tier: proofWithHeader.Tier,
171171
Data: proofWithHeader.Proof,
172172
},
173-
proofWithHeader.Tier == encoding.TierGuardianID,
173+
proofWithHeader.Tier == encoding.TierGuardianMajorityID,
174174
),
175175
); err != nil {
176176
if err.Error() == transaction.ErrUnretryableSubmission.Error() {

prover/proof_submitter/proof_submitter_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ func (s *ProofSubmitterTestSuite) TestGuardianSubmitProofs() {
192192
for _, e := range events {
193193
s.Nil(s.submitter.RequestProof(context.Background(), e))
194194
proofWithHeader := <-s.proofCh
195-
proofWithHeader.Tier = encoding.TierGuardianID
195+
proofWithHeader.Tier = encoding.TierGuardianMajorityID
196196
s.Nil(s.submitter.SubmitProof(context.Background(), proofWithHeader))
197197
}
198198
}

prover/prover.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func InitFromConfig(ctx context.Context, p *Prover, cfg *Config) (err error) {
110110
TaikoL1Address: cfg.TaikoL1Address,
111111
TaikoL2Address: cfg.TaikoL2Address,
112112
TaikoTokenAddress: cfg.TaikoTokenAddress,
113-
GuardianProverAddress: cfg.GuardianProverAddress,
113+
GuardianProverAddress: cfg.GuardianProverMajorityAddress,
114114
Timeout: cfg.RPCTimeout,
115115
}); err != nil {
116116
return err
@@ -143,7 +143,7 @@ func InitFromConfig(ctx context.Context, p *Prover, cfg *Config) (err error) {
143143
}
144144
p.sharedState.SetTiers(tiers)
145145

146-
txBuilder := transaction.NewProveBlockTxBuilder(p.rpc, p.cfg.TaikoL1Address, p.cfg.GuardianProverAddress)
146+
txBuilder := transaction.NewProveBlockTxBuilder(p.rpc, p.cfg.TaikoL1Address, p.cfg.GuardianProverMajorityAddress)
147147

148148
if p.txmgr, err = txmgr.NewSimpleTxManager(
149149
"prover",
@@ -375,7 +375,7 @@ func (p *Prover) contestProofOp(req *proofProducer.ContestRequestBody) error {
375375
// requestProofOp requests a new proof generation operation.
376376
func (p *Prover) requestProofOp(e *bindings.TaikoL1ClientBlockProposed, minTier uint16) error {
377377
if p.IsGuardianProver() {
378-
minTier = encoding.TierGuardianID
378+
minTier = encoding.TierGuardianMajorityID
379379
}
380380
if submitter := p.selectSubmitter(minTier); submitter != nil {
381381
if err := submitter.RequestProof(p.ctx, e); err != nil {
@@ -453,7 +453,7 @@ func (p *Prover) getSubmitterByTier(tier uint16) proofSubmitter.Submitter {
453453

454454
// IsGuardianProver returns true if the current prover is a guardian prover.
455455
func (p *Prover) IsGuardianProver() bool {
456-
return p.cfg.GuardianProverAddress != common.Address{}
456+
return p.cfg.GuardianProverMajorityAddress != common.Address{}
457457
}
458458

459459
// ProverAddress returns the current prover account address.

prover/prover_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -298,14 +298,14 @@ func (s *ProverTestSuite) TestContestWrongBlocks() {
298298

299299
s.Nil(s.p.transitionContestedHandler.Handle(context.Background(), contestedEvent))
300300

301-
s.p.cfg.GuardianProverAddress = common.HexToAddress(os.Getenv("GUARDIAN_PROVER_CONTRACT_ADDRESS"))
301+
s.p.cfg.GuardianProverMajorityAddress = common.HexToAddress(os.Getenv("GUARDIAN_PROVER_CONTRACT_ADDRESS"))
302302
s.True(s.p.IsGuardianProver())
303303

304-
txBuilder := transaction.NewProveBlockTxBuilder(s.p.rpc, s.p.cfg.TaikoL1Address, s.p.cfg.GuardianProverAddress)
304+
txBuilder := transaction.NewProveBlockTxBuilder(s.p.rpc, s.p.cfg.TaikoL1Address, s.p.cfg.GuardianProverMajorityAddress)
305305
s.p.proofSubmitters = nil
306306
s.Nil(s.p.initProofSubmitters(s.p.txmgr, txBuilder))
307307

308-
s.p.rpc.GuardianProver, err = bindings.NewGuardianProver(s.p.cfg.GuardianProverAddress, s.p.rpc.L1)
308+
s.p.rpc.GuardianProver, err = bindings.NewGuardianProver(s.p.cfg.GuardianProverMajorityAddress, s.p.rpc.L1)
309309
s.Nil(err)
310310

311311
approvedSink := make(chan *bindings.GuardianProverGuardianApproval)
@@ -319,7 +319,7 @@ func (s *ProverTestSuite) TestContestWrongBlocks() {
319319
}()
320320
req = <-s.p.proofSubmissionCh
321321
s.Nil(s.p.requestProofOp(req.Event, req.Tier))
322-
s.Nil(s.p.selectSubmitter(encoding.TierGuardianID).SubmitProof(context.Background(), <-s.p.proofGenerationCh))
322+
s.Nil(s.p.selectSubmitter(encoding.TierGuardianMajorityID).SubmitProof(context.Background(), <-s.p.proofGenerationCh))
323323
approvedEvent := <-approvedSink
324324

325325
s.Equal(header.Number.Uint64(), approvedEvent.BlockId.Uint64())
@@ -340,7 +340,7 @@ func (s *ProverTestSuite) TestProveExpiredUnassignedBlock() {
340340
}()
341341

342342
e.AssignedProver = common.BytesToAddress(testutils.RandomHash().Bytes())
343-
s.p.cfg.GuardianProverAddress = common.Address{}
343+
s.p.cfg.GuardianProverMajorityAddress = common.Address{}
344344
s.Nil(s.p.assignmentExpiredHandler.Handle(context.Background(), e))
345345
req := <-s.p.proofSubmissionCh
346346
s.Nil(s.p.requestProofOp(req.Event, req.Tier))
@@ -353,21 +353,21 @@ func (s *ProverTestSuite) TestProveExpiredUnassignedBlock() {
353353
}
354354

355355
func (s *ProverTestSuite) TestSelectSubmitter() {
356-
submitter := s.p.selectSubmitter(encoding.TierGuardianID - 1)
356+
submitter := s.p.selectSubmitter(encoding.TierGuardianMajorityID - 1)
357357
s.NotNil(submitter)
358-
s.Equal(encoding.TierGuardianID, submitter.Tier())
358+
s.Equal(encoding.TierGuardianMajorityID, submitter.Tier())
359359
}
360360

361361
func (s *ProverTestSuite) TestSelectSubmitterNotFound() {
362-
submitter := s.p.selectSubmitter(encoding.TierGuardianID + 1)
362+
submitter := s.p.selectSubmitter(encoding.TierGuardianMajorityID + 1)
363363
s.Nil(submitter)
364364
}
365365

366366
func (s *ProverTestSuite) TestGetSubmitterByTier() {
367-
submitter := s.p.getSubmitterByTier(encoding.TierGuardianID)
367+
submitter := s.p.getSubmitterByTier(encoding.TierGuardianMajorityID)
368368
s.NotNil(submitter)
369-
s.Equal(encoding.TierGuardianID, submitter.Tier())
370-
s.Nil(s.p.getSubmitterByTier(encoding.TierGuardianID + 1))
369+
s.Equal(encoding.TierGuardianMajorityID, submitter.Tier())
370+
s.Nil(s.p.getSubmitterByTier(encoding.TierGuardianMajorityID + 1))
371371
}
372372

373373
func (s *ProverTestSuite) TestProveOp() {

prover/server/api.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ func (s *ProverServer) CreateAssignment(c echo.Context) error {
148148

149149
// 4. Check if the proof fee meets prover's minimum requirement for each tier.
150150
for _, tier := range req.TierFees {
151-
if tier.Tier == encoding.TierGuardianID {
151+
if tier.Tier == encoding.TierGuardianMajorityID {
152152
continue
153153
}
154154

0 commit comments

Comments
 (0)