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/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") +} diff --git a/node/node.go b/node/node.go index 599cabc84fd..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, @@ -1263,6 +1266,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 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/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..b4a195f460e 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(BatchByIndex, "index"), } // AddUnsafeRoutes adds unsafe routes.