forked from cerc-io/ipld-eth-server
Run in-process go-nitro RPC server
This commit is contained in:
+38
-22
@@ -17,6 +17,7 @@ package cmd
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"net/url"
|
||||
@@ -36,6 +37,9 @@ import (
|
||||
"github.com/statechannels/go-nitro/node/engine/chainservice"
|
||||
"github.com/statechannels/go-nitro/node/engine/store"
|
||||
"github.com/statechannels/go-nitro/paymentsmanager"
|
||||
"github.com/statechannels/go-nitro/rpc/transport"
|
||||
"github.com/tidwall/buntdb"
|
||||
"golang.org/x/exp/slog"
|
||||
|
||||
"github.com/cerc-io/ipld-eth-server/v5/pkg/graphql"
|
||||
srpc "github.com/cerc-io/ipld-eth-server/v5/pkg/rpc"
|
||||
@@ -43,6 +47,8 @@ import (
|
||||
v "github.com/cerc-io/ipld-eth-server/v5/version"
|
||||
nitroNode "github.com/statechannels/go-nitro/node"
|
||||
nitrop2pms "github.com/statechannels/go-nitro/node/engine/messageservice/p2p-message-service"
|
||||
nitroRpc "github.com/statechannels/go-nitro/rpc"
|
||||
nitroHttpTransport "github.com/statechannels/go-nitro/rpc/transport/http"
|
||||
)
|
||||
|
||||
var ErrNoRpcEndpoints = errors.New("no rpc endpoints is available")
|
||||
@@ -87,12 +93,12 @@ func serve() {
|
||||
// TODO: Create required config for Nitro node
|
||||
nitroNode, err := initializeNitroNode(serverConfig.Nitro)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
logWithCommand.Fatal(err)
|
||||
}
|
||||
|
||||
pm, err := paymentsmanager.NewPaymentsManager(nitroNode)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
logWithCommand.Fatal(err)
|
||||
}
|
||||
|
||||
pm.Start(wg)
|
||||
@@ -107,6 +113,12 @@ func serve() {
|
||||
"eth_getLogs": big.NewInt(50),
|
||||
}
|
||||
|
||||
rpcPort := 4005
|
||||
nitroRpcServer, err := initializeNitroRpcServer(nitroNode, rpcPort)
|
||||
if err != nil {
|
||||
logWithCommand.Fatal(err)
|
||||
}
|
||||
|
||||
if err := startServers(server, serverConfig, voucherValidator, queryRates); err != nil {
|
||||
logWithCommand.Fatal(err)
|
||||
}
|
||||
@@ -135,6 +147,7 @@ func serve() {
|
||||
}
|
||||
server.Stop()
|
||||
pm.Stop()
|
||||
nitroRpcServer.Close()
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
@@ -403,30 +416,14 @@ func initializeNitroNode(nitroConfig *s.NitroConfig) (*nitroNode.Node, error) {
|
||||
CaAddress: common.HexToAddress(caAddress),
|
||||
}
|
||||
|
||||
storeOpts := store.StoreOpts{
|
||||
PkBytes: common.Hex2Bytes(pkString),
|
||||
UseDurableStore: useDurableStore,
|
||||
DurableStoreFolder: durableStoreFolder,
|
||||
}
|
||||
|
||||
peerSlice := []string{}
|
||||
|
||||
messageOpts := nitrop2pms.MessageOpts{
|
||||
PkBytes: common.Hex2Bytes(pkString),
|
||||
TcpPort: msgPort,
|
||||
WsMsgPort: wsMsgPort,
|
||||
BootPeers: peerSlice,
|
||||
PublicIp: publicIp,
|
||||
}
|
||||
|
||||
ourStore, err := store.NewStore(storeOpts)
|
||||
ourStore, err := store.NewStore(common.Hex2Bytes(pkString), useDurableStore, durableStoreFolder, buntdb.Config{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Info("Initializing message service...", " tcp port=", messageOpts.TcpPort, " web socket port=", messageOpts.WsMsgPort)
|
||||
messageOpts.SCAddr = *ourStore.GetAddress()
|
||||
messageService := nitrop2pms.NewMessageService(messageOpts)
|
||||
bootPeers := []string{}
|
||||
log.Info("Initializing message service...", " tcp port=", msgPort, " web socket port=", wsMsgPort)
|
||||
messageService := nitrop2pms.NewMessageService(publicIp, msgPort, wsMsgPort, *ourStore.GetAddress(), common.Hex2Bytes(pkString), bootPeers)
|
||||
|
||||
// Compare chainOpts.ChainStartBlock to lastBlockNum seen in store. The larger of the two
|
||||
// gets passed as an argument when creating NewEthChainService
|
||||
@@ -453,3 +450,22 @@ func initializeNitroNode(nitroConfig *s.NitroConfig) (*nitroNode.Node, error) {
|
||||
|
||||
return &node, nil
|
||||
}
|
||||
|
||||
func initializeNitroRpcServer(node *nitroNode.Node, rpcPort int) (*nitroRpc.RpcServer, error) {
|
||||
var transport transport.Responder
|
||||
var err error
|
||||
|
||||
slog.Info("Initializing Nitro HTTP RPC transport...")
|
||||
transport, err = nitroHttpTransport.NewHttpTransportAsServer(fmt.Sprint(rpcPort))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rpcServer, err := nitroRpc.NewRpcServer(node, transport)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
slog.Info("Completed Nitro RPC server initialization")
|
||||
return rpcServer, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user