From 3505a2a2f3fda2af3892f861158abe61db57160d Mon Sep 17 00:00:00 2001 From: David Date: Wed, 19 Feb 2025 15:35:26 +0800 Subject: [PATCH] feat(taiko-client): include `ParentMetaHash` for proposing Ontake blocks for better revert protection --- .../proposer/transaction_builder/blob.go | 21 +++++++++++++++--- .../proposer/transaction_builder/calldata.go | 22 ++++++++++++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/packages/taiko-client/proposer/transaction_builder/blob.go b/packages/taiko-client/proposer/transaction_builder/blob.go index 2522f460bfd..8fcf29d2101 100644 --- a/packages/taiko-client/proposer/transaction_builder/blob.go +++ b/packages/taiko-client/proposer/transaction_builder/blob.go @@ -91,10 +91,9 @@ func (b *BlobTransactionBuilder) BuildOntake( if err := blob.FromData(txListBytesArray[i]); err != nil { return nil, err } - blobs = append(blobs, blob) - encodedParams, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + params := &encoding.BlockParamsV2{ Coinbase: b.l2SuggestedFeeRecipient, ParentMetaHash: [32]byte{}, AnchorBlockId: 0, @@ -102,7 +101,23 @@ func (b *BlobTransactionBuilder) BuildOntake( BlobTxListOffset: 0, BlobTxListLength: uint32(len(txListBytesArray[i])), BlobIndex: uint8(i), - }) + } + + if i == 0 && b.revertProtectionEnabled { + _, slotB, err := b.rpc.GetProtocolStateVariablesOntake(nil) + if err != nil { + return nil, err + } + + blockInfo, err := b.rpc.GetL2BlockInfoV2(ctx, new(big.Int).SetUint64(slotB.NumBlocks-1)) + if err != nil { + return nil, err + } + + params.ParentMetaHash = blockInfo.MetaHash + } + + encodedParams, err := encoding.EncodeBlockParamsOntake(params) if err != nil { return nil, err } diff --git a/packages/taiko-client/proposer/transaction_builder/calldata.go b/packages/taiko-client/proposer/transaction_builder/calldata.go index abd75342ed7..6d4f80935ac 100644 --- a/packages/taiko-client/proposer/transaction_builder/calldata.go +++ b/packages/taiko-client/proposer/transaction_builder/calldata.go @@ -80,13 +80,29 @@ func (b *CalldataTransactionBuilder) BuildOntake( encodedParamsArray [][]byte ) - for range txListBytesArray { - encodedParams, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + for i := range txListBytesArray { + params := &encoding.BlockParamsV2{ Coinbase: b.l2SuggestedFeeRecipient, ParentMetaHash: [32]byte{}, AnchorBlockId: 0, Timestamp: 0, - }) + } + + if i == 0 && b.revertProtectionEnabled { + _, slotB, err := b.rpc.GetProtocolStateVariablesOntake(nil) + if err != nil { + return nil, err + } + + blockInfo, err := b.rpc.GetL2BlockInfoV2(ctx, new(big.Int).SetUint64(slotB.NumBlocks-1)) + if err != nil { + return nil, err + } + + params.ParentMetaHash = blockInfo.MetaHash + } + + encodedParams, err := encoding.EncodeBlockParamsOntake(params) if err != nil { return nil, err }