Run in-process go-nitro RPC server
This commit is contained in:
parent
d26e2d5423
commit
883f8415fd
60
cmd/serve.go
60
cmd/serve.go
@ -17,6 +17,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -36,6 +37,9 @@ import (
|
|||||||
"github.com/statechannels/go-nitro/node/engine/chainservice"
|
"github.com/statechannels/go-nitro/node/engine/chainservice"
|
||||||
"github.com/statechannels/go-nitro/node/engine/store"
|
"github.com/statechannels/go-nitro/node/engine/store"
|
||||||
"github.com/statechannels/go-nitro/paymentsmanager"
|
"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"
|
"github.com/cerc-io/ipld-eth-server/v5/pkg/graphql"
|
||||||
srpc "github.com/cerc-io/ipld-eth-server/v5/pkg/rpc"
|
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"
|
v "github.com/cerc-io/ipld-eth-server/v5/version"
|
||||||
nitroNode "github.com/statechannels/go-nitro/node"
|
nitroNode "github.com/statechannels/go-nitro/node"
|
||||||
nitrop2pms "github.com/statechannels/go-nitro/node/engine/messageservice/p2p-message-service"
|
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")
|
var ErrNoRpcEndpoints = errors.New("no rpc endpoints is available")
|
||||||
@ -87,12 +93,12 @@ func serve() {
|
|||||||
// TODO: Create required config for Nitro node
|
// TODO: Create required config for Nitro node
|
||||||
nitroNode, err := initializeNitroNode(serverConfig.Nitro)
|
nitroNode, err := initializeNitroNode(serverConfig.Nitro)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
logWithCommand.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pm, err := paymentsmanager.NewPaymentsManager(nitroNode)
|
pm, err := paymentsmanager.NewPaymentsManager(nitroNode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
logWithCommand.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
pm.Start(wg)
|
pm.Start(wg)
|
||||||
@ -107,6 +113,12 @@ func serve() {
|
|||||||
"eth_getLogs": big.NewInt(50),
|
"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 {
|
if err := startServers(server, serverConfig, voucherValidator, queryRates); err != nil {
|
||||||
logWithCommand.Fatal(err)
|
logWithCommand.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -135,6 +147,7 @@ func serve() {
|
|||||||
}
|
}
|
||||||
server.Stop()
|
server.Stop()
|
||||||
pm.Stop()
|
pm.Stop()
|
||||||
|
nitroRpcServer.Close()
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
@ -403,30 +416,14 @@ func initializeNitroNode(nitroConfig *s.NitroConfig) (*nitroNode.Node, error) {
|
|||||||
CaAddress: common.HexToAddress(caAddress),
|
CaAddress: common.HexToAddress(caAddress),
|
||||||
}
|
}
|
||||||
|
|
||||||
storeOpts := store.StoreOpts{
|
ourStore, err := store.NewStore(common.Hex2Bytes(pkString), useDurableStore, durableStoreFolder, buntdb.Config{})
|
||||||
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)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Info("Initializing message service...", " tcp port=", messageOpts.TcpPort, " web socket port=", messageOpts.WsMsgPort)
|
bootPeers := []string{}
|
||||||
messageOpts.SCAddr = *ourStore.GetAddress()
|
log.Info("Initializing message service...", " tcp port=", msgPort, " web socket port=", wsMsgPort)
|
||||||
messageService := nitrop2pms.NewMessageService(messageOpts)
|
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
|
// Compare chainOpts.ChainStartBlock to lastBlockNum seen in store. The larger of the two
|
||||||
// gets passed as an argument when creating NewEthChainService
|
// gets passed as an argument when creating NewEthChainService
|
||||||
@ -453,3 +450,22 @@ func initializeNitroNode(nitroConfig *s.NitroConfig) (*nitroNode.Node, error) {
|
|||||||
|
|
||||||
return &node, nil
|
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
|
||||||
|
}
|
||||||
|
5
go.mod
5
go.mod
@ -24,6 +24,8 @@ require (
|
|||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.4.0
|
||||||
github.com/spf13/viper v1.11.0
|
github.com/spf13/viper v1.11.0
|
||||||
github.com/statechannels/go-nitro v0.1.1
|
github.com/statechannels/go-nitro v0.1.1
|
||||||
|
github.com/tidwall/buntdb v1.2.10
|
||||||
|
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63
|
||||||
gorm.io/driver/postgres v1.3.7
|
gorm.io/driver/postgres v1.3.7
|
||||||
gorm.io/gorm v1.23.5
|
gorm.io/gorm v1.23.5
|
||||||
)
|
)
|
||||||
@ -78,6 +80,7 @@ require (
|
|||||||
github.com/gofrs/flock v0.8.1 // indirect
|
github.com/gofrs/flock v0.8.1 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
|
||||||
github.com/golang/mock v1.6.0 // indirect
|
github.com/golang/mock v1.6.0 // indirect
|
||||||
github.com/golang/protobuf v1.5.3 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
|
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
|
||||||
@ -232,7 +235,6 @@ require (
|
|||||||
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
|
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
|
||||||
github.com/thoas/go-funk v0.9.3 // indirect
|
github.com/thoas/go-funk v0.9.3 // indirect
|
||||||
github.com/tidwall/btree v1.6.0 // indirect
|
github.com/tidwall/btree v1.6.0 // indirect
|
||||||
github.com/tidwall/buntdb v1.2.10 // indirect
|
|
||||||
github.com/tidwall/gjson v1.14.4 // indirect
|
github.com/tidwall/gjson v1.14.4 // indirect
|
||||||
github.com/tidwall/grect v0.1.4 // indirect
|
github.com/tidwall/grect v0.1.4 // indirect
|
||||||
github.com/tidwall/match v1.1.1 // indirect
|
github.com/tidwall/match v1.1.1 // indirect
|
||||||
@ -263,7 +265,6 @@ require (
|
|||||||
go.uber.org/zap v1.25.0 // indirect
|
go.uber.org/zap v1.25.0 // indirect
|
||||||
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
|
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
|
||||||
golang.org/x/crypto v0.12.0 // indirect
|
golang.org/x/crypto v0.12.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
|
|
||||||
golang.org/x/mod v0.12.0 // indirect
|
golang.org/x/mod v0.12.0 // indirect
|
||||||
golang.org/x/net v0.14.0 // indirect
|
golang.org/x/net v0.14.0 // indirect
|
||||||
golang.org/x/sync v0.3.0 // indirect
|
golang.org/x/sync v0.3.0 // indirect
|
||||||
|
2
go.sum
2
go.sum
@ -292,6 +292,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
|||||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
|
||||||
|
github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
Loading…
Reference in New Issue
Block a user