From 8305e7a26c7abb3c13a0c5ca54c2c97cd8818eed Mon Sep 17 00:00:00 2001 From: WorldDogs Date: Tue, 18 Feb 2025 17:30:42 +0800 Subject: [PATCH 1/4] Add StateStore method to Node for accessing StateStore --- node/node.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/node/node.go b/node/node.go index 599cabc84fd..f5a67499177 100644 --- a/node/node.go +++ b/node/node.go @@ -1263,6 +1263,11 @@ func (n *Node) BlockStore() *store.BlockStore { return n.blockStore } +// StateStore returns the Node's StateStore. +func (n *Node) StateStore() sm.Store { + return n.stateStore +} + // ConsensusState returns the Node's ConsensusState. func (n *Node) ConsensusState() *cs.State { return n.consensusState From 83d54a49cbba10e894b51154edd1630d79ac808a Mon Sep 17 00:00:00 2001 From: WorldDogs Date: Thu, 20 Feb 2025 17:43:32 +0800 Subject: [PATCH 2/4] feat: Add L2Node integration and batch API support in RPC routes --- l2node/l2node.go | 3 +++ node/node.go | 3 +++ rpc/core/env.go | 2 ++ rpc/core/routes.go | 3 +++ 4 files changed, 11 insertions(+) diff --git a/l2node/l2node.go b/l2node/l2node.go index 49bcb4261ca..f9dc981e97f 100644 --- a/l2node/l2node.go +++ b/l2node/l2node.go @@ -3,6 +3,7 @@ package l2node import ( "fmt" + eth "github.com/morph-l2/go-ethereum/core/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types" ) @@ -91,6 +92,8 @@ type Batcher interface { AppendBlsData(height int64, batchHash []byte, data BlsData) error BatchHash(batchHeader []byte) ([]byte, error) + + BatchByIndex(index uint64) (*eth.RollupBatch, []*eth.BatchSignature, error) } type GetFromBatchStartFunc func() ( parentBatchHeader []byte, diff --git a/node/node.go b/node/node.go index f5a67499177..9e0c5c5388e 100644 --- a/node/node.go +++ b/node/node.go @@ -241,6 +241,7 @@ type Node struct { blockIndexer indexer.BlockIndexer indexerService *txindex.IndexerService prometheusSrv *http.Server + l2Node l2node.L2Node } func initDBs(config *cfg.Config, dbProvider DBProvider) (blockStore *store.BlockStore, stateDB dbm.DB, err error) { @@ -942,6 +943,7 @@ func NewNode( indexerService: indexerService, blockIndexer: blockIndexer, eventBus: eventBus, + l2Node: l2Node, } node.BaseService = *service.NewBaseService(logger, "Node", node) @@ -1094,6 +1096,7 @@ func (n *Node) ConfigureRPC() error { ConsensusState: n.consensusState, P2PPeers: n.sw, P2PTransport: n, + L2Node: n.l2Node, PubKey: pubKey, GenDoc: n.genesisDoc, diff --git a/rpc/core/env.go b/rpc/core/env.go index c6e10331957..8d680c049db 100644 --- a/rpc/core/env.go +++ b/rpc/core/env.go @@ -8,6 +8,7 @@ import ( cfg "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/consensus" "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/l2node" tmjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/p2p" @@ -82,6 +83,7 @@ type Environment struct { ConsensusState Consensus P2PPeers peers P2PTransport transport + L2Node l2node.L2Node // objects PubKey crypto.PubKey diff --git a/rpc/core/routes.go b/rpc/core/routes.go index 2f43656d09d..d56597f9af9 100644 --- a/rpc/core/routes.go +++ b/rpc/core/routes.go @@ -40,6 +40,9 @@ var Routes = map[string]*rpc.RPCFunc{ // evidence API "broadcast_evidence": rpc.NewRPCFunc(BroadcastEvidence, "evidence"), + + // batch API + "batch_by_index": rpc.NewRPCFunc(env.L2Node.BatchByIndex, "index"), } // AddUnsafeRoutes adds unsafe routes. From 9b99ea2093ab62710fd66331572e5734c7470629 Mon Sep 17 00:00:00 2001 From: WorldDogs Date: Tue, 25 Feb 2025 21:58:50 +0800 Subject: [PATCH 3/4] fix: Add BatchByIndex to MockL2Node for compile fix --- l2node/mock.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/l2node/mock.go b/l2node/mock.go index bd919ae7543..63c027ae4e6 100644 --- a/l2node/mock.go +++ b/l2node/mock.go @@ -6,6 +6,8 @@ import ( "fmt" "os" + ethtypes "github.com/morph-l2/go-ethereum/core/types" + "github.com/tendermint/tendermint/crypto/tmhash" tmjson "github.com/tendermint/tendermint/libs/json" tmos "github.com/tendermint/tendermint/libs/os" @@ -244,3 +246,7 @@ func (l *MockL2Node) AppendBlsData(height int64, batchHash []byte, data BlsData) func (l *MockL2Node) BatchHash(batchHeader []byte) ([]byte, error) { return tmhash.Sum(batchHeader), nil } + +func (l *MockL2Node) BatchByIndex(index uint64) (*ethtypes.RollupBatch, []*ethtypes.BatchSignature, error) { + return nil, nil, fmt.Errorf("not implemented") +} From 2e038db62218eb95b49534fc943d88f88db1bba4 Mon Sep 17 00:00:00 2001 From: WorldDogs Date: Thu, 27 Feb 2025 14:34:47 +0800 Subject: [PATCH 4/4] feat: Implement BatchByIndex function and update RPC route for batch API --- rpc/core/batch.go | 20 ++++++++++++++++++++ rpc/core/routes.go | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 rpc/core/batch.go diff --git a/rpc/core/batch.go b/rpc/core/batch.go new file mode 100644 index 00000000000..31f10eeabe4 --- /dev/null +++ b/rpc/core/batch.go @@ -0,0 +1,20 @@ +package core + +import ( + "errors" + + eth "github.com/morph-l2/go-ethereum/core/types" + rpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types" +) + +// BatchByIndex(index uint64) (*eth.RollupBatch, []*eth.BatchSignature, error) +func BatchByIndex(ctx *rpctypes.Context, index uint64) (*eth.RollupBatch, []*eth.BatchSignature, error) { + if env == nil { + return nil, nil, errors.New("env is nil") + } + if env.L2Node == nil { + return nil, nil, errors.New("env.L2Node is nil") + } + + return env.L2Node.BatchByIndex(index) +} diff --git a/rpc/core/routes.go b/rpc/core/routes.go index d56597f9af9..b4a195f460e 100644 --- a/rpc/core/routes.go +++ b/rpc/core/routes.go @@ -42,7 +42,7 @@ var Routes = map[string]*rpc.RPCFunc{ "broadcast_evidence": rpc.NewRPCFunc(BroadcastEvidence, "evidence"), // batch API - "batch_by_index": rpc.NewRPCFunc(env.L2Node.BatchByIndex, "index"), + "batch_by_index": rpc.NewRPCFunc(BatchByIndex, "index"), } // AddUnsafeRoutes adds unsafe routes.