Skip to content

Commit

Permalink
Merge pull request #1156 from OffchainLabs/ipc-rpc-support
Browse files Browse the repository at this point in the history
add ipc rpc support
  • Loading branch information
PlasmaPower committed Sep 22, 2022
2 parents c429d82 + a766b46 commit b463fc9
Show file tree
Hide file tree
Showing 11 changed files with 90 additions and 22 deletions.
16 changes: 16 additions & 0 deletions cmd/genericconf/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,22 @@ func WSConfigAddOptions(prefix string, f *flag.FlagSet) {
f.Bool(prefix+".expose-all", WSConfigDefault.ExposeAll, "expose private api via websocket")
}

type IPCConfig struct {
Path string `koanf:"path"`
}

var IPCConfigDefault = IPCConfig{
Path: "",
}

func (c *IPCConfig) Apply(stackConf *node.Config) {
stackConf.IPCPath = c.Path
}

func IPCConfigAddOptions(prefix string, f *flag.FlagSet) {
f.String(prefix+".path", IPCConfigDefault.Path, "Requested location to place the IPC endpoint. An empty path disables IPC.")
}

type GraphQLConfig struct {
Enable bool `koanf:"enable"`
CORSDomain []string `koanf:"corsdomain"`
Expand Down
4 changes: 4 additions & 0 deletions cmd/nitro/nitro.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ func main() {
stackConf.DataDir = nodeConfig.Persistent.Chain
nodeConfig.HTTP.Apply(&stackConf)
nodeConfig.WS.Apply(&stackConf)
nodeConfig.IPC.Apply(&stackConf)
nodeConfig.GraphQL.Apply(&stackConf)
if nodeConfig.WS.ExposeAll {
stackConf.WSModules = append(stackConf.WSModules, "personal")
Expand Down Expand Up @@ -358,6 +359,7 @@ type NodeConfig struct {
Persistent conf.PersistentConfig `koanf:"persistent"`
HTTP genericconf.HTTPConfig `koanf:"http"`
WS genericconf.WSConfig `koanf:"ws"`
IPC genericconf.IPCConfig `koanf:"ipc"`
GraphQL genericconf.GraphQLConfig `koanf:"graphql"`
Metrics bool `koanf:"metrics"`
MetricsServer genericconf.MetricsServerConfig `koanf:"metrics-server"`
Expand All @@ -374,6 +376,7 @@ var NodeConfigDefault = NodeConfig{
Persistent: conf.PersistentConfigDefault,
HTTP: genericconf.HTTPConfigDefault,
WS: genericconf.WSConfigDefault,
IPC: genericconf.IPCConfigDefault,
Metrics: false,
MetricsServer: genericconf.MetricsServerConfigDefault,
}
Expand All @@ -388,6 +391,7 @@ func NodeConfigAddOptions(f *flag.FlagSet) {
conf.PersistentConfigAddOptions("persistent", f)
genericconf.HTTPConfigAddOptions("http", f)
genericconf.WSConfigAddOptions("ws", f)
genericconf.IPCConfigAddOptions("ipc", f)
genericconf.GraphQLConfigAddOptions("graphql", f)
f.Bool("metrics", NodeConfigDefault.Metrics, "enable metrics")
genericconf.MetricsServerAddOptions("metrics-server", f)
Expand Down
3 changes: 1 addition & 2 deletions system_tests/batch_poster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/params"

"github.com/offchainlabs/nitro/arbnode"
"github.com/offchainlabs/nitro/util/redisutil"
Expand All @@ -35,7 +34,7 @@ func TestBatchPosterParallel(t *testing.T) {
conf := arbnode.ConfigDefaultL1Test()
conf.BatchPoster.Enable = false
conf.BatchPoster.RedisUrl = redisUrl
l2info, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, conf, params.ArbitrumDevTestChainConfig())
l2info, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, conf, nil, nil)
defer requireClose(t, l1stack)
defer requireClose(t, l2stackA)

Expand Down
2 changes: 1 addition & 1 deletion system_tests/block_validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func testBlockValidatorSimple(t *testing.T, dasModeString string, expensiveTx bo
chainConfig, l1NodeConfigA, lifecycleManager, _, dasSignerKey := setupConfigWithDAS(t, ctx, dasModeString)
defer lifecycleManager.StopAndWaitUntil(time.Second)

l2info, nodeA, l2client, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig)
l2info, nodeA, l2client, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig, nil)
defer requireClose(t, l1stack)
defer requireClose(t, l2stackA)

Expand Down
44 changes: 30 additions & 14 deletions system_tests/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,25 +182,35 @@ func (l *lifecycle) Stop() error {
}

func createTestL1BlockChain(t *testing.T, l1info info) (info, *ethclient.Client, *eth.Ethereum, *node.Node) {
return createTestL1BlockChainWithConfig(t, l1info, nil)
}

func getTestStackConfig(t *testing.T) *node.Config {
stackConfig := &node.DefaultConfig
stackConfig.HTTPPort = 0
stackConfig.WSPort = 0
stackConfig.UseLightweightKDF = true
stackConfig.P2P.ListenAddr = ""
stackConfig.P2P.NoDial = true
stackConfig.P2P.NoDiscovery = true
stackConfig.P2P.NAT = nil
stackConfig.DataDir = t.TempDir()
return stackConfig
}

func createTestL1BlockChainWithConfig(t *testing.T, l1info info, stackConfig *node.Config) (info, *ethclient.Client, *eth.Ethereum, *node.Node) {
if l1info == nil {
l1info = NewL1TestInfo(t)
}
if stackConfig == nil {
stackConfig = getTestStackConfig(t)
}
l1info.GenerateAccount("Faucet")

chainConfig := params.ArbitrumDevTestChainConfig()
chainConfig.ArbitrumChainParams = params.ArbitrumChainParams{}

stackConf := node.DefaultConfig
stackConf.HTTPPort = 0
stackConf.WSPort = 0
stackConf.UseLightweightKDF = true
stackConf.P2P.ListenAddr = ""
stackConf.P2P.NoDial = true
stackConf.P2P.NoDiscovery = true
stackConf.P2P.NAT = nil
var err error
stackConf.DataDir = t.TempDir()
stack, err := node.New(&stackConf)
stack, err := node.New(stackConfig)
Require(t, err)

nodeConf := ethconfig.Defaults
Expand Down Expand Up @@ -305,8 +315,7 @@ func createTestNodeOnL1(
l2info info, node *arbnode.Node, l2client *ethclient.Client, l2stack *node.Node, l1info info,
l1backend *eth.Ethereum, l1client *ethclient.Client, l1stack *node.Node,
) {
conf := arbnode.ConfigDefaultL1Test()
return createTestNodeOnL1WithConfig(t, ctx, isSequencer, conf, params.ArbitrumDevTestChainConfig())
return createTestNodeOnL1WithConfig(t, ctx, isSequencer, nil, nil, nil)
}

func createTestNodeOnL1WithConfig(
Expand All @@ -315,12 +324,19 @@ func createTestNodeOnL1WithConfig(
isSequencer bool,
nodeConfig *arbnode.Config,
chainConfig *params.ChainConfig,
stackConfig *node.Config,
) (
l2info info, currentNode *arbnode.Node, l2client *ethclient.Client, l2stack *node.Node, l1info info,
l1backend *eth.Ethereum, l1client *ethclient.Client, l1stack *node.Node,
) {
if nodeConfig == nil {
nodeConfig = arbnode.ConfigDefaultL1Test()
}
if chainConfig == nil {
chainConfig = params.ArbitrumDevTestChainConfig()
}
fatalErrChan := make(chan error, 10)
l1info, l1client, l1backend, l1stack = createTestL1BlockChain(t, nil)
l1info, l1client, l1backend, l1stack = createTestL1BlockChainWithConfig(t, nil, stackConfig)
var l2chainDb ethdb.Database
var l2arbDb ethdb.Database
var l2blockchain *core.BlockChain
Expand Down
2 changes: 1 addition & 1 deletion system_tests/fees_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func testSequencerPriceAdjustsFrom(t *testing.T, initialEstimate uint64) {
conf := arbnode.ConfigDefaultL1Test()
conf.DelayedSequencer.FinalizeDistance = 1

l2info, node, l2client, l2stack, _, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, conf, chainConfig)
l2info, node, l2client, l2stack, _, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, conf, chainConfig, nil)
defer requireClose(t, l1stack)
defer requireClose(t, l2stack)

Expand Down
33 changes: 33 additions & 0 deletions system_tests/ipc_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright 2021-2022, Offchain Labs, Inc.
// For license information, see https://github.com/nitro/blob/master/LICENSE

package arbtest

import (
"context"
"path/filepath"
"testing"

"github.com/ethereum/go-ethereum/ethclient"
"github.com/offchainlabs/nitro/cmd/genericconf"
)

func TestIpcRpc(t *testing.T) {
ipcPath := filepath.Join(t.TempDir(), "test.ipc")

ipcConfig := genericconf.IPCConfigDefault
ipcConfig.Path = ipcPath

stackConf := getTestStackConfig(t)
ipcConfig.Apply(stackConf)

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

_, _, _, l2stack, _, _, _, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, nil, nil, stackConf)
defer requireClose(t, l1stack)
defer requireClose(t, l2stack)

_, err := ethclient.Dial(ipcPath)
Require(t, err)
}
2 changes: 1 addition & 1 deletion system_tests/seqfeed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func testLyingSequencer(t *testing.T, dasModeStr string) {

nodeConfigA.BatchPoster.Enable = true
nodeConfigA.Feed.Output.Enable = false
l2infoA, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, nodeConfigA, chainConfig)
l2infoA, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, nodeConfigA, chainConfig, nil)
defer requireClose(t, l1stack, "unable to close l1stack")
defer requireClose(t, l2stackA, "unable to close l2stackA")

Expand Down
2 changes: 1 addition & 1 deletion system_tests/seqinbox_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func testSequencerInboxReaderImpl(t *testing.T, validator bool) {
conf.BlockValidator.ArbitratorValidator = true
conf.BlockValidator.ConcurrentRunsLimit = 16
}
l2Info, arbNode, _, l2stack, l1Info, l1backend, l1Client, l1stack := createTestNodeOnL1WithConfig(t, ctx, false, conf, params.ArbitrumDevTestChainConfig())
l2Info, arbNode, _, l2stack, l1Info, l1backend, l1Client, l1stack := createTestNodeOnL1WithConfig(t, ctx, false, conf, nil, nil)
l2Backend := arbNode.Backend
defer requireClose(t, l1stack)
defer requireClose(t, l2stack)
Expand Down
2 changes: 1 addition & 1 deletion system_tests/twonodes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func testTwoNodesSimple(t *testing.T, dasModeStr string) {
chainConfig, l1NodeConfigA, lifecycleManager, _, dasSignerKey := setupConfigWithDAS(t, ctx, dasModeStr)
defer lifecycleManager.StopAndWaitUntil(time.Second)

l2info, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig)
l2info, nodeA, l2clientA, l2stackA, l1info, _, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig, nil)
defer requireClose(t, l1stack)
defer requireClose(t, l2stackA)

Expand Down
2 changes: 1 addition & 1 deletion system_tests/twonodeslong_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func testTwoNodesLong(t *testing.T, dasModeStr string) {
chainConfig, l1NodeConfigA, lifecycleManager, _, dasSignerKey := setupConfigWithDAS(t, ctx, dasModeStr)
defer lifecycleManager.StopAndWaitUntil(time.Second)

l2info, nodeA, l2client, l2stackA, l1info, l1backend, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig)
l2info, nodeA, l2client, l2stackA, l1info, l1backend, l1client, l1stack := createTestNodeOnL1WithConfig(t, ctx, true, l1NodeConfigA, chainConfig, nil)
defer requireClose(t, l1stack)

authorizeDASKeyset(t, ctx, dasSignerKey, l1info, l1client)
Expand Down

0 comments on commit b463fc9

Please sign in to comment.