From b66b6008a3133adbcb140fc4c2a08970dce96415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gavin=20=E2=80=9Cyoghurt=E2=80=9D=20Yu?= Date: Wed, 19 Feb 2025 15:56:35 +0800 Subject: [PATCH] feat(taiko-client): include `ParentMetaHash` for better revert protection --- .../proposer/transaction_builder/blob.go | 19 ++++++++++++++++-- .../proposer/transaction_builder/calldata.go | 20 ++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/packages/taiko-client/proposer/transaction_builder/blob.go b/packages/taiko-client/proposer/transaction_builder/blob.go index ba40b1285fc..adeb2a9f639 100644 --- a/packages/taiko-client/proposer/transaction_builder/blob.go +++ b/packages/taiko-client/proposer/transaction_builder/blob.go @@ -86,7 +86,7 @@ func (b *BlobTransactionBuilder) BuildOntake( blobs = append(blobs, blob) - encodedParams, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + params := &encoding.BlockParamsV2{ Coinbase: b.l2SuggestedFeeRecipient, ParentMetaHash: [32]byte{}, AnchorBlockId: 0, @@ -94,7 +94,22 @@ func (b *BlobTransactionBuilder) BuildOntake( BlobTxListOffset: 0, BlobTxListLength: uint32(len(txListBytesArray[i])), BlobIndex: uint8(i), - }) + } + + if i == 0 && b.revertProtectionEnabled { + state, err := b.rpc.GetProtocolStateVariables(nil) + if err != nil { + return nil, err + } + + blockInfo, err := b.rpc.GetL2BlockInfoV2(ctx, new(big.Int).SetUint64(state.B.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 e7355eeca6b..86c71cf4ed6 100644 --- a/packages/taiko-client/proposer/transaction_builder/calldata.go +++ b/packages/taiko-client/proposer/transaction_builder/calldata.go @@ -73,13 +73,27 @@ 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 { + state, err := b.rpc.GetProtocolStateVariables(nil) + if err != nil { + return nil, err + } + + blockInfo, err := b.rpc.GetL2BlockInfoV2(ctx, new(big.Int).SetUint64(state.B.NumBlocks-1)) + if err != nil { + return nil, err + } + + params.ParentMetaHash = blockInfo.MetaHash + } + encodedParams, err := encoding.EncodeBlockParamsOntake(params) if err != nil { return nil, err }