mukan-ignite/ignite/config/chain/base/config.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

174 lines
7.7 KiB
Go

package base
import (
"dario.cat/mergo"
"github.com/ignite/cli/v29/ignite/config/chain/defaults"
"github.com/ignite/cli/v29/ignite/config/chain/version"
"github.com/ignite/cli/v29/ignite/pkg/xyaml"
)
// Account holds the options related to setting up Cosmos wallets.
type Account struct {
Name string `yaml:"name" doc:"Local name associated with the Account's key pair."`
Coins []string `yaml:"coins,omitempty" doc:"List of token balances for the account."`
Mnemonic string `yaml:"mnemonic,omitempty" doc:"Mnemonic phrase for the account."`
Address string `yaml:"address,omitempty" doc:"Address of the account."`
CoinType string `yaml:"cointype,omitempty" doc:"Coin type number for HD derivation (default is 118)."`
AccountNumber string `yaml:"account_number,omitempty" doc:"Account number for HD derivation (must be ≤ 2147483647)."`
AddressIndex string `yaml:"address_index,omitempty" doc:"Address index number for HD derivation (must be ≤ 2147483647)."`
}
// Build holds build configs.
type Build struct {
Main string `yaml:"main,omitempty" doc:"Path to the main build file."`
Binary string `yaml:"binary,omitempty" doc:"Path to the binary file."`
LDFlags []string `yaml:"ldflags,omitempty" doc:"List of custom linker flags for building the binary."`
Proto Proto `yaml:"proto" doc:"Contains proto build configuration options."`
}
// Proto holds proto build configs.
type Proto struct {
// Path is the relative path of where app's proto files are located at.
Path string `yaml:"path" doc:"Relative path where the application's proto files are located."`
}
// Client configures code generation for clients.
type Client struct {
// TSClient configures code generation for Typescript Client.
Typescript Typescript `yaml:"typescript,omitempty" doc:"Relative path where the application's Typescript files are located."`
// Composables configures code generation for Vue 3 composables.
Composables Composables `yaml:"composables,omitempty" doc:"Configures Vue 3 composables code generation."`
// OpenAPI configures OpenAPI spec generation for API.
OpenAPI OpenAPI `yaml:"openapi,omitempty" doc:"Configures OpenAPI spec generation for the API."`
}
// Typescript configures code generation for Typescript Client.
type Typescript struct {
// Path configures out location for generated Typescript Client code.
Path string `yaml:"path" doc:"Relative path where the application's Typescript files are located."`
}
// Composables configures code generation for vue-query hooks.
type Composables struct {
// Path configures out location for generated vue-query hooks.
Path string `yaml:"path" doc:"Relative path where the application's composable files are located."`
}
// OpenAPI configures OpenAPI spec generation for API.
type OpenAPI struct {
Path string `yaml:"path" doc:"Relative path where the application's OpenAPI files are located."`
ExcludeList []string `yaml:"exclude_list" doc:"List of proto paths to exclude OpenAPI from generation (supports wildcards)."`
}
// Faucet configuration.
type Faucet struct {
// Name is faucet account's name.
Name *string `yaml:"name" doc:"Name of the faucet account."`
// Coins holds type of coin denoms and amounts to distribute.
Coins []string `yaml:"coins" doc:"Types and amounts of coins the faucet distributes."`
// CoinsMax holds of chain denoms and their max amounts that can be transferred to single user.
CoinsMax []string `yaml:"coins_max,omitempty" doc:"Maximum amounts of coins that can be transferred to a single user."`
// LimitRefreshTime sets the timeframe at the end of which the limit will be refreshed.
RateLimitWindow string `yaml:"rate_limit_window,omitempty" doc:"Timeframe after which the limit will be refreshed."`
// Host is the host of the faucet server.
Host string `yaml:"host,omitempty" doc:"Host address of the faucet server."`
// Port number for faucet server to listen at.
Port uint `yaml:"port,omitempty" doc:"Port number for the faucet server."`
// TxFee is the tx fee the faucet needs to pay for each transaction.
TxFee string `yaml:"tx_fee,omitempty" doc:"Tx fee the faucet needs to pay for each transaction."`
}
// Init overwrites sdk configurations with given values.
// Deprecated: Used in config v0 only.
type Init struct {
// App overwrites appd's config/app.toml configs.
App xyaml.Map `yaml:"app" doc:"Overwrites the appd's config/app.toml configurations."`
// Client overwrites appd's config/client.toml configs.
Client xyaml.Map `yaml:"client" doc:"Overwrites the appd's config/client.toml configurations."`
// Config overwrites appd's config/config.toml configs.
Config xyaml.Map `yaml:"config" doc:"Overwrites the appd's config/config.toml configurations."`
// Home overwrites default home directory used for the app.
Home string `yaml:"home" doc:"Overwrites the default home directory used for the application."`
}
// Host keeps configuration related to started servers.
// Deprecated: Used in config v0 only.
type Host struct {
RPC string `yaml:"rpc" doc:"RPC server address."`
P2P string `yaml:"p2p" doc:"P2P server address."`
Prof string `yaml:"prof" doc:"Profiling server address."`
GRPC string `yaml:"grpc" doc:"GRPC server address."`
GRPCWeb string `yaml:"grpc-web" doc:"GRPC Web server address."`
API string `yaml:"api" doc:"API server address."`
}
// Validation describes the kind of validation the chain has.
type Validation string
const (
// ValidationSovereign is when the chain has his own validator set.
// Note that an empty string is also considered as a sovereign validation,
// because this is the default value.
ValidationSovereign = "sovereign"
// ValidationConsumer is when the chain is validated by a provider chain.
// Such chain is called a consumer chain.
// This is a special case for ICS chains, used by the consumer ignite app (https://github.com/ignite/apps/issues/101).
ValidationConsumer = "consumer"
)
// Config defines a struct with the fields that are common to all config versions.
type Config struct {
Include []string `yaml:"include,omitempty" doc:"Include incorporate a separate config.yml file directly in your current config file."`
Validation Validation `yaml:"validation,omitempty" doc:"Specifies the type of validation the blockchain uses (e.g., sovereign)."`
Version version.Version `yaml:"version" doc:"Defines the configuration version number."`
Build Build `yaml:"build,omitempty" doc:"Contains build configuration options."`
Accounts []Account `yaml:"accounts" doc:"Lists the options for setting up Cosmos Accounts."`
Faucet Faucet `yaml:"faucet,omitempty" doc:"Configuration for the faucet."`
Client Client `yaml:"client,omitempty" doc:"Configures client code generation."`
Genesis xyaml.Map `yaml:"genesis,omitempty" doc:"Custom genesis block modifications. Follow the nesting of the genesis file here to access all the parameters."`
DefaultDenom string `yaml:"default_denom,omitempty" doc:"Default staking denom (default is stake)."`
}
// GetVersion returns the config version.
func (c Config) GetVersion() version.Version {
return c.Version
}
func (c Config) IsSovereignChain() bool {
return c.Validation == "" || c.Validation == ValidationSovereign
}
func (c Config) IsConsumerChain() bool {
return c.Validation == ValidationConsumer
}
// SetDefaults assigns default values to empty config fields.
func (c *Config) SetDefaults() error {
return mergo.Merge(c, DefaultConfig())
}
// DefaultConfig returns a base config with default values.
func DefaultConfig() Config {
return Config{
Build: Build{
Proto: Proto{
Path: defaults.ProtoDir,
},
},
Faucet: Faucet{
Host: defaults.FaucetHost,
},
}
}