diff --git a/network/cmd/network_chain_publish.go b/network/cmd/network_chain_publish.go index c2ab51e0..bc283bfe 100644 --- a/network/cmd/network_chain_publish.go +++ b/network/cmd/network_chain_publish.go @@ -85,7 +85,7 @@ the "--account-balance" flag with a list of coins. c.Flags().String(flagGenesisURL, "", "URL to a custom Genesis") c.Flags().String(flagGenesisConfig, "", "name of an Ignite config file in the repo for custom Genesis") c.Flags().String(flagChainID, "", "chain ID to use for this network") - c.Flags().Uint64(flagProject, 0, "project ID to use for this network") + c.Flags().Int64(flagProject, -1, "project ID to use for this network") c.Flags().Bool(flagNoCheck, false, "skip verifying chain's integrity") c.Flags().String(flagMetadata, "", "add chain metadata") c.Flags().String(flagProjectTotalSupply, "", "add a total of the mainnet of a project") @@ -116,7 +116,7 @@ func networkChainPublishHandler(cmd *cobra.Command, args []string) error { genesisURL, _ = cmd.Flags().GetString(flagGenesisURL) genesisConfig, _ = cmd.Flags().GetString(flagGenesisConfig) chainID, _ = cmd.Flags().GetString(flagChainID) - project, _ = cmd.Flags().GetUint64(flagProject) + project, _ = cmd.Flags().GetInt64(flagProject) noCheck, _ = cmd.Flags().GetBool(flagNoCheck) metadata, _ = cmd.Flags().GetString(flagMetadata) projectTotalSupplyStr, _ = cmd.Flags().GetString(flagProjectTotalSupply) @@ -149,11 +149,11 @@ func networkChainPublishHandler(cmd *cobra.Command, args []string) error { return err } - if project != 0 && projectTotalSupplyStr != "" { + if project > -1 && projectTotalSupplyStr != "" { return fmt.Errorf("%s and %s flags cannot be set together", flagProject, flagProjectTotalSupply) } if isMainnet { - if project == 0 && projectTotalSupplyStr == "" { + if project < 0 && projectTotalSupplyStr == "" { return fmt.Errorf( "%s flag requires one of the %s or %s flags to be set", flagMainnet, @@ -248,7 +248,7 @@ func networkChainPublishHandler(cmd *cobra.Command, args []string) error { } - if project != 0 { + if project > -1 { publishOptions = append(publishOptions, network.WithProject(project)) } else if projectTotalSupplyStr != "" { totalSupply, err := sdk.ParseCoinsNormalized(projectTotalSupplyStr) @@ -358,9 +358,7 @@ func networkChainPublishHandler(cmd *cobra.Command, args []string) error { } else { session.Printf("%s Launch ID: %d \n", icons.Bullet, launchID) } - if projectID != 0 { - session.Printf("%s Project ID: %d \n", icons.Bullet, projectID) - } + session.Printf("%s Project ID: %d \n", icons.Bullet, projectID) return nil } diff --git a/network/network/client.go b/network/network/client.go index a2bc0e01..c8a7d252 100644 --- a/network/network/client.go +++ b/network/network/client.go @@ -4,8 +4,6 @@ import ( "context" "errors" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/ignite/cli/v28/ignite/pkg/cosmoserror" monitoringctypes "github.com/ignite/network/x/monitoringc/types" "github.com/ignite/apps/network/network/networktypes" @@ -52,7 +50,7 @@ func (n Network) verifiedClientIDs(ctx context.Context, launchID uint64) ([]stri }, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return nil, ErrObjectNotFound } else if err != nil { return nil, err diff --git a/network/network/errors.go b/network/network/errors.go new file mode 100644 index 00000000..9d9366af --- /dev/null +++ b/network/network/errors.go @@ -0,0 +1,22 @@ +package network + +import ( + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func isNotFoundErr(err error) bool { + s, ok := status.FromError(err) + if ok { + switch s.Code() { + case codes.NotFound: + return true + case codes.Unknown: + if s.Message() == "not found: unknown request" { + return true + } + return false + } + } + return false +} diff --git a/network/network/node.go b/network/network/node.go index 81fb2fe4..998b0ebe 100644 --- a/network/network/node.go +++ b/network/network/node.go @@ -5,12 +5,10 @@ import ( "encoding/base64" "errors" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" ibcconntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" ibcchanneltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - "github.com/ignite/cli/v28/ignite/pkg/cosmoserror" spntypes "github.com/ignite/network/pkg/types" monitoringptypes "github.com/ignite/network/x/monitoringp/types" @@ -133,7 +131,7 @@ func (n Node) connectionChannels(ctx context.Context, connectionID string) (chan res, err := n.ibcChannelQuery.ConnectionChannels(ctx, &ibcchanneltypes.QueryConnectionChannelsRequest{ Connection: connectionID, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return channels, nil } else if err != nil { return nil, err @@ -149,7 +147,7 @@ func (n Node) clientConnections(ctx context.Context, clientID string) ([]string, res, err := n.ibcConnQuery.ClientConnections(ctx, &ibcconntypes.QueryClientConnectionsRequest{ ClientId: clientID, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return []string{}, nil } else if err != nil { return nil, err @@ -171,7 +169,7 @@ func (n Node) consumerClientID(ctx context.Context) (string, error) { res, err := n.monitoringProviderQuery.GetConsumerClientID( ctx, &monitoringptypes.QueryGetConsumerClientIDRequest{}, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return "", ErrObjectNotFound } else if err != nil { return "", err @@ -184,7 +182,7 @@ func (n Node) connectionChannelID(ctx context.Context) (string, error) { res, err := n.monitoringProviderQuery.GetConnectionChannelID( ctx, &monitoringptypes.QueryGetConnectionChannelIDRequest{}, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return "", ErrObjectNotFound } else if err != nil { return "", err diff --git a/network/network/profile.go b/network/network/profile.go index 244f529a..2f62ab19 100644 --- a/network/network/profile.go +++ b/network/network/profile.go @@ -5,9 +5,7 @@ import ( "errors" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/ignite/cli/v28/ignite/pkg/cosmoserror" "github.com/ignite/cli/v28/ignite/pkg/events" profiletypes "github.com/ignite/network/x/profile/types" projecttypes "github.com/ignite/network/x/project/types" @@ -24,7 +22,7 @@ func (n Network) CoordinatorIDByAddress(ctx context.Context, address string) (ui }, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return 0, ErrObjectNotFound } else if err != nil { return 0, err @@ -88,7 +86,7 @@ func (n Network) Coordinator(ctx context.Context, address string) (networktypes. CoordinatorId: coordinatorID, }, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.Coordinator{}, ErrObjectNotFound } else if err != nil { return networktypes.Coordinator{}, err @@ -129,7 +127,7 @@ func (n Network) Validator(ctx context.Context, address string) (networktypes.Va res, err := n.profileQuery.GetValidator(ctx, &profiletypes.QueryGetValidatorRequest{ Address: address, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.Validator{}, ErrObjectNotFound } else if err != nil { return networktypes.Validator{}, err @@ -145,7 +143,7 @@ func (n Network) Balances(ctx context.Context, address string) (sdk.Coins, error Address: address, }, ) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return sdk.Coins{}, ErrObjectNotFound } else if err != nil { return sdk.Coins{}, err diff --git a/network/network/project.go b/network/network/project.go index 74844bc2..47ea15c0 100644 --- a/network/network/project.go +++ b/network/network/project.go @@ -2,12 +2,9 @@ package network import ( "context" - "errors" "fmt" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/ignite/cli/v28/ignite/pkg/cosmoserror" "github.com/ignite/cli/v28/ignite/pkg/events" projecttypes "github.com/ignite/network/x/project/types" @@ -53,7 +50,7 @@ func (n Network) Project(ctx context.Context, projectID uint64) (networktypes.Pr res, err := n.projectQuery.GetProject(ctx, &projecttypes.QueryGetProjectRequest{ ProjectId: projectID, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.Project{}, ErrObjectNotFound } else if err != nil { return networktypes.Project{}, err diff --git a/network/network/publish.go b/network/network/publish.go index 819e929d..7a57b207 100644 --- a/network/network/publish.go +++ b/network/network/publish.go @@ -22,7 +22,7 @@ type publishOptions struct { genesisURL string genesisConfig string chainID string - projectID uint64 + projectID int64 metadata string totalSupply sdk.Coins sharePercentages SharePercents @@ -30,11 +30,16 @@ type publishOptions struct { accountBalance sdk.Coins } +// hasProject check if the option has a project set. +func (o publishOptions) hasProject() bool { + return o.projectID >= 0 +} + // PublishOption configures chain creation. type PublishOption func(*publishOptions) // WithProject add a project id. -func WithProject(id uint64) PublishOption { +func WithProject(id int64) PublishOption { return func(o *publishOptions) { o.projectID = id } @@ -98,7 +103,7 @@ func Mainnet() PublishOption { // Publish submits Genesis to SPN to announce a new network. func (n Network) Publish(ctx context.Context, c Chain, options ...PublishOption) (launchID, projectID uint64, err error) { - o := publishOptions{} + o := publishOptions{projectID: -1} for _, apply := range options { apply(&o) } @@ -141,7 +146,7 @@ func (n Network) Publish(ctx context.Context, c Chain, options ...PublishOption) if err != nil { return 0, 0, err } - projectID = o.projectID + projectID = uint64(o.projectID) n.ev.Send("Publishing the network", events.ProgressStart()) @@ -162,9 +167,9 @@ func (n Network) Publish(ctx context.Context, c Chain, options ...PublishOption) } // check if a project associated to the chain is provided - if projectID != 0 { + if o.hasProject() { _, err = n.projectQuery.GetProject(ctx, &projecttypes.QueryGetProjectRequest{ - ProjectId: o.projectID, + ProjectId: projectID, }) if err != nil { return 0, 0, err @@ -179,7 +184,7 @@ func (n Network) Publish(ctx context.Context, c Chain, options ...PublishOption) } // mint vouchers - if projectID != 0 && !o.sharePercentages.Empty() { + if o.hasProject() && !o.sharePercentages.Empty() { totalSharesResp, err := n.projectQuery.TotalShares(ctx, &projecttypes.QueryTotalSharesRequest{}) if err != nil { return 0, 0, err @@ -251,7 +256,7 @@ func (n Network) Publish(ctx context.Context, c Chain, options ...PublishOption) c.SourceURL(), c.SourceHash(), initialGenesis, - projectID != 0, + o.hasProject(), projectID, o.accountBalance, metadata, diff --git a/network/network/queries.go b/network/network/queries.go index 9cad525f..be31a449 100644 --- a/network/network/queries.go +++ b/network/network/queries.go @@ -6,9 +6,7 @@ import ( "sort" "sync" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" - "github.com/ignite/cli/v28/ignite/pkg/cosmoserror" "github.com/ignite/cli/v28/ignite/pkg/events" launchtypes "github.com/ignite/network/x/launch/types" projecttypes "github.com/ignite/network/x/project/types" @@ -190,7 +188,7 @@ func (n Network) MainnetAccount( ProjectId: projectID, Address: address, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.MainnetAccount{}, ErrObjectNotFound } else if err != nil { return acc, err @@ -222,7 +220,7 @@ func (n Network) GenesisAccount(ctx context.Context, launchID uint64, address st LaunchId: launchID, Address: address, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.GenesisAccount{}, ErrObjectNotFound } else if err != nil { return networktypes.GenesisAccount{}, err @@ -236,7 +234,7 @@ func (n Network) VestingAccount(ctx context.Context, launchID uint64, address st LaunchId: launchID, Address: address, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.VestingAccount{}, ErrObjectNotFound } else if err != nil { return networktypes.VestingAccount{}, err @@ -250,7 +248,7 @@ func (n Network) GenesisValidator(ctx context.Context, launchID uint64, address LaunchId: launchID, Address: address, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return networktypes.GenesisValidator{}, ErrObjectNotFound } else if err != nil { return networktypes.GenesisValidator{}, err @@ -263,7 +261,7 @@ func (n Network) ChainReward(ctx context.Context, launchID uint64) (rewardtypes. res, err := n.rewardQuery.GetRewardPool(ctx, &rewardtypes.QueryGetRewardPoolRequest{ LaunchId: launchID, }) - if errors.Is(cosmoserror.Unwrap(err), sdkerrors.ErrNotFound) { + if isNotFoundErr(err) { return rewardtypes.RewardPool{}, ErrObjectNotFound } else if err != nil { return rewardtypes.RewardPool{}, err