From e579aa211b32bf07d53ec9c4b6658da54dc347d0 Mon Sep 17 00:00:00 2001 From: georgehao Date: Mon, 9 Mar 2026 19:47:52 +0800 Subject: [PATCH 1/4] fix commit tx missing StorageKeys --- common/version/version.go | 2 +- rollup/internal/controller/sender/estimategas.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/common/version/version.go b/common/version/version.go index 8af04b2b31..1703340026 100644 --- a/common/version/version.go +++ b/common/version/version.go @@ -5,7 +5,7 @@ import ( "runtime/debug" ) -var tag = "v4.7.12" +var tag = "v4.7.13" var commit = func() string { if info, ok := debug.ReadBuildInfo(); ok { diff --git a/rollup/internal/controller/sender/estimategas.go b/rollup/internal/controller/sender/estimategas.go index d9c7ed802e..fce9866b0d 100644 --- a/rollup/internal/controller/sender/estimategas.go +++ b/rollup/internal/controller/sender/estimategas.go @@ -168,8 +168,15 @@ func finetuneAccessList(accessList *types.AccessList, gasLimitWithAccessList uin // Each storage key saves 100 gas units. gasLimitWithAccessList += uint64(100 * len(entry.StorageKeys)) } else { - // Otherwise, keep the entry in the new access list. - newAccessList = append(newAccessList, entry) + // Ensure StorageKeys is never nil to avoid "missing required field 'storageKeys'" error during JSON serialization. + storageKeys := entry.StorageKeys + if storageKeys == nil { + storageKeys = []common.Hash{} + } + newAccessList = append(newAccessList, types.AccessTuple{ + Address: entry.Address, + StorageKeys: storageKeys, + }) } } return &newAccessList, gasLimitWithAccessList From 4c0b0dcd848165435625fd79d8b2ed96efec5697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Mon, 9 Mar 2026 13:15:55 +0100 Subject: [PATCH 2/4] ignore access list error --- rollup/internal/controller/sender/estimategas.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rollup/internal/controller/sender/estimategas.go b/rollup/internal/controller/sender/estimategas.go index fce9866b0d..b15ba762a7 100644 --- a/rollup/internal/controller/sender/estimategas.go +++ b/rollup/internal/controller/sender/estimategas.go @@ -1,7 +1,6 @@ package sender import ( - "errors" "fmt" "math/big" @@ -134,11 +133,11 @@ func (s *Sender) estimateGasLimit(to *common.Address, data []byte, sidecar *type accessList, gasLimitWithAccessList, errStr, rpcErr := s.gethClient.CreateAccessList(s.ctx, msg) if rpcErr != nil { log.Error("CreateAccessList RPC error", "error", rpcErr) - return gasLimitWithoutAccessList, nil, rpcErr + return gasLimitWithoutAccessList, nil, nil } if errStr != "" { log.Error("CreateAccessList reported error", "error", errStr) - return gasLimitWithoutAccessList, nil, errors.New(errStr) + return gasLimitWithoutAccessList, nil, nil } // Fine-tune accessList because 'to' address is automatically included in the access list by the Ethereum protocol: https://github.com/ethereum/go-ethereum/blob/v1.13.10/core/state/statedb.go#L1322 From cfb0e13dd9caee871ee0f848d987711f5e7f2452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Mon, 9 Mar 2026 14:37:00 +0100 Subject: [PATCH 3/4] add clarifying commit --- rollup/internal/controller/sender/estimategas.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rollup/internal/controller/sender/estimategas.go b/rollup/internal/controller/sender/estimategas.go index b15ba762a7..dea28a74fc 100644 --- a/rollup/internal/controller/sender/estimategas.go +++ b/rollup/internal/controller/sender/estimategas.go @@ -133,9 +133,13 @@ func (s *Sender) estimateGasLimit(to *common.Address, data []byte, sidecar *type accessList, gasLimitWithAccessList, errStr, rpcErr := s.gethClient.CreateAccessList(s.ctx, msg) if rpcErr != nil { log.Error("CreateAccessList RPC error", "error", rpcErr) + // We ignore errors from eth_createAccessList and proceed + // with sending the transaction without an access list. return gasLimitWithoutAccessList, nil, nil } if errStr != "" { + // We ignore errors from eth_createAccessList and proceed + // with sending the transaction without an access list. log.Error("CreateAccessList reported error", "error", errStr) return gasLimitWithoutAccessList, nil, nil } From 9e02a4857c60d9971f7b55a74fe8f4833700d182 Mon Sep 17 00:00:00 2001 From: georgehao Date: Mon, 9 Mar 2026 21:40:59 +0800 Subject: [PATCH 4/4] remove unused code --- rollup/internal/controller/sender/estimategas.go | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/rollup/internal/controller/sender/estimategas.go b/rollup/internal/controller/sender/estimategas.go index dea28a74fc..20d66beefa 100644 --- a/rollup/internal/controller/sender/estimategas.go +++ b/rollup/internal/controller/sender/estimategas.go @@ -171,15 +171,8 @@ func finetuneAccessList(accessList *types.AccessList, gasLimitWithAccessList uin // Each storage key saves 100 gas units. gasLimitWithAccessList += uint64(100 * len(entry.StorageKeys)) } else { - // Ensure StorageKeys is never nil to avoid "missing required field 'storageKeys'" error during JSON serialization. - storageKeys := entry.StorageKeys - if storageKeys == nil { - storageKeys = []common.Hash{} - } - newAccessList = append(newAccessList, types.AccessTuple{ - Address: entry.Address, - StorageKeys: storageKeys, - }) + // Otherwise, keep the entry in the new access list. + newAccessList = append(newAccessList, entry) } } return &newAccessList, gasLimitWithAccessList