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

feat(prover): make guardian provers connecting to their local raiko service #797

Merged
merged 5 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading