From 870ff6e1f2662c039be9dad14c1fdb6884c03202 Mon Sep 17 00:00:00 2001 From: jpserrat <35823283+jpserrat@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:55:56 -0300 Subject: [PATCH] Fix start with chain id mismatch (#3664) --- nodebuilder/state/core.go | 5 ++++- share/shwap/p2p/shrex/error.go | 4 +++- state/core_access.go | 12 ++++++++++++ state/core_access_test.go | 12 +++++++++++- state/integration_test.go | 2 +- store/file/file.go | 4 +++- 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/nodebuilder/state/core.go b/nodebuilder/state/core.go index 5a61f43345..39ab732368 100644 --- a/nodebuilder/state/core.go +++ b/nodebuilder/state/core.go @@ -9,6 +9,7 @@ import ( "github.com/celestiaorg/celestia-node/header" "github.com/celestiaorg/celestia-node/nodebuilder/core" modfraud "github.com/celestiaorg/celestia-node/nodebuilder/fraud" + "github.com/celestiaorg/celestia-node/nodebuilder/p2p" "github.com/celestiaorg/celestia-node/share/eds/byzantine" "github.com/celestiaorg/celestia-node/state" ) @@ -21,6 +22,7 @@ func coreAccessor( keyname AccountName, sync *sync.Syncer[*header.ExtendedHeader], fraudServ libfraud.Service[*header.ExtendedHeader], + network p2p.Network, opts []state.Option, ) ( *state.CoreAccessor, @@ -28,7 +30,8 @@ func coreAccessor( *modfraud.ServiceBreaker[*state.CoreAccessor, *header.ExtendedHeader], error, ) { - ca, err := state.NewCoreAccessor(keyring, string(keyname), sync, corecfg.IP, corecfg.GRPCPort, opts...) + ca, err := state.NewCoreAccessor(keyring, string(keyname), sync, corecfg.IP, corecfg.GRPCPort, + network.String(), opts...) sBreaker := &modfraud.ServiceBreaker[*state.CoreAccessor, *header.ExtendedHeader]{ Service: ca, diff --git a/share/shwap/p2p/shrex/error.go b/share/shwap/p2p/shrex/error.go index d32c3c85b2..b5e6dce677 100644 --- a/share/shwap/p2p/shrex/error.go +++ b/share/shwap/p2p/shrex/error.go @@ -1,6 +1,8 @@ package shrex -import "errors" +import ( + "errors" +) // ErrorContains reports whether any error in err's tree matches any error in targets tree. func ErrorContains(err, target error) bool { diff --git a/state/core_access.go b/state/core_access.go index caaaa2feff..6cd8fe7a58 100644 --- a/state/core_access.go +++ b/state/core_access.go @@ -69,6 +69,7 @@ type CoreAccessor struct { coreConn *grpc.ClientConn coreIP string grpcPort string + network string // these fields are mutatable and thus need to be protected by a mutex lock sync.Mutex @@ -90,6 +91,7 @@ func NewCoreAccessor( getter libhead.Head[*header.ExtendedHeader], coreIP, grpcPort string, + network string, options ...Option, ) (*CoreAccessor, error) { // create verifier @@ -104,6 +106,7 @@ func NewCoreAccessor( coreIP: coreIP, grpcPort: grpcPort, prt: prt, + network: network, } for _, opt := range options { @@ -142,6 +145,15 @@ func (ca *CoreAccessor) Start(ctx context.Context) error { // create ABCI query client ca.abciQueryCli = tmservice.NewServiceClient(ca.coreConn) + resp, err := ca.abciQueryCli.GetNodeInfo(ctx, &tmservice.GetNodeInfoRequest{}) + if err != nil { + return fmt.Errorf("failed to get node info: %w", err) + } + + defaultNetwork := resp.GetDefaultNodeInfo().GetNetwork() + if defaultNetwork != ca.network { + return fmt.Errorf("wrong network in core.ip endpoint, expected %s, got %s", defaultNetwork, ca.network) + } // set up signer to handle tx submission ca.client, err = ca.setupTxClient(ctx, ca.defaultSignerAccount) diff --git a/state/core_access_test.go b/state/core_access_test.go index e8120adc39..8853cb17be 100644 --- a/state/core_access_test.go +++ b/state/core_access_test.go @@ -11,6 +11,7 @@ import ( "time" sdktypes "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/celestiaorg/celestia-app/v2/app" @@ -148,6 +149,15 @@ func TestTransfer(t *testing.T) { } } +func TestChainIDMismatch(t *testing.T) { + ctx := context.Background() + ca, _ := buildAccessor(t) + ca.network = "mismatch" + // start the accessor + err := ca.Start(ctx) + assert.ErrorContains(t, err, "wrong network") +} + func TestDelegate(t *testing.T) { ctx := context.Background() ca, accounts := buildAccessor(t) @@ -253,7 +263,7 @@ func buildAccessor(t *testing.T) (*CoreAccessor, []string) { WithAppCreator(appCreator) // needed until https://github.com/celestiaorg/celestia-app/pull/3680 merges cctx, _, grpcAddr := testnode.NewNetwork(t, config) - ca, err := NewCoreAccessor(cctx.Keyring, accounts[0].Name, nil, "127.0.0.1", extractPort(grpcAddr)) + ca, err := NewCoreAccessor(cctx.Keyring, accounts[0].Name, nil, "127.0.0.1", extractPort(grpcAddr), chainID) require.NoError(t, err) return ca, getNames(accounts) } diff --git a/state/integration_test.go b/state/integration_test.go index 54c76fbcd3..5a9a0892ea 100644 --- a/state/integration_test.go +++ b/state/integration_test.go @@ -52,7 +52,7 @@ func (s *IntegrationTestSuite) SetupSuite() { s.Require().Greater(len(s.accounts), 0) accountName := s.accounts[0].Name - accessor, err := NewCoreAccessor(s.cctx.Keyring, accountName, localHeader{s.cctx.Client}, "", "") + accessor, err := NewCoreAccessor(s.cctx.Keyring, accountName, localHeader{s.cctx.Client}, "", "", "") require.NoError(s.T(), err) setClients(accessor, s.cctx.GRPCClient) s.accessor = accessor diff --git a/store/file/file.go b/store/file/file.go index 50bd7f86cd..3cf89015f6 100644 --- a/store/file/file.go +++ b/store/file/file.go @@ -1,6 +1,8 @@ package file -import logging "github.com/ipfs/go-log/v2" +import ( + logging "github.com/ipfs/go-log/v2" +) var log = logging.Logger("store/file")