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

Commit

Permalink
feat(prover): make guardian provers connecting to their local raiko
Browse files Browse the repository at this point in the history
… service (#797)
  • Loading branch information
davidtaikocha committed May 6, 2024
1 parent c0a5ddd commit da5ad24
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 12 deletions.
1 change: 1 addition & 0 deletions driver/txlist_decompressor/txlist_decompressor.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/rlp"

"github.com/taikoxyz/taiko-client/internal/utils"
)

Expand Down
1 change: 1 addition & 0 deletions driver/txlist_decompressor/txlist_decompressor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/stretchr/testify/require"

"github.com/taikoxyz/taiko-client/internal/utils"
)

Expand Down
5 changes: 0 additions & 5 deletions prover/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,6 @@ func NewConfigFromCliContext(c *cli.Context) (*Config, error) {
}
}

// If we are not running a guardian prover, a raiko host endpoint is required.
if !c.IsSet(flags.GuardianProver.Name) && !c.IsSet(flags.RaikoHostEndpoint.Name) {
return nil, errors.New("raiko host not provided")
}

var (
raikoL1Endpoint = c.String(flags.RaikoL1Endpoint.Name)
raikoL1BeaconEndpoint = c.String(flags.RaikoL1BeaconEndpoint.Name)
Expand Down
10 changes: 9 additions & 1 deletion prover/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,18 @@ func (p *Prover) initProofSubmitters(
L1Endpoint: p.cfg.RaikoL1Endpoint,
L1BeaconEndpoint: p.cfg.RaikoL1BeaconEndpoint,
L2Endpoint: p.cfg.RaikoL2Endpoint,
ProofType: proofProducer.ProofTypeSgx,
Dummy: p.cfg.Dummy,
}
case encoding.TierGuardianID:
producer = proofProducer.NewGuardianProofProducer(p.cfg.EnableLivenessBondProof)
producer = proofProducer.NewGuardianProofProducer(&proofProducer.SGXProofProducer{
RaikoHostEndpoint: p.cfg.RaikoHostEndpoint,
L1Endpoint: p.cfg.RaikoL1Endpoint,
L1BeaconEndpoint: p.cfg.RaikoL1BeaconEndpoint,
L2Endpoint: p.cfg.RaikoL2Endpoint,
ProofType: proofProducer.ProofTypeCPU,
Dummy: p.cfg.Dummy,
}, p.cfg.EnableLivenessBondProof)
default:
return fmt.Errorf("unsupported tier: %d", tier.ID)
}
Expand Down
14 changes: 11 additions & 3 deletions prover/proof_producer/guardian_producer.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,19 @@ import (
// GuardianProofProducer always returns an optimistic (dummy) proof.
type GuardianProofProducer struct {
returnLivenessBond bool
DummyProofProducer
*SGXProofProducer
}

func NewGuardianProofProducer(returnLivenessBond bool) *GuardianProofProducer {
func NewGuardianProofProducer(sgxProofProducer *SGXProofProducer, returnLivenessBond bool) *GuardianProofProducer {
return &GuardianProofProducer{
SGXProofProducer: sgxProofProducer,
returnLivenessBond: returnLivenessBond,
}
}

// RequestProof implements the ProofProducer interface.
func (g *GuardianProofProducer) RequestProof(
_ context.Context,
ctx context.Context,
opts *ProofRequestOptions,
blockID *big.Int,
meta *bindings.TaikoDataBlockMetadata,
Expand All @@ -51,6 +52,13 @@ func (g *GuardianProofProducer) RequestProof(
}, nil
}

// Each guardian prover should check the block hash with raiko at first,
// before submitting the guardian proof, if raiko can return a proof without
// any error, which means the block hash is valid.
if _, err := g.SGXProofProducer.RequestProof(ctx, opts, blockID, meta, header); err != nil {
return nil, err
}

return g.DummyProofProducer.RequestProof(opts, blockID, meta, header, g.Tier())
}

Expand Down
4 changes: 2 additions & 2 deletions prover/proof_producer/guardian_producer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func TestGuardianProducerRequestProof(t *testing.T) {
}

var (
producer = NewGuardianProofProducer(false)
producer = NewGuardianProofProducer(&SGXProofProducer{Dummy: true}, false)
blockID = common.Big32
)
res, err := producer.RequestProof(
Expand Down Expand Up @@ -70,7 +70,7 @@ func TestGuardianProducerRequestProofReturnLivenessBond(t *testing.T) {
}

var (
producer = NewGuardianProofProducer(true)
producer = NewGuardianProofProducer(&SGXProofProducer{Dummy: true}, true)
blockID = common.Big32
)
res, err := producer.RequestProof(
Expand Down
8 changes: 7 additions & 1 deletion prover/proof_producer/sgx_producer.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,18 @@ import (
"github.com/taikoxyz/taiko-client/internal/metrics"
)

const (
ProofTypeSgx = "sgx"
ProofTypeCPU = "native"
)

// SGXProofProducer generates a SGX proof for the given block.
type SGXProofProducer struct {
RaikoHostEndpoint string // a proverd RPC endpoint
L1Endpoint string // a L1 node RPC endpoint
L1BeaconEndpoint string // a L1 beacon node RPC endpoint
L2Endpoint string // a L2 execution engine's RPC endpoint
ProofType string // Proof type
Dummy bool
DummyProofProducer
}
Expand Down Expand Up @@ -161,7 +167,7 @@ func (s *SGXProofProducer) requestProof(opts *ProofRequestOptions) (*RaikoHostOu
ID: common.Big1,
Method: "proof",
Params: []*SGXRequestProofBodyParam{{
Type: "sgx",
Type: s.ProofType,
Block: opts.BlockID,
L2RPC: s.L2Endpoint,
L1RPC: s.L1Endpoint,
Expand Down

0 comments on commit da5ad24

Please sign in to comment.