diff --git a/op-enclave/enclave/server.go b/op-enclave/enclave/server.go index 950307a..626fcf7 100644 --- a/op-enclave/enclave/server.go +++ b/op-enclave/enclave/server.go @@ -272,8 +272,8 @@ func (s *Server) ExecuteStateless( return nil, err } - prevOutputRoot := outputRootV0(previousBlockHeader, prevMessageAccountHash) - outputRoot := outputRootV0(blockHeader, messageAccount.StorageHash) + prevOutputRoot := OutputRootV0(previousBlockHeader, prevMessageAccountHash) + outputRoot := OutputRootV0(blockHeader, messageAccount.StorageHash) configHash := config.Hash() l2BlockNumber := common.BytesToHash(blockHeader.Number.Bytes()) @@ -338,7 +338,7 @@ func (s *Server) Aggregate(ctx context.Context, configHash common.Hash, prevOutp }, nil } -func outputRootV0(header *types.Header, storageRoot common.Hash) common.Hash { +func OutputRootV0(header *types.Header, storageRoot common.Hash) common.Hash { hash := header.Hash() var buf [128]byte copy(buf[32:], header.Root[:]) diff --git a/op-proposer/proposer/prover.go b/op-proposer/proposer/prover.go index 83e237c..c2fd2ac 100644 --- a/op-proposer/proposer/prover.go +++ b/op-proposer/proposer/prover.go @@ -156,6 +156,16 @@ func (o *Prover) Generate(ctx context.Context, block *types.Block) (*Proposal, e if err != nil { return nil, fmt.Errorf("failed to execute enclave state transition: %w", err) } + if output.L1OriginHash != blockRef.L1Origin.Hash { + return nil, fmt.Errorf("output L1 origin hash does not match expected: %s != %s", output.L1OriginHash, blockRef.L1Origin.Hash) + } + if output.L2BlockNumber.ToInt().Cmp(block.Number()) != 0 { + return nil, fmt.Errorf("output L2 block number does not match expected: %s != %s", output.L2BlockNumber, block.Number()) + } + outputRoot := enclave.OutputRootV0(block.Header(), block.Root()) + if output.OutputRoot != outputRoot { + return nil, fmt.Errorf("output root does not match expected: %s != %s", output.OutputRoot, outputRoot) + } return &Proposal{ Output: output, From: blockRef,