From 89639dd74ad06a3ce0c926d6d728d5951d1285ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20Faruk=20Irmak?= Date: Tue, 17 Sep 2024 18:18:23 +0300 Subject: [PATCH] feat: allow triggering one-off CCC on a block (#1043) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Péter Garamvölgyi --- eth/api.go | 21 +++++++++++++++++++++ internal/web3ext/web3ext.go | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/eth/api.go b/eth/api.go index 8c2681238da2..1ba4d6a3f1b9 100644 --- a/eth/api.go +++ b/eth/api.go @@ -38,6 +38,7 @@ import ( "github.com/scroll-tech/go-ethereum/internal/ethapi" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/rlp" + "github.com/scroll-tech/go-ethereum/rollup/ccc" "github.com/scroll-tech/go-ethereum/rpc" "github.com/scroll-tech/go-ethereum/trie" ) @@ -812,3 +813,23 @@ func (api *ScrollAPI) GetSkippedTransactionHashes(ctx context.Context, from uint return hashes, nil } + +// CalculateRowConsumptionByBlockNumber +func (api *ScrollAPI) CalculateRowConsumptionByBlockNumber(ctx context.Context, number rpc.BlockNumber) (*types.RowConsumption, error) { + block := api.eth.blockchain.GetBlockByNumber(uint64(number.Int64())) + if block == nil { + return nil, errors.New("block not found") + } + + // todo: fix temp AsyncChecker leaking the internal Checker instances + var checkErr error + asyncChecker := ccc.NewAsyncChecker(api.eth.blockchain, 1, false).WithOnFailingBlock(func(b *types.Block, err error) { + log.Error("failed to calculate row consumption on demand", "number", number, "hash", b.Hash().Hex(), "err", err) + checkErr = err + }) + if err := asyncChecker.Check(block); err != nil { + return nil, err + } + asyncChecker.Wait() + return rawdb.ReadBlockRowConsumption(api.eth.ChainDb(), block.Hash()), checkErr +} diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 2967a849b1a1..c13fbb8be6d7 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -926,6 +926,12 @@ web3._extend({ inputFormatter: [web3._extend.formatters.inputCallFormatter, web3._extend.formatters.inputBlockNumberFormatter], outputFormatter: web3._extend.utils.toDecimal }), + new web3._extend.Method({ + name: 'calculateRowConsumptionByBlockNumber', + call: 'scroll_calculateRowConsumptionByBlockNumber', + params: 1, + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] + }), ], properties: [