diff --git a/docs/evm/next/documentation/cosmos-sdk/modules/erc20.mdx b/docs/evm/next/documentation/cosmos-sdk/modules/erc20.mdx
index 54db6618..2edaf4f6 100644
--- a/docs/evm/next/documentation/cosmos-sdk/modules/erc20.mdx
+++ b/docs/evm/next/documentation/cosmos-sdk/modules/erc20.mdx
@@ -8,7 +8,7 @@ The ERC20 module (`x/erc20`) implements Single Token Representation v2 (STRv2),
**Key Functionality**:
- Automatic ERC-20 wrapper creation for Cosmos coins and IBC tokens
-- Bidirectional token conversion (Cosmos ↔ EVM)
+- Bidirectional token conversion (Cosmos EVM)
- Native token precompiles at deterministic addresses
- Dynamic precompile generation for IBC tokens
- ERC-20 allowance tracking for cross-environment compatibility
diff --git a/docs/evm/next/documentation/cosmos-sdk/modules/precisebank.mdx b/docs/evm/next/documentation/cosmos-sdk/modules/precisebank.mdx
index c13693a2..8868a39c 100644
--- a/docs/evm/next/documentation/cosmos-sdk/modules/precisebank.mdx
+++ b/docs/evm/next/documentation/cosmos-sdk/modules/precisebank.mdx
@@ -22,7 +22,7 @@ The PreciseBank module (`x/precisebank`) extends the precision of the standard C
## When Do You Need PreciseBank?
-### ✅ You NEED PreciseBank if:
+### You NEED PreciseBank if:
Your native token has **6 decimals** (or any non-18 decimal count):
- Base denom: `ustake`, `utoken`, `uatom` (micro prefix = 10^6)
@@ -31,7 +31,7 @@ Your native token has **6 decimals** (or any non-18 decimal count):
**Why**: EVM expects 18 decimals. Without PreciseBank, you lose 12 decimals of precision, causing rounding errors and broken DeFi protocols.
-### ❌ You DON'T NEED PreciseBank if:
+### You DON'T NEED PreciseBank if:
Your native token has **18 decimals**:
- Base denom: `atest`, `atoken` (atto prefix = 10^18)
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_c.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_c.mdx
deleted file mode 100644
index cc3fc439..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_c.mdx
+++ /dev/null
@@ -1,297 +0,0 @@
----
-title: 'Building Your Network'
-description: 'Quickly configure and launch an L1 EVM compatible blockchain, customized to your needs.'
----
-
-
-The `local_node.sh` script can quickly set up a preconfigured local blockchain, complete with pre-funded accounts, streamlined consensus parameters, and all available endpoints exposed. This is ideal for development, testing, and experimentation.
-
-
-## Quick Start
-
-For testing and faster iteration in development, run the script as-is:
-
-```bash
-cd /path/to/evm
-./local_node.sh
-```
-
-This will:
-- Build and install the `evmd` binary
-- Create a new chain in `~/.evmd`
-- Set up 4 pre-funded development accounts (dev0-dev3)
-- Start the node with all APIs enabled
-
-
-**Prerequisites:**
-- **Go toolchain** - Required for building the binary
-- **Make** - Used to build and install `evmd`
-- **jq** - JSON processor for genesis modifications
- - macOS: `brew install jq`
- - Linux: `apt install jq` or `yum install jq`
-
-
-## Command-Line Options
-
-### Overwrite Control
-
-Control whether existing chain data is overwritten:
-
-```bash
-# Automatically overwrite existing data (no prompt)
-./local_node.sh -y
-
-# Never overwrite existing data (no prompt)
-./local_node.sh -n
-```
-
-Without these flags, you'll be prompted if existing data is found.
-
-### Build Options
-
-```bash
-# Skip the make install step (use existing binary)
-./local_node.sh --no-install
-
-# Build with debug symbols for remote debugging
-./local_node.sh --remote-debugging
-```
-
-The `--remote-debugging` flag builds with `nooptimization,nostrip` options, making it easier to debug with tools like Delve.
-
-### Additional Development Accounts
-
-Create extra pre-funded accounts beyond the default four:
-
-```bash
-# Create 10 additional accounts (dev4-dev13)
-./local_node.sh --additional-users 10
-```
-
-Generated mnemonics are saved to `~/.evmd/mnemonics.yaml`.
-
-### Custom Mnemonics
-
-Use your own mnemonics instead of the default dev accounts:
-
-```bash
-./local_node.sh --mnemonics-input ./my-mnemonics.yaml
-```
-
-The input YAML format:
-
-```yaml
-mnemonics:
- - "your first mnemonic phrase here"
- - "your second mnemonic phrase here"
- - "your third mnemonic phrase here"
-```
-
-
-You cannot use both `--mnemonics-input` and `--additional-users` together. Use `--mnemonics-input` to provide all accounts, or use `--additional-users` to generate additional random accounts.
-
-
-## Default Configuration
-
-### Chain Parameters
-
-The script sets up a chain with default values:
-
-| Parameter | Value | Purpose |
-|-----------|-------|---------|
-| Cosmos Chain ID | `9001` | "Native" chain ID |
-| EVM Chain ID | 262144 | Ethereum-compatible chain ID |
-| Moniker | `localtestnet` | Node identifier |
-| Home Directory | `~/.evmd` | All chain data location |
-| Keyring | `test` | **Not secure for production -- `OS` is recommended** |
-| Key Algorithm | `eth_secp256k1` | Ethereum and Cosmos compatible |
-| Base Fee | `10000000` | Initial gas price |
-| Denom | `atest` | Base denomination (atto-test) |
-
-### Pre-Funded Development Accounts
-
-Four development accounts are created by default, each funded with `1000000000000000000000atest` (1,000 TEST tokens):
-
-
-**Mnemonic:**
-```
-copper push brief egg scan entry inform record adjust fossil boss egg
-comic alien upon aspect dry avoid interest fury window hint race symptom
-```
-
-**Addresses:**
-- Ethereum: `0xC6Fe5D33615a1C52c08018c47E8Bc53646A0E101`
-- Cosmos: `cosmos1cml96vmptgw99syqrrz8az79xer2pcgp84pdun`
-- Private Key: `0x88cbead91aee890d27bf06e003ade3d4e952427e88f88d31d61d3ef5e5d54305`
-
-
-
-**Mnemonic:**
-```
-maximum display century economy unlock van census kite error heart snow filter
-midnight usage egg venture cash kick motor survey drastic edge muffin visual
-```
-
-**Addresses:**
-- Ethereum: `0x963EBDf2e1f8DB8707D05FC75bfeFFBa1B5BaC17`
-- Cosmos: `cosmos1jcltmuhplrdcwp7stlr4hlhlhgd4htqh3a79sq`
-- Private Key: `0x741de4f8988ea941d3ff0287911ca4074e62b7d45c991a51186455366f10b544`
-
-
-
-**Mnemonic:**
-```
-will wear settle write dance topic tape sea glory hotel oppose rebel
-client problem era video gossip glide during yard balance cancel file rose
-```
-
-**Addresses:**
-- Ethereum: `0x40a0cb1C63e026A81B55EE1308586E21eec1eFa9`
-- Cosmos: `cosmos1gzsvk8rruqn2sx64acfsskrwy8hvrmafqkaze8`
-- Private Key: `0x3b7955d25189c99a7468192fcbc6429205c158834053ebe3f78f4512ab432db9`
-
-
-
-**Mnemonic:**
-```
-doll midnight silk carpet brush boring pluck office gown inquiry duck chief
-aim exit gain never tennis crime fragile ship cloud surface exotic patch
-```
-
-**Addresses:**
-- Ethereum: `0x498B5AeC5D439b733dC2F58AB489783A23FB26dA`
-- Cosmos: `cosmos1fx944mzagwdhx0wz7k9tfztc8g3lkfk6rrgv6l`
-- Private Key: `0x8a36c69d940a92fcea94b36d0f2928c7a0ee19a90073eda769693298dfa9603b`
-
-
-
-These are **well-known test accounts**. Never use them on public networks or with real funds. Anyone with access to these mnemonics can control these accounts.
-
-
-## Genesis Configuration
-
-The script applies numerous genesis customizations optimized for development:
-
-- **Token denomination**: `atest` (18 decimals) configured across all modules
-- **ERC20 native token**: Available at `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`
-- **Precompiles**: All standard precompiles enabled (P256, Bech32, Staking, Distribution, ICS20, Vesting, Bank, Governance, Slashing)
-- **Governance**: Fast testing periods (30s voting, 15s expedited)
-- **Block gas**: 10M gas per block
-
-## Node Configuration
-
-The script optimizes several runtime configurations for local development:
-
-### Consensus & Block Times
-- **Fast consensus**: Reduced timeouts result in ~1 second block times (vs default ~5 seconds)
-- **Quick commit**: `timeout_commit = 1s` for rapid iteration
-
-### APIs & Endpoints
-- **All APIs enabled**: gRPC, REST, JSON-RPC (eth, txpool, personal, net, debug, web3)
-- **Metrics enabled**: Prometheus metrics available at `http://localhost:26660/metrics`
-
-## Node Startup Configuration
-
-The node starts with these runtime parameters:
-
-```bash
-evmd start \
- --pruning nothing \ # Keep all historical data
- --log_level info \ # Standard logging
- --minimum-gas-prices=0atest \ # Accept zero gas price
- --evm.min-tip=0 \ # Accept zero priority fee
- --json-rpc.api eth,txpool,personal,net,debug,web3 \
- --chain-id 9001 \
- --home ~/.evmd
-```
-
-### JSON RPC
-
-| Namespace | Purpose |
-|-----|---------|
-| `eth` | Standard Ethereum JSON-RPC (eth_sendTransaction, eth_call, etc.) |
-| `txpool` | Transaction pool inspection |
-| `personal` | Account management (personal_sign, etc.) |
-| `net` | Network information |
-| `debug` | Debugging methods (debug_traceTransaction, etc.) |
-| `web3` | Web3 utilities |
-
-## Customizing the Local Node Script
-
-The `local_node.sh` script can be customized to test different chain configurations. To modify parameters:
-
-1. **Open the script** in your text editor
-2. **Locate the genesis customization section** (lines 233-255 with `jq` commands)
-3. **Add or modify `jq` commands** for your desired parameters
-4. **Run the script** with `./local_node.sh -y` to apply changes
-
-### Quick Customization Options
-
-**Top-level variables** (edit at top of script):
-- `CHAINID` (line 3) - Cosmos chain ID, default: `9001`
-- `MONIKER` (line 4) - Node identifier, default: `localtestnet`
-- `LOGLEVEL` (line 11) - Log verbosity: `debug`, `info`, `warn`, `error`
-- `BASEFEE` (line 15) - Initial EIP-1559 base fee, default: `10000000`
-
-**Common customizations**:
-- Token denomination and metadata
-- Active precompiles
-- Fee market parameters
-- Governance timing
-- Consensus timeouts
-
-## Connecting to the Local Node
-
-### JSON-RPC Endpoint
-
-```
-http://localhost:8545
-```
-
-Configure your tools to use this endpoint:
-
-
-```javascript MetaMask
-Network Name: Local EVM
-RPC URL: http://localhost:8545
-Chain ID: 999111
-Currency Symbol: TEST
-```
-
-```javascript Hardhat (hardhat.config.js)
-module.exports = {
- networks: {
- local: {
- url: "http://localhost:8545",
- accounts: [
- "0x88cbead91aee890d27bf06e003ade3d4e952427e88f88d31d61d3ef5e5d54305" // dev0
- ]
- }
- }
-}
-```
-
-```bash Foundry
-forge create --rpc-url http://localhost:8545 \
- --private-key 0x88cbead91aee890d27bf06e003ade3d4e952427e88f88d31d61d3ef5e5d54305 \
- src/MyContract.sol:MyContract
-```
-
-
-### gRPC Endpoint
-
-```
-localhost:9090
-```
-
-### REST API
-
-```
-http://localhost:1317
-```
-
-### WebSocket
-
-```
-ws://localhost:8546
-```
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_v.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_v.mdx
deleted file mode 100644
index 44e5e60a..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/build-a-chain_v.mdx
+++ /dev/null
@@ -1,209 +0,0 @@
----
-title: "Build A Custom EVM Chain"
-description: "Create your own blockchain by forking and customizing the Cosmos EVM reference chain (evmd). This guide covers the example chain configuration, running the chain locally, and understanding the foundation for building your custom network."
----
-
-# Example Cosmos EVM Chain
-
-The `evmd` directory in the Cosmos EVM repository contains an example chain that demonstrates the integration of Cosmos EVM modules. This reference implementation is based on the simapp implementation from the Cosmos SDK repository, which provides a simplified yet complete blockchain foundation.
-
-
-This chain implementation serves two primary purposes:
-1. **Demonstration**: Shows how to integrate Cosmos EVM modules into a blockchain
-2. **Testing Foundation**: Provides a working chain for development and testing
-
-You can use evmd as the starting point for building your own custom chain.
-
-
-## Building Your Custom Chain
-
-The `evmd` implementation serves as the foundation for building your own custom blockchain. To create your chain:
-
-
-
-Start by forking the Cosmos EVM repository:
-
-```bash
-git clone https://github.com/cosmos/evm.git
-cd evm
-```
-
-
-
-Rename the `evmd` directory and update all references:
-
-```bash
-# Rename directory
-mv evmd yourchain
-
-# Update imports and binary name
-find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
-```
-
-Update `go.mod` to reflect your repository path.
-
-
-
-Modify the default configuration in your chain:
-
-- **Chain IDs**: Update Cosmos chain ID and EVM chain ID
-- **Bech32 Prefix**: Set your address prefix in `evmd/config/config.go`
-- **Token Denomination**: Configure in genesis
-- **Precompiles**: Enable only the precompiles you need
-- **Modules**: Add or remove modules based on requirements
-
-
-
-
-Use the local node script to test your changes:
-
-```bash
-./local_node.sh -y
-```
-
-Verify that:
-- The chain starts successfully
-- JSON-RPC is accessible
-- Wallets can connect
-- Transactions work as expected
-
-
-
-Once testing is complete, prepare for testnet deployment:
-
-- Set up validator infrastructure
-- Configure persistent peers
-- Coordinate genesis with validators
-- Launch the network
-
-
-
-
-## Default Configuration
-
-The example chain (`evmd`) comes with the following default configuration:
-
-| Option | Value | Description |
-|---------------------|------------------------|-------------|
-| **Binary** | `evmd` | The compiled chain binary name |
-| **Chain ID** | `cosmos_262144-1` | Default Cosmos chain ID (format: `name_evmChainID-version`) |
-| **EVM Chain ID** | `262144` | EVM chain ID for transaction replay protection |
-| **Custom Opcodes** | - | No custom opcodes by default |
-| **Token Pairs** | 1 (native token) | Default ERC20 token pair for the native denomination |
-| **Denomination** | `atest` | Native token denomination (18 decimals, atto-prefix) |
-| **EVM Permissioning** | Permissionless | Anyone can deploy and call contracts |
-| **Enabled Precompiles** | All | All nine static precompiles are enabled by default |
-
-
-The default configuration uses an 18-decimal token (`atest`) which provides direct EVM compatibility without requiring the precisebank module. This is the recommended setup for new chains.
-
-
-## Running The Chain
-
-To run the example chain locally, use the provided local node script from the repository root:
-
-```bash
-./local_node.sh [FLAGS]
-```
-
-### Available Flags
-
-- `-y`: Overwrite previous database (fresh start)
-- `-n`: Do **not** overwrite previous database (resume from previous state)
-- `--no-install`: Skip installation of the binary (use existing binary)
-- `--remote-debugging`: Build a binary suitable for remote debugging
-
-
-The `local_node.sh` script handles all the setup including:
-- Building the `evmd` binary
-- Initializing the chain configuration
-- Setting up genesis parameters
-- Starting the chain with JSON-RPC enabled
-
-
-### Example Usage
-
-
-```bash Fresh Start
-# Start with a clean slate
-./local_node.sh -y
-```
-
-```bash Resume Previous State
-# Continue from where you left off
-./local_node.sh -n
-```
-
-```bash Development Mode
-# Skip rebuild if binary already exists
-./local_node.sh --no-install
-```
-
-```bash Debug Mode
-# Build with debugging symbols
-./local_node.sh --remote-debugging
-```
-
-
-## Connect to Wallet
-
-Once the chain is running, you can connect using any Ethereum-compatible wallet. The example below uses MetaMask:
-
-### MetaMask Setup
-
-
-
-Use the following seed phrase when adding a new wallet in MetaMask:
-
-```
-gesture inject test cycle original hollow east ridge hen combine
-junk child bacon zero hope comfort vacuum milk pitch cage oppose
-unhappy lunar seat
-```
-
-
-**Notice**: This is a well-known test seed phrase. **Never** use it for mainnet or with real funds. It's provided solely for local development and testing purposes.
-
-
-
-
-1. Click the **Network** button on the top left of MetaMask
-2. Click **Add custom network** at the bottom of the modal
-3. Configure the network with these settings:
-
-| Setting | Value |
-|---------|-------|
-| **Network Name** | Cosmos EVM Local |
-| **RPC URL** | `http://localhost:8545` |
-| **Chain ID** | `262144` |
-| **Currency Symbol** | `TEST` |
-| **Block Explorer URL** | (leave empty for local) |
-
-
-Make sure your local chain is running before adding the network. The RPC URL must be accessible from your browser.
-
-
-
-
-After adding the network:
-- Switch to the "Cosmos EVM Local" network in MetaMask
-- You should see your account balance (if the test account was funded in genesis)
-- You can now interact with the chain through MetaMask
-
-
-
-### Recommended Reading
-
-
-
-EVM execution and parameter configuration
-
-
-
-Available precompiled contracts and integration
-
-
-
----
-
-For additional support and community resources, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
\ No newline at end of file
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/configuration-parameters.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/configuration-parameters.mdx
new file mode 100644
index 00000000..c1f5b484
--- /dev/null
+++ b/docs/evm/next/documentation/getting-started/build-a-chain/configuration-parameters.mdx
@@ -0,0 +1,1083 @@
+---
+title: "Chain Configuration Guide"
+description: "Step-by-step guide to configuring your Cosmos EVM chain. Learn how to customize the binary name, chain IDs, token denomination, precompiles, and permissions based on the evmd reference implementation."
+---
+
+# Chain Configuration Guide
+
+When building your custom chain based on `evmd`, you'll need to configure several key parameters. This guide walks through each configuration option from the evmd default setup and shows you how to customize it for your chain.
+
+
+This guide focuses on the practical configuration steps. For comprehensive parameter references and advanced topics, see the [migration guides](/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5) and module-specific documentation.
+
+
+## evmd Default Configuration
+
+The reference implementation (`evmd`) comes with these defaults:
+
+| Configuration | Default Value | Customizable |
+|---------------|---------------|--------------|
+| **Binary Name** | `evmd` | ✓ Yes (rename) |
+| **Cosmos Chain ID** | `cosmos_262144-1` | ✓ Yes (genesis) |
+| **EVM Chain ID** | `262144` | ✓ Yes (genesis) |
+| **Custom Opcodes** | None | ✓ Yes (advanced) |
+| **Token Pairs** | 1 (native token) | ✓ Yes (genesis) |
+| **Denomination** | `atest` (18 decimals) | ✓ Yes (genesis) |
+| **EVM Permissioning** | Permissionless | ✓ Yes (genesis) |
+| **Enabled Precompiles** | All 9 precompiles | ✓ Yes (genesis) |
+
+Let's configure each of these for your custom chain.
+
+---
+
+## 1. Binary Name
+
+**What It Is**: The name of your compiled blockchain executable.
+
+**Default**: `evmd`
+
+### How to Change
+
+
+
+```bash
+cd /path/to/cosmos-evm
+mv evmd yourchain
+```
+
+
+
+```bash
+# Update all references in Go files
+find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
+```
+
+
+
+Edit the module path in `go.mod`:
+```go
+module github.com/your-org/your-chain
+
+// Update import paths that reference evmd
+```
+
+
+
+Edit the Makefile to use your binary name:
+```makefile
+BINARY_NAME := yourchain
+
+install:
+ go install ./yourchain/cmd/yourchain
+```
+
+
+
+```bash
+go mod tidy
+make install
+
+# Or build directly
+go build -o yourchain ./yourchain/cmd/yourchain
+```
+
+
+
+
+After renaming, your binary will be `yourchain` instead of `evmd`. All CLI commands will use this new name (e.g., `yourchain start` instead of `evmd start`).
+
+
+---
+
+## 2. Cosmos Chain ID
+
+**What It Is**: The unique identifier for your blockchain in the Cosmos ecosystem. Used for IBC connections and governance.
+
+**Default**: `cosmos_262144-1`
+
+**Format**: `{name}_{evmChainID}-{version}`
+
+### How to Change
+
+Set during chain initialization:
+
+```bash
+yourchain init mynode --chain-id yourchain_262144-1
+```
+
+**Recommended Formats**:
+- Testnet: `yourchain_262144-1`
+- Mainnet: `yourchain-1` (after registering a unique EVM chain ID)
+
+
+The Cosmos chain ID is separate from the EVM chain ID. The format `name_evmChainID-version` helps maintain consistency between both IDs, but it's not required.
+
+
+### Changing After Genesis
+
+While technically possible through a coordinated upgrade, changing the Cosmos chain ID requires all nodes to update and restart simultaneously. Plan your chain ID carefully before launch.
+
+---
+
+## 3. EVM Chain ID
+
+**What It Is**: The EIP-155 chain ID used for Ethereum transaction replay protection.
+
+**Default**: `262144`
+
+**Where Configured**: Retrieved from app options in `app.go`
+
+### How to Change
+
+
+The EVM chain ID **cannot** be changed after genesis without breaking transaction replay protection. Choose carefully before launch.
+
+
+The EVM chain ID is retrieved from app options in `app.go`:
+
+```go
+// evmd/app.go line ~216
+evmChainID := cast.ToUint64(appOpts.Get(srvflags.EVMChainID))
+```
+
+You can set it via CLI flag when starting the chain:
+```bash
+yourchain start --evm.chain-id 262144
+```
+
+Or configure it in `app.toml`:
+```toml
+[evm]
+chain-id = 262144
+```
+
+### Choosing an EVM Chain ID
+
+
+
+**Avoid these ranges**:
+- `1` - Ethereum Mainnet
+- `2-10` - Ethereum testnets
+- `1-999` - Generally reserved by Ethereum Foundation
+- `137` - Polygon
+- Common production chains - Check [chainlist.org](https://chainlist.org)
+
+
+
+**For local development and testnets**:
+- Use `262144` (evmd default)
+- Or any high number unlikely to conflict
+- No registration needed
+
+
+
+**For mainnet launches**:
+- Choose a unique ID > 1,000,000
+- Register at [chainlist.org](https://chainlist.org)
+- Verify no conflicts with existing chains
+- Document your choice publicly
+
+
+
+---
+
+## 4. Custom Opcodes
+
+**What It Is**: Custom EVM operations beyond standard Ethereum opcodes.
+
+**Default**: None
+
+
+Custom opcodes are an advanced feature. Most chains should use standard Ethereum opcodes with the optional `extra_eips` parameter instead.
+
+
+### Adding Extra EIPs
+
+Instead of custom opcodes, enable additional Ethereum Improvement Proposals:
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "extra_eips": [2200, 2929, 3198]
+ }
+ }
+ }
+}
+```
+
+**Common EIPs**:
+- `2200` - Net gas metering
+- `2929` - Gas cost increases for state access
+- `3198` - BASEFEE opcode
+- `3529` - Reduction in refunds
+
+
+For teams that need custom EVM functionality:
+
+1. Create activator functions in your chain's `eips/` directory
+2. Register in the activators map
+3. Add to `extra_eips` in genesis
+
+```go
+// yourchain/eips/custom.go
+func ActivateMyCustomOpcode(jt *vm.JumpTable) {
+ // Define custom opcode behavior
+}
+
+// Register in activators
+var CustomActivators = map[int]func(*vm.JumpTable){
+ 9999: ActivateMyCustomOpcode,
+}
+```
+
+Then in genesis:
+```json
+{
+ "extra_eips": [9999]
+}
+```
+
+This is rarely needed - consider if standard EVM functionality meets your needs first.
+
+
+---
+
+## 5. Token Pairs (ERC20 Module)
+
+**What It Is**: Mappings between Cosmos native tokens and ERC20 contract representations.
+
+**Default**: 1 pair for the native token
+
+### How to Configure
+
+
+For comprehensive ERC20 module configuration, see the [ERC20 Module Documentation](/evm/next/documentation/cosmos-sdk/modules/erc20).
+
+
+Token pairs are configured in genesis under the `erc20` module:
+
+```json
+{
+ "app_state": {
+ "erc20": {
+ "native_precompiles": [
+ "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
+ ],
+ "token_pairs": [
+ {
+ "erc20_address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
+ "denom": "atest",
+ "enabled": true,
+ "contract_owner": 1
+ }
+ ]
+ }
+ }
+}
+```
+
+### Default Native Token Pair
+
+The evmd example uses a special ERC20 address for the native token:
+- **Address**: `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`
+- **Denom**: `atest` (or your chain's native denom)
+- **Purpose**: Allows native tokens to be used in EVM contracts as ERC20
+
+
+**Default Setup**: Most chains start with just the native token pair. Additional pairs can be registered after launch through governance or permissionless registration (if enabled).
+
+
+---
+
+## 6. Token Denomination
+
+**What It Is**: Your chain's native token denomination and decimal precision.
+
+**Default**: `atest` (18 decimals, atto-prefix)
+
+### Understanding Token Configuration
+
+Token configuration involves three components:
+
+1. **Bank Metadata** - Defines denominations and decimals
+2. **VM Parameters** - Specifies which denom is the EVM native token
+3. **Extended Denom Options** - Required only for non-18 decimal tokens
+
+
+
+**Direct EVM Compatibility - No Extra Modules Needed**
+
+```json
+{
+ "app_state": {
+ "bank": {
+ "denom_metadata": [
+ {
+ "description": "The native staking token",
+ "denom_units": [
+ {
+ "denom": "atoken", // atto-prefix (18 decimals)
+ "exponent": 0,
+ "aliases": ["attotoken"]
+ },
+ {
+ "denom": "token", // Display denomination
+ "exponent": 18
+ }
+ ],
+ "base": "atoken",
+ "display": "token",
+ "name": "Token",
+ "symbol": "TOKEN"
+ }
+ ]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "atoken" // Must match base
+ // No extended_denom_options needed!
+ }
+ }
+ }
+}
+```
+
+**Benefits**:
+- ✓ Direct 1:1 EVM mapping
+- ✓ Uses standard `x/bank` module
+- ✓ Simpler architecture
+- ✓ No additional modules required
+
+
+
+**Requires PreciseBank Module**
+
+```json
+{
+ "app_state": {
+ "bank": {
+ "denom_metadata": [
+ {
+ "denom_units": [
+ {
+ "denom": "utoken", // micro-prefix (6 decimals)
+ "exponent": 0
+ },
+ {
+ "denom": "token",
+ "exponent": 6
+ }
+ ],
+ "base": "utoken",
+ "display": "token"
+ }
+ ]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "utoken",
+ "extended_denom_options": {
+ "extended_denom": "atoken" // 18-decimal EVM representation
+ }
+ }
+ }
+ }
+}
+```
+
+**Additional Setup Required**:
+- Must add `x/precisebank` module to `app.go`
+- Precisebank handles fractional amounts (1 utoken = 10^12 wei)
+- See [PreciseBank Module Docs](/evm/next/documentation/cosmos-sdk/modules/precisebank)
+
+
+When using non-18 decimal tokens, you **must** add the precisebank module and configure the extended denom. Failure to do so will result in precision loss and incorrect balances.
+
+
+
+
+**Also Requires PreciseBank**
+
+For chains using other decimal precisions (e.g., 8 decimals for Bitcoin compatibility):
+
+```json
+{
+ "bank": {
+ "denom_metadata": [{
+ "denom_units": [
+ {"denom": "sats", "exponent": 0}, // 8 decimals
+ {"denom": "btc", "exponent": 8}
+ ],
+ "base": "sats"
+ }]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "sats",
+ "extended_denom_options": {
+ "extended_denom": "asats" // 18-decimal for EVM
+ }
+ }
+ }
+}
+```
+
+Requires precisebank module with custom conversion factor.
+
+
+
+### Common Denomination Prefixes
+
+| Prefix | Decimals | Example | Used For |
+|--------|----------|---------|----------|
+| `a` (atto) | 18 | `atoken` | **EVM-compatible chains (recommended)** |
+| `u` (micro) | 6 | `uatom`, `ustake` | Traditional Cosmos chains |
+| Base | 0-8 | `sats` | Bitcoin-style |
+
+
+**Recommendation**: Use 18 decimals (`atto` prefix) for new chains. This provides:
+- Direct EVM compatibility
+- Simpler codebase (no precisebank needed)
+- Better UX for Ethereum users
+- Standard across EVM ecosystems
+
+
+### Setting Denomination in Genesis
+
+The denomination is set in multiple places that must be consistent:
+
+```bash
+# After initializing your chain
+GENESIS=~/.yourchain/config/genesis.json
+
+# Set denomination in all modules
+jq '.app_state["staking"]["params"]["bond_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["vm"]["params"]["evm_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["mint"]["params"]["mint_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata
+jq '.app_state["bank"]["denom_metadata"]=[{
+ "description": "The native staking token",
+ "denom_units": [
+ {"denom": "atoken", "exponent": 0, "aliases": ["attotoken"]},
+ {"denom": "token", "exponent": 18, "aliases": []}
+ ],
+ "base": "atoken",
+ "display": "token",
+ "name": "Token",
+ "symbol": "TOKEN"
+}]' $GENESIS > tmp && mv tmp $GENESIS
+```
+
+
+**Critical**: The following must all use the same base denomination:
+- `staking.params.bond_denom`
+- `mint.params.mint_denom`
+- `gov.params.min_deposit[0].denom`
+- `vm.params.evm_denom`
+- `bank.denom_metadata[0].base`
+
+
+---
+
+## 7. EVM Permissioning
+
+**What It Is**: Access control for deploying and calling smart contracts.
+
+**Default**: Permissionless (anyone can deploy and call contracts)
+
+### How to Configure
+
+EVM permissions are set in genesis under `vm.params.access_control`:
+
+
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "access_control": {
+ "create": {
+ "access_type": 0, // 0 = PERMISSIONLESS
+ "access_control_list": []
+ },
+ "call": {
+ "access_type": 0,
+ "access_control_list": []
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+**Use Case**: Public chains, testnets, open ecosystems
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 2, // 2 = PERMISSIONED (allowlist)
+ "access_control_list": [
+ "0x1234567890123456789012345678901234567890",
+ "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
+ ]
+ },
+ "call": {
+ "access_type": 0, // Keep calls open
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Enterprise chains, regulated environments, controlled contract deployment
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 1, // 1 = RESTRICTED (blocklist)
+ "access_control_list": [
+ "0xbadaddr1234567890123456789012345678901234"
+ ]
+ },
+ "call": {
+ "access_type": 0,
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Blocking known malicious addresses while keeping chain open
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 1, // RESTRICTED with empty list = block all
+ "access_control_list": []
+ },
+ "call": {
+ "access_type": 1,
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Chains that only use predeployed contracts, no user deployments
+
+
+
+### Access Control Types
+
+| Type | Value | Behavior | access_control_list |
+|------|-------|----------|---------------------|
+| **Permissionless** | `0` | Anyone can perform action | Ignored |
+| **Restricted** | `1` | Block addresses in list | Blocklist |
+| **Permissioned** | `2` | Only addresses in list | Allowlist |
+
+
+**Recommendation**: Start with permissionless for testnets. For mainnets, consider permissioned deployment initially, then transition to permissionless through governance once the chain is stable.
+
+
+### Modifying After Genesis
+
+Access control can be changed through governance proposals:
+
+```bash
+# Example: Enable permissionless deployment via governance
+yourchain tx gov submit-proposal param-change proposal.json \
+ --from validator \
+ --chain-id yourchain-1
+```
+
+---
+
+## 8. Enabled Precompiles
+
+**What It Is**: Native Cosmos SDK functionality exposed as EVM smart contracts.
+
+**Default**: All 9 static precompiles enabled
+
+### Available Precompiles
+
+
+For complete precompile documentation including Solidity interfaces and usage examples, see the [Precompiles Overview](/docs/evm/next/documentation/smart-contracts/precompiles/overview).
+
+
+| Address | Name | Description | Typical Use Case |
+|---------|------|-------------|------------------|
+| `0x0100` | **P256** | P256 cryptographic operations | Web3 auth, secure signing |
+| `0x0400` | **Bech32** | Cosmos ↔ Ethereum address conversion | Cross-chain operations |
+| `0x0800` | **Staking** | Validator staking operations | Liquid staking, auto-compounding |
+| `0x0801` | **Distribution** | Reward distribution queries | Reward dashboards, auto-claiming |
+| `0x0802` | **ICS20** | IBC token transfers | Cross-chain DeFi |
+| `0x0803` | **Vesting** | Vesting account management | Token vesting contracts |
+| `0x0804` | **Bank** | Native token transfers | Payment contracts |
+| `0x0805` | **Governance** | On-chain voting | DAO integration |
+| `0x0806` | **Slashing** | Validator slashing info | Validator monitoring |
+
+### How to Configure
+
+
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "active_static_precompiles": [
+ "0x0000000000000000000000000000000000000100",
+ "0x0000000000000000000000000000000000000400",
+ "0x0000000000000000000000000000000000000800",
+ "0x0000000000000000000000000000000000000801",
+ "0x0000000000000000000000000000000000000802",
+ "0x0000000000000000000000000000000000000803",
+ "0x0000000000000000000000000000000000000804",
+ "0x0000000000000000000000000000000000000805",
+ "0x0000000000000000000000000000000000000806"
+ ]
+ }
+ }
+ }
+}
+```
+
+**Use Case**: Maximum Cosmos SDK integration, full-featured chains
+
+
+
+```json
+{
+ "active_static_precompiles": [
+ "0x0000000000000000000000000000000000000100", // P256
+ "0x0000000000000000000000000000000000000400", // Bech32
+ "0x0000000000000000000000000000000000000800", // Staking
+ "0x0000000000000000000000000000000000000804" // Bank
+ ]
+}
+```
+
+**Use Case**: Minimal attack surface, only enable what you need
+
+
+
+```json
+{
+ "active_static_precompiles": []
+}
+```
+
+**Use Case**: Pure EVM chains with no Cosmos SDK integration
+
+
+
+Set defaults in your chain's genesis configuration:
+
+```go
+// yourchain/genesis.go
+func NewDefaultVMGenesisState() *vmtypes.GenesisState {
+ evmGenState := vmtypes.DefaultGenesisState()
+
+ // Enable only specific precompiles
+ evmGenState.Params.ActiveStaticPrecompiles = []string{
+ "0x0000000000000000000000000000000000000100", // P256
+ "0x0000000000000000000000000000000000000800", // Staking
+ "0x0000000000000000000000000000000000000804", // Bank
+ }
+
+ return evmGenState
+}
+```
+
+
+
+
+**Security Consideration**: Only enable precompiles your chain actually needs. Each enabled precompile increases the attack surface and testing complexity.
+
+
+### Modifying After Genesis
+
+Precompiles can be enabled or disabled through governance:
+
+```bash
+# Propose adding a precompile
+yourchain tx gov submit-proposal param-change proposal.json \
+ --from validator
+```
+
+---
+
+## Configuration Workflow
+
+Here's the recommended order for configuring your chain:
+
+
+
+Decide on:
+- Binary name
+- Chain IDs (Cosmos and EVM)
+- Token denomination and decimals
+- Precompiles needed
+- Access control policy
+
+
+
+```bash
+# Rename binary
+mv evmd yourchain
+
+# Update references
+find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
+
+# Update go.mod
+# Edit module path
+```
+
+
+
+```bash
+yourchain init mynode --chain-id yourchain-1
+```
+
+
+
+Edit `~/.yourchain/config/genesis.json`:
+
+```bash
+GENESIS=~/.yourchain/config/genesis.json
+
+# Set denominations
+jq '.app_state.staking.params.bond_denom="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state.vm.params.evm_denom="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata
+# Set precompiles
+# Set access control
+```
+
+
+
+Edit `~/.yourchain/config/app.toml`:
+
+```toml
+[evm]
+chain-id = 262144 # Set EVM chain ID
+min-tip = 1000000000
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+```
+
+
+
+```bash
+yourchain start
+```
+
+Verify:
+- Chain starts successfully
+- RPC is accessible
+- Precompiles are enabled
+- Token denomination is correct
+
+
+
+For production:
+- Coordinate genesis with validators
+- Distribute final genesis file
+- Launch at coordinated time
+
+
+
+---
+
+## Configuration Examples
+
+### Reference: local_node.sh
+
+
+**Looking for a real-world example?** The `local_node.sh` script in the Cosmos EVM repository is the best reference for complete chain configuration. It demonstrates how evmd sets up genesis and app.toml for local development.
+
+
+The `local_node.sh` script performs all the configuration steps automatically. Here's what it does:
+
+
+
+The script modifies `genesis.json` to configure:
+
+- **Chain ID**: Sets to `cosmos_262144-1`
+- **Token denomination**: Configures `atest` (18 decimals) across all modules
+- **Bank metadata**: Sets up denom metadata with proper exponents
+- **Precompiles**: Enables all 9 static precompiles by default
+- **Validator configuration**: Creates genesis validator with initial stake
+- **Genesis accounts**: Funds test accounts for development
+
+
+
+
+The script configures `app.toml` with development-friendly settings:
+
+```toml
+[evm]
+chain-id = 262144
+tracer = "json" # Enable EVM tracing for debugging
+min-tip = 0 # No minimum tip for local testing
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+ws-address = "0.0.0.0:8546"
+api = ["eth", "net", "web3", "txpool", "debug"] # All APIs for testing
+allow-unprotected-txs = true # Allow unsigned txs locally
+enable-indexer = true # Enable transaction indexing
+```
+
+These settings are optimized for local development and should be adjusted for production.
+
+
+
+The `local_node.sh` script accepts flags that control configuration:
+
+- **`-y`**: Overwrites previous database (fresh genesis)
+- **`-n`**: Preserves previous database (resume)
+- **`--no-install`**: Skips binary rebuild
+- **`--remote-debugging`**: Builds with debug symbols
+
+Example usage:
+```bash
+# Fresh start with all default configurations
+./local_node.sh -y
+
+# Resume from previous state
+./local_node.sh -n
+```
+
+
+
+To use `local_node.sh` as a template for your chain:
+
+1. **Copy the script**: `cp local_node.sh my_chain_setup.sh`
+2. **Update chain name**: Change `evmd` to your binary name
+3. **Modify genesis values**: Update denom, chain ID, precompiles
+4. **Adjust app.toml settings**: Configure for your use case (testnet/mainnet)
+5. **Add custom logic**: Include any chain-specific setup
+
+The script serves as a complete example of the configuration workflow described in this guide.
+
+
+
+
+**Production Considerations**: The `local_node.sh` configuration is optimized for local development. For testnets and mainnets:
+- Disable debug APIs in JSON-RPC
+- Require transaction signatures (`allow-unprotected-txs = false`)
+- Set appropriate `min-tip` value
+- Use secure key management (not test keys)
+- Configure proper peer discovery and networking
+
+
+---
+
+### Complete 18-Decimal Chain
+
+
+```bash init.sh
+#!/bin/bash
+# Initialize and configure an 18-decimal chain
+
+BINARY="yourchain"
+CHAIN_ID="yourchain-1"
+EVM_CHAIN_ID="262144"
+DENOM="atoken"
+GENESIS=~/.yourchain/config/genesis.json
+
+# Initialize
+$BINARY init mynode --chain-id $CHAIN_ID
+
+# Configure denominations
+jq ".app_state.staking.params.bond_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.mint.params.mint_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.gov.params.min_deposit[0].denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.vm.params.evm_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata (18 decimals)
+jq ".app_state.bank.denom_metadata=[{
+ \"description\": \"The native staking token\",
+ \"denom_units\": [
+ {\"denom\": \"$DENOM\", \"exponent\": 0, \"aliases\": [\"attotoken\"]},
+ {\"denom\": \"token\", \"exponent\": 18, \"aliases\": []}
+ ],
+ \"base\": \"$DENOM\",
+ \"display\": \"token\",
+ \"name\": \"Token\",
+ \"symbol\": \"TOKEN\"
+}]" $GENESIS > tmp && mv tmp $GENESIS
+
+# Enable specific precompiles
+jq '.app_state.vm.params.active_static_precompiles=[
+ "0x0000000000000000000000000000000000000100",
+ "0x0000000000000000000000000000000000000400",
+ "0x0000000000000000000000000000000000000800",
+ "0x0000000000000000000000000000000000000804"
+]' $GENESIS > tmp && mv tmp $GENESIS
+
+echo "Configuration complete!"
+```
+
+```toml app.toml
+[evm]
+chain-id = 262144
+min-tip = 1000000000 # 1 gwei
+cache-preimage = false
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+ws-address = "0.0.0.0:8546"
+api = ["eth", "net", "web3", "txpool"]
+gas-cap = 25000000
+allow-unprotected-txs = false
+```
+
+
+### Complete 6-Decimal Chain with PreciseBank
+
+
+```bash init-6-decimal.sh
+#!/bin/bash
+# Initialize and configure a 6-decimal chain
+
+BINARY="yourchain"
+CHAIN_ID="yourchain-1"
+EVM_CHAIN_ID="262144"
+BASE_DENOM="utoken"
+EXTENDED_DENOM="atoken"
+GENESIS=~/.yourchain/config/genesis.json
+
+# Initialize
+$BINARY init mynode --chain-id $CHAIN_ID
+
+# Configure denominations
+jq ".app_state.staking.params.bond_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.mint.params.mint_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.gov.params.min_deposit[0].denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.vm.params.evm_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata (6 decimals)
+jq ".app_state.bank.denom_metadata=[{
+ \"description\": \"The native staking token\",
+ \"denom_units\": [
+ {\"denom\": \"$BASE_DENOM\", \"exponent\": 0},
+ {\"denom\": \"token\", \"exponent\": 6}
+ ],
+ \"base\": \"$BASE_DENOM\",
+ \"display\": \"token\",
+ \"name\": \"Token\",
+ \"symbol\": \"TOKEN\"
+}]" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set extended denom options (REQUIRED for 6 decimals)
+jq ".app_state.vm.params.extended_denom_options={
+ \"extended_denom\": \"$EXTENDED_DENOM\"
+}" $GENESIS > tmp && mv tmp $GENESIS
+
+echo "Configuration complete! Remember to add precisebank module to app.go"
+```
+
+```go app.go
+// In app.go, you must add precisebank module:
+
+import (
+ precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
+ precisebanktypes "github.com/cosmos/evm/x/precisebank/types"
+)
+
+// Add to store keys
+keys := storetypes.NewKVStoreKeys(
+ // ... other keys
+ precisebanktypes.StoreKey,
+)
+
+// Initialize PreciseBankKeeper
+app.PreciseBankKeeper = precisebankkeeper.NewKeeper(
+ appCodec,
+ keys[precisebanktypes.StoreKey],
+ app.BankKeeper,
+ app.AccountKeeper,
+)
+
+// Use PreciseBankKeeper in EVMKeeper
+app.EVMKeeper = evmkeeper.NewKeeper(
+ // ...
+ app.PreciseBankKeeper, // Not app.BankKeeper!
+ // ...
+)
+
+// Add to module manager
+app.ModuleManager = module.NewManager(
+ // ... other modules
+ precisebank.NewAppModule(app.PreciseBankKeeper, app.AccountKeeper),
+ // ...
+)
+
+// Add to genesis order (after bank, before vm)
+genesisModuleOrder := []string{
+ // ...
+ banktypes.ModuleName,
+ precisebanktypes.ModuleName,
+ evmtypes.ModuleName,
+ // ...
+}
+```
+
+
+---
+
+## Next Steps
+
+Now that your chain is configured:
+
+1. **Test Locally**: Use `./local_node.sh` to test all configurations
+2. **Deploy Contracts**: Verify precompiles work as expected
+3. **Set Up Validators**: Prepare for testnet/mainnet launch
+4. **Document Configuration**: Share configuration choices with users
+5. **Plan Governance**: Determine which parameters may change post-launch
+
+### Further Reading
+
+
+
+Complete guide to forking and customizing evmd
+
+
+
+Detailed migration instructions for v0.5
+
+
+
+VM module configuration and parameters
+
+
+
+Fractional balance tracking for non-18-decimal chains
+
+
+
+---
+
+For additional support, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference.mdx
deleted file mode 100644
index 0ed39035..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference.mdx
+++ /dev/null
@@ -1,1822 +0,0 @@
----
-title: "Configuration Parameter Reference"
-description: "Complete technical reference of all configurable parameters in Cosmos EVM - source code settings, genesis parameters, and runtime configuration."
----
-
-Technical reference for all Cosmos EVM chain parameters organized by configuration phase and module.
-
-
-For step-by-step configuration guides, see [Pre-Genesis & Genesis Setup](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) and [Runtime Configuration & Launch](/docs/evm/v0.5.0/documentation/getting-started/network-operators/node-configuration).
-
-
----
-
-## Pre-Genesis Parameters (Source Code)
-
-Parameters set in source code before building the binary. Require rebuild to change.
-
-
-
-### Bech32 Address Prefix
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Address format prefix for all Cosmos addresses |
-| **Location** | `config/config.go:62` |
-| **Default** | `cosmos` |
-| **Type** | String (lowercase alphanumeric) |
-| **Adjustable** | Immutable |
-| **Source** | [`config/config.go`](https://github.com/cosmos/evm/blob/main/config/config.go#L62) |
-
-```go
-const Bech32Prefix = "yourchain"
-```
-
----
-
-### BIP44 Coin Type
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | HD wallet derivation path coin type |
-| **Location** | `crypto/hd/hdpath.go:9` |
-| **Default** | `60` (Ethereum) |
-| **Type** | uint32 |
-| **Adjustable** | Immutable |
-| **Standard** | [SLIP-0044](https://github.com/satoshilabs/slips/blob/master/slip-0044.md) |
-| **Source** | [`crypto/hd/hdpath.go`](https://github.com/cosmos/evm/blob/main/crypto/hd/hdpath.go#L9) |
-
-```go
-Bip44CoinType uint32 = 60
-```
-
-**Common Values:** `60` (Ethereum/EVM), `118` (Cosmos), `330` (Terra)
-
----
-
-### EVM Chain ID
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | EIP-155 replay protection chain ID |
-| **Location** | `config/config.go:78` |
-| **Default** | `262144` |
-| **Type** | uint64 |
-| **Adjustable** | Immutable |
-| **Standard** | [EIP-155](https://eips.ethereum.org/EIPS/eip-155) |
-| **Source** | [`config/config.go`](https://github.com/cosmos/evm/blob/main/config/config.go#L78) |
-
-```go
-const EVMChainID = 262144
-```
-
-**Note:** Must be unique. Check [chainlist.org](https://chainlist.org) before mainnet.
-
----
-
-### Default Denominations
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Default token denominations in config templates |
-| **Location** | Multiple files |
-| **Default** | `aatom` (extended), `uatom` (base), `atom` (display) |
-| **Type** | String |
-| **Adjustable** | Pre-Genesis |
-| **Source** | [`x/vm/types/params.go:21-25`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L21-L25) |
-
-**Files:**
-- `server/config/migration/v0.50-app.toml:11` - minimum-gas-prices
-- `x/vm/types/params.go:21-25` - EVM module defaults
-- `config/constants.go:5-8` - Example chain constants
-
-
-
----
-
-## Genesis Parameters
-
-Parameters configured in `genesis.json` after `init`. Location: `~/.yourchain/config/genesis.json`
-
-
-
-### Root Level
-
-
-
-#### chain_id
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Cosmos chain identifier |
-| **Genesis Path** | `chain_id` |
-| **Default** | User-defined during `init` |
-| **Type** | String |
-| **Adjustable** | Immutable |
-
-```json
-"chain_id": "mychain-1"
-```
-
----
-
-#### genesis_time
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | UTC timestamp for chain start |
-| **Genesis Path** | `genesis_time` |
-| **Default** | Auto-generated |
-| **Type** | RFC3339 timestamp |
-| **Adjustable** | Immutable |
-
-```json
-"genesis_time": "2024-12-01T00:00:00Z"
-```
-
----
-
-#### initial_height
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Starting block height |
-| **Genesis Path** | `initial_height` |
-| **Default** | `"1"` |
-| **Type** | String (numeric) |
-| **Adjustable** | Immutable |
-
-
-
----
-
-### VM Module (x/vm)
-
-
-
-#### evm_denom
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Denomination for EVM gas payments |
-| **Genesis Path** | `app_state.evm.params.evm_denom` |
-| **Default** | `"aatom"` |
-| **Type** | String |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:21`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L21) |
-
-```json
-"evm_denom": "atoken"
-```
-
----
-
-#### extended_denom_options
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Extended denomination for non-18 decimal tokens |
-| **Genesis Path** | `app_state.evm.params.extended_denom_options` |
-| **Default** | `null` |
-| **Type** | Object |
-| **Required For** | 6-decimal or 8-decimal tokens |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:76`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L76) |
-
-```json
-"extended_denom_options": {
- "extended_denom": "atoken"
-}
-```
-
-**Note:** Requires `x/precisebank` module for non-18 decimal tokens.
-
----
-
-#### history_serve_window
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Number of blocks to keep historical state |
-| **Genesis Path** | `app_state.evm.params.history_serve_window` |
-| **Default** | `8192` |
-| **Type** | Integer |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:50`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L50) |
-
----
-
-#### extra_eips
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Additional EIPs to enable beyond default |
-| **Genesis Path** | `app_state.evm.params.extra_eips` |
-| **Default** | `[]` |
-| **Type** | Array of integers |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:33`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L33) |
-
-```json
-"extra_eips": [1153]
-```
-
----
-
-#### active_static_precompiles
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enabled precompiled contracts |
-| **Genesis Path** | `app_state.evm.params.active_static_precompiles` |
-| **Default** | `[]` |
-| **Type** | Array of hex addresses (must be sorted) |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/precompiles.go:22-32`](https://github.com/cosmos/evm/blob/main/x/vm/types/precompiles.go#L22-L32) |
-
-```json
-"active_static_precompiles": [
- "0x0000000000000000000000000000000000000100",
- "0x0000000000000000000000000000000000000400"
-]
-```
-
-**Available:** `0x0100` (P256), `0x0400` (Bech32), `0x0800` (Staking), `0x0801` (Distribution), `0x0802` (ICS20), `0x0803` (Vesting), `0x0804` (Bank), `0x0805` (Gov), `0x0806` (Slashing)
-
----
-
-#### evm_channels
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | IBC channels to EVM chains |
-| **Genesis Path** | `app_state.evm.params.evm_channels` |
-| **Default** | `[]` |
-| **Type** | Array of IBC channel IDs |
-| **Adjustable** | Governance |
-
-```json
-"evm_channels": ["channel-0"]
-```
-
----
-
-#### access_control
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Contract deployment and call permissions |
-| **Genesis Path** | `app_state.evm.params.access_control` |
-| **Default** | Permissionless (type 0) |
-| **Type** | Object |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:160-165`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L160-L165) |
-
-```json
-"access_control": {
- "create": {
- "access_type": 0,
- "access_control_list": []
- },
- "call": {
- "access_type": 0,
- "access_control_list": []
- }
-}
-```
-
-**Types:** `0` = Permissionless, `1` = Restricted (blocklist), `2` = Permissioned (allowlist)
-
-
-
----
-
-### FeeMarket Module (x/feemarket)
-
-
-
-#### no_base_fee
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Disable EIP-1559 base fee mechanism |
-| **Genesis Path** | `app_state.feemarket.params.no_base_fee` |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:21`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L21) |
-
----
-
-#### base_fee
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Initial base fee per gas (wei) |
-| **Genesis Path** | `app_state.feemarket.params.base_fee` |
-| **Default** | `"1000000000"` (1 gwei) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:13`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L13) |
-
----
-
-#### base_fee_change_denominator
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max base fee % change per block = 1/denominator |
-| **Genesis Path** | `app_state.feemarket.params.base_fee_change_denominator` |
-| **Default** | `8` (±12.5% max) |
-| **Type** | uint32 |
-| **Adjustable** | Governance |
-
----
-
-#### elasticity_multiplier
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Gas target = max_gas / elasticity_multiplier |
-| **Genesis Path** | `app_state.feemarket.params.elasticity_multiplier` |
-| **Default** | `2` (50% target) |
-| **Type** | uint32 |
-| **Adjustable** | Governance |
-
----
-
-#### min_gas_price
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Network-wide minimum gas price floor |
-| **Genesis Path** | `app_state.feemarket.params.min_gas_price` |
-| **Default** | `"0"` |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:17`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L17) |
-
----
-
-#### min_gas_multiplier
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum gas price as fraction of base fee |
-| **Genesis Path** | `app_state.feemarket.params.min_gas_multiplier` |
-| **Default** | `"0.5"` (50%) |
-| **Type** | String (decimal, 0-1) |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:15`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L15) |
-
----
-
-#### enable_height
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Block height to activate EIP-1559 |
-| **Genesis Path** | `app_state.feemarket.params.enable_height` |
-| **Default** | `0` (enabled from genesis) |
-| **Type** | int64 |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:19`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L19) |
-
-
-
----
-
-### ERC20 Module (x/erc20)
-
-
-
-#### enable_erc20
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable ERC20 module functionality |
-| **Genesis Path** | `app_state.erc20.params.enable_erc20` |
-| **Default** | `true` |
-| **Type** | Boolean |
-| **Adjustable** | Governance |
-| **Source** | [`x/erc20/types/params.go:26`](https://github.com/cosmos/evm/blob/main/x/erc20/types/params.go#L26) |
-
----
-
-#### permissionless_registration
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Allow anyone to register token pairs |
-| **Genesis Path** | `app_state.erc20.params.permissionless_registration` |
-| **Default** | `true` |
-| **Type** | Boolean |
-| **Adjustable** | Governance |
-| **Source** | [`x/erc20/types/params.go:27`](https://github.com/cosmos/evm/blob/main/x/erc20/types/params.go#L27) |
-
----
-
-#### native_precompiles
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | ERC20 precompile addresses for native tokens |
-| **Genesis Path** | `app_state.erc20.native_precompiles` |
-| **Default** | `[]` |
-| **Type** | Array of hex addresses |
-
-```json
-"native_precompiles": ["0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"]
-```
-
----
-
-#### token_pairs
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Registered Cosmos denom ↔ ERC20 mappings |
-| **Genesis Path** | `app_state.erc20.token_pairs` |
-| **Default** | `[]` |
-| **Type** | Array of token pair objects |
-
-```json
-"token_pairs": [{
- "erc20_address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
- "denom": "atoken",
- "enabled": true,
- "contract_owner": 1
-}]
-```
-
-**contract_owner:** `0` = External, `1` = Module
-
-
-
----
-
-### Bank Module
-
-
-
-#### denom_metadata
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Token denomination metadata |
-| **Genesis Path** | `app_state.bank.denom_metadata` |
-| **Default** | `[]` |
-| **Type** | Array of metadata objects |
-| **Adjustable** | Governance |
-
-```json
-"denom_metadata": [{
- "description": "Native token",
- "denom_units": [
- {"denom": "atoken", "exponent": 0},
- {"denom": "token", "exponent": 18}
- ],
- "base": "atoken",
- "display": "token",
- "name": "Token",
- "symbol": "TKN"
-}]
-```
-
-
-
----
-
-### Staking Module
-
-
-
-#### bond_denom
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Denomination for staking |
-| **Genesis Path** | `app_state.staking.params.bond_denom` |
-| **Default** | `"stake"` |
-| **Type** | String |
-| **Adjustable** | Governance (not recommended) |
-
-**Note:** Must match `evm_denom` and `mint_denom`.
-
----
-
-#### unbonding_time
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Duration tokens locked after unstaking |
-| **Genesis Path** | `app_state.staking.params.unbonding_time` |
-| **Default** | `"1814400s"` (21 days) |
-| **Type** | Duration string |
-| **Adjustable** | Governance |
-
----
-
-#### max_validators
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Maximum active validators |
-| **Genesis Path** | `app_state.staking.params.max_validators` |
-| **Default** | `100` |
-| **Type** | uint32 |
-| **Adjustable** | Governance |
-
----
-
-#### max_entries
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max concurrent unbonding/redelegations per pair |
-| **Genesis Path** | `app_state.staking.params.max_entries` |
-| **Default** | `7` |
-| **Type** | uint32 |
-| **Adjustable** | Governance |
-
----
-
-#### historical_entries
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Historical validator set entries to keep |
-| **Genesis Path** | `app_state.staking.params.historical_entries` |
-| **Default** | `10000` |
-| **Type** | uint32 |
-| **Adjustable** | Governance |
-
----
-
-#### min_commission_rate
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum validator commission rate |
-| **Genesis Path** | `app_state.staking.params.min_commission_rate` |
-| **Default** | `"0.000000000000000000"` (0%) |
-| **Type** | String (decimal, 18 places) |
-| **Adjustable** | Governance |
-
-
-
----
-
-### Slashing Module
-
-
-
-#### signed_blocks_window
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Blocks tracked for validator liveness |
-| **Genesis Path** | `app_state.slashing.params.signed_blocks_window` |
-| **Default** | `"10000"` |
-| **Type** | String (integer) |
-| **Adjustable** | Governance |
-
----
-
-#### min_signed_per_window
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum fraction of blocks to sign |
-| **Genesis Path** | `app_state.slashing.params.min_signed_per_window` |
-| **Default** | `"0.500000000000000000"` (50%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### downtime_jail_duration
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Jail duration for downtime |
-| **Genesis Path** | `app_state.slashing.params.downtime_jail_duration` |
-| **Default** | `"600s"` (10 minutes) |
-| **Type** | Duration string |
-| **Adjustable** | Governance |
-
----
-
-#### slash_fraction_double_sign
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Stake % slashed for double-signing |
-| **Genesis Path** | `app_state.slashing.params.slash_fraction_double_sign` |
-| **Default** | `"0.050000000000000000"` (5%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### slash_fraction_downtime
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Stake % slashed for downtime |
-| **Genesis Path** | `app_state.slashing.params.slash_fraction_downtime` |
-| **Default** | `"0.010000000000000000"` (1%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
-
-
----
-
-### Governance Module
-
-
-
-#### min_deposit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum deposit to submit proposal |
-| **Genesis Path** | `app_state.gov.params.min_deposit` |
-| **Default** | Chain-specific |
-| **Type** | Array of coin objects |
-| **Adjustable** | Governance |
-
-```json
-"min_deposit": [{"denom": "atoken", "amount": "10000000000000000000"}]
-```
-
----
-
-#### max_deposit_period
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Time to reach minimum deposit |
-| **Genesis Path** | `app_state.gov.params.max_deposit_period` |
-| **Default** | `"172800s"` (2 days) |
-| **Type** | Duration string |
-| **Adjustable** | Governance |
-
----
-
-#### voting_period
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Voting duration for proposals |
-| **Genesis Path** | `app_state.gov.params.voting_period` |
-| **Default** | `"172800s"` (2 days) |
-| **Type** | Duration string |
-| **Adjustable** | Governance |
-
----
-
-#### expedited_voting_period
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Voting duration for expedited proposals |
-| **Genesis Path** | `app_state.gov.params.expedited_voting_period` |
-| **Default** | `"86400s"` (1 day) |
-| **Type** | Duration string |
-| **Adjustable** | Governance |
-
----
-
-#### quorum
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum participation for valid proposal |
-| **Genesis Path** | `app_state.gov.params.quorum` |
-| **Default** | `"0.334"` (33.4%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### threshold
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum Yes votes to pass |
-| **Genesis Path** | `app_state.gov.params.threshold` |
-| **Default** | `"0.5"` (50%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### veto_threshold
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | NoWithVeto votes to reject |
-| **Genesis Path** | `app_state.gov.params.veto_threshold` |
-| **Default** | `"0.334"` (33.4%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### expedited_threshold
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Yes votes required for expedited proposals |
-| **Genesis Path** | `app_state.gov.params.expedited_threshold` |
-| **Default** | `"0.667"` (66.7%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### expedited_min_deposit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum deposit for expedited proposals |
-| **Genesis Path** | `app_state.gov.params.expedited_min_deposit` |
-| **Default** | 5x standard min_deposit |
-| **Type** | Array of coin objects |
-| **Adjustable** | Governance |
-
-
-
----
-
-### Mint Module
-
-
-
-#### mint_denom
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Denomination of minted tokens |
-| **Genesis Path** | `app_state.mint.params.mint_denom` |
-| **Default** | `"stake"` |
-| **Type** | String |
-| **Adjustable** | Governance (not recommended) |
-
-**Note:** Must match `bond_denom` and `evm_denom`.
-
----
-
-#### inflation_rate_change
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max annual inflation rate change |
-| **Genesis Path** | `app_state.mint.params.inflation_rate_change` |
-| **Default** | `"0.130000000000000000"` (13%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### inflation_max
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Maximum annual inflation rate |
-| **Genesis Path** | `app_state.mint.params.inflation_max` |
-| **Default** | `"0.200000000000000000"` (20%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### inflation_min
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum annual inflation rate |
-| **Genesis Path** | `app_state.mint.params.inflation_min` |
-| **Default** | `"0.070000000000000000"` (7%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### goal_bonded
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Target bonded token ratio |
-| **Genesis Path** | `app_state.mint.params.goal_bonded` |
-| **Default** | `"0.670000000000000000"` (67%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### blocks_per_year
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Expected blocks per year |
-| **Genesis Path** | `app_state.mint.params.blocks_per_year` |
-| **Default** | `"6311520"` (~5s blocks) |
-| **Type** | String (integer) |
-| **Adjustable** | Governance |
-
-
-
----
-
-### Distribution Module
-
-
-
-#### community_tax
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Rewards percentage to community pool |
-| **Genesis Path** | `app_state.distribution.params.community_tax` |
-| **Default** | `"0.020000000000000000"` (2%) |
-| **Type** | String (decimal) |
-| **Adjustable** | Governance |
-
----
-
-#### withdraw_addr_enabled
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Allow custom withdraw addresses |
-| **Genesis Path** | `app_state.distribution.params.withdraw_addr_enabled` |
-| **Default** | `true` |
-| **Type** | Boolean |
-| **Adjustable** | Governance |
-
----
-
-#### base_proposer_reward
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | **Deprecated** - Set to zero |
-| **Genesis Path** | `app_state.distribution.params.base_proposer_reward` |
-| **Default** | `"0.000000000000000000"` |
-| **Type** | String (decimal) |
-
----
-
-#### bonus_proposer_reward
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | **Deprecated** - Set to zero |
-| **Genesis Path** | `app_state.distribution.params.bonus_proposer_reward` |
-| **Default** | `"0.000000000000000000"` |
-| **Type** | String (decimal) |
-
-
-
-
-
----
-
-## Runtime Configuration (app.toml)
-
-Node-specific parameters. Location: `~/.yourchain/config/app.toml`
-
-
-
-### Base Configuration
-
-
-
-#### minimum-gas-prices
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Node minimum gas price |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"0aatom"` |
-| **Format** | `` |
-| **Source** | [`server/config/migration/v0.50-app.toml:11`](https://github.com/cosmos/evm/blob/main/server/config/migration/v0.50-app.toml#L11) |
-
-```toml
-minimum-gas-prices = "1000000000atoken"
-```
-
----
-
-#### pruning
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | State pruning strategy |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"default"` |
-| **Options** | `default`, `nothing`, `everything`, `custom` |
-
-**Values:** `default` (keep 362,880 states), `nothing` (archive), `everything` (keep 2), `custom`
-
----
-
-#### pruning-keep-recent / pruning-interval
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Custom pruning parameters |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"0"` / `"0"` |
-| **Type** | Integer |
-
-**Only used if** `pruning = "custom"`
-
----
-
-#### halt-height / halt-time
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Graceful halt at height/time |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `0` |
-| **Type** | Integer / Unix timestamp |
-
----
-
-#### min-retain-blocks
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum blocks for CometBFT pruning |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `0` |
-| **Type** | Integer |
-
----
-
-#### inter-block-cache
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable inter-block caching |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `true` |
-| **Type** | Boolean |
-
----
-
-#### index-events
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Event types to index (empty = all) |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `[]` |
-| **Type** | Array of strings |
-
----
-
-#### iavl-cache-size
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | IAVL tree cache size (nodes) |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `781250` |
-| **Type** | Integer |
-
----
-
-#### iavl-disable-fastnode
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Disable IAVL fast node |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-
----
-
-#### app-db-backend
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Database backend |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `""` (use CometBFT default) |
-| **Options** | `goleveldb`, `rocksdb`, `pebbledb` |
-
-
-
----
-
-### EVM Configuration
-
-
-
-#### tracer
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | VM tracer type |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | `""` |
-| **Options** | `""`, `"json"`, `"markdown"`, `"struct"`, `"access_list"` |
-| **Source** | [`server/config/config.go:56`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L56) |
-
----
-
-#### max-tx-gas-wanted
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max gas per transaction |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | `0` (unlimited) |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:62`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L62) |
-
----
-
-#### cache-preimage
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Track SHA3 preimages |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:59`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L59) |
-
----
-
-#### evm-chain-id
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | EIP-155 chain ID (read-only) |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | From source code |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:149`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L149) |
-
-**Note:** Written during `init`, do not manually edit.
-
----
-
-#### min-tip
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum priority fee (wei) |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | `0` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:68`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L68) |
-
----
-
-#### geth-metrics-address
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Geth metrics server address |
-| **Section** | `[evm]` |
-| **Adjustable** | Per Node |
-| **Default** | `"127.0.0.1:8100"` |
-| **Format** | `host:port` |
-| **Source** | [`server/config/config.go:71`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L71) |
-
-
-
----
-
-### EVM Mempool
-
-
-
-#### price-limit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Minimum gas price (wei) |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `1` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:179`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L179) |
-
----
-
-#### price-bump
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Price increase % to replace tx |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `10` (10%) |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:180`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L180) |
-
----
-
-#### account-slots
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Executable slots per account |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `16` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:181`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L181) |
-
----
-
-#### global-slots
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max executable slots (all accounts) |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `5120` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:182`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L182) |
-
----
-
-#### account-queue
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Non-executable slots per account |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `64` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:183`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L183) |
-
----
-
-#### global-queue
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Non-executable slots (all accounts) |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `1024` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:184`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L184) |
-
----
-
-#### lifetime
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max time for queued txs |
-| **Section** | `[evm.mempool]` |
-| **Adjustable** | Per Node |
-| **Default** | `"3h0m0s"` |
-| **Type** | Duration string |
-| **Source** | [`server/config/config.go:185`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L185) |
-
-
-
----
-
-### JSON-RPC Configuration
-
-
-
-#### enable
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable JSON-RPC server |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:236`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L236) |
-
----
-
-#### address
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | HTTP server address |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"127.0.0.1:8545"` |
-| **Format** | `host:port` |
-| **Source** | [`server/config/config.go:47`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L47) |
-
----
-
-#### ws-address
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | WebSocket server address |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"127.0.0.1:8546"` |
-| **Format** | `host:port` |
-| **Source** | [`server/config/config.go:50`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L50) |
-
----
-
-#### api
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enabled JSON-RPC namespaces |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `["eth", "net", "web3"]` |
-| **Type** | Array of strings |
-| **Source** | [`server/config/config.go:304-310`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L304-L310) |
-
-```toml
-api = ["eth", "net", "web3", "txpool"]
-```
-
-**Available:** `eth`, `net`, `web3`, `txpool`, `debug`, `personal`, `miner`
-
----
-
-#### gas-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Gas limit for eth_call |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `25000000` |
-| **Type** | uint64 |
-| **Source** | [`server/config/config.go:74`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L74) |
-
----
-
-#### allow-insecure-unlock
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Allow account unlocking via HTTP |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `true` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:77`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L77) |
-
----
-
-#### evm-timeout
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Timeout for eth_call |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"5s"` |
-| **Type** | Duration string |
-| **Source** | [`server/config/config.go:92`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L92) |
-
----
-
-#### txfee-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Tx fee cap (token units) |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `1.0` |
-| **Type** | Float |
-| **Source** | [`server/config/config.go:95`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L95) |
-
----
-
-#### filter-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max filters |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `200` |
-| **Type** | int32 |
-| **Source** | [`server/config/config.go:80`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L80) |
-
----
-
-#### feehistory-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max blocks for fee history |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `100` |
-| **Type** | int32 |
-| **Source** | [`server/config/config.go:83`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L83) |
-
----
-
-#### logs-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max results from eth_getLogs |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `10000` |
-| **Type** | int32 |
-| **Source** | [`server/config/config.go:86`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L86) |
-
----
-
-#### block-range-cap
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max block range for eth_getLogs |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `10000` |
-| **Type** | int32 |
-| **Source** | [`server/config/config.go:89`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L89) |
-
----
-
-#### http-timeout
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | HTTP read/write timeout |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"30s"` |
-| **Type** | Duration string |
-| **Source** | [`server/config/config.go:98`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L98) |
-
----
-
-#### http-idle-timeout
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | HTTP idle timeout |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"2m0s"` |
-| **Type** | Duration string |
-| **Source** | [`server/config/config.go:101`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L101) |
-
----
-
-#### allow-unprotected-txs
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Allow non-EIP155 txs |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:104`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L104) |
-
----
-
-#### batch-request-limit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max requests in batch |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `1000` |
-| **Type** | Integer |
-| **Source** | [`server/config/config.go:108`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L108) |
-
----
-
-#### batch-response-max-size
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max batch response bytes |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `25000000` (25 MB) |
-| **Type** | Integer |
-| **Source** | [`server/config/config.go:112`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L112) |
-
----
-
-#### max-open-connections
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Max simultaneous connections |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `0` (unlimited) |
-| **Type** | Integer |
-| **Source** | [`server/config/config.go:115`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L115) |
-
----
-
-#### enable-indexer
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable EVM tx indexer |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:256`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L256) |
-
----
-
-#### metrics-address
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Metrics server address |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"127.0.0.1:6065"` |
-| **Format** | `host:port` |
-| **Source** | [`server/config/config.go:53`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L53) |
-
----
-
-#### ws-origins
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Allowed WebSocket origins |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `["127.0.0.1", "localhost"]` |
-| **Type** | Array of strings |
-| **Source** | [`server/config/config.go:120-122`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L120-L122) |
-
----
-
-#### enable-profiling
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable profiling in debug namespace |
-| **Section** | `[json-rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-| **Source** | [`server/config/config.go:124`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L124) |
-
-**Warning:** Never enable on public nodes.
-
-
-
----
-
-### TLS Configuration
-
-
-
-#### certificate-path
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | TLS certificate .pem path |
-| **Section** | `[tls]` |
-| **Adjustable** | Per Node |
-| **Default** | `""` (disabled) |
-| **Type** | File path |
-
----
-
-#### key-path
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | TLS key .pem path |
-| **Section** | `[tls]` |
-| **Adjustable** | Per Node |
-| **Default** | `""` (disabled) |
-| **Type** | File path |
-
-
-
----
-
-### Telemetry Configuration
-
-
-
-#### service-name
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Service name prefix |
-| **Section** | `[telemetry]` |
-| **Adjustable** | Per Node |
-| **Default** | `""` |
-| **Type** | String |
-
----
-
-#### enabled
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable telemetry |
-| **Section** | `[telemetry]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-
----
-
-#### enable-hostname / enable-hostname-label / enable-service-label
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Include hostname/service in metrics |
-| **Section** | `[telemetry]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-
-
-
-
-
----
-
-## Runtime Configuration (config.toml)
-
-CometBFT configuration. Location: `~/.yourchain/config/config.toml`
-
-
-
-### P2P Configuration
-
-
-
-#### persistent_peers
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Persistent peer connections |
-| **Section** | `[p2p]` |
-| **Adjustable** | Per Node |
-| **Default** | `""` |
-| **Format** | `node_id@ip:port,node_id2@ip:port` |
-
----
-
-#### laddr
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | P2P listen address |
-| **Section** | `[p2p]` |
-| **Adjustable** | Per Node |
-| **Default** | `"tcp://0.0.0.0:26656"` |
-| **Format** | `tcp://host:port` |
-
-
-
----
-
-### Consensus Configuration
-
-
-
-#### timeout_commit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Time before starting next block |
-| **Section** | `[consensus]` |
-| **Adjustable** | Per Node |
-| **Default** | `"5s"` |
-| **Type** | Duration string |
-
----
-
-#### timeout_propose / timeout_prevote / timeout_precommit
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Consensus phase timeouts |
-| **Section** | `[consensus]` |
-| **Adjustable** | Per Node |
-| **Default** | `"3s"` / `"1s"` / `"1s"` |
-| **Type** | Duration string |
-
-
-
----
-
-### RPC Configuration
-
-
-
-#### laddr
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | CometBFT RPC address |
-| **Section** | `[rpc]` |
-| **Adjustable** | Per Node |
-| **Default** | `"tcp://127.0.0.1:26657"` |
-| **Format** | `tcp://host:port` |
-
-
-
----
-
-### Instrumentation
-
-
-
-#### prometheus
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable Prometheus metrics |
-| **Section** | `[instrumentation]` |
-| **Adjustable** | Per Node |
-| **Default** | `false` |
-| **Type** | Boolean |
-
----
-
-#### prometheus_listen_addr
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Prometheus metrics address |
-| **Section** | `[instrumentation]` |
-| **Adjustable** | Per Node |
-| **Default** | `":26660"` |
-| **Format** | `:port` |
-
-
-
-
-
----
-
-## Runtime Configuration (client.toml)
-
-CLI client configuration. Location: `~/.yourchain/config/client.toml`
-
-
-
-#### chain-id
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Chain ID for CLI operations |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `""` (must be set) |
-| **Type** | String |
-
-**Note:** Required for node startup. Must match genesis.
-
----
-
-#### keyring-backend
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Keyring storage backend |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"os"` |
-| **Options** | `os`, `file`, `test` |
-
-**Values:** `os` (production), `file` (encrypted), `test` (dev only)
-
----
-
-#### output
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | CLI output format |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"text"` |
-| **Options** | `text`, `json` |
-
----
-
-#### node
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | CometBFT RPC endpoint |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"tcp://localhost:26657"` |
-| **Format** | `tcp://host:port` |
-
----
-
-#### broadcast-mode
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Transaction broadcast mode |
-| **Section** | Root |
-| **Adjustable** | Per Node |
-| **Default** | `"sync"` |
-| **Options** | `sync`, `async`, `block` |
-
-**Values:** `sync` (recommended), `async` (fast), `block` (wait for inclusion)
-
-
-
----
-
-## Summary
-
-### By Configuration Phase
-
-| Phase | When | Changeability |
-|-------|------|---------------|
-| **Pre-Genesis** | Before `init` | Rebuild required |
-| **Genesis** | After `init`, before launch | Via governance |
-| **Runtime** | After launch | Restart node |
-
-### Critical (Immutable After Genesis)
-
-| Parameter | Reason |
-|-----------|--------|
-| **EVM Chain ID** | Transaction replay protection |
-| **Bech32 Prefix** | Address format |
-| **BIP44 Coin Type** | Wallet derivation |
-
----
-
-## Related Documentation
-
-
-
-Configuration guide
-
-
-
-Launch procedures
-
-
-
-EVM module docs
-
-
-
-Fee market docs
-
-
-
-ERC20 module docs
-
-
-
-Precision handling
-
-
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/initial-setup.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/initial-setup.mdx
deleted file mode 100644
index 4a78354f..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/initial-setup.mdx
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: "Initial Setup"
-description: "Preparation for building your custom EVM chain."
----
-
-## Prerequisites
-
-You'll need a standard Go development environment:
-
-- **Go 1.23.8+** - [Installation guide](https://go.dev/doc/install)
-- **Git** - For repository management
-- **Make** - For build commands
-- **GCC/Build Tools** - Required for CGo compilation
-
-
-If you're new to Go development, ensure your `$GOPATH/bin` is in your system PATH. Most package managers (Homebrew, apt, pacman) handle this automatically.
-
-
-## Get the Code
-
-Clone the [cosmos/evm](https://github.com/cosmos/evm) repository:
-
-```bash
-git clone https://github.com/cosmos/evm.git
-cd evm
-```
-
-Build and verify:
-
-```bash
-make install
-evmd version
-```
-
-## Test Your Setup
-
-The repository includes a development script that launches a fully configured local testnet:
-
-```bash
-./local_node.sh
-```
-
-This starts a validator node accessible at `http://localhost:8545` with all JSON-RPC namespaces enabled (chain ID: `262144`).
-
-You can:
-- Connect with MetaMask or other Ethereum wallets
-- Interact via the [RPC Explorer](/docs/evm/next/api-reference/ethereum-json-rpc/rpc-explorer)
-- Use the [CLI](/docs/evm/next/documentation/cosmos-sdk/cli.mdx) for consensus-layer operations
-
-## Key Concepts
-
-Before building your chain, familiarize yourself with:
-
-**Precompiled Contracts** - [Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles) bridge EVM smart contracts with Cosmos SDK modules, enabling Solidity contracts to access staking, governance, IBC, and other native functionality.
-
-**Cosmos SDK Modules** - Explore the [core modules](/docs/evm/next/documentation/cosmos-sdk) that provide blockchain functionality:
-- [Bank](https://docs.cosmos.network/main/build/modules/bank) - Token transfers and balances
-- [Staking](https://docs.cosmos.network/main/build/modules/staking) - Validator delegation and rewards
-- [Governance](https://docs.cosmos.network/main/build/modules/governance) - On-chain voting and proposals
-- [Slashing](https://docs.cosmos.network/main/build/modules/slashing) - Validator penalty enforcement
-- [Distribution](https://docs.cosmos.network/main/build/modules/distribution) - Fee and reward distribution
-
-## Next Steps
-
-With your development environment ready, you can start configuring the pre-launch parameters. To make the process more manageable, we will go through it in three sections:
-
-1. **Pre-Genesis Configuration** - Set chain-id, token parameters and other values that are hard-coded.
-2. **Genesis Configuration** - Initialize the chain and configure genesis.json parameters such as module configs, genesis token allocations, and validator set.
-3. **Runtime Configuration** - Set up node-level settings and launch the network.
-
-Proceed to the [Pre-Genesis & Genesis Setup](/docs/evm/next/documentation/getting-started/build-a-chain/pre-genesis-and-genesis-setup) guide to begin customizing your chain's identity and parameters.
-
-
-Configure your chain's identity, parameters, and genesis file
-
-
-## Additional Configuration Resources
-
-Throughout your configuration journey, refer to these resources:
-
-- **[Configuration Reference](/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference)** - Comprehensive command reference with examples for different configurations
-- **[EVM Mempool Integration](/docs/evm/next/documentation/getting-started/build-a-chain/additional-configuration/mempool-integration)** - Advanced mempool customization
-- **[Predeployed Contracts](/docs/evm/next/documentation/getting-started/build-a-chain/additional-configuration/predeployed-contracts)** - Deploy standard contracts at genesis
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/overview.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/overview.mdx
index 30907d11..5ffcdaa3 100644
--- a/docs/evm/next/documentation/getting-started/build-a-chain/overview.mdx
+++ b/docs/evm/next/documentation/getting-started/build-a-chain/overview.mdx
@@ -6,32 +6,28 @@ Cosmos-EVM is the easiest way to build your own EVM compatible L1 blockchain usi
## Why Cosmos-EVM?
-In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules.
+In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules. Using this as a starting point for your project eliminates the complexity of assembling and integrating components from scratch, allowing engineers to focus on building on your chain rather than debugging basic setup issues.
-Because this example is actively developed and maintained alongside the module itself and serves as the canonical reference implementation, it is the perfect starting point to modify and customize into your own EVM-compatible chain.
-One of the largest benefits is the simplicity and time saved. Rather than researching and going through the trial and error process of assembling components individually and figuring out what works, simply fork `evmd` and customize it to your needs.
-This approach lets engineers focus on what makes your chain unique rather than debugging basic integration issues.
## Understanding the Stack
Before diving into configuration, it's helpful to understand what you're building with:
-- **[Cosmos SDK Modules](/docs/evm/v0.5.0/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
-- **[Precompiles](/docs/evm/v0.5.0/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
-- **[Security & Audits](/docs/evm/v0.5.0/documentation/overview#audits)** - Third-party security assessments of the codebase
+- **[Cosmos SDK Modules](/docs/evm/next/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
+- **[Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
## Advanced Configuration
For specialized customization beyond the core configuration:
-
+
Configure the EVM mempool for nonce gap handling and transaction prioritization
-
+
Deploy standard contracts at genesis for Create2, Multicall3, Permit2, and Safe
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/pre-genesis-and-genesis-setup.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/pre-genesis-and-genesis-setup.mdx
deleted file mode 100644
index c8e404b3..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/pre-genesis-and-genesis-setup.mdx
+++ /dev/null
@@ -1,2271 +0,0 @@
----
-title: "Pre-Genesis & Genesis Setup"
-description: "Complete guide to configuring your chain before and during genesis - from binary customization to genesis file preparation."
----
-
-This guide covers all configuration steps from initial binary setup through genesis file preparation. Complete these steps before launching your network.
-
-
-**Related Documentation:**
-- [Runtime Configuration & Launch](/docs/evm/v0.5.0/documentation/getting-started/network-operators/node-configuration) - Network launch procedures
-- [Configuration Reference](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) - Commands, examples, and quick reference
-
-
-## Overview
-
-Building a Cosmos EVM chain involves two main configuration phases:
-
-1. **Pre-Genesis Setup** - Configure binary and source code before initialization
-2. **Genesis Configuration** - Set genesis parameters and prepare for network launch
-
-
-Most pre-genesis parameters cannot easily be changed after launch. Plan carefully.
-
-
-
-
-## Planning Your Configuration
-
-Before you begin, decide on these parameters. Use the links to jump to detailed configuration instructions for each item.
-
-### Pre-Genesis Parameters (Set Before `init`)
-
-These parameters are compiled into your binary and must be set before running `yourchain init`:
-
-
-
-
-**Default**: `evmd`
-**Modified**: `yourchain` (unique name for your project)
-
-
-
-**Default**: `cosmos`
-**Modified**: Unique prefix for your chain (e.g., `evmos`, `osmosis`)
-
-
-
-**Default**: `60` (Ethereum)
-**Modified**: `60` for EVM chains, or register unique value (not recommended for EVM compatibility reasons)
-
-
-
-**Default**: `262144`
-**Modified**: Unique positive integer (number). Make sure it is not already taken by checking [chainlist.org](https://chainlist.org)
-
-
-
-**Default**: 18 decimals (EVM standard)
-**Modified**: 18 decimals (simpler), 6 decimals (Cosmos standard, requires PreciseBank)
-
-
-
-**Default**: `aatom` / `atom`
-**Modified**: Update to your token name before `init`
-
-
-
-
-### Genesis Parameters (Set After `init`)
-
-These parameters are configured in `genesis.json` after initialization:
-
-
-
-
-**Format**: String (e.g., `mychain-1`)
-**Common Practice**: `{name}-{version}` format
-
-
-
-**Format**: RFC3339 UTC timestamp
-**Common Practice**: Coordinated launch time for validators
-
-
-
-**Required**: Base denom, display denom, decimals
-**Common Practice**: Must match your chosen precision
-
-
-
-**Includes**: `evm_denom`, `extended_denom_options`, gas settings
-**Common Practice**: Configure EVM gas token and options
-
-
-
-**Default**: All enabled
-**Common Practice**: Enable only what you need or leave all enabled
-
-
-
-**Required**: Native token pair configuration
-**Common Practice**: Configure STRv2 native token representation
-
-
-
-**Default**: Enabled with 1 gwei base fee
-**Common Practice**: Standard EIP-1559 for EVM chains
-
-
-
-**Default**: Permissionless
-**Common Practice**: Permissionless for public chains
-
-
-
-**Includes**: Bond denom, unbonding time, max validators
-**Common Practice**: 21-day unbonding, 100+ validators
-
-
-
-**Includes**: Downtime window, slash fractions
-**Common Practice**: Cosmos defaults (5% double-sign, 0.01% downtime)
-
-
-
-**Includes**: Voting period, quorum, threshold
-**Common Practice**: 2-7 day voting period
-
-
-
-**Required**: Genesis accounts and gentx collection
-**Common Practice**: Fund accounts and collect validator gentxs
-
-
-
-
-
-
-## Pre-Genesis Setup
-
-Confirm these parameters before running `yourchain init`. These parameters are compiled into your binary, and determine how the genesis file is generated.
-
-### Chain Name
-
-
-
-| Parameter | Details |
-|-----------|---------|
-| **Description** | The name of your compiled blockchain executable |
-| **Default** | `evmd` |
-| **File Location** | Directory name and all Go imports |
-| **Why Change It** | Brand your chain and avoid confusion with the reference implementation |
-
-
-
-
-**Simplest approach using find-and-replace:**
-
-```bash
-# 1. Navigate to evm repository
-cd /path/to/evm
-
-# 2. IMPORTANT: Create a backup or commit current state
-git add -A
-git commit -m "Pre-rename checkpoint" || echo "Skipping commit (no changes or not a git repo)"
-
-# 3. Verify you're in the correct directory
-if [ ! -f "go.mod" ] || [ ! -d "evmd" ]; then
- echo "ERROR: Not in evm repository root. Expected go.mod and evmd/ directory"
- exit 1
-fi
-
-# 4. Use your editor's find-and-replace (VSCode, etc.) to replace:
-# 'evmd' → 'yourchain' (across all files, excluding .git/)
-# '.evmd' → '.yourchain' (for home directories)
-#
-# OR use sed commands:
-find . -type f ! -path "*/.git/*" ! -path "*/vendor/*" -exec sed -i '' 's/evmd/yourchain/g' {} \;
-find . -type f ! -path "*/.git/*" ! -path "*/vendor/*" -exec sed -i '' 's/\.evmd/.yourchain/g' {} \;
-
-# 5. Verify sed completed successfully
-if [ $? -ne 0 ]; then
- echo "ERROR: Find-and-replace failed. Restore from backup/git"
- exit 1
-fi
-
-# 6. Manually rename directories and files:
-[ -d "evmd" ] && mv evmd yourchain
-[ -d "yourchain/cmd/evmd" ] && mv yourchain/cmd/evmd yourchain/cmd/yourchain
-[ -f "config/evmd_config.go" ] && mv config/evmd_config.go config/yourchain_config.go
-
-# 7. Update go.mod module path (if changing from cosmos/evm):
-# Edit yourchain/go.mod first line:
-# From: module github.com/cosmos/evm/evmd
-# To: module github.com/your-org/your-chain/yourchain
-
-# 8. Tidy and build
-go mod tidy
-cd yourchain && go mod tidy && cd ..
-
-# 9. Build to verify everything works
-make build
-
-# 10. Verify binary was created and runs
-if [ ! -f "./build/yourchain" ]; then
- echo "ERROR: Build failed - binary not found at ./build/yourchain"
- exit 1
-fi
-
-./build/yourchain version
-echo "SUCCESS: Binary renamed from evmd to yourchain"
-```
-
-
-**Validation Checklist** before proceeding:
-- ✅ Backup created or changes committed to git
-- ✅ Running from repository root (go.mod present)
-- ✅ `evmd` directory exists before rename
-- ✅ Build succeeds without errors
-- ✅ Binary executes and shows version
-
-
-
-
-
-
-
-
-For those who prefer a careful, step-by-step process with full visibility into each change:
-
-**1. Create backup:**
-```bash
-git add -A
-git commit -m "Pre-rename checkpoint"
-```
-
-**2. Rename the binary directory:**
-```bash
-mv evmd yourchain
-```
-
-**3. Rename command subdirectory:**
-```bash
-mv yourchain/cmd/evmd yourchain/cmd/yourchain
-```
-
-**4. Rename config file:**
-```bash
-mv config/evmd_config.go config/yourchain_config.go
-```
-
-**5. Update package names in Go files:**
-```bash
-# Change package evmd to package yourchain
-find yourchain -name "*.go" -type f ! -path "*/tests/*" ! -path "*/cmd/*" \
- -exec sed -i '' 's/^package evmd$/package yourchain/' {} \;
-```
-
-**6. Update all import paths:**
-```bash
-# Update evmd imports to yourchain
-find . -type f -name "*.go" -exec sed -i '' \
- 's|github.com/cosmos/evm/evmd|github.com/your-org/your-chain/yourchain|g' {} \;
-```
-
-**7. Update `yourchain/go.mod`:**
-```go
-// Change first line from:
-module github.com/cosmos/evm/evmd
-
-// To:
-module github.com/your-org/your-chain/yourchain
-```
-
-**8. Update Makefile:**
-```bash
-sed -i '' 's/evmd/yourchain/g' Makefile
-sed -i '' 's/\.evmd/.yourchain/g' Makefile
-```
-
-**9. Update scripts:**
-```bash
-sed -i '' 's/evmd/yourchain/g' local_node.sh
-sed -i '' 's/\.evmd/.yourchain/g' local_node.sh
-find tests -name "*.sh" -exec sed -i '' 's/evmd/yourchain/g' {} \;
-find scripts -name "*.sh" -exec sed -i '' 's/evmd/yourchain/g' {} \;
-```
-
-**10. Update Docker configs:**
-```bash
-sed -i '' 's/evmd/yourchain/g' docker-compose.yml
-mv contrib/images/evmd-env contrib/images/yourchain-env
-sed -i '' 's/evmd/yourchain/g' contrib/images/yourchain-env/Dockerfile
-sed -i '' 's/evmd/yourchain/g' contrib/images/Makefile
-```
-
-**11. Update documentation:**
-```bash
-sed -i '' 's/evmd/yourchain/g' README.md CLAUDE.md
-sed -i '' 's/\.evmd/.yourchain/g' README.md CLAUDE.md
-```
-
-**12. Update home directory references:**
-```bash
-sed -i '' 's/\.evmd/.yourchain/g' config/yourchain_config.go
-```
-
-**13. Tidy modules:**
-```bash
-go mod tidy
-cd yourchain && go mod tidy && cd ..
-```
-
-**14. Build and verify:**
-```bash
-make build
-if [ ! -f "./build/yourchain" ]; then
- echo "ERROR: Build failed"
- exit 1
-fi
-./build/yourchain version
-make install
-which yourchain
-```
-
-**Why use this approach?**
-- Complete visibility into each change
-- Easier to debug if issues arise
-- Educational for understanding project structure
-- Better control for complex customizations
-
-**Most users should use the Quick Setup tab** unless they need to understand each change in detail.
-
-
-
-
-
-
-The renaming process updates these components across your codebase:
-
-**1. Directories:**
-- `evmd/` → `yourchain/`
-- `evmd/cmd/evmd/` → `yourchain/cmd/yourchain/`
-- `contrib/images/evmd-env/` → `contrib/images/yourchain-env/`
-
-**2. Files:**
-- `config/evmd_config.go` → `config/yourchain_config.go`
-
-**3. Go Code:**
-```go
-// Package names
-package evmd → package yourchain
-
-// Import paths
-import "github.com/cosmos/evm/evmd/cmd"
-→ import "github.com/your-org/your-chain/yourchain/cmd"
-
-// Module declaration (yourchain/go.mod)
-module github.com/cosmos/evm/evmd
-→ module github.com/your-org/your-chain/yourchain
-
-// Home directory references
-".evmd" → ".yourchain"
-```
-
-**4. Build Files:**
-```makefile
-# Makefile
-EXAMPLE_BINARY := evmd → EXAMPLE_BINARY := yourchain
-EVMD_DIR := evmd → CRAWD_DIR := yourchain
-test-evmd → test-yourchain
-
-# Makefile comments and section headers also updated
-```
-
-**5. Scripts:**
-- `local_node.sh`: All `evmd` → `yourchain`, `$HOME/.evmd` → `$HOME/.yourchain`
-- All test scripts in `tests/` and `scripts/` directories
-- Docker compose files and Dockerfiles
-
-**6. Documentation:**
-- `README.md`
-- `CLAUDE.md`
-- Any project-specific docs
-
-**What Doesn't Change:**
-- Git history (`.git/` directory untouched)
-- External dependencies
-- Core EVM module code (remains in `x/` directories)
-- Pre-built binaries or archives
-
-
-**Edge Cases**: The renaming process is straightforward because `evmd` doesn't have special meaning in Go syntax or require conditional logic. All replacements are simple text substitutions, making bulk find-and-replace safe and effective.
-
-
-
-
-**Result**: Your binary will be named `yourchain` and all commands will use this name (e.g., `yourchain start`, `yourchain init`).
-
-
-
-### Bech32 Address Prefix
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Your chain's address format (e.g., `cosmos1...`, `evmos1...`, `yourchain1...`) |
-| **Default** | `cosmos` |
-| **Type** | String (lowercase alphanumeric) |
-| **File Location** | [`config/config.go:62`](https://github.com/cosmos/evm/blob/main/config/config.go#L62) |
-| **Adjustable** | Immutable (requires rebuild before `init`) |
-| **Why Change It** | Create unique, recognizable addresses for your chain |
-
-
-Must be changed **before** running `yourchain init`. Changing after genesis requires a hard fork.
-
-
-
-
-Edit `config/config.go` and change the `Bech32Prefix` constant:
-
-```go expandable
-const (
- // Bech32Prefix defines the Bech32 prefix for your chain
- Bech32Prefix = "yourchain" // Change this line
- // Bech32PrefixAccAddr defines account addresses
- Bech32PrefixAccAddr = Bech32Prefix
- // Bech32PrefixAccPub defines account public keys
- Bech32PrefixAccPub = Bech32Prefix + sdk.PrefixPublic
- // Bech32PrefixValAddr defines validator operator addresses
- Bech32PrefixValAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator
- // Bech32PrefixValPub defines validator operator public keys
- Bech32PrefixValPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixOperator + sdk.PrefixPublic
- // Bech32PrefixConsAddr defines consensus node addresses
- Bech32PrefixConsAddr = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus
- // Bech32PrefixConsPub defines consensus node public keys
- Bech32PrefixConsPub = Bech32Prefix + sdk.PrefixValidator + sdk.PrefixConsensus + sdk.PrefixPublic
-)
-```
-
-**After changing, rebuild:**
-
-```bash
-make build
-```
-
-
-
-Changing the prefix affects all address types:
-
-| Address Type | Prefix Pattern | Example |
-| --- | --- | --- |
-| **Account Address** | `yourchain` | `yourchain1abc123...` |
-| **Account PubKey** | `yourchainpub` | `yourchainpub1abc123...` |
-| **Validator Operator** | `yourchainvaloper` | `yourchainvaloper1abc123...` |
-| **Validator PubKey** | `yourchainvaloperpub` | `yourchainvaloperpub1abc123...` |
-| **Consensus Address** | `yourchainvalcons` | `yourchainvalcons1abc123...` |
-| **Consensus PubKey** | `yourchainvalconspub` | `yourchainvalconspub1abc123...` |
-
-All these are automatically derived from the base `Bech32Prefix`.
-
-
-
-After building with your new prefix, verify it works:
-
-```bash
-# Initialize chain
-./build/yourchain init test --chain-id test-1
-
-# Create a test key
-./build/yourchain keys add testkey --keyring-backend test
-
-# Check address format
-./build/yourchain keys list --keyring-backend test
-```
-
-Expected output:
-```
-- address: yourchain1abc123...
- name: testkey
- pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey",...}'
- type: local
-```
-
-
-
-**Source**: [config/config.go:60-74](https://github.com/cosmos/evm/blob/main/config/config.go#L60-L74)
-
-
-
-### BIP44 Coin Type
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | The HD wallet derivation path for key generation according to [BIP-44](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) |
-| **Default** | `60` (Ethereum) |
-| **Type** | uint32 |
-| **File Location** | [`crypto/hd/hdpath.go:9`](https://github.com/cosmos/evm/blob/main/crypto/hd/hdpath.go#L9) |
-| **Adjustable** | Immutable (requires rebuild before `init`) |
-| **Standard** | [SLIP-0044](https://github.com/satoshilabs/slips/blob/master/slip-0044.md) |
-| **Why Change It** | For Cosmos SDK chains wanting non-Ethereum derivation paths, or to register a unique coin type |
-
-
-
-**For EVM-compatible chains, use the default:**
-
-```go
-var (
- // Bip44CoinType satisfies EIP84 for Ethereum compatibility
- Bip44CoinType uint32 = 60
-)
-```
-
-**Benefits:**
-- Compatible with Ethereum wallets (MetaMask, Ledger, etc.)
-- Standard for EVM chains
-- No additional registration needed
-
-**Derivation Path:** `m/44'/60'/0'/0/0`
-
-**Recommendation:** Keep `60` for EVM chains unless you have specific requirements.
-
-
-
-**To register a unique coin type:**
-
-1. **Check [SLIP-0044 registry](https://github.com/satoshilabs/slips/blob/master/slip-0044.md)** for available numbers
-
-2. **Submit a PR** to register your chain's coin type
-
-3. **Update the code** in `crypto/hd/hdpath.go`:
-
-```go
-var (
- // Bip44CoinType for your chain
- Bip44CoinType uint32 = 12345 // Your registered number
-
- // BIP44HDPath with your coin type
- BIP44HDPath = fmt.Sprintf("m/44'/%d'/0'/0/0", Bip44CoinType)
-)
-```
-
-4. **Rebuild the binary:**
-
-```bash
-make build
-```
-
-**Note:** Custom coin types may not be supported by all wallets.
-
-
-
-| Coin Type | Chain | Purpose |
-| --- | --- | --- |
-| `60` | Ethereum | **EVM chains (recommended)** |
-| `118` | Cosmos Hub | Traditional Cosmos chains |
-| `330` | Terra | Terra ecosystem |
-| `529` | Secret Network | Secret Network |
-| `852` | Desmos | Desmos Network |
-
-**For new EVM chains:** Use `60` for maximum compatibility.
-
-**For new Cosmos chains:** Register a unique value via SLIP-0044.
-
-
-
-**Source**: [crypto/hd/hdpath.go:7-13](https://github.com/cosmos/evm/blob/main/crypto/hd/hdpath.go#L7-L13)
-
-
-
-### EVM Chain ID
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | The EIP-155 chain ID used for Ethereum transaction replay protection |
-| **Default** | `262144` |
-| **Type** | uint64 |
-| **File Location** | [`config/config.go:78`](https://github.com/cosmos/evm/blob/main/config/config.go#L78) |
-| **Adjustable** | Immutable (must be set in source before building binary) |
-| **Standard** | [EIP-155](https://eips.ethereum.org/EIPS/eip-155) |
-| **Why Change It** | Must be unique for your network to prevent transaction replay attacks |
-
-
-The EVM Chain ID must be set **before building the application**. It cannot be changed after your binary is built. Choose carefully.
-
-
-
-
-**1. Edit `config/config.go` and change the `EVMChainID` constant:**
-
-```go
-const (
- // ... other constants ...
-
- // EVMChainID defines the EIP-155 replay-protection chain id for the current ethereum chain config.
- EVMChainID = 123456 // Change from 262144 to your unique chain ID
-)
-```
-
-**2. Rebuild the binary:**
-
-```bash
-make build
-```
-
-**3. Initialize your chain:**
-
-```bash
-./build/yourchain init mynode --chain-id mychain-1
-```
-
-**4. Verify the chain ID was set correctly:**
-
-```bash
-grep 'evm-chain-id' ~/.yourchain/config/app.toml
-# Should show: evm-chain-id = 123456
-```
-
-
-Do not edit `app.toml` to change the EVM chain ID after initialization. The chain ID must be set in source code before building. Editing app.toml will not properly configure the chain.
-
-
-
-
-**Requirements:**
-- Must be a unique integer
-- Not already registered on [chainlist.org](https://chainlist.org)
-- Cannot conflict with major networks
-
-**Reserved IDs (Do Not Use):**
-- `1` - Ethereum Mainnet
-- `137` - Polygon
-- `56` - BNB Chain
-- `43114` - Avalanche C-Chain
-- `10` - Optimism
-- `42161` - Arbitrum One
-
-**Recommended Approach:**
-1. Visit [chainlist.org](https://chainlist.org)
-2. Search for an unused ID
-3. For production mainnets, register your ID
-4. For testnets/devnets, use any high number (e.g., 900000+)
-
-**Common Ranges:**
-- `1-999`: Reserved for major networks
-- `1000-99999`: Public production chains
-- `100000+`: Private/test networks or application-specific chains
-
-
-
-The EVM Chain ID is used for:
-
-**Transaction Signing:**
-
-```javascript expandable
-// EIP-155 transaction signature includes chain ID
-const tx = {
- chainId: 123456, // Your EVM Chain ID
- nonce: 0,
- gasPrice: 1000000000,
- gasLimit: 21000,
- to: '0x...',
- value: 0,
- data: '0x'
-}
-```
-
-**Wallet Configuration:**
-
-```javascript expandable
-// MetaMask network configuration
-{
- chainId: '0x1E240', // 123456 in hex
- chainName: 'My Chain',
- rpcUrls: ['http://localhost:8545'],
- nativeCurrency: {
- name: 'Token',
- symbol: 'TKN',
- decimals: 18
- }
-}
-```
-
-**Replay Protection:**
-- Transactions signed for chain `123456` cannot be replayed on other chains
-- Essential security feature of EIP-155
-
-
-
-**Source**: [config/config.go:78](https://github.com/cosmos/evm/blob/main/config/config.go#L78)
-
-
-
-### Token Decimal Precision
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Determines whether your native token uses 18 decimals (like ETH) or another precision (like ATOM's 6 decimals) |
-| **Default** | 18 decimals |
-| **Type** | Architecture decision (affects bank metadata and module configuration) |
-| **Adjustable** | Immutable (cannot be changed after genesis) |
-| **Why Choose** | Affects EVM compatibility and module requirements |
-
-
-This decision affects your entire architecture and cannot be changed after genesis. Choose based on your compatibility needs.
-
-
-
-
-**Direct EVM Compatibility - Simplest Setup**
-
-**Configuration:**
-- Base denom: `atoken` (atto-prefix, 10^-18)
-- Display denom: `token`
-- Exponent: 18
-- **No additional modules required**
-
-**Benefits:**
-- Native 1:1 EVM compatibility
-- Uses standard `x/bank` module
-- Simpler architecture
-- No precision conversion needed
-- Standard for EVM ecosystems
-
-**Example:**
-```
-1 token = 1,000,000,000,000,000,000 atoken
- = 10^18 atoken
-```
-
-**In Genesis:**
-
-```json expandable
-{
- "app_state": {
- "bank": {
- "denom_metadata": [{
- "base": "atoken",
- "display": "token",
- "denom_units": [
- {"denom": "atoken", "exponent": 0},
- {"denom": "token", "exponent": 18}
- ]
- }]
- },
- "evm": {
- "params": {
- "evm_denom": "atoken"
- // No extended_denom_options needed
- }
- }
- }
-}
-```
-
-
-
-
-**Cosmos SDK Standard - Requires PreciseBank Module**
-
-**Configuration:**
-- Base denom: `utoken` (micro-prefix, 10^-6)
-- Display denom: `token`
-- Exponent: 6
-- **Requires `x/precisebank` module**
-- **Requires `extended_denom_options` in genesis**
-
-**Example:**
-```
-1 token = 1,000,000 utoken
- = 10^6 utoken
-```
-
-**Additional Setup Required:**
-
-1. **Add PreciseBank to `app.go`:**
-```go expandable
-import (
- precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
- precisebanktypes "github.com/cosmos/evm/x/precisebank/types"
-)
-
-// Initialize keeper
-app.PreciseBankKeeper = precisebankkeeper.NewKeeper(
- appCodec,
- keys[precisebanktypes.StoreKey],
- app.BankKeeper,
- app.AccountKeeper,
-)
-
-// Add to module manager
-app.ModuleManager = module.NewManager(
- // ...
- precisebank.NewAppModule(app.PreciseBankKeeper, app.AccountKeeper),
- // ...
-)
-```
-
-2. **Configure Extended Denom in Genesis:**
-```json expandable
-{
- "app_state": {
- "bank": {
- "denom_metadata": [{
- "base": "utoken",
- "display": "token",
- "denom_units": [
- {"denom": "utoken", "exponent": 0},
- {"denom": "token", "exponent": 6}
- ]
- }]
- },
- "evm": {
- "params": {
- "evm_denom": "utoken",
- "extended_denom_options": {
- "extended_denom": "atoken" // 18-decimal EVM representation
- }
- }
- }
- }
-}
-```
-
-**How It Works:**
-- Cosmos SDK sees: `utoken` (6 decimals)
-- EVM sees: `atoken` (18 decimals)
-- PreciseBank handles conversion: `1 utoken = 10^12 wei`
-
-⚠️ **More complex but maintains Cosmos compatibility**
-
-
-
-| Prefix | Decimals | Example Denom | Conversion | Used By |
-| --- | --- | --- | --- | --- |
-| `a` (atto) | 18 | `atoken` | 1 token = 10^18 atoken | **EVM chains** |
-| `u` (micro) | 6 | `uatom`, `ustake` | 1 token = 10^6 utoken | Cosmos Hub, most Cosmos chains |
-| `n` (nano) | 9 | `ntoken` | 1 token = 10^9 ntoken | Some chains |
-| `p` (pico) | 12 | `ptoken` | 1 token = 10^12 ptoken | Rare |
-| `m` (milli) | 3 | `mtoken` | 1 token = 10^3 mtoken | Rare |
-| Base | 0-8 | `sats` | 1 BTC = 10^8 sats | Bitcoin-style |
-
-**For new chains:**
-- EVM-focused → Use `a` prefix (18 decimals)
-- Cosmos-focused → Use `u` prefix (6 decimals) + PreciseBank
-
-
-
-**Further Reading:**
-- [Precision Handling Concepts](/docs/evm/v0.5.0/documentation/concepts/precision-handling)
-- [PreciseBank Module Reference](/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/precisebank)
-
-
-
-### Default Denomination in Source
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Default token denominations hardcoded in source files that are used when generating configuration files |
-| **Default** | `aatom` (extended), `uatom` (base), `atom` (display) |
-| **Type** | String |
-| **Files** | `server/config/migration/v0.50-app.toml:11`, `x/vm/types/params.go:21-25`, `config/constants.go:5-8` |
-| **Adjustable** | Pre-Genesis (must be changed before `init`) |
-| **Why Change It** | So that generated config files use your token name instead of the default |
-
-
-This step must be completed **before** running `yourchain init`. The defaults are compiled into the binary and written to generated files during initialization.
-
-
-
-
-**Three source files contain default denomination values:**
-
-**1. Server Configuration Template**
-**File**: [`server/config/migration/v0.50-app.toml:11`](https://github.com/cosmos/evm/blob/main/server/config/migration/v0.50-app.toml#L11)
-
-**Change:**
-
-```toml
-# From:
-minimum-gas-prices = "0aatom"
-
-# To:
-minimum-gas-prices = "0atoken"
-```
-
-**2. EVM Module Defaults**
-**File**: [`x/vm/types/params.go:21-25`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L21-L25)
-
-**Change:**
-
-```go expandable
-// From:
-var (
- DefaultEVMDenom = "uatom"
- DefaultEVMExtendedDenom = "aatom"
- DefaultEVMDisplayDenom = "atom"
-)
-
-// To:
-var (
- DefaultEVMDenom = "atoken" // Your base denom
- DefaultEVMExtendedDenom = "atoken" // Same if 18 decimals
- DefaultEVMDisplayDenom = "token" // Display name
-)
-```
-
-**3. Example Chain Constants**
-**File**: [`config/constants.go:5-8`](https://github.com/cosmos/evm/blob/main/config/constants.go#L5-L8)
-
-**Change:**
-
-```go expandable
-// From:
-const (
- ExampleChainDenom = "aatom"
- ExampleDisplayDenom = "atom"
-)
-
-// To:
-const (
- ExampleChainDenom = "atoken"
- ExampleDisplayDenom = "token"
-)
-```
-
-
-
-**For 18-decimal tokens (recommended):**
-
-```bash expandable
-# 1. Update server config template
-sed -i '' 's/minimum-gas-prices = "0aatom"/minimum-gas-prices = "0atoken"/' \
- server/config/migration/v0.50-app.toml
-
-# 2. Update EVM module defaults
-# Open x/vm/types/params.go and change lines 21-25:
-# DefaultEVMDenom = "atoken"
-# DefaultEVMExtendedDenom = "atoken"
-# DefaultEVMDisplayDenom = "token"
-
-# 3. Update example constants for consistency
-# Open config/constants.go and change lines 5-8:
-# ExampleChainDenom = "atoken"
-# ExampleDisplayDenom = "token"
-
-# 4. Rebuild binary
-make build
-
-# 5. Initialize and verify
-./build/yourchain init testnode --chain-id test-1
-grep "minimum-gas-prices" ~/.yourchain/config/app.toml
-# Should show: minimum-gas-prices = "0atoken"
-```
-
-**For 6-decimal tokens (Cosmos standard):**
-
-```bash
-# Update the same files but use "utoken" instead:
-# DefaultEVMDenom = "utoken"
-# DefaultEVMExtendedDenom = "atoken" # Still needs extended for EVM
-# DefaultEVMDisplayDenom = "token"
-```
-
-
-
-After making changes and rebuilding:
-
-```bash expandable
-# 1. Initialize chain
-./build/yourchain init testnode --chain-id test-1 --home /tmp/test-home
-
-# 2. Verify app.toml
-grep "minimum-gas-prices" /tmp/test-home/config/app.toml
-# Expected: minimum-gas-prices = "0atoken"
-
-# 3. Verify genesis.json
-jq '.app_state.evm.params.evm_denom' /tmp/test-home/config/genesis.json
-# Expected: "atoken"
-
-# 4. Clean up test
-rm -rf /tmp/test-home
-```
-
-If verification succeeds, your defaults are correctly configured.
-
-
-
-**Token Denomination Guidelines:**
-
-**For 18-decimal tokens:**
-- Base denom: `atoken` (atto-token)
-- Display denom: `token`
-- Example: `1 token = 1,000,000,000,000,000,000 atoken`
-
-**For 6-decimal tokens:**
-- Base denom: `utoken` (micro-token)
-- Display denom: `token`
-- Extended denom: `atoken` (for EVM)
-- Example: `1 token = 1,000,000 utoken`
-
-**Source References:**
-- [server/config/migration/v0.50-app.toml:11](https://github.com/cosmos/evm/blob/main/server/config/migration/v0.50-app.toml#L11)
-- [x/vm/types/params.go:21-25](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L21-L25)
-- [config/constants.go:5-8](https://github.com/cosmos/evm/blob/main/config/constants.go#L5-L8)
-
-
-
-
-
-## Genesis Configuration
-
-After completing Pre-Genesis Setup and running `yourchain init`, configure your genesis file. The genesis file is located at `~/.yourchain/config/genesis.json`.
-
-
-Genesis parameters can be modified until you distribute the genesis file to validators. After the network launches, most parameters can only be changed through governance proposals.
-
-
-### Initialize Your Chain
-
-
-
-
-**For Production Chains**: Before running `init`, ensure you have completed all [Pre-Genesis Setup](#pre-genesis-setup) steps, especially [Binary Name](#binary-name) configuration. Organizations deploying their own chain should rename the binary from `evmd` to their own chain name (e.g., `yourchain`) to brand their network and avoid confusion with the reference implementation.
-
-
-First, initialize the chain to create the default genesis file:
-
-```bash
-yourchain init --chain-id
-```
-
-Example:
-
-```bash
-yourchain init mynode --chain-id mychain-1
-```
-
-This creates:
-- `~/.yourchain/config/genesis.json` - Genesis state file
-- `~/.yourchain/config/app.toml` - Application configuration
-- `~/.yourchain/config/config.toml` - CometBFT configuration
-- `~/.yourchain/config/client.toml` - Client configuration
-
-Now proceed with genesis configuration below.
-
-
-
-### Cosmos Chain ID
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | The unique string identifier for your blockchain in the Cosmos ecosystem |
-| **Genesis Path** | `chain_id` (root level) |
-| **Type** | String |
-| **Format** | Flexible string, commonly `{name}-{version}` |
-| **Adjustable** | Immutable (cannot be changed after genesis without coordinated upgrade) |
-| **Why Important** | Used for IBC connections, CometBFT consensus, and client identification |
-
-
-
-The Cosmos Chain ID is typically set during initialization:
-
-```bash
-yourchain init mynode --chain-id mychain-1
-```
-
-This writes the chain ID to `genesis.json`. You must also set it in `client.toml`:
-
-```bash
-yourchain config set client chain-id mychain-1
-```
-
-
-
-To change the chain ID after initialization:
-
-```bash
-# Update genesis.json
-jq '.chain_id = "mychain-1"' ~/.yourchain/config/genesis.json > tmp && \
- mv tmp ~/.yourchain/config/genesis.json
-
-# Update client.toml
-yourchain config set client chain-id mychain-1 --home ~/.yourchain
-```
-
-**Verify:**
-```bash
-jq '.chain_id' ~/.yourchain/config/genesis.json
-grep 'chain-id' ~/.yourchain/config/client.toml
-```
-
-
-
-**Recommended Formats:**
-
-**Mainnet:**
-```
-mychain-1 # Initial mainnet
-mychain-2 # After major upgrade/hard fork
-mychain-3 # After another major upgrade
-```
-
-**Testnet:**
-```
-mychain-testnet-1
-mychain-testnet-2
-mychain-devnet-1
-```
-
-**Local Development:**
-```
-mychain-local
-test-1
-dev-1
-```
-
-**IBC Considerations:**
-- IBC clients reference the chain ID
-- Incrementing the version number (e.g., `-1` to `-2`) is the canonical way to upgrade IBC clients
-- The chain ID is part of the IBC client identifier
-
-**Flexibility:**
-- Chain ID can be any string
-- No strict format requirements
-- `{name}-{number}` is convention but not required
-
-
-
-**Important Notes:**
-- All validators must use the exact same chain ID
-- Chain ID is included in all transactions and blocks
-- Cannot be changed after genesis without coordinated upgrade
-
-
-
-### Genesis Time
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | UTC timestamp when the chain starts producing blocks |
-| **Genesis Path** | `genesis_time` (root level) |
-| **Type** | RFC3339 timestamp |
-| **Format** | `"2024-12-01T00:00:00Z"` |
-| **Adjustable** | Immutable (must be set before network launch) |
-| **Why Important** | Coordinates synchronized network launch across all validators |
-
-**Set the genesis time:**
-
-```bash
-jq '.genesis_time = "2024-12-01T00:00:00Z"' ~/.yourchain/config/genesis.json > tmp && \
- mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Verify:**
-```bash
-jq '.genesis_time' ~/.yourchain/config/genesis.json
-```
-
-**Timing Recommendations:**
-- **Testnet**: 1-2 hours ahead (allows validator setup)
-- **Mainnet**: 24-48 hours ahead (allows thorough preparation)
-- **Local Dev**: Use past time (starts immediately)
-
-
-**Network Launch Details**: For complete launch coordination procedures, validator startup instructions, and timing best practices, see [Coordinate Launch Time](/docs/evm/v0.5.0/documentation/getting-started/network-operators/node-configuration#coordinate-launch-time) in the Runtime Configuration & Network Launch guide.
-
-
-**Important**: All validators must have identical `genesis_time` in their genesis files.
-
-
-
-### Bank Denomination Metadata
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Your token's base denomination, decimal precision, and display properties |
-| **Genesis Path** | `app_state.bank.denom_metadata` |
-| **Type** | Array of metadata objects |
-| **Adjustable** | Governance |
-| **Why Important** | Controls how tokens are displayed and handled across the chain |
-
-
-**Decimal Precision Decision**: Your choice of 18 vs 6 decimals (configured in [Token Decimal Precision](#token-decimal-precision)) determines the values below. See that section for detailed explanation.
-
-
-
-
-**Configure denomination metadata for your chosen precision:**
-
-```bash expandable
-# For 18-decimal tokens (base denom: atoken)
-jq '.app_state.bank.denom_metadata=[{
- "description": "The native staking and gas token",
- "denom_units": [
- {"denom": "atoken", "exponent": 0, "aliases": ["attotoken"]},
- {"denom": "token", "exponent": 18, "aliases": []}
- ],
- "base": "atoken",
- "display": "token",
- "name": "My Token",
- "symbol": "TKN",
- "uri": "",
- "uri_hash": ""
-}]' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# For 6-decimal tokens (base denom: utoken)
-# Change "atoken" → "utoken" and exponent: 18 → 6
-```
-
-**Fields:**
-- `base`: Smallest unit stored on-chain (must match staking bond_denom)
-- `display`: Human-readable unit
-- `exponent`: Decimal places (18 or 6 based on your choice)
-- `name`: Full token name displayed in wallets
-- `symbol`: Ticker symbol (e.g., `TKN`, `ATOM`, `ETH`)
-
-
-
-After configuration, verify all denoms match across modules:
-
-```bash expandable
-GENESIS=~/.yourchain/config/genesis.json
-
-# Check bank metadata base
-jq '.app_state.bank.denom_metadata[0].base' $GENESIS
-
-# Check staking bond denom
-jq '.app_state.staking.params.bond_denom' $GENESIS
-
-# Check mint denom
-jq '.app_state.mint.params.mint_denom' $GENESIS
-
-# Check EVM denom
-jq '.app_state.evm.params.evm_denom' $GENESIS
-
-# Check governance min deposit
-jq '.app_state.gov.params.min_deposit[0].denom' $GENESIS
-```
-
-**All should return the same denom** (e.g., `"atoken"` or `"utoken"`).
-
-
-
-**Critical**: The following must all use the same base denomination:
-- `app_state.bank.denom_metadata[0].base`
-- `app_state.staking.params.bond_denom`
-- `app_state.mint.params.mint_denom`
-- `app_state.evm.params.evm_denom`
-- `app_state.gov.params.min_deposit[0].denom`
-
-
-
-### VM Parameters
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Core EVM module configuration including gas token, extended denom options, and chain behavior |
-| **Genesis Path** | `app_state.evm.params` |
-| **Type** | Object containing multiple EVM configuration parameters |
-| **Adjustable** | Governance |
-| **Why Important** | Defines how the EVM layer interacts with Cosmos SDK |
-
-
-
-**Sets which bank denomination is used for EVM gas:**
-
-```bash expandable
-jq '.app_state.evm.params.evm_denom = "atoken"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Must match** your bank metadata base denomination.
-
-**Source**: [x/vm/types/params.go:21](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L21)
-
-
-
-**Only required for 6-decimal chains** (see [Token Decimal Precision](#token-decimal-precision)):
-
-```bash expandable
-# Only needed if using 6 decimals with PreciseBank
-jq '.app_state.evm.params.extended_denom_options = {
- "extended_denom": "atoken"
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**When to configure:**
-- ✅ 6-decimal chains: Set `extended_denom` to enable EVM compatibility via PreciseBank
-- ❌ 18-decimal chains: Leave empty or omit entirely
-
-**Example configuration:**
-```json expandable
-{
- "evm_denom": "utoken",
- "extended_denom_options": {
- "extended_denom": "atoken"
- }
-}
-```
-
-**Source**: [x/vm/types/params.go:76](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L76)
-
-
-
-**Controls how far back historical state queries can go:**
-
-```bash expandable
-jq '.app_state.evm.params.history_serve_window = 8192' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Default**: `8192` blocks (matches EIP-2935)
-
-**Values:**
-- `0` = Unlimited (keep all historical state)
-- `8192` = ~18 hours at 8s blocks (recommended)
-- `86400` = ~8 days at 8s blocks
-
-**Trade-offs:**
-- Higher = More disk space, older state queries supported
-- Lower = Less disk space, limited historical queries
-- `0` = Maximum compatibility, growing disk usage
-
-**Source**: [x/vm/types/params.go:50](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L50)
-
-
-
-**Enable additional Ethereum Improvement Proposals:**
-
-```bash expandable
-jq '.app_state.evm.params.extra_eips = []' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Default**: `[]` (empty - use standard EVM feature set)
-
-**When to use:**
-- Most chains should leave empty
-- Add specific EIP numbers if you need features not in default config
-- Example: `[1153, 3855]` to enable specific EIPs
-
-**Note**: EIPs must be activatable - invalid EIPs cause validation failure.
-
-**Source**: [x/vm/types/params.go:33](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L33)
-
-
-
-
-
-### Active Precompiles
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enabled precompiled contracts that expose Cosmos SDK functionality to EVM smart contracts |
-| **Genesis Path** | `app_state.evm.params.active_static_precompiles` |
-| **Type** | Array of hex addresses (must be sorted) |
-| **Default** | `[]` (empty - no precompiles enabled) |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/precompiles.go:22-32`](https://github.com/cosmos/evm/blob/main/x/vm/types/precompiles.go#L22-L32) |
-
-
-**Learn More**: [Precompiles Overview](/docs/evm/v0.5.0/documentation/smart-contracts/precompiles/overview) - Complete documentation with Solidity interfaces
-
-
-
-This list represents the currently available static precompiles in the codebase. Precompiles are extensible - you can add custom precompiles to your chain. See the [authoritative source](https://github.com/cosmos/evm/blob/main/x/vm/types/precompiles.go) for the latest available precompiles.
-
-
-
-
-| Address | Name | Purpose |
-| --- | --- | --- |
-| `0x0100` | **P256** | Cryptographic operations for Web3 auth |
-| `0x0400` | **Bech32** | Cosmos ↔ Ethereum address conversion |
-| `0x0800` | **Staking** | Validator staking operations |
-| `0x0801` | **Distribution** | Reward distribution and claiming |
-| `0x0802` | **ICS20** | IBC token transfers |
-| `0x0803` | **Vesting** | Token vesting operations |
-| `0x0804` | **Bank** | Bank module operations |
-| `0x0805` | **Governance** | Submit/vote on proposals |
-| `0x0806` | **Slashing** | Slashing queries |
-
-
-
-**Enable all precompiles for maximum Cosmos SDK integration:**
-
-```bash expandable
-jq '.app_state.evm.params.active_static_precompiles = [
- "0x0000000000000000000000000000000000000100",
- "0x0000000000000000000000000000000000000400",
- "0x0000000000000000000000000000000000000800",
- "0x0000000000000000000000000000000000000801",
- "0x0000000000000000000000000000000000000802",
- "0x0000000000000000000000000000000000000803",
- "0x0000000000000000000000000000000000000804",
- "0x0000000000000000000000000000000000000805",
- "0x0000000000000000000000000000000000000806"
-]' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Use case**: Full-featured chains with rich Cosmos SDK integration
-
-
-
-**Enable only specific precompiles:**
-
-```bash expandable
-jq '.app_state.evm.params.active_static_precompiles = [
- "0x0000000000000000000000000000000000000100",
- "0x0000000000000000000000000000000000000400",
- "0x0000000000000000000000000000000000000800",
- "0x0000000000000000000000000000000000000804"
-]' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-This example enables:
-- P256 (cryptography)
-- Bech32 (address conversion)
-- Staking
-- Bank
-
-**Use case**: Minimal attack surface, enable only what you need
-
-
-
-**Pure EVM chain with no Cosmos SDK integration:**
-
-```bash expandable
-jq '.app_state.evm.params.active_static_precompiles = []' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Use case**: Standard EVM chain without Cosmos features
-
-
-
-**Important**: The array must be sorted in ascending order for determinism.
-
-**Can be changed**: Precompiles can be enabled/disabled after genesis through governance proposals.
-
-**Source**: [x/vm/types/precompiles.go:22-32](https://github.com/cosmos/evm/blob/main/x/vm/types/precompiles.go#L22-L32)
-
-
-
-### ERC20 Module
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Configured token pairs between Cosmos bank denoms and ERC20 representations, implementing Single Token Representation v2 (STRv2) |
-| **Genesis Path** | `app_state.erc20` |
-| **Type** | Object containing token pairs and configuration |
-| **Adjustable** | Governance |
-| **Why Important** | Allows native tokens to be used in EVM contracts as ERC20 |
-
-
-**Learn More**:
-- [Single Token Representation Concepts](/docs/evm/v0.5.0/documentation/concepts/single-token-representation)
-- [ERC20 Module Reference](/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/erc20)
-
-
-
-
-**Configure the native token's ERC20 representation:**
-
-```bash expandable
-# Set native precompile address
-jq '.app_state.erc20.native_precompiles = ["0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"]' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# Set token pair
-jq '.app_state.erc20.token_pairs = [{
- "erc20_address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
- "denom": "atoken",
- "enabled": true,
- "contract_owner": 1
-}]' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Fields:**
-- `erc20_address`: Special address `0xEeeee...EEeE` for native token
-- `denom`: Your base denomination (must match bank metadata)
-- `enabled`: Whether the pair is active
-- `contract_owner`: `1` = module-owned (standard for native token)
-
-
-
-**Control who can register new token pairs:**
-
-```bash expandable
-# Permissionless (anyone can register)
-jq '.app_state.erc20.params.permissionless_registration = true' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# Permissioned (governance only)
-jq '.app_state.erc20.params.permissionless_registration = false' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**When to use each:**
-- `true`: Public chains, DeFi-focused ecosystems
-- `false`: Enterprise chains, controlled environments
-
-**Can be changed**: Via governance after genesis
-
-**Source**: [x/erc20/types/params.go:27](https://github.com/cosmos/evm/blob/main/x/erc20/types/params.go#L27)
-
-
-
-```json expandable
-{
- "app_state": {
- "erc20": {
- "native_precompiles": [
- "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
- ],
- "token_pairs": [
- {
- "erc20_address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
- "denom": "atoken",
- "enabled": true,
- "contract_owner": 1
- }
- ],
- "params": {
- "permissionless_registration": true
- }
- }
- }
-}
-```
-
-**Result**: Native token becomes accessible as ERC20 from Solidity contracts using the special address `0xEeeee...EEeE`.
-
-
-
-
-
-### Fee Market (EIP-1559)
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Dynamic fee pricing mechanism based on EIP-1559, controlling how transaction fees adjust based on network congestion |
-| **Genesis Path** | `app_state.feemarket.params` |
-| **Type** | Object containing fee market parameters |
-| **Default** | EIP-1559 enabled with 1 gwei base fee |
-| **Adjustable** | Governance |
-| **Source** | [`x/feemarket/types/params.go:13-21`](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L13-L21) |
-
-
-**Learn More**:
-- [EIP-1559 Fee Market Concepts](/docs/evm/v0.5.0/documentation/concepts/eip-1559-feemarket)
-- [FeeMarket Module Reference](/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/feemarket)
-
-
-
-
-```bash expandable
-jq '.app_state.feemarket.params = {
- "no_base_fee": false,
- "base_fee": "1000000000",
- "base_fee_change_denominator": 8,
- "elasticity_multiplier": 2,
- "min_gas_price": "0",
- "min_gas_multiplier": "0.5",
- "enable_height": 0
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Parameters:**
-- `no_base_fee`: `false` = EIP-1559 enabled
-- `base_fee`: `"1000000000"` = 1 gwei initial base fee
-- `base_fee_change_denominator`: `8` = ±12.5% max change per block
-- `elasticity_multiplier`: `2` = target is 50% of max gas
-- `min_gas_price`: `"0"` = no minimum floor
-- `min_gas_multiplier`: `"0.5"` = 50% of base fee minimum
-- `enable_height`: `0` = enabled from genesis
-
-**Use case**: Standard Ethereum-compatible chains
-
-
-
-```bash expandable
-jq '.app_state.feemarket.params = {
- "no_base_fee": true,
- "min_gas_price": "1000000000"
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Parameters:**
-- `no_base_fee`: `true` = Disable EIP-1559
-- `min_gas_price`: Fixed minimum gas price in wei
-
-**Use case**: Traditional Cosmos chains or simple testing
-
-
-
-**1. `base_fee`** (string, wei)
-- Initial base fee per gas
-- `"1000000000"` = 1 gwei (Ethereum standard)
-- `"100000000"` = 0.1 gwei (lower fee chains)
-- `"10000000000"` = 10 gwei (higher fee chains)
-
-**2. `base_fee_change_denominator`** (uint32)
-- Controls adjustment speed
-- `8` = ±12.5% max change per block (Ethereum standard)
-- `50` = ±2% max change (slower adjustment)
-- Lower = faster price adjustment
-
-**3. `elasticity_multiplier`** (uint32)
-- Determines gas target
-- `2` = target is 50% of max gas (standard)
-- Block above target → base fee increases
-- Block below target → base fee decreases
-
-**4. `min_gas_price`** (string, wei)
-- Network-wide minimum floor
-- `"0"` = no floor (standard)
-- `"500000000"` = 0.5 gwei minimum
-
-**5. `min_gas_multiplier`** (string, decimal)
-- Fraction of base fee for minimum
-- `"0.5"` = 50% of base fee (standard)
-- Must be between 0 and 1
-
-**6. `enable_height`** (int64)
-- Block height to activate EIP-1559
-- `0` = enabled from genesis
-- `> 0` = activate at specific height
-
-
-
-**Source**: [x/feemarket/types/params.go:13-21](https://github.com/cosmos/evm/blob/main/x/feemarket/types/params.go#L13-L21)
-
-
-
-### EVM Access Control
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Permissions for deploying and calling smart contracts |
-| **Genesis Path** | `app_state.evm.params.access_control` |
-| **Type** | Object with `create` and `call` access controls |
-| **Default** | Permissionless (type 0 - anyone can deploy and call contracts) |
-| **Adjustable** | Governance |
-| **Source** | [`x/vm/types/params.go:160-165`](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L160-L165) |
-
-
-
-```bash expandable
-jq '.app_state.evm.params.access_control = {
- "create": {
- "access_type": 0,
- "access_control_list": []
- },
- "call": {
- "access_type": 0,
- "access_control_list": []
- }
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Access Type** `0` = PERMISSIONLESS
-
-**Use case**: Public chains, testnets, open ecosystems
-
-
-
-```bash expandable
-jq '.app_state.evm.params.access_control = {
- "create": {
- "access_type": 2,
- "access_control_list": [
- "0x1234567890123456789012345678901234567890",
- "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
- ]
- },
- "call": {
- "access_type": 0,
- "access_control_list": []
- }
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Access Type** `2` = PERMISSIONED (allowlist)
-
-**Use case**: Enterprise chains, controlled deployment
-
-
-
-```bash expandable
-jq '.app_state.evm.params.access_control.create = {
- "access_type": 1,
- "access_control_list": [
- "0xbadaddr1234567890123456789012345678901234"
- ]
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Access Type** `1` = RESTRICTED (blocklist)
-
-**Use case**: Block known malicious addresses while keeping chain open
-
-
-
-| Type | Value | Behavior | List Usage |
-| --- | --- | --- | --- |
-| **Permissionless** | `0` | Anyone can perform action | Ignored |
-| **Restricted** | `1` | Block addresses in list | Blocklist |
-| **Permissioned** | `2` | Only addresses in list | Allowlist |
-
-**Separate controls:**
-- `create`: Who can deploy contracts
-- `call`: Who can call contracts
-
-**Can be changed**: Via governance proposals after genesis
-
-
-
-**Source**: [x/vm/types/params.go:160-165](https://github.com/cosmos/evm/blob/main/x/vm/types/params.go#L160-L165)
-
-
-
-### Staking Parameters
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Staking module behavior, including bond denom, unbonding time, and validator set size |
-| **Genesis Path** | `app_state.staking.params` |
-| **Type** | Object containing staking configuration parameters |
-| **Adjustable** | Governance |
-
-
-
-```bash expandable
-# Set bond denomination
-jq '.app_state.staking.params.bond_denom = "atoken"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# Set unbonding time (21 days is Cosmos standard)
-jq '.app_state.staking.params.unbonding_time = "1814400s"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# Set max validators
-jq '.app_state.staking.params.max_validators = 100' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-
-
-**1. `bond_denom`** (string)
-- Must match your base denomination from bank metadata
-- Example: `"atoken"`
-
-**2. `unbonding_time`** (duration string)
-- How long tokens remain locked after unstaking
-- During this period, tokens can still be slashed
-- **Format**: Go duration (e.g., `"1814400s"` = 21 days)
-
-**Common values:**
-- `"120s"` = 2 minutes (testing)
-- `"86400s"` = 1 day
-- `"604800s"` = 7 days
-- `"1814400s"` = 21 days (Cosmos standard)
-- `"2419200s"` = 28 days
-
-**Security vs Usability**: Longer = more secure but less flexible for users
-
-**3. `max_validators`** (uint32)
-- Maximum validators in active set
-- Only top N by voting power participate in consensus
-- Common values: 50, 100, 125, 150, 175
-- Higher = more decentralized but potentially slower
-
-**4. `max_entries`** (uint32)
-- Max concurrent unbonding/redelegation operations per pair
-- Default: `7`
-- Prevents spam on unbonding queue
-
-**5. `historical_entries`** (uint32)
-- Number of historical validator sets to keep
-- Used for IBC light client verification
-- Default: `10000`
-- Higher = more storage, better IBC compatibility
-
-**6. `min_commission_rate`** (decimal string)
-- Minimum commission validators must charge
-- Default: `"0.000000000000000000"` (0%)
-- Example: `"0.050000000000000000"` = 5% minimum
-
-
-
-```json expandable
-{
- "app_state": {
- "staking": {
- "params": {
- "bond_denom": "atoken",
- "unbonding_time": "1814400s",
- "max_validators": 100,
- "max_entries": 7,
- "historical_entries": 10000,
- "min_commission_rate": "0.000000000000000000"
- }
- }
- }
-}
-```
-
-
-
-
-
-### Slashing Parameters
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Thresholds and penalties for validator downtime or misbehavior |
-| **Genesis Path** | `app_state.slashing.params` |
-| **Type** | Object containing slashing configuration parameters |
-| **Adjustable** | Governance |
-
-
-
-```bash expandable
-jq '.app_state.slashing.params = {
- "signed_blocks_window": "10000",
- "min_signed_per_window": "0.500000000000000000",
- "downtime_jail_duration": "600s",
- "slash_fraction_double_sign": "0.050000000000000000",
- "slash_fraction_downtime": "0.010000000000000000"
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Cosmos Defaults:**
-- **Signed blocks window**: 10,000 blocks (~22 hours at 8s blocks)
-- **Min signed**: 50% of blocks in window
-- **Downtime jail**: 10 minutes
-- **Double-sign slash**: 5% of stake
-- **Downtime slash**: 1% of stake
-
-
-
-**1. `signed_blocks_window`** (int64)
-- Number of blocks to track validator liveness
-- Validator must sign `min_signed_per_window` within this window
-
-**Common values:**
-- `100` = ~13 minutes at 8s blocks
-- `10000` = ~22 hours (Cosmos standard)
-- `20000` = ~44 hours
-
-**2. `min_signed_per_window`** (decimal string)
-- Minimum fraction of blocks validator must sign
-- `"0.500000000000000000"` = 50% (standard)
-- Example: With window=10000, must sign ≥5000 blocks
-
-**3. `downtime_jail_duration`** (duration string)
-- How long validator is jailed for downtime
-- Jailed validators earn no rewards, must manually unjail
-
-**Common values:**
-- `"60s"` = 1 minute
-- `"600s"` = 10 minutes (Cosmos standard)
-- `"3600s"` = 1 hour
-- `"86400s"` = 1 day
-
-**4. `slash_fraction_double_sign`** (decimal string)
-- Percentage of stake slashed for double-signing
-- Validator is also permanently tombstoned (cannot rejoin)
-
-**Common values:**
-- `"0.050000000000000000"` = 5% (Cosmos standard)
-- `"0.100000000000000000"` = 10%
-- `"0.200000000000000000"` = 20%
-
-**5. `slash_fraction_downtime`** (decimal string)
-- Percentage slashed for downtime (less severe)
-
-**Common values:**
-- `"0.000100000000000000"` = 0.01%
-- `"0.010000000000000000"` = 1% (Cosmos standard)
-- `"0.050000000000000000"` = 5%
-
-
-
-**Downtime Detection:**
-1. Chain tracks last `signed_blocks_window` blocks
-2. If validator signs < `min_signed_per_window` fraction → jailed
-3. Validator loses `slash_fraction_downtime` of stake
-4. Must wait `downtime_jail_duration` then manually unjail
-
-**Double-Sign Detection:**
-1. Validator signs two blocks at same height → slashed
-2. Loses `slash_fraction_double_sign` of stake
-3. Permanently tombstoned - cannot ever rejoin
-
-**Relationship with Unbonding:**
-- Tokens remain slashable during entire `unbonding_time`
-- Validators accountable for misbehavior that occurred while bonded
-- Historical slashing enforced even after unbonding starts
-
-
-
-
-
-### Governance Parameters
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Settings for on-chain governance including voting periods, quorum, and deposit requirements |
-| **Genesis Path** | `app_state.gov.params` |
-| **Type** | Object containing governance configuration parameters |
-| **Adjustable** | Governance |
-
-
-
-```bash expandable
-jq '.app_state.gov.params = {
- "min_deposit": [{
- "denom": "atoken",
- "amount": "10000000000000000000"
- }],
- "max_deposit_period": "172800s",
- "voting_period": "172800s",
- "expedited_voting_period": "86400s",
- "quorum": "0.334",
- "threshold": "0.5",
- "veto_threshold": "0.334",
- "min_initial_deposit_ratio": "0.0",
- "expedited_threshold": "0.667",
- "expedited_min_deposit": [{
- "denom": "atoken",
- "amount": "50000000000000000000"
- }]
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-
-
-**1. `min_deposit`**
-- Minimum tokens required to submit proposal
-- Example: `10 tokens` = `10000000000000000000 atoken` (18 decimals)
-
-**2. `max_deposit_period`** (duration)
-- Time to reach minimum deposit
-- `"172800s"` = 2 days (Cosmos standard)
-
-**3. `voting_period`** (duration)
-- Length of voting period
-- Common values:
- - `"172800s"` = 2 days (Cosmos standard)
- - `"604800s"` = 7 days
-
-**4. `expedited_voting_period`** (duration)
-- Shorter period for expedited proposals
-- **Must be < `voting_period`**
-- `"86400s"` = 1 day (standard)
-
-**5. `quorum`** (decimal)
-- Minimum participation required
-- `"0.334"` = 33.4% (standard)
-
-**6. `threshold`** (decimal)
-- Minimum yes votes to pass
-- `"0.5"` = 50% (standard)
-
-**7. `veto_threshold`** (decimal)
-- NoWithVeto threshold to reject
-- `"0.334"` = 33.4% (standard)
-
-**8. `expedited_threshold`** (decimal)
-- Higher threshold for expedited proposals
-- `"0.667"` = 66.7% (standard)
-
-
-
-**Set minimum deposit denom:**
-```bash expandable
-jq '.app_state.gov.params.min_deposit[0].denom = "atoken"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Set voting periods:**
-```bash expandable
-# Standard voting period
-jq '.app_state.gov.params.voting_period = "172800s"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-
-# Expedited period (must be < voting_period)
-jq '.app_state.gov.params.expedited_voting_period = "86400s"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Important**: `expedited_voting_period` must be strictly less than `voting_period`.
-
-
-
-
-
-### Mint Parameters
-
-
-
-| Parameter | Details |
-|-----------|---------|
-| **Description** | Token inflation and minting schedule |
-| **Genesis Location** | `app_state.mint.params` |
-
-
-
-```bash expandable
-jq '.app_state.mint.params = {
- "mint_denom": "atoken",
- "inflation_rate_change": "0.130000000000000000",
- "inflation_max": "0.200000000000000000",
- "inflation_min": "0.070000000000000000",
- "goal_bonded": "0.670000000000000000",
- "blocks_per_year": "6311520"
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-
-
-**1. `mint_denom`** (string)
-- Must match your base denomination
-- Example: `"atoken"`
-
-**2. `inflation_max`** (decimal)
-- Maximum annual inflation rate
-- `"0.200000000000000000"` = 20% (Cosmos standard)
-
-**3. `inflation_min`** (decimal)
-- Minimum annual inflation rate
-- `"0.070000000000000000"` = 7% (Cosmos standard)
-
-**4. `goal_bonded`** (decimal)
-- Target bonded token ratio
-- `"0.670000000000000000"` = 67% (Cosmos standard)
-
-**5. `blocks_per_year`** (string)
-- Expected blocks per year
-- `"6311520"` = ~5 second blocks (Cosmos standard)
-- Adjust based on your block time
-
-**How inflation works:**
-- If bonded ratio < goal → inflation increases (toward max)
-- If bonded ratio > goal → inflation decreases (toward min)
-- Incentivizes target staking ratio
-
-
-
-
-
-### Distribution Parameters
-
-
-
-| Parameter | Details |
-|-----------|---------|
-| **Description** | Token / reward distribution including community tax and proposer rewards |
-| **Genesis Location** | `app_state.distribution.params` |
-
-
-
-```bash expandable
-jq '.app_state.distribution.params = {
- "community_tax": "0.020000000000000000",
- "base_proposer_reward": "0.000000000000000000",
- "bonus_proposer_reward": "0.000000000000000000",
- "withdraw_addr_enabled": true
-}' ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Note**: Proposer rewards (`base_proposer_reward` and `bonus_proposer_reward`) are deprecated in recent Cosmos SDK versions and should be set to `"0.000000000000000000"`.
-
-
-
-**1. `community_tax`** (decimal)
-- Percentage of rewards going to community pool
-- `"0.020000000000000000"` = 2% (standard)
-
-**2. `base_proposer_reward`** (decimal)
-- **Deprecated** - set to `"0.000000000000000000"`
-
-**3. `bonus_proposer_reward`** (decimal)
-- **Deprecated** - set to `"0.000000000000000000"`
-
-**4. `withdraw_addr_enabled`** (bool)
-- Allow setting custom withdraw addresses
-- `true` (recommended)
-
-
-
-
-
-### Initial Accounts and Validators
-
-
-
-| Overview | Details |
-|----------|---------|
-| **When** | After configuring all genesis parameters |
-| **Purpose** | Add initial accounts and collect validator gentxs |
-
-
-
-**Add accounts with initial balances:**
-
-```bash expandable
-# Add account by address
-yourchain genesis add-genesis-account \
- cosmos1abc123... \
- 1000000000000000000000atoken
-
-# Add account by key name from keyring
-yourchain genesis add-genesis-account \
- validator1 \
- 1000000000000000000000atoken \
- --keyring-backend test
-
-# Add multiple accounts
-yourchain genesis add-genesis-account validator1 1000000000000000000000atoken
-yourchain genesis add-genesis-account validator2 1000000000000000000000atoken
-yourchain genesis add-genesis-account faucet 10000000000000000000000atoken
-```
-
-**Verify accounts:**
-```bash expandable
-jq '.app_state.bank.balances' ~/.yourchain/config/genesis.json
-```
-
-
-
-**Workflow:**
-
-**1. Each validator creates their gentx:**
-```bash expandable
-yourchain genesis gentx validator1 \
- 1000000000000000000000atoken \
- --chain-id mychain-1 \
- --keyring-backend test \
- --moniker "Validator 1" \
- --commission-rate 0.1 \
- --commission-max-rate 0.2 \
- --commission-max-change-rate 0.01 \
- --min-self-delegation 1
-```
-
-**Output**: Creates `~/.yourchain/config/gentx/gentx-.json`
-
-**2. Validator shares gentx file:**
-```bash expandable
-cat ~/.yourchain/config/gentx/gentx-*.json
-```
-
-**3. Coordinator collects all gentxs:**
-```bash expandable
-# Create gentx directory
-mkdir -p ~/.yourchain/config/gentx/
-
-# Copy all received gentx files to this directory
-# (one file per validator)
-
-# Collect into genesis
-yourchain genesis collect-gentxs
-```
-
-**4. Verify:**
-```bash expandable
-yourchain genesis validate
-jq '.app_state.genutil.gen_txs | length' ~/.yourchain/config/genesis.json
-```
-
-
-
-**Final validation before distribution:**
-
-```bash expandable
-# Validate structure and parameters
-yourchain genesis validate
-```
-
-**What it checks:**
-- JSON structure is valid
-- All module genesis states valid
-- No denomination mismatches
-- Token supply consistent
-- Parameters within valid ranges
-- Gentxs are valid
-
-**Verify denomination consistency:**
-```bash expandable
-GENESIS=~/.yourchain/config/genesis.json
-
-jq '[
- .app_state.staking.params.bond_denom,
- .app_state.mint.params.mint_denom,
- .app_state.evm.params.evm_denom,
- .app_state.gov.params.min_deposit[0].denom,
- .app_state.bank.denom_metadata[0].base
-] | unique | length' $GENESIS
-```
-
-**Should output `1`** (all denoms match)
-
-**Check total supply:**
-```bash expandable
-jq '.app_state.bank.balances | map(.coins[0].amount | tonumber) | add' $GENESIS
-```
-
-**Check validator count:**
-```bash expandable
-jq '.app_state.genutil.gen_txs | length' $GENESIS
-```
-
-
-
-
-
-
-
-## Next Steps
-
-Your genesis file is now complete! Next:
-
-1. **Distribute Genesis File** to validators
-2. **Configure Runtime Settings**
-3. **Launch Network**
-
-Continue to [Runtime Configuration & Network Launch](/docs/evm/v0.5.0/documentation/getting-started/network-operators/node-configuration) for full details.
-
-
-
-## Quick Reference
-
-**See**: [Configuration Reference](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) for:
-- Command cheatsheets
-- Configuration examples
-- Default values table
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/quick-start.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/quick-start.mdx
index 35f41d2e..6319d914 100644
--- a/docs/evm/next/documentation/getting-started/build-a-chain/quick-start.mdx
+++ b/docs/evm/next/documentation/getting-started/build-a-chain/quick-start.mdx
@@ -1,173 +1,120 @@
---
-title: "Build A Custom EVM Chain"
-description: "Create your own blockchain by forking and customizing the Cosmos EVM reference chain (evmd). This guide covers the example chain configuration, running the chain locally, and understanding the foundation for building your custom network."
+title: "Quick Start: Build with evmd"
+description: "Get started building with the Cosmos EVM reference implementation (evmd). Run a local chain, configure parameters, and connect your wallet."
---
-# Example Cosmos EVM Chain
+# Quick Start with evmd
-The `evmd` directory in the Cosmos EVM repository contains an example chain that demonstrates the integration of Cosmos EVM modules. This reference implementation is based on the simapp implementation from the Cosmos SDK repository, which provides a simplified yet complete blockchain foundation.
+The `evmd` directory in the Cosmos EVM repository contains a reference chain implementation that demonstrates how to integrate Cosmos EVM modules. Use evmd as a starting point for understanding chain configuration and local development.
-This chain implementation serves two primary purposes:
-1. **Demonstration**: Shows how to integrate Cosmos EVM modules into a blockchain
-2. **Testing Foundation**: Provides a working chain for development and testing
+This quick start guide covers:
+1. **Running evmd locally** - Get a chain running quickly
+2. **Basic configuration** - Understand key parameters
+3. **Wallet connection** - Connect MetaMask for testing
-You can use evmd as the starting point for building your own custom chain.
+For detailed configuration options, see the [Chain Configuration Parameters](/docs/evm/next/documentation/getting-started/build-a-chain/configuration-parameters) guide.
-
## Prerequisites
-You'll need a standard Go development environment:
-
+Before starting, ensure you have:
- **Go 1.23.8+** - [Installation guide](https://go.dev/doc/install)
-- **Git** - For repository management
+- **Git** - For cloning the repository
- **Make** - For build commands
-- **GCC/Build Tools** - Required for CGo compilation
-
-
-If you're new to Go development, ensure your `$GOPATH/bin` is in your system PATH. Most package managers (Homebrew, apt, pacman) handle this automatically.
-
-
-## Building Your Custom Chain
-The `evmd` implementation serves as the foundation for building your own custom blockchain. To create your chain:
+## Clone the Repository
-
-
-Start by forking the Cosmos EVM repository:
+Start by cloning the Cosmos EVM repository:
```bash
git clone https://github.com/cosmos/evm.git
cd evm
```
-
-
-
-Rename the `evmd` directory and update all references:
-
-```bash
-# Rename directory
-mv evmd yourchain
-
-# Update imports and binary name
-find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
-```
-
-Update `go.mod` to reflect your repository path.
-
-
-Modify the default configuration in your chain:
+## Run a Local Chain
-- **Chain IDs**: Update Cosmos chain ID and EVM chain ID
-- **Bech32 Prefix**: Set your address prefix in `evmd/config/config.go`
-- **Token Denomination**: Configure in genesis
-- **Precompiles**: Enable only the precompiles you need
-- **Modules**: Add or remove modules based on requirements
-
-
-
-
-Use the local node script to test your changes:
+The easiest way to start is using the provided `local_node.sh` script:
```bash
./local_node.sh -y
```
-Verify that:
-- The chain starts successfully
-- JSON-RPC is accessible
-- Wallets can connect
-- Transactions work as expected
-
-
-
-Once testing is complete, prepare for testnet deployment:
-
-- Set up validator infrastructure
-- Configure persistent peers
-- Coordinate genesis with validators
-- Launch the network
+This script handles:
+- Building the `evmd` binary
+- Initializing chain configuration
+- Setting up genesis parameters
+- Starting the chain with JSON-RPC enabled
-
-
+
+**Script Flags**:
+- `-y`: Fresh start (overwrites previous database)
+- `-n`: Resume from previous state
+- `--no-install`: Skip binary rebuild
+- `--remote-debugging`: Build with debugging symbols
+
## Default Configuration
-The example chain (`evmd`) comes with the following default configuration:
+The evmd reference implementation comes with these defaults:
-| Option | Value | Description |
-|---------------------|------------------------|-------------|
-| **Binary** | `evmd` | The compiled chain binary name |
-| **Chain ID** | `cosmos_262144-1` | Default Cosmos chain ID (format: `name_evmChainID-version`) |
-| **EVM Chain ID** | `262144` | EVM chain ID for transaction replay protection |
-| **Custom Opcodes** | - | No custom opcodes by default |
-| **Token Pairs** | 1 (native token) | Default ERC20 token pair for the native denomination |
-| **Denomination** | `atest` | Native token denomination (18 decimals, atto-prefix) |
-| **EVM Permissioning** | Permissionless | Anyone can deploy and call contracts |
-| **Enabled Precompiles** | All | All nine static precompiles are enabled by default |
+| Parameter | Default Value | Configuration Method |
+|-----------|---------------|---------------------|
+| **Chain ID** | `cosmos_262144-1` | Genesis (set at init) |
+| **EVM Chain ID** | `262144` | CLI flag or app.toml |
+| **Base Denomination** | `aatom` (18 decimals) | Genesis |
+| **Token Pairs** | 1 (WEVMOS contract) | Genesis |
+| **Precompiles** | All 9 enabled | Genesis |
+| **EVM Permissions** | Permissionless | Genesis |
-The default configuration uses an 18-decimal token (`atest`) which provides direct EVM compatibility without requiring the precisebank module. This is the recommended setup for new chains.
+The default 18-decimal token (`aatom`) provides direct EVM compatibility without requiring additional modules.
-## Running The Chain
+## Customize Configuration
-To run the example chain locally, use the provided local node script from the repository root:
+To customize your chain configuration, you can modify several parameters:
+
+
```bash
-./local_node.sh [FLAGS]
-```
-
-### Available Flags
-
-- `-y`: Overwrite previous database (fresh start)
-- `-n`: Do **not** overwrite previous database (resume from previous state)
-- `--no-install`: Skip installation of the binary (use existing binary)
-- `--remote-debugging`: Build a binary suitable for remote debugging
-
-
-The `local_node.sh` script handles all the setup including:
-- Building the `evmd` binary
-- Initializing the chain configuration
-- Setting up genesis parameters
-- Starting the chain with JSON-RPC enabled
-
-
-### Example Usage
-
-
-```bash Fresh Start
-# Start with a clean slate
-./local_node.sh -y
+evmd init mynode --chain-id yourchain-1
```
+
-```bash Resume Previous State
-# Continue from where you left off
-./local_node.sh -n
-```
+
+Edit `~/.evmd/config/genesis.json` to set:
+- Token denomination
+- Token pairs
+- Precompiles
+- Access control permissions
+
-```bash Development Mode
-# Skip rebuild if binary already exists
-./local_node.sh --no-install
-```
+
+Edit `~/.evmd/config/app.toml` to set:
+- EVM Chain ID
+- JSON-RPC settings
+- API endpoints
+
-```bash Debug Mode
-# Build with debugging symbols
-./local_node.sh --remote-debugging
+
+```bash
+evmd start
```
-
+
+
-## Connect to Wallet
+
+For detailed configuration instructions, see [Chain Configuration Parameters](/docs/evm/next/documentation/getting-started/build-a-chain/configuration-parameters).
+
-Once the chain is running, you can connect using any Ethereum-compatible wallet. The example below uses MetaMask:
+## Connect MetaMask
-### MetaMask Setup
+Once your chain is running, connect a wallet for testing:
-Use the following seed phrase when adding a new wallet in MetaMask:
+Add a new wallet in MetaMask using this test seed phrase:
```
gesture inject test cycle original hollow east ridge hen combine
@@ -176,67 +123,83 @@ unhappy lunar seat
```
-**Notice**: This is a well-known test seed phrase. **Never** use it for mainnet or with real funds. It's provided solely for local development and testing purposes.
+This is a well-known test seed phrase. **Never** use it with real funds. For local development and testing only.
-1. Click the **Network** button on the top left of MetaMask
-2. Click **Add custom network** at the bottom of the modal
-3. Configure the network with these settings:
+Configure MetaMask with these settings:
| Setting | Value |
|---------|-------|
| **Network Name** | Cosmos EVM Local |
| **RPC URL** | `http://localhost:8545` |
| **Chain ID** | `262144` |
-| **Currency Symbol** | `TEST` |
-| **Block Explorer URL** | (leave empty for local) |
-
-
-Make sure your local chain is running before adding the network. The RPC URL must be accessible from your browser.
-
+| **Currency Symbol** | `ATOM` |
+| **Block Explorer URL** | (leave empty) |
After adding the network:
-- Switch to the "Cosmos EVM Local" network in MetaMask
-- You should see your account balance (if the test account was funded in genesis)
-- You can now interact with the chain through MetaMask
+- Switch to "Cosmos EVM Local" in MetaMask
+- You should see your account balance
+- You can now send transactions and interact with contracts
## Key Concepts
-Before diving into configuration, familiarize yourself with:
+### Precompiles
-**Precompiled Contracts** - [Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles) bridge EVM smart contracts with Cosmos SDK modules, enabling Solidity contracts to access staking, governance, IBC, and other native functionality.
+Precompiles are native Cosmos SDK functionality exposed as EVM contracts. The evmd reference implementation enables all 9 precompiles by default:
-**Cosmos SDK Modules** - Explore the [core modules](/docs/evm/next/documentation/cosmos-sdk) that provide blockchain functionality:
-- [Bank](https://docs.cosmos.network/main/build/modules/bank) - Token transfers and balances
-- [Staking](https://docs.cosmos.network/main/build/modules/staking) - Validator delegation and rewards
-- [Governance](https://docs.cosmos.network/main/build/modules/governance) - On-chain voting and proposals
-- [Slashing](https://docs.cosmos.network/main/build/modules/slashing) - Validator penalty enforcement
-- [Distribution](https://docs.cosmos.network/main/build/modules/distribution) - Fee and reward distribution
+- **P256** (`0x0100`) - Cryptographic operations
+- **Bech32** (`0x0400`) - Address conversion
+- **Staking** (`0x0800`) - Validator operations
+- **Distribution** (`0x0801`) - Reward distribution
+- **ICS20** (`0x0802`) - IBC transfers
+- **Vesting** (`0x0803`) - Vesting accounts
+- **Bank** (`0x0804`) - Token transfers
+- **Governance** (`0x0805`) - On-chain voting
+- **Slashing** (`0x0806`) - Validator slashing
+
+Learn more in the [Precompiles Overview](/docs/evm/next/documentation/smart-contracts/precompiles/overview).
+
+
+### Token Pairs
-## Configuration Guides
+The evmd implementation includes a default token pair that maps the native denomination (`aatom`) to an ERC20 contract (WEVMOS). This allows the native token to be used in EVM contracts.
-For detailed setup and configuration instructions, see the comprehensive guides in the Build Your Own Chain section.
+### 18-Decimal Tokens
+The evmd uses 18-decimal precision for direct EVM compatibility:
+- **Base denom**: `aatom` (atto-atom)
+- **Display denom**: `atom`
+- **Exponent**: 18 (1 atom = 10^18 aatom)
-### Recommended Reading
+This provides 1:1 mapping with Ethereum's wei system without requiring additional modules.
+
+## Next Steps
-
-EVM execution and parameter configuration
+
+Detailed guide to all configuration options
+
+
+
+Learn about available precompiled contracts
+
+
+
+EVM module documentation and parameters
-
-Available precompiled contracts and integration
+
+Token pair management and configuration
---
-For additional support and community resources, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
\ No newline at end of file
+For additional support, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm).
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/runtime-and-launch.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/runtime-and-launch.mdx
deleted file mode 100644
index 67d90a78..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/runtime-and-launch.mdx
+++ /dev/null
@@ -1,1211 +0,0 @@
----
-title: "Runtime Configuration & Network Launch"
-description: "Configure your validator and coordinate the network launch."
----
-
-This guide covers runtime configuration (`app.toml`, `config.toml`) and network launch procedures. Complete these steps after your genesis file is finalized.
-
-
-**Related Documentation:**
-- [Pre-Genesis & Genesis Setup](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) - Initial configuration and genesis preparation
-- [Configuration Reference](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) - Commands, examples, and quick reference
-
-
-## Overview
-
-Once you have your network configuation and genesis file ready, you can prepare to launch the network:
-
-1. **Configure Runtime Settings** - Set node-specific parameters in `app.toml` and `config.toml`
-2. **Distribute Genesis File** - Share the final genesis file with all validators
-3. **Launch Network** - Coordinate the chain start across all validators
-4. **Monitor and Maintain** - Ensure healthy network operation post-launch
-
-## Runtime Configuration
-
-Runtime configuration is set in config files located at `~/.yourchain/config/`. These settings can be changed after genesis and are node-specific.
-
-### Configuration Files
-
-Three main configuration files control your node's runtime behavior:
-
-- **`app.toml`** - Application settings including EVM parameters, JSON-RPC server, gas prices, and API endpoints. Changes require node restart.
-- **`config.toml`** - CometBFT (consensus) settings including P2P networking, consensus timeouts, and mempool configuration. Changes require node restart.
-- **`client.toml`** - CLI client defaults including chain-id, keyring backend, and output preferences. Changes take effect immediately.
-
-
-
-## app.toml Configuration
-
-Located at `~/.yourchain/config/app.toml`, this file controls application-level settings.
-
-### Minimum Gas Prices
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Node-level minimum gas price to accept transactions into mempool |
-| **File** | `app.toml` |
-| **Section** | Root level |
-| **Type** | String |
-| **Format** | `` |
-| **Default** | `"0aatom"` |
-| **Adjustable** | Per Node (requires restart) |
-| **Source** | [`server/config/migration/v0.50-app.toml:11`](https://github.com/cosmos/evm/blob/main/server/config/migration/v0.50-app.toml#L11) |
-| **Why Configure** | Protect against spam and ensure validators can cover operational costs |
-
-
-
-Edit `app.toml`:
-
-```toml
-# Minimum gas prices for the node to accept transactions
-minimum-gas-prices = "1000000000atoken"
-```
-
-**Format**: ``
-
-**Examples:**
-- `"1000000000atoken"` = 1 gwei
-- `"500000000atoken"` = 0.5 gwei
-- `"0atoken"` = accept all transactions (not recommended)
-
-**How it works:**
-- Node rejects transactions with gas price below this value
-- Protects against spam
-- Should align with genesis fee market `min_gas_price`
-
-
-
-**For 18-decimal tokens:**
-```toml
-minimum-gas-prices = "1000000000atoken" # 1 gwei
-```
-
-**For 6-decimal tokens:**
-```toml
-minimum-gas-prices = "1000utoken" # 0.001 token
-```
-
-**Testing/Development:**
-```toml
-minimum-gas-prices = "0atoken" # Accept all (not for production)
-```
-
-**Production:**
-- Set to at least expected minimum to prevent mempool spam
-- Can be higher than network minimum
-- Each validator can set their own value
-
-
-
-
-
-### JSON-RPC Configuration
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Ethereum-compatible RPC endpoints for EVM interactions |
-| **File** | `app.toml` |
-| **Section** | `[json-rpc]` |
-| **Type** | Object containing multiple JSON-RPC configuration parameters |
-| **Default Ports** | `8545` (HTTP), `8546` (WebSocket) |
-| **Default Address** | `127.0.0.1:8545` (HTTP), `127.0.0.1:8546` (WebSocket) |
-| **Adjustable** | Per Node (requires restart) |
-| **Source** | [`server/config/config.go:236-310`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L236) |
-| **Why Configure** | Control API exposure, security settings, and performance limits |
-
-
-
-```toml expandable
-[json-rpc]
-# Enable JSON-RPC server
-enable = true
-
-# HTTP server address
-# Use 127.0.0.1 for localhost only, 0.0.0.0 for public access
-address = "0.0.0.0:8545"
-
-# WebSocket server address
-ws-address = "0.0.0.0:8546"
-
-# API namespaces to enable
-api = ["eth", "net", "web3", "txpool"]
-
-# Gas cap for eth_call and eth_estimateGas
-gas-cap = 25000000
-
-# EVM execution timeout
-evm-timeout = "5s"
-
-# Transaction fee cap (in native token units)
-txfee-cap = 1.0
-
-# Maximum number of logs returned
-logs-cap = 10000
-
-# Maximum block range for queries
-block-range-cap = 10000
-
-# HTTP request timeout
-http-timeout = "30s"
-
-# HTTP idle timeout
-http-idle-timeout = "2m0s"
-
-# Allow unprotected transactions (only for development)
-allow-unprotected-txs = false
-
-# Maximum open connections (0 = unlimited)
-max-open-connections = 0
-
-# Enable indexer for historical queries
-enable-indexer = false
-```
-
-
-
-**Available Namespaces:**
-
-| Namespace | Purpose | Production Use |
-|---|---|---|
-| `eth` | Standard Ethereum RPC | ✅ Required |
-| `net` | Network information | ✅ Recommended |
-| `web3` | Web3 client version | ✅ Recommended |
-| `txpool` | Transaction pool inspection | ⚠️ Caution |
-| `debug` | Debug/trace endpoints | ❌ Dev only |
-
-**Production configuration:**
-```toml
-api = ["eth", "net", "web3"]
-```
-
-**Development configuration:**
-```toml
-api = ["eth", "net", "web3", "txpool", "debug"]
-```
-
-**Note**: The `debug` namespace can expose sensitive information and cause performance issues. Only enable for development.
-
-
-
-**For public RPC nodes:**
-
-```toml expandable
-# Bind to localhost only
-address = "127.0.0.1:8545"
-ws-address = "127.0.0.1:8546"
-
-# Disable unprotected transactions
-allow-unprotected-txs = false
-
-# Limit connections
-max-open-connections = 100
-
-# Disable debug APIs
-api = ["eth", "net", "web3"]
-
-# Set reasonable caps
-gas-cap = 25000000
-logs-cap = 10000
-block-range-cap = 10000
-```
-
-**Security recommendations:**
-1. Use reverse proxy (nginx, traefik) for public access
-2. Implement rate limiting at proxy level
-3. Enable TLS/HTTPS
-4. Monitor for abuse
-5. Consider DDoS protection
-
-
-
-**Default Port**: `8545` (HTTP), `8546` (WebSocket)
-
-
-
-### EVM Configuration
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | EVM module settings including chain ID, tracer, and gas limits |
-| **File** | `app.toml` |
-| **Section** | `[evm]` |
-| **Type** | Object containing multiple EVM configuration parameters |
-| **Default** | Chain ID from config, no tracing, unlimited gas per tx |
-| **Adjustable** | Per Node (requires restart); `evm-chain-id` is read-only |
-| **Source** | [`server/config/config.go:56-149`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L56) |
-| **Why Configure** | Debug transactions, limit gas usage, control EVM behavior |
-
-
-
-
-```toml expandable
-[evm]
-# EVM chain ID (set during init from config/config.go)
-# Do not modify - change in source code before init
-evm-chain-id = 262144
-
-# Tracer type for debugging
-tracer = ""
-
-# Maximum gas limit for individual transactions
-# 0 = unlimited
-max-tx-gas-wanted = 0
-
-# Cache preimages for historical queries
-cache-preimage = false
-
-# Minimum tip (priority fee) required
-min-tip = 0
-```
-
-
-
-**1. `evm-chain-id`** (uint64) - **Read-only**
-- Automatically written during `yourchain init`
-- Value from `config/config.go:78`
-- Do not modify in app.toml
-- To change: Edit source code and rebuild before init
-
-**2. `tracer`** (string)
-- Options: `"json"`, `"markdown"`, `"struct"`, `""`
-- `"json"`: Detailed traces for debugging
-- `""`: No tracing (production recommended)
-
-**3. `max-tx-gas-wanted`** (uint64)
-- `0`: Unlimited (default)
-- `30000000`: Example limit per transaction
-- Protects against excessive gas usage
-
-**4. `min-tip`** (uint64)
-- Minimum priority fee in wei
-- `0`: Accept all transactions
-- `1000000000`: Require at least 1 gwei tip
-
-
-
-
-
-### EVM Mempool Configuration
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Transaction pool behavior including price limits, queue sizes, and lifetime |
-| **File** | `app.toml` |
-| **Section** | `[evm.mempool]` |
-| **Type** | Object containing mempool configuration parameters |
-| **Default** | 1 wei price limit, 5120 global slots, 3 hour lifetime |
-| **Adjustable** | Per Node (requires restart) |
-| **Source** | [`server/config/config.go:158-187`](https://github.com/cosmos/evm/blob/main/server/config/config.go#L158-L187) |
-| **Why Configure** | Optimize mempool capacity, prevent spam, manage transaction lifetime |
-
-
-**New in v0.5.0**: Mempool configuration is now fully exposed in `app.toml` and can be adjusted without code changes.
-
-
-
-
-
-```toml expandable
-[evm.mempool]
-# Minimum gas price to accept into pool (in wei)
-price-limit = 1
-
-# Minimum price bump % to replace existing transaction
-price-bump = 10
-
-# Executable transaction slots guaranteed per account
-account-slots = 16
-
-# Maximum executable slots for all accounts
-global-slots = 5120
-
-# Non-executable slots per account
-account-queue = 64
-
-# Non-executable slots for all accounts
-global-queue = 1024
-
-# Maximum time non-executable transactions stay queued
-lifetime = "3h0m0s"
-```
-
-
-
-**1. `price-limit`** (uint64, wei)
-- Minimum gas price to accept into mempool
-- Default: `1` wei
-- Example: `1000000000` = reject txs below 1 gwei
-
-**2. `price-bump`** (uint64, percentage)
-- Minimum % increase to replace transaction with same nonce
-- Default: `10` (10%)
-- Example: `20` = require 20% higher gas price
-
-**3. `account-slots`** (uint64)
-- Guaranteed executable slots per account
-- Default: `16`
-- Higher = more pending txs per account
-
-**4. `global-slots`** (uint64)
-- Total executable slots across all accounts
-- Default: `5120`
-- Higher = larger mempool capacity
-
-**5. `account-queue`** (uint64)
-- Queued (non-executable) slots per account
-- Default: `64`
-- For transactions with gaps in nonce sequence
-
-**6. `global-queue`** (uint64)
-- Total queued slots across all accounts
-- Default: `1024`
-
-**7. `lifetime`** (duration)
-- Maximum time transaction stays in mempool
-- Default: `"3h0m0s"` (3 hours)
-- Format: Go duration (e.g., `"1h30m"`, `"24h0m0s"`)
-
-
-
-**Source**: [server/config/config.go:158-187](https://github.com/cosmos/evm/blob/main/server/config/config.go#L158-L187)
-
-
-**Advanced Mempool Configuration**: For detailed information on integrating the EVM mempool, see the [EVM Mempool Integration](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/additional-configuration/mempool-integration) guide.
-
-
-
-
-## config.toml Configuration
-
-Located at `~/.yourchain/config/config.toml`, this file controls CometBFT (consensus layer) settings.
-
-### Persistent Peers
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | List of nodes to maintain persistent connections to |
-| **File** | `config.toml` |
-| **Section** | `[p2p]` |
-| **Type** | String (comma-separated list) |
-| **Format** | `node_id@ip:port,node_id2@ip:port` |
-| **Default** | `""` (empty - no persistent peers) |
-| **Default Port** | `26656` |
-| **Adjustable** | Per Node (requires restart) |
-| **Why Configure** | Ensure validators stay connected to the network |
-
-
-
-Edit `config.toml`:
-
-```toml
-[p2p]
-# Comma separated list of nodes to keep persistent connections to
-persistent_peers = "node_id@ip:port,node_id2@ip:port"
-```
-
-**Example:**
-```toml
-persistent_peers = "7c90e16cca334eb7@192.168.1.100:26656,abc123def456@192.168.1.101:26656"
-```
-
-
-
-**Each validator runs:**
-```bash
-yourchain comet show-node-id
-```
-
-**Output**: `7c90e16cca334eb7259754f964918d879ca54996`
-
-**Share format:**
-- **Node ID**: `7c90e16cca334eb7259754f964918d879ca54996`
-- **Public IP**: `192.168.1.100`
-- **P2P Port**: `26656` (default)
-- **Connection string**: `7c90e16cca334eb7@192.168.1.100:26656`
-
-
-
-Create a coordination sheet for validators:
-
-| Validator | Node ID | IP Address | P2P Port | Connection String |
-|---|---|---|---|---|
-| Validator 1 | `7c90e16c...` | 192.168.1.100 | 26656 | `7c90e16c@192.168.1.100:26656` |
-| Validator 2 | `abc123de...` | 192.168.1.101 | 26656 | `abc123de@192.168.1.101:26656` |
-| Validator 3 | `def456ab...` | 192.168.1.102 | 26656 | `def456ab@192.168.1.102:26656` |
-
-**Each validator updates their `persistent_peers` with all other validators.**
-
-
-
-**Verification:**
-```bash
-# Check connected peers
-curl localhost:26657/net_info | jq '.result.peers'
-```
-
-**Default P2P Port**: `26656`
-
-
-
-### Consensus Timeouts
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Timing parameters for consensus protocol |
-| **File** | `config.toml` |
-| **Section** | `[consensus]` |
-| **Type** | Duration strings |
-| **Default** | `"5s"` commit timeout (determines block time) |
-| **Adjustable** | Per Node (requires restart) |
-| **Why Configure** | Adjust block time, optimize for network conditions |
-
-
-
-**Default values**:
-
-```toml expandable
-[consensus]
-timeout_propose = "3s"
-timeout_propose_delta = "500ms"
-timeout_prevote = "1s"
-timeout_prevote_delta = "500ms"
-timeout_precommit = "1s"
-timeout_precommit_delta = "500ms"
-timeout_commit = "5s"
-```
-
-Typically you do not need to adjust these.
-
-
-
-Faster block times for local development or testing:
-
-```toml expandable
-[consensus]
-timeout_propose = "2s"
-timeout_propose_delta = "200ms"
-timeout_prevote = "500ms"
-timeout_prevote_delta = "200ms"
-timeout_precommit = "500ms"
-timeout_precommit_delta = "200ms"
-timeout_commit = "1s"
-```
-
-These are the parameters used in `./local_node.sh`.
-
-
-
-**Consensus Phases:**
-1. **Propose**: Block proposer broadcasts new block
-2. **Prevote**: Validators vote on proposed block
-3. **Precommit**: Validators commit to block
-4. **Commit**: Block is finalized
-
-**Timeout Parameters:**
-- `timeout_propose`: Time for proposer to broadcast block
-- `timeout_prevote`: Time to collect prevotes
-- `timeout_precommit`: Time to collect precommits
-- `timeout_commit`: Target block time
-- `*_delta`: Incremental increase per round
-
-**Trade-offs:**
-- Shorter timeouts = faster blocks, but higher chance of timeouts on slow networks
-- Longer timeouts = more robust on slow networks, but slower blocks
-
-
-
-
-
-### Prometheus Metrics
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Enable metrics collection for monitoring |
-| **File** | `config.toml` |
-| **Section** | `[instrumentation]` |
-| **Type** | Boolean + String (address) |
-| **Default** | `false` (disabled), port `26660` |
-| **Adjustable** | Per Node (requires restart) |
-| **Why Configure** | Monitor node health, track performance metrics |
-
-```toml
-[instrumentation]
-# Enable Prometheus metrics
-prometheus = true
-
-# Prometheus listen address
-prometheus_listen_addr = ":26660"
-```
-
-**Access metrics:**
-```bash
-curl http://localhost:26660/metrics
-```
-
-Enable for production to monitor node and overall network health.
-
-
-
-## client.toml Configuration
-
-Located at `~/.yourchain/config/client.toml`, this file configures client behavior.
-
-### Set Client Chain ID
-
-
-
-| Attribute | Value |
-|-----------|-------|
-| **Description** | Chain ID for CLI client operations |
-| **File** | `client.toml` |
-| **Section** | Root level |
-| **Type** | String |
-| **Default** | `""` (empty - must be set manually) |
-| **Adjustable** | Per Node (takes effect immediately) |
-| **Why Configure** | Required for node startup - must match genesis chain ID |
-
-
-The node reads `chain-id` from `client.toml` at startup. If this doesn't match `genesis.json`, the node will fail to start.
-
-
-
-
-```bash
-yourchain config set client chain-id mychain-1 --home ~/.yourchain
-```
-
-**Or edit `client.toml` directly:**
-```toml
-chain-id = "mychain-1"
-```
-
-
-
-**Other client settings:**
-```toml expandable
-# Keyring backend - This can be changed to "file", or "test" to create additional keys in different formats.
-# "Test" creates an UNSAFE key that requires no password to submit txs for quicker iteration when testing.
-keyring-backend = "os"
-
-# Output format
-output = "text"
-
-# Node RPC address - This can be changed to a public endpoint to use the light client without syncing the full node.
-node = "tcp://localhost:26657"
-
-# Broadcast mode
-broadcast-mode = "sync"
-```
-
-
-
-## Network Launch
-
-After all validators have configured their nodes, coordinate the network launch.
-
-### Pre-Launch Checklist
-
-
-
-
-
-- All genesis parameters configured
-- Genesis validation passes
-- Genesis accounts and validators added
-- Genesis time set for future launch
-
-
-
-- Share final genesis file with all validators
-- All validators verify genesis hash matches
-- No modifications allowed after distribution
-
-
-
-- All validators configure `app.toml`
-- All validators configure `config.toml`
-- All validators set `client.toml` chain-id
-- Persistent peers exchanged
-
-
-
-- Validators verify binary version
-- Validators test node starts without errors
-- Network connectivity verified
-- Monitoring systems ready
-
-
-
-
-
-### Distribute Genesis File
-
-
-
-After finalizing your genesis file, distribute it to all validators.
-
-
-
-**Recommended for public networks:**
-
-```bash expandable
-# Coordinator creates release
-gh release create v1.0.0-genesis \
- ~/.yourchain/config/genesis.json \
- --title "Genesis File" \
- --notes "Official genesis file for mychain-1"
-
-# Validators download
-wget https://github.com/yourorg/yourchain/releases/download/v1.0.0-genesis/genesis.json \
- -O ~/.yourchain/config/genesis.json
-```
-
-
-
-**Recommended for decentralization:**
-
-```bash
-# Coordinator uploads
-ipfs add ~/.yourchain/config/genesis.json
-# Returns: QmXyz123...
-
-# Validators download
-ipfs get QmXyz123... -o ~/.yourchain/config/genesis.json
-```
-
-
-
-
-
-### Verify Genesis Hash
-
-
-
-**Critical**: All validators must verify they have the identical genesis file.
-
-
-
-**Each validator runs:**
-
-```bash
-jq -S -c . ~/.yourchain/config/genesis.json | shasum -a 256
-```
-
-**Example output:**
-```
-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6 -
-```
-
-
-
-**1. Coordinator publishes canonical hash:**
-```bash
-# Generate and save hash
-jq -S -c . ~/.yourchain/config/genesis.json | shasum -a 256 > genesis_hash.txt
-
-# Publish hash via official channel
-cat genesis_hash.txt
-```
-
-**2. All validators verify:**
-```bash
-# Each validator generates hash
-jq -S -c . ~/.yourchain/config/genesis.json | shasum -a 256
-
-# Compare with published hash
-```
-
-**3. All validators confirm:**
-- Report matching hash on official communication channel
-- Proceed only when all validators confirm
-
-
-
-
-
-### Exchange Peer Information
-
-
-
-Validators need each other's peer information to connect.
-
-
-
-**Each validator provides:**
-
-```bash expandable
-# Get node ID
-yourchain comet show-node-id
-# Output: 7c90e16cca334eb7259754f964918d879ca54996
-
-# Share:
-# - Node ID: 7c90e16cca334eb7259754f964918d879ca54996
-# - Public IP: 192.168.1.100
-# - P2P Port: 26656 (default)
-```
-
-**Format for sharing:**
-```
-7c90e16cca334eb7259754f964918d879ca54996@192.168.1.100:26656
-```
-
-
-
-**Each validator updates `config.toml`:**
-
-```bash
-# Edit ~/.yourchain/config/config.toml
-# Add all other validators to persistent_peers
-
-[p2p]
-persistent_peers = "7c90e16c@192.168.1.100:26656,abc123de@192.168.1.101:26656,def456ab@192.168.1.102:26656"
-```
-
-**Remove your own node ID** from the list (nodes don't connect to themselves).
-
-
-
-**After starting nodes, verify connectivity:**
-
-```bash
-# Check number of connected peers
-curl localhost:26657/net_info | jq '.result.n_peers'
-
-# List connected peers
-curl localhost:26657/net_info | jq '.result.peers[].node_info.moniker'
-
-# Check peer details
-curl localhost:26657/net_info | jq '.result.peers'
-```
-
-**Expected**: Each validator should connect to all other validators.
-
-
-
-
-
-### Coordinate Launch Time
-
-
-
-Set and coordinate the exact launch time across all validators.
-
-
-
-**Coordinator sets future genesis time:**
-
-```bash
-jq '.genesis_time = "2024-12-01T00:00:00Z"' \
- ~/.yourchain/config/genesis.json > tmp && mv tmp ~/.yourchain/config/genesis.json
-```
-
-**Timing recommendations:**
-- **Testnet**: 1-2 hours ahead (allows validator setup)
-- **Mainnet**: 24-48 hours ahead (allows thorough preparation)
-- **Local dev**: Past time (starts immediately)
-
-
-
-**Example launch timeline:**
-
-```
-T-48h: Announce genesis time to all validators
-T-24h: Distribute final genesis file
-T-4h: Validators complete configuration
-T-2h: All validators verify genesis hash
-T-1h: Validators start nodes (wait for genesis time)
-T-30m: Monitor validator connections
-T-0: Genesis time - network starts automatically
-T+10m: Verify all validators online and signing
-T+1h: Monitor network health
-```
-
-
-
-**Validators start early:**
-
-```bash
-# Start node before genesis time
-yourchain start
-
-# Node output while waiting:
-Genesis time is in the future. Waiting...
-Time until genesis: 29m 45s
-...
-
-# At genesis time:
-Starting consensus...
-INF finalizing commit of block hash=ABC123... height=1
-INF finalizing commit of block hash=DEF456... height=2
-```
-
-**Network automatically begins** when genesis time is reached.
-
-
-
-
-
-### Start Validator Nodes
-
-
-
-After configuration and coordination, start the nodes.
-
-
-
-
-```bash expandable
-# Standard startup
-yourchain start
-
-# With log level
-yourchain start --log_level info
-
-# In background with systemd (recommended)
-sudo systemctl start yourchain
-
-# In background with nohup
-nohup yourchain start > yourchain.log 2>&1 &
-```
-
-
-
-
-```bash
-# Follow logs
-yourchain start 2>&1 | grep "finalizing commit"
-
-# Expected output:
-INF finalizing commit of block hash=ABC123... height=1 module=consensus
-INF finalizing commit of block hash=DEF456... height=2 module=consensus
-INF finalizing commit of block hash=GHI789... height=3 module=consensus
-```
-
-**Healthy signs:**
-- Block height increasing
-- No error messages
-- Blocks finalizing every ~5-8 seconds
-
-
-
-**Create service file** at `/etc/systemd/system/yourchain.service`:
-
-```ini expandable
-[Unit]
-Description=Cosmos EVM Chain
-After=network-online.target
-
-[Service]
-User=yourchain
-ExecStart=/usr/local/bin/yourchain start --home /home/yourchain/.yourchain
-Restart=on-failure
-RestartSec=3
-LimitNOFILE=4096
-
-[Install]
-WantedBy=multi-user.target
-```
-
-**Enable and start:**
-
-```bash expandable
-sudo systemctl enable yourchain
-sudo systemctl start yourchain
-
-# Check status
-sudo systemctl status yourchain
-
-# View logs
-sudo journalctl -fu yourchain -ocat
-```
-
-
-
-
-
-### Verify Network Health
-
-
-
-After launch, verify the network is operating correctly.
-
-
-
-**Check block height increasing:**
-
-```bash
-# Via CometBFT RPC
-curl localhost:26657/status | jq '.result.sync_info.latest_block_height'
-
-# Via EVM RPC
-curl http://localhost:8545 \
- -X POST \
- -H "Content-Type: application/json" \
- -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
-```
-
-**Should see:** Block height increasing over time.
-
-
-
-**Check validator set:**
-
-```bash
-# Number of validators
-curl localhost:26657/validators | jq '.result.validators | length'
-
-# List validators
-curl localhost:26657/validators | jq '.result.validators[].address'
-
-# Check voting power
-curl localhost:26657/validators | \
- jq '[.result.validators[].voting_power | tonumber] | add'
-```
-
-**Should see:** All expected validators present and voting.
-
-
-
-**Check peers:**
-
-```bash
-# Number of connected peers
-curl localhost:26657/net_info | jq '.result.n_peers'
-
-# List connected peers
-curl localhost:26657/net_info | jq '.result.peers[].node_info.moniker'
-```
-
-**Should see:** Connected to expected number of peers.
-
-
-
-**CometBFT health:**
-
-```bash
-curl localhost:26657/health
-# Returns: {} (empty object = healthy)
-```
-
-**Node status:**
-```bash
-curl localhost:26657/status | jq '.result'
-```
-
-**Shows:**
-- Node info
-- Sync status
-- Latest block info
-- Validator info
-
-
-
-**Test JSON-RPC:**
-
-```bash expandable
-# Check chain ID
-curl http://localhost:8545 \
- -X POST \
- -H "Content-Type: application/json" \
- -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
-
-# Get latest block
-curl http://localhost:8545 \
- -X POST \
- -H "Content-Type: application/json" \
- -d '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false],"id":1}'
-
-# Check gas price
-curl http://localhost:8545 \
- -X POST \
- -H "Content-Type: application/json" \
- -d '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":1}'
-```
-
-**Should see:** Valid JSON responses with expected data.
-
-
-
-
-
-## Post-Launch Operations
-
-After successful launch, maintain healthy network operation.
-
-### Validator Operations
-
-
-
-
-
-**If validator gets jailed for downtime:**
-
-```bash
-# Check if jailed
-yourchain query staking validator $(yourchain keys show validator --bech val -a)
-
-# Unjail
-yourchain tx slashing unjail \
- --from validator \
- --chain-id mychain-1 \
- --fees 1000000000000000000atoken
-```
-
-
-
-**Update validator information:**
-
-```bash
-yourchain tx staking edit-validator \
- --moniker "New Moniker" \
- --website "https://example.com" \
- --identity "keybase-id" \
- --details "Description" \
- --commission-rate 0.05 \
- --from validator \
- --chain-id mychain-1
-```
-
-
-
-**Track validator performance:**
-
-```bash
-# Check signing info
-yourchain query slashing signing-info $(yourchain comet show-validator)
-
-# Check delegations
-yourchain query staking validator $(yourchain keys show validator --bech val -a)
-
-# Check rewards
-yourchain query distribution validator-outstanding-rewards \
- $(yourchain keys show validator --bech val -a)
-```
-
-
-
-
-
-### Monitoring and Alerting
-
-
-
-
-
-**Monitor these metrics:**
-
-1. **Block height** - Should increase steadily
-2. **Peer count** - Should maintain connections
-3. **Validator signing** - Should sign every block
-4. **Memory/CPU usage** - Should be stable
-5. **Disk space** - Should have adequate free space
-
-**Prometheus metrics** available at `http://localhost:26660/metrics`
-
-
-
-**Chain not producing blocks:**
-- Check >= 2/3 voting power online
-- Verify network connectivity
-- Check validator logs for errors
-
-**Node out of sync:**
-- May need to resync from genesis
-- Or use state sync (if configured)
-- Check peer connections
-
-**High memory usage:**
-- Check mempool size
-- Monitor for transaction spam
-- May need to adjust `app.toml` settings
-
-**Validator missing blocks:**
-- Check node is running
-- Verify network connectivity
-- Check slashing params
-
-
-
-
-
-### Backup and Recovery
-
-
-
-
-
-**What to backup:**
-
-```bash
-# Validator private key
-cp ~/.yourchain/config/priv_validator_key.json /secure/backup/
-
-# Node key
-cp ~/.yourchain/config/node_key.json /secure/backup/
-
-# Genesis file
-cp ~/.yourchain/config/genesis.json /secure/backup/
-```
-
-**Store securely:**
-- Encrypted storage
-- Multiple locations
-- Offline backups
-- Access controls
-
-
-
-**If validator node fails:**
-
-1. **Restore on new hardware:**
-
-
-**IMPORTANT**
-Never run two validators with same private key simultaneously (double-sign risk). Before putting your keys onto another running node make sure there is _absolutely no chance_ of the previous one starting back up.
-
-
-```bash
-# Install binary
-# Copy priv_validator_key.json
-# Copy node_key.json
-# Copy genesis.json
-# Sync blockchain data
-```
-
-2. **Sync options:**
-- Full sync from genesis or snapshot (slow, not recommended in this case)
-- State sync from snapshot (fast)
-- Copy data directory from backup or additional node (if available)
-
-3. **Restart validator:**
-```bash
-yourchain start
-```
-
-
-
-
-
-
-## Next Steps
-
-Your chain should now be launched and operational! If not, start the process over from the beginning, or [contact us](https://cosmos.network/contact)!
-
-**Further resources:**
-- [Configuration Reference](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start) - Complete command reference and examples
-- [VM Module Documentation](/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/vm) - EVM configuration details
-- [Cosmos SDK Documentation](https://docs.cosmos.network) - General Cosmos SDK operations
diff --git a/docs/evm/next/documentation/getting-started/build-a-chain/using-local-node.mdx b/docs/evm/next/documentation/getting-started/build-a-chain/using-local-node.mdx
deleted file mode 100644
index 3d4749fc..00000000
--- a/docs/evm/next/documentation/getting-started/build-a-chain/using-local-node.mdx
+++ /dev/null
@@ -1,270 +0,0 @@
----
-title: "Using the Local Node"
-description: "Learn how to run your Cosmos EVM chain locally for development and testing. This guide covers the local_node.sh script, configuration options, wallet connections, and key management."
----
-
-# Example Cosmos EVM Chain
-
-The `evmd` directory in the Cosmos EVM repository contains an example chain that demonstrates the integration of Cosmos EVM modules. This reference implementation is based on the simapp implementation from the Cosmos SDK repository, which provides a simplified yet complete blockchain foundation.
-
-
-This chain implementation serves two primary purposes:
-1. **Demonstration**: Shows how to integrate Cosmos EVM modules into a blockchain
-2. **Testing Foundation**: Provides a working chain for development and testing
-
-You can use evmd as the starting point for building your own custom chain.
-
-
-## Why Cosmos-EVM?
-
-In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules.
-
-Because this example is actively developed and maintained alongside the module itself and serves as the canonical reference implementation, it is the perfect starting point to modify and customize into your own EVM-compatible chain.
-One of the largest benefits is the simplicity and time saved. Rather than researching and going through the trial and error process of assembling components individually and figuring out what works, simply fork `evmd` and customize it to your needs.
-This approach lets engineers focus on what makes your chain unique rather than debugging basic integration issues.
-
-## Prerequisites
-
-You'll need a standard Go development environment:
-
-- **Go 1.23.8+** - [Installation guide](https://go.dev/doc/install)
-- **Git** - For repository management
-- **Make** - For build commands
-- **GCC/Build Tools** - Required for CGo compilation
-
-
-If you're new to Go development, ensure your `$GOPATH/bin` is in your system PATH. Most package managers (Homebrew, apt, pacman) handle this automatically.
-
-
-## Building Your Custom Chain
-
-The `evmd` implementation serves as the foundation for building your own custom blockchain. To create your chain:
-
-
-
-Start by forking the Cosmos EVM repository:
-
-```bash
-git clone https://github.com/cosmos/evm.git
-cd evm
-```
-
-
-
-Rename the `evmd` directory and update all references:
-
-```bash
-# Rename directory
-mv evmd yourchain
-
-# Update imports and binary name
-find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
-```
-
-Update `go.mod` to reflect your repository path.
-
-
-
-Modify the default configuration in your chain:
-
-- **Chain IDs**: Update Cosmos chain ID and EVM chain ID
-- **Bech32 Prefix**: Set your address prefix in `evmd/config/config.go`
-- **Token Denomination**: Configure in genesis
-- **Precompiles**: Enable only the precompiles you need
-- **Modules**: Add or remove modules based on requirements
-
-
-
-
-Use the local node script to test your changes:
-
-```bash
-./local_node.sh -y
-```
-
-Verify that:
-- The chain starts successfully
-- JSON-RPC is accessible
-- Wallets can connect
-- Transactions work as expected
-
-
-
-Once testing is complete, prepare for testnet deployment:
-
-- Set up validator infrastructure
-- Configure persistent peers
-- Coordinate genesis with validators
-- Launch the network
-
-
-
-
-## Default Configuration
-
-The example chain (`evmd`) comes with the following default configuration:
-
-| Option | Value | Description |
-|---------------------|------------------------|-------------|
-| **Binary** | `evmd` | The compiled chain binary name |
-| **Chain ID** | `cosmos_262144-1` | Default Cosmos chain ID (format: `name_evmChainID-version`) |
-| **EVM Chain ID** | `262144` | EVM chain ID for transaction replay protection |
-| **Custom Opcodes** | - | No custom opcodes by default |
-| **Token Pairs** | 1 (native token) | Default ERC20 token pair for the native denomination |
-| **Denomination** | `atest` | Native token denomination (18 decimals, atto-prefix) |
-| **EVM Permissioning** | Permissionless | Anyone can deploy and call contracts |
-| **Enabled Precompiles** | All | All nine static precompiles are enabled by default |
-
-
-The default configuration uses an 18-decimal token (`atest`) which provides direct EVM compatibility without requiring the precisebank module. This is the recommended setup for new chains.
-
-
-## Running The Chain
-
-To run the example chain locally, use the provided local node script from the repository root:
-
-```bash
-./local_node.sh [FLAGS]
-```
-
-### Available Flags
-
-- `-y`: Overwrite previous database (fresh start)
-- `-n`: Do **not** overwrite previous database (resume from previous state)
-- `--no-install`: Skip installation of the binary (use existing binary)
-- `--remote-debugging`: Build a binary suitable for remote debugging
-
-
-The `local_node.sh` script handles all the setup including:
-- Building the `evmd` binary
-- Initializing the chain configuration
-- Setting up genesis parameters
-- Starting the chain with JSON-RPC enabled
-
-
-### Example Usage
-
-
-```bash Fresh Start
-# Start with a clean slate
-./local_node.sh -y
-```
-
-```bash Resume Previous State
-# Continue from where you left off
-./local_node.sh -n
-```
-
-```bash Development Mode
-# Skip rebuild if binary already exists
-./local_node.sh --no-install
-```
-
-```bash Debug Mode
-# Build with debugging symbols
-./local_node.sh --remote-debugging
-```
-
-
-## Connect to Wallet
-
-Once the chain is running, you can connect using any Ethereum-compatible wallet. The example below uses MetaMask:
-
-### MetaMask Setup
-
-
-
-Use the following seed phrase when adding a new wallet in MetaMask:
-
-```
-gesture inject test cycle original hollow east ridge hen combine
-junk child bacon zero hope comfort vacuum milk pitch cage oppose
-unhappy lunar seat
-```
-
-
-**Notice**: This is a well-known test seed phrase. **Never** use it for mainnet or with real funds. It's provided solely for local development and testing purposes.
-
-
-
-
-1. Click the **Network** button on the top left of MetaMask
-2. Click **Add custom network** at the bottom of the modal
-3. Configure the network with these settings:
-
-| Setting | Value |
-|---------|-------|
-| **Network Name** | Cosmos EVM Local |
-| **RPC URL** | `http://localhost:8545` |
-| **Chain ID** | `262144` |
-| **Currency Symbol** | `TEST` |
-| **Block Explorer URL** | (leave empty for local) |
-
-
-Make sure your local chain is running before adding the network. The RPC URL must be accessible from your browser.
-
-
-
-
-After adding the network:
-- Switch to the "Cosmos EVM Local" network in MetaMask
-- You should see your account balance (if the test account was funded in genesis)
-- You can now interact with the chain through MetaMask
-
-
-
-## Key Concepts
-
-Before diving into configuration, familiarize yourself with:
-
-**Precompiled Contracts** - [Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles) bridge EVM smart contracts with Cosmos SDK modules, enabling Solidity contracts to access staking, governance, IBC, and other native functionality.
-
-**Cosmos SDK Modules** - Explore the [core modules](/docs/evm/next/documentation/cosmos-sdk) that provide blockchain functionality:
-- [Bank](https://docs.cosmos.network/main/build/modules/bank) - Token transfers and balances
-- [Staking](https://docs.cosmos.network/main/build/modules/staking) - Validator delegation and rewards
-- [Governance](https://docs.cosmos.network/main/build/modules/governance) - On-chain voting and proposals
-- [Slashing](https://docs.cosmos.network/main/build/modules/slashing) - Validator penalty enforcement
-- [Distribution](https://docs.cosmos.network/main/build/modules/distribution) - Fee and reward distribution
-
-## Understanding the Stack
-
-Before diving into configuration, it's helpful to understand what you're building with:
-
-- **[Cosmos SDK Modules](/docs/evm/next/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
-- **[Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
-- **[Security & Audits](/docs/evm/next/documentation/overview#audits)** - Third-party security assessments of the codebase
-
-
-These guides are designed to help you customize and configure your blockchain network.
-
-## Advanced Configuration
-
-For specialized customization beyond the core configuration:
-
-
-
-Configure the EVM mempool for nonce gap handling and transaction prioritization
-
-
-
-
-
-Deploy standard contracts at genesis for Create2, Multicall3, Permit2, and Safe
-
-
-
-### Recommended Reading
-
-
-
-EVM execution and parameter configuration
-
-
-
-Available precompiled contracts and integration
-
-
-
----
-
-For additional support and community resources, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
\ No newline at end of file
diff --git a/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5.mdx b/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5.mdx
index e9a53647..8a4d6d7d 100644
--- a/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5.mdx
+++ b/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5.mdx
@@ -79,9 +79,35 @@ following list includes references within `evmd` that have been moved.
### Mempool
-#### Minimal setups: nothing to change
+#### Custom initializer
-If you use the default mempool wiring (no custom pools), your existing code continues to work. If `BlockGasLimit` is 0, it defaults to `100_000_000`. If `BroadCastTxFn` is not set, it's also set to a default value.
+The mempool configuration can now be handled by a helper function. If you prefer to use the configuration from `app.toml` and CLI flags, you can refactor your mempool setup:
+
+- **Before**: Manual configuration in app.go
+```go
+mempoolConfig := &evmmempool.EVMMempoolConfig{
+ AnteHandler: app.GetAnteHandler(),
+ BlockGasLimit: blockGasLimit,
+ MinTip: minTip,
+}
+evmMempool := evmmempool.NewExperimentalEVMMempool(
+ app.CreateQueryContext, logger, app.EVMKeeper, app.FeeMarketKeeper,
+ app.txConfig, app.clientCtx, mempoolConfig,
+)
+```
+- **After**: Using helper function (optional). See https://github.com/cosmos/evm/blob/42e1141c9b00432020e69945e565f60f80ab501d/evmd/mempool.go for the reference implementation
+```go
+if err := app.configureEVMMempool(appOpts, logger); err != nil {
+ panic(fmt.Sprintf("failed to configure EVM mempool: %s", err.Error()))
+}
+```
+
+The helper function reads configuration from `appOpts` or applies defaults if omitted. Note that `NewExperimentalEVMMempool` now takes an additional `cosmosPoolMaxTx` parameter, with a recommended default value being `4096` or `0` (uncapped).
+
+
+#### Simple config migration
+
+If `BlockGasLimit` is 0, it defaults to `100_000_000`. If `BroadCastTxFn` is not set, it's also set to a default value.
```go
mempoolConfig := &evmmempool.EVMMempoolConfig{
@@ -185,40 +211,35 @@ These options can also be set via CLI flags:
A new flag `--mempool.max-txs` allows limiting the maximum number of transactions in the Cosmos mempool. Set to 0 or -1 for unbounded (default: 0).
-##### Simplified Mempool Setup
-
-The mempool configuration can now be handled by a helper function. If you prefer to use the configuration from `app.toml` and CLI flags, you can refactor your mempool setup:
+The function signature for `NewExperimentalEVMMempool` also changed to add a cosmosPoolMaxTx field:
-```go
-// Before: Manual configuration in app.go
-mempoolConfig := &evmmempool.EVMMempoolConfig{
- AnteHandler: app.GetAnteHandler(),
- BlockGasLimit: blockGasLimit,
- MinTip: minTip,
-}
-evmMempool := evmmempool.NewExperimentalEVMMempool(
- app.CreateQueryContext, logger, app.EVMKeeper, app.FeeMarketKeeper,
- app.txConfig, app.clientCtx, mempoolConfig,
+```diff
+func NewExperimentalEVMMempool(
+ getCtxCallback func(height int64, prove bool) (sdk.Context, error),
+ logger log.Logger,
+ vmKeeper VMKeeperI,
+ feeMarketKeeper FeeMarketKeeperI,
+ txConfig client.TxConfig,
+ clientCtx client.Context,
+ config *EVMMempoolConfig,
++ cosmosPoolMaxTx int,
)
-
-// After: Using helper function (optional)
-// See evmd/mempool.go for reference implementation
-if err := app.configureEVMMempool(appOpts, logger); err != nil {
- panic(fmt.Sprintf("failed to configure EVM mempool: %s", err.Error()))
-}
```
-The helper function reads configuration from `appOpts` and applies defaults where needed. Note that `NewExperimentalEVMMempool` now takes an additional `cosmosPoolMaxTx` parameter.
-
-### Default Precompiles
+#### EVM Chain ID
-Default precompiles have been moved to `/evm/precompiles/types/defaults.go` and the function name was
-changed to `DefaultStaticPrecompiles`. The function signature has also changed, and now takes pointers
-as inputs for the `Erc20Keeper` and `TransferKeeper`. Finally, the `WithStaticPrecompiles` builder
-function can now happen *alongside the keeper instantiation*, and not after. The new wiring is shown below:
+The EVM chain ID is now retrieved directly from `appOpts` instead of being passed as a parameter. In `app.go`, the chain ID is obtained using:
```go
- app.EVMKeeper = evmkeeper.NewKeeper(
+evmChainID := cast.ToUint64(appOpts.Get(srvflags.EVMChainID))
+```
+
+See `evmd/app.go:216` for the reference implementation.
+
+The EVM Keeper now also takes in evmChainID as a parameter:
+
+```diff
+app.EVMKeeper = evmkeeper.NewKeeper(
appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], keys,
authtypes.NewModuleAddress(govtypes.ModuleName),
app.AccountKeeper,
@@ -227,39 +248,11 @@ function can now happen *alongside the keeper instantiation*, and not after. The
app.FeeMarketKeeper,
&app.ConsensusParamsKeeper,
&app.Erc20Keeper,
++ evmChainID,
tracer,
- ).WithStaticPrecompiles(
- precompiletypes.DefaultStaticPrecompiles(
- *app.StakingKeeper,
- app.DistrKeeper,
- app.PreciseBankKeeper,
- &app.Erc20Keeper, // UPDATED
- &app.TransferKeeper, // UPDATED
- app.IBCKeeper.ChannelKeeper,
- app.GovKeeper,
- app.SlashingKeeper,
- appCodec,
- ),
)
```
-### Denom Configs
-
-[#661](https://github.com/cosmos/evm/pull/661) removes the instantiation of chain configs via app.go
-and moves them to state or genesis.
-It is critical to remove any use of EvmAppOptions as calling the configurator will panic the chain
-at runtime during startup.
-
-#### EVM Chain ID
-
-The EVM chain ID is now retrieved directly from `appOpts` instead of being passed as a parameter. In `app.go`, the chain ID is obtained using:
-
-```go
-evmChainID := cast.ToUint64(appOpts.Get(srvflags.EVMChainID))
-```
-
-See `evmd/app.go:216` for the reference implementation.
-
#### Function Signature Changes
In `app.go`, remove evmChainID and evmAppOptions from the NewApp signature.
@@ -306,6 +299,47 @@ Then, remove any reference of evmAppOptions being called:
`evmd_config.go`, `chain_id.go`, `config.go`, `constants.go` have been moved to
`github.com/cosmos/evm/config` and may be removed to your repo.
+### Denom Configs
+
+[#661](https://github.com/cosmos/evm/pull/661) removes the instantiation of chain configs via app.go
+and moves them to state or genesis.
+It is critical to remove any use of EvmAppOptions as calling the configurator will panic the chain
+at runtime during startup.
+
+### Default Precompiles
+
+Default precompiles have been moved to `/evm/precompiles/types/defaults.go` and the function name was
+changed to `DefaultStaticPrecompiles`. The function signature has also changed, and now takes pointers
+as inputs for the `Erc20Keeper` and `TransferKeeper`. Finally, the `WithStaticPrecompiles` builder
+function can now happen *alongside the keeper instantiation*, and not after. The new wiring is shown below:
+
+```go
+ app.EVMKeeper = evmkeeper.NewKeeper(
+ appCodec, keys[evmtypes.StoreKey], tkeys[evmtypes.TransientKey], keys,
+ authtypes.NewModuleAddress(govtypes.ModuleName),
+ app.AccountKeeper,
+ app.PreciseBankKeeper,
+ app.StakingKeeper,
+ app.FeeMarketKeeper,
+ &app.ConsensusParamsKeeper,
+ &app.Erc20Keeper,
+ evmChainID,
+ tracer,
+ ).WithStaticPrecompiles(
+ precompiletypes.DefaultStaticPrecompiles(
+ *app.StakingKeeper,
+ app.DistrKeeper,
+ app.PreciseBankKeeper,
+ &app.Erc20Keeper, // UPDATED
+ &app.TransferKeeper, // UPDATED
+ app.IBCKeeper.ChannelKeeper,
+ app.GovKeeper,
+ app.SlashingKeeper,
+ appCodec,
+ ),
+ )
+```
+
#### UpgradeHandler
As the configs have been moved to state and genesis, you must include an UpgradeHandler if your chain does
@@ -314,6 +348,7 @@ not satisfy the following conditions.
2. Your EVM Denom must have a display denom associated with it in `DenomMetadata`.
1. The display denom for the EVM Denom must have an accurate decimal value (i.e. for `uatom`, `atom` must have a decimal value of 6.
3. Your chain is an 18-decimal chain.
+4. Call `InitEvmCoinInfo` to initialize EVM coin metadata in the module store.
In your UpgradeHandler:
diff --git a/docs/evm/next/ledger-support.md b/docs/evm/next/ledger-support.md
index 3b8d6e86..74ad2380 100644
--- a/docs/evm/next/ledger-support.md
+++ b/docs/evm/next/ledger-support.md
@@ -6,13 +6,13 @@ This chain implements a novel approach to transaction signing that enables **Cos
## The Problem
-Traditional Cosmos chains use:
+Mosr Cosmos chains use:
- **Key Type**: `secp256k1`
- **Ledger App**: Cosmos app
- **Address Format**: Bech32 (derived from SHA256 + RIPEMD160)
-EVM-compatible chains need:
+EVM compatibility requires:
- **Key Type**: `eth_secp256k1`
- **Address Format**: Ethereum hex (derived from Keccak256)
@@ -21,7 +21,7 @@ The Cosmos Ledger app cannot derive Ethereum-style addresses because it only sup
## The Solution: EIP-712
-[EIP-712](https://eips.ethereum.org/EIPS/eip-712) is a standard for typed structured data hashing and signing. Originally designed for Ethereum dApps, it can be used to sign **any structured data**, including Cosmos transactions.
+[EIP-712](https://eips.ethereum.org/EIPS/eip-712) is a standard for typed structured data hashing and signing. Originally designed for Ethereum dApps, it can be used to sign any structured data, including Cosmos transactions.
### How It Works
@@ -117,39 +117,6 @@ evmd tx bank send mykey cosmos1... 1000aevmd --ledger --chain-id evm_7001-1
Your Ledger will display the EIP-712 domain and message hashes for verification.
-### Browser Wallet Integration (Keplr)
-
-Wallet developers can integrate EIP-712 signing using the `@evmos/transactions` library:
-
-```typescript
-import {
- createTxRawEIP712,
- signatureToWeb3Extension,
-} from "@evmos/transactions";
-
-// 1. Create EIP-712 payload from Cosmos transaction
-const txRaw = createTxRawEIP712(messages, fee, {
- accountNumber,
- sequence,
- chainId: "evm_7001-1",
-});
-
-// 2. Sign with Ethereum provider (MetaMask, Ledger via Ethereum app, etc.)
-const signature = await window.ethereum.request({
- method: "eth_signTypedData_v4",
- params: [signerAddress, JSON.stringify(txRaw.eipToSign)],
-});
-
-// 3. Convert signature to Cosmos format
-const web3Extension = signatureToWeb3Extension(signature);
-
-// 4. Broadcast to chain
-const txBytes = txRaw.message.serializeBinary();
-await client.broadcastTx(txBytes);
-```
-
-See the test web app in the evm repository for a complete working example.
-
## Why This Approach?
### Cosmos Leger App Limitations
@@ -165,7 +132,7 @@ See the test web app in the evm repository for a complete working example.
- **Algorithm**: `eth_secp256k1`
- **HD Path**: `m/44'/60'/0'/0/0` (Ethereum standard, BIP-44)
- **Public Key Format**: Uncompressed 65-byte ECDSA public key
-- **Address Derivation**: Keccak256(pubkey)[12:] → Bech32
+- **Address Derivation**: `Keccak256(pubkey)[12:] → Bech32`
### Signature Format
@@ -173,23 +140,6 @@ See the test web app in the evm repository for a complete working example.
- **Output**: ECDSA signature (65 bytes: r + s + v)
- **Verification**: Standard ECDSA verification against `eth_secp256k1` pubkey
-### EIP-712 Domain Separator
-
-```javascript
-{
- name: "Cosmos Web3",
- version: "1.0.0",
- chainId: 7001, // Numeric EVM chain ID
- verifyingContract: "cosmos",
- salt: "0"
-}
-```
-
-## Reference Implementation
-
-- **CLI Tool**: See `scripts/test_ledger_manual.sh` in the evm repo
-- **Web App**: See test-webapp in the evm repository for browser integration
-
## Further Reading
- [EIP-712 Specification](https://eips.ethereum.org/EIPS/eip-712)
diff --git a/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/erc20.mdx b/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/erc20.mdx
index f9ae40a2..01812f39 100644
--- a/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/erc20.mdx
+++ b/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/erc20.mdx
@@ -8,7 +8,7 @@ The ERC20 module (`x/erc20`) implements Single Token Representation v2 (STRv2),
**Key Functionality**:
- Automatic ERC-20 wrapper creation for Cosmos coins and IBC tokens
-- Bidirectional token conversion (Cosmos ↔ EVM)
+- Bidirectional token conversion (Cosmos EVM)
- Native token precompiles at deterministic addresses
- Dynamic precompile generation for IBC tokens
- ERC-20 allowance tracking for cross-environment compatibility
diff --git a/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/precisebank.mdx b/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/precisebank.mdx
index 021ca00c..25711a77 100644
--- a/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/precisebank.mdx
+++ b/docs/evm/v0.5.0/documentation/cosmos-sdk/modules/precisebank.mdx
@@ -22,7 +22,7 @@ The PreciseBank module (`x/precisebank`) extends the precision of the standard C
## When Do You Need PreciseBank?
-### ✅ You NEED PreciseBank if:
+### You NEED PreciseBank if:
Your native token has **6 decimals** (or any non-18 decimal count):
- Base denom: `ustake`, `utoken`, `uatom` (micro prefix = 10^6)
@@ -31,7 +31,7 @@ Your native token has **6 decimals** (or any non-18 decimal count):
**Why**: EVM expects 18 decimals. Without PreciseBank, you lose 12 decimals of precision, causing rounding errors and broken DeFi protocols.
-### ❌ You DON'T NEED PreciseBank if:
+### You DON'T NEED PreciseBank if:
Your native token has **18 decimals**:
- Base denom: `atest`, `atoken` (atto prefix = 10^18)
diff --git a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/configuration-parameters.mdx b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/configuration-parameters.mdx
new file mode 100644
index 00000000..d7dfb511
--- /dev/null
+++ b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/configuration-parameters.mdx
@@ -0,0 +1,1083 @@
+---
+title: "Chain Configuration Guide"
+description: "Step-by-step guide to configuring your Cosmos EVM chain. Learn how to customize the binary name, chain IDs, token denomination, precompiles, and permissions based on the evmd reference implementation."
+---
+
+# Chain Configuration Guide
+
+When building your custom chain based on `evmd`, you'll need to configure several key parameters. This guide walks through each configuration option from the evmd default setup and shows you how to customize it for your chain.
+
+
+This guide focuses on the practical configuration steps. For comprehensive parameter references and advanced topics, see the [migration guides](/docs/evm/next/documentation/migrations/migration-v0.4-to-v0.5) and module-specific documentation.
+
+
+## evmd Default Configuration
+
+The reference implementation (`evmd`) comes with these defaults:
+
+| Configuration | Default Value | Customizable |
+|---------------|---------------|--------------|
+| **Binary Name** | `evmd` | Yes (rename) |
+| **Cosmos Chain ID** | `cosmos_262144-1` | Yes (genesis) |
+| **EVM Chain ID** | `262144` | Yes (genesis) |
+| **Custom Opcodes** | None | Yes (advanced) |
+| **Token Pairs** | 1 (native token) | Yes (genesis) |
+| **Denomination** | `atest` (18 decimals) | Yes (genesis) |
+| **EVM Permissioning** | Permissionless | Yes (genesis) |
+| **Enabled Precompiles** | All 9 precompiles | Yes (genesis) |
+
+Let's configure each of these for your custom chain.
+
+---
+
+## 1. Binary Name
+
+**What It Is**: The name of your compiled blockchain executable.
+
+**Default**: `evmd`
+
+### How to Change
+
+
+
+```bash
+cd /path/to/cosmos-evm
+mv evmd yourchain
+```
+
+
+
+```bash
+# Update all references in Go files
+find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
+```
+
+
+
+Edit the module path in `go.mod`:
+```go
+module github.com/your-org/your-chain
+
+// Update import paths that reference evmd
+```
+
+
+
+Edit the Makefile to use your binary name:
+```makefile
+BINARY_NAME := yourchain
+
+install:
+ go install ./yourchain/cmd/yourchain
+```
+
+
+
+```bash
+go mod tidy
+make install
+
+# Or build directly
+go build -o yourchain ./yourchain/cmd/yourchain
+```
+
+
+
+
+After renaming, your binary will be `yourchain` instead of `evmd`. All CLI commands will use this new name (e.g., `yourchain start` instead of `evmd start`).
+
+
+---
+
+## 2. Cosmos Chain ID
+
+**What It Is**: The unique identifier for your blockchain in the Cosmos ecosystem. Used for IBC connections and governance.
+
+**Default**: `cosmos_262144-1`
+
+**Format**: `{name}_{evmChainID}-{version}`
+
+### How to Change
+
+Set during chain initialization:
+
+```bash
+yourchain init mynode --chain-id yourchain_262144-1
+```
+
+**Recommended Formats**:
+- Testnet: `yourchain_262144-1`
+- Mainnet: `yourchain-1` (after registering a unique EVM chain ID)
+
+
+The Cosmos chain ID is separate from the EVM chain ID. The format `name_evmChainID-version` helps maintain consistency between both IDs, but it's not required.
+
+
+### Changing After Genesis
+
+While technically possible through a coordinated upgrade, changing the Cosmos chain ID requires all nodes to update and restart simultaneously. Plan your chain ID carefully before launch.
+
+---
+
+## 3. EVM Chain ID
+
+**What It Is**: The EIP-155 chain ID used for Ethereum transaction replay protection.
+
+**Default**: `262144`
+
+**Where Configured**: Retrieved from app options in `app.go`
+
+### How to Change
+
+
+The EVM chain ID **cannot** be changed after genesis without breaking transaction replay protection. Choose carefully before launch.
+
+
+The EVM chain ID is retrieved from app options in `app.go`:
+
+```go
+// evmd/app.go line ~216
+evmChainID := cast.ToUint64(appOpts.Get(srvflags.EVMChainID))
+```
+
+You can set it via CLI flag when starting the chain:
+```bash
+yourchain start --evm.chain-id 262144
+```
+
+Or configure it in `app.toml`:
+```toml
+[evm]
+chain-id = 262144
+```
+
+### Choosing an EVM Chain ID
+
+
+
+**Avoid these ranges**:
+- `1` - Ethereum Mainnet
+- `2-10` - Ethereum testnets
+- `1-999` - Generally reserved by Ethereum Foundation
+- `137` - Polygon
+- Common production chains - Check [chainlist.org](https://chainlist.org)
+
+
+
+**For local development and testnets**:
+- Use `262144` (evmd default)
+- Or any high number unlikely to conflict
+- No registration needed
+
+
+
+**For mainnet launches**:
+- Choose a unique ID > 1,000,000
+- Register at [chainlist.org](https://chainlist.org)
+- Verify no conflicts with existing chains
+- Document your choice publicly
+
+
+
+---
+
+## 4. Custom Opcodes
+
+**What It Is**: Custom EVM operations beyond standard Ethereum opcodes.
+
+**Default**: None
+
+
+Custom opcodes are an advanced feature. Most chains should use standard Ethereum opcodes with the optional `extra_eips` parameter instead.
+
+
+### Adding Extra EIPs
+
+Instead of custom opcodes, enable additional Ethereum Improvement Proposals:
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "extra_eips": [2200, 2929, 3198]
+ }
+ }
+ }
+}
+```
+
+**Common EIPs**:
+- `2200` - Net gas metering
+- `2929` - Gas cost increases for state access
+- `3198` - BASEFEE opcode
+- `3529` - Reduction in refunds
+
+
+For teams that need custom EVM functionality:
+
+1. Create activator functions in your chain's `eips/` directory
+2. Register in the activators map
+3. Add to `extra_eips` in genesis
+
+```go
+// yourchain/eips/custom.go
+func ActivateMyCustomOpcode(jt *vm.JumpTable) {
+ // Define custom opcode behavior
+}
+
+// Register in activators
+var CustomActivators = map[int]func(*vm.JumpTable){
+ 9999: ActivateMyCustomOpcode,
+}
+```
+
+Then in genesis:
+```json
+{
+ "extra_eips": [9999]
+}
+```
+
+This is rarely needed - consider if standard EVM functionality meets your needs first.
+
+
+---
+
+## 5. Token Pairs (ERC20 Module)
+
+**What It Is**: Mappings between Cosmos native tokens and ERC20 contract representations.
+
+**Default**: 1 pair for the native token
+
+### How to Configure
+
+
+For comprehensive ERC20 module configuration, see the [ERC20 Module Documentation](/evm/next/documentation/cosmos-sdk/modules/erc20).
+
+
+Token pairs are configured in genesis under the `erc20` module:
+
+```json
+{
+ "app_state": {
+ "erc20": {
+ "native_precompiles": [
+ "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
+ ],
+ "token_pairs": [
+ {
+ "erc20_address": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
+ "denom": "atest",
+ "enabled": true,
+ "contract_owner": 1
+ }
+ ]
+ }
+ }
+}
+```
+
+### Default Native Token Pair
+
+The evmd example uses a special ERC20 address for the native token:
+- **Address**: `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`
+- **Denom**: `atest` (or your chain's native denom)
+- **Purpose**: Allows native tokens to be used in EVM contracts as ERC20
+
+
+**Default Setup**: Most chains start with just the native token pair. Additional pairs can be registered after launch through governance or permissionless registration (if enabled).
+
+
+---
+
+## 6. Token Denomination
+
+**What It Is**: Your chain's native token denomination and decimal precision.
+
+**Default**: `atest` (18 decimals, atto-prefix)
+
+### Understanding Token Configuration
+
+Token configuration involves three components:
+
+1. **Bank Metadata** - Defines denominations and decimals
+2. **VM Parameters** - Specifies which denom is the EVM native token
+3. **Extended Denom Options** - Required only for non-18 decimal tokens
+
+
+
+**Direct EVM Compatibility - No Extra Modules Needed**
+
+```json
+{
+ "app_state": {
+ "bank": {
+ "denom_metadata": [
+ {
+ "description": "The native staking token",
+ "denom_units": [
+ {
+ "denom": "atoken", // atto-prefix (18 decimals)
+ "exponent": 0,
+ "aliases": ["attotoken"]
+ },
+ {
+ "denom": "token", // Display denomination
+ "exponent": 18
+ }
+ ],
+ "base": "atoken",
+ "display": "token",
+ "name": "Token",
+ "symbol": "TOKEN"
+ }
+ ]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "atoken" // Must match base
+ // No extended_denom_options needed!
+ }
+ }
+ }
+}
+```
+
+**Benefits**:
+- Direct 1:1 EVM mapping
+- Uses standard `x/bank` module
+- Simpler architecture
+- No additional modules required
+
+
+
+**Requires PreciseBank Module**
+
+```json
+{
+ "app_state": {
+ "bank": {
+ "denom_metadata": [
+ {
+ "denom_units": [
+ {
+ "denom": "utoken", // micro-prefix (6 decimals)
+ "exponent": 0
+ },
+ {
+ "denom": "token",
+ "exponent": 6
+ }
+ ],
+ "base": "utoken",
+ "display": "token"
+ }
+ ]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "utoken",
+ "extended_denom_options": {
+ "extended_denom": "atoken" // 18-decimal EVM representation
+ }
+ }
+ }
+ }
+}
+```
+
+**Additional Setup Required**:
+- Must add `x/precisebank` module to `app.go`
+- Precisebank handles fractional amounts (1 utoken = 10^12 wei)
+- See [PreciseBank Module Docs](/evm/next/documentation/cosmos-sdk/modules/precisebank)
+
+
+When using non-18 decimal tokens, you **must** add the precisebank module and configure the extended denom. Failure to do so will result in precision loss and incorrect balances.
+
+
+
+
+**Also Requires PreciseBank**
+
+For chains using other decimal precisions (e.g., 8 decimals for Bitcoin compatibility):
+
+```json
+{
+ "bank": {
+ "denom_metadata": [{
+ "denom_units": [
+ {"denom": "sats", "exponent": 0}, // 8 decimals
+ {"denom": "btc", "exponent": 8}
+ ],
+ "base": "sats"
+ }]
+ },
+ "vm": {
+ "params": {
+ "evm_denom": "sats",
+ "extended_denom_options": {
+ "extended_denom": "asats" // 18-decimal for EVM
+ }
+ }
+ }
+}
+```
+
+Requires precisebank module with custom conversion factor.
+
+
+
+### Common Denomination Prefixes
+
+| Prefix | Decimals | Example | Used For |
+|--------|----------|---------|----------|
+| `a` (atto) | 18 | `atoken` | **EVM-compatible chains (recommended)** |
+| `u` (micro) | 6 | `uatom`, `ustake` | Traditional Cosmos chains |
+| Base | 0-8 | `sats` | Bitcoin-style |
+
+
+**Recommendation**: Use 18 decimals (`atto` prefix) for new chains. This provides:
+- Direct EVM compatibility
+- Simpler codebase (no precisebank needed)
+- Better UX for Ethereum users
+- Standard across EVM ecosystems
+
+
+### Setting Denomination in Genesis
+
+The denomination is set in multiple places that must be consistent:
+
+```bash
+# After initializing your chain
+GENESIS=~/.yourchain/config/genesis.json
+
+# Set denomination in all modules
+jq '.app_state["staking"]["params"]["bond_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["gov"]["params"]["min_deposit"][0]["denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["vm"]["params"]["evm_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state["mint"]["params"]["mint_denom"]="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata
+jq '.app_state["bank"]["denom_metadata"]=[{
+ "description": "The native staking token",
+ "denom_units": [
+ {"denom": "atoken", "exponent": 0, "aliases": ["attotoken"]},
+ {"denom": "token", "exponent": 18, "aliases": []}
+ ],
+ "base": "atoken",
+ "display": "token",
+ "name": "Token",
+ "symbol": "TOKEN"
+}]' $GENESIS > tmp && mv tmp $GENESIS
+```
+
+
+**Critical**: The following must all use the same base denomination:
+- `staking.params.bond_denom`
+- `mint.params.mint_denom`
+- `gov.params.min_deposit[0].denom`
+- `vm.params.evm_denom`
+- `bank.denom_metadata[0].base`
+
+
+---
+
+## 7. EVM Permissioning
+
+**What It Is**: Access control for deploying and calling smart contracts.
+
+**Default**: Permissionless (anyone can deploy and call contracts)
+
+### How to Configure
+
+EVM permissions are set in genesis under `vm.params.access_control`:
+
+
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "access_control": {
+ "create": {
+ "access_type": 0, // 0 = PERMISSIONLESS
+ "access_control_list": []
+ },
+ "call": {
+ "access_type": 0,
+ "access_control_list": []
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+**Use Case**: Public chains, testnets, open ecosystems
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 2, // 2 = PERMISSIONED (allowlist)
+ "access_control_list": [
+ "0x1234567890123456789012345678901234567890",
+ "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
+ ]
+ },
+ "call": {
+ "access_type": 0, // Keep calls open
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Enterprise chains, regulated environments, controlled contract deployment
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 1, // 1 = RESTRICTED (blocklist)
+ "access_control_list": [
+ "0xbadaddr1234567890123456789012345678901234"
+ ]
+ },
+ "call": {
+ "access_type": 0,
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Blocking known malicious addresses while keeping chain open
+
+
+
+```json
+{
+ "access_control": {
+ "create": {
+ "access_type": 1, // RESTRICTED with empty list = block all
+ "access_control_list": []
+ },
+ "call": {
+ "access_type": 1,
+ "access_control_list": []
+ }
+ }
+}
+```
+
+**Use Case**: Chains that only use predeployed contracts, no user deployments
+
+
+
+### Access Control Types
+
+| Type | Value | Behavior | access_control_list |
+|------|-------|----------|---------------------|
+| **Permissionless** | `0` | Anyone can perform action | Ignored |
+| **Restricted** | `1` | Block addresses in list | Blocklist |
+| **Permissioned** | `2` | Only addresses in list | Allowlist |
+
+
+**Recommendation**: Start with permissionless for testnets. For mainnets, consider permissioned deployment initially, then transition to permissionless through governance once the chain is stable.
+
+
+### Modifying After Genesis
+
+Access control can be changed through governance proposals:
+
+```bash
+# Example: Enable permissionless deployment via governance
+yourchain tx gov submit-proposal param-change proposal.json \
+ --from validator \
+ --chain-id yourchain-1
+```
+
+---
+
+## 8. Enabled Precompiles
+
+**What It Is**: Native Cosmos SDK functionality exposed as EVM smart contracts.
+
+**Default**: All 9 static precompiles enabled
+
+### Available Precompiles
+
+
+For complete precompile documentation including Solidity interfaces and usage examples, see the [Precompiles Overview](/docs/evm/next/documentation/smart-contracts/precompiles/overview).
+
+
+| Address | Name | Description | Typical Use Case |
+|---------|------|-------------|------------------|
+| `0x0100` | **P256** | P256 cryptographic operations | Web3 auth, secure signing |
+| `0x0400` | **Bech32** | Cosmos ↔ Ethereum address conversion | Cross-chain operations |
+| `0x0800` | **Staking** | Validator staking operations | Liquid staking, auto-compounding |
+| `0x0801` | **Distribution** | Reward distribution queries | Reward dashboards, auto-claiming |
+| `0x0802` | **ICS20** | IBC token transfers | Cross-chain DeFi |
+| `0x0803` | **Vesting** | Vesting account management | Token vesting contracts |
+| `0x0804` | **Bank** | Native token transfers | Payment contracts |
+| `0x0805` | **Governance** | On-chain voting | DAO integration |
+| `0x0806` | **Slashing** | Validator slashing info | Validator monitoring |
+
+### How to Configure
+
+
+
+```json
+{
+ "app_state": {
+ "vm": {
+ "params": {
+ "active_static_precompiles": [
+ "0x0000000000000000000000000000000000000100",
+ "0x0000000000000000000000000000000000000400",
+ "0x0000000000000000000000000000000000000800",
+ "0x0000000000000000000000000000000000000801",
+ "0x0000000000000000000000000000000000000802",
+ "0x0000000000000000000000000000000000000803",
+ "0x0000000000000000000000000000000000000804",
+ "0x0000000000000000000000000000000000000805",
+ "0x0000000000000000000000000000000000000806"
+ ]
+ }
+ }
+ }
+}
+```
+
+**Use Case**: Maximum Cosmos SDK integration, full-featured chains
+
+
+
+```json
+{
+ "active_static_precompiles": [
+ "0x0000000000000000000000000000000000000100", // P256
+ "0x0000000000000000000000000000000000000400", // Bech32
+ "0x0000000000000000000000000000000000000800", // Staking
+ "0x0000000000000000000000000000000000000804" // Bank
+ ]
+}
+```
+
+**Use Case**: Minimal attack surface, only enable what you need
+
+
+
+```json
+{
+ "active_static_precompiles": []
+}
+```
+
+**Use Case**: Pure EVM chains with no Cosmos SDK integration
+
+
+
+Set defaults in your chain's genesis configuration:
+
+```go
+// yourchain/genesis.go
+func NewDefaultVMGenesisState() *vmtypes.GenesisState {
+ evmGenState := vmtypes.DefaultGenesisState()
+
+ // Enable only specific precompiles
+ evmGenState.Params.ActiveStaticPrecompiles = []string{
+ "0x0000000000000000000000000000000000000100", // P256
+ "0x0000000000000000000000000000000000000800", // Staking
+ "0x0000000000000000000000000000000000000804", // Bank
+ }
+
+ return evmGenState
+}
+```
+
+
+
+
+**Security Consideration**: Only enable precompiles your chain actually needs. Each enabled precompile increases the attack surface and testing complexity.
+
+
+### Modifying After Genesis
+
+Precompiles can be enabled or disabled through governance:
+
+```bash
+# Propose adding a precompile
+yourchain tx gov submit-proposal param-change proposal.json \
+ --from validator
+```
+
+---
+
+## Configuration Workflow
+
+Here's the recommended order for configuring your chain:
+
+
+
+Decide on:
+- Binary name
+- Chain IDs (Cosmos and EVM)
+- Token denomination and decimals
+- Precompiles needed
+- Access control policy
+
+
+
+```bash
+# Rename binary
+mv evmd yourchain
+
+# Update references
+find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
+
+# Update go.mod
+# Edit module path
+```
+
+
+
+```bash
+yourchain init mynode --chain-id yourchain-1
+```
+
+
+
+Edit `~/.yourchain/config/genesis.json`:
+
+```bash
+GENESIS=~/.yourchain/config/genesis.json
+
+# Set denominations
+jq '.app_state.staking.params.bond_denom="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+jq '.app_state.vm.params.evm_denom="atoken"' $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata
+# Set precompiles
+# Set access control
+```
+
+
+
+Edit `~/.yourchain/config/app.toml`:
+
+```toml
+[evm]
+chain-id = 262144 # Set EVM chain ID
+min-tip = 1000000000
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+```
+
+
+
+```bash
+yourchain start
+```
+
+Verify:
+- Chain starts successfully
+- RPC is accessible
+- Precompiles are enabled
+- Token denomination is correct
+
+
+
+For production:
+- Coordinate genesis with validators
+- Distribute final genesis file
+- Launch at coordinated time
+
+
+
+---
+
+## Configuration Examples
+
+### Reference: local_node.sh
+
+
+**Looking for a real-world example?** The `local_node.sh` script in the Cosmos EVM repository is the best reference for complete chain configuration. It demonstrates how evmd sets up genesis and app.toml for local development.
+
+
+The `local_node.sh` script performs all the configuration steps automatically. Here's what it does:
+
+
+
+The script modifies `genesis.json` to configure:
+
+- **Chain ID**: Sets to `cosmos_262144-1`
+- **Token denomination**: Configures `atest` (18 decimals) across all modules
+- **Bank metadata**: Sets up denom metadata with proper exponents
+- **Precompiles**: Enables all 9 static precompiles by default
+- **Validator configuration**: Creates genesis validator with initial stake
+- **Genesis accounts**: Funds test accounts for development
+
+
+
+
+The script configures `app.toml` with development-friendly settings:
+
+```toml
+[evm]
+chain-id = 262144
+tracer = "json" # Enable EVM tracing for debugging
+min-tip = 0 # No minimum tip for local testing
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+ws-address = "0.0.0.0:8546"
+api = ["eth", "net", "web3", "txpool", "debug"] # All APIs for testing
+allow-unprotected-txs = true # Allow unsigned txs locally
+enable-indexer = true # Enable transaction indexing
+```
+
+These settings are optimized for local development and should be adjusted for production.
+
+
+
+The `local_node.sh` script accepts flags that control configuration:
+
+- **`-y`**: Overwrites previous database (fresh genesis)
+- **`-n`**: Preserves previous database (resume)
+- **`--no-install`**: Skips binary rebuild
+- **`--remote-debugging`**: Builds with debug symbols
+
+Example usage:
+```bash
+# Fresh start with all default configurations
+./local_node.sh -y
+
+# Resume from previous state
+./local_node.sh -n
+```
+
+
+
+To use `local_node.sh` as a template for your chain:
+
+1. **Copy the script**: `cp local_node.sh my_chain_setup.sh`
+2. **Update chain name**: Change `evmd` to your binary name
+3. **Modify genesis values**: Update denom, chain ID, precompiles
+4. **Adjust app.toml settings**: Configure for your use case (testnet/mainnet)
+5. **Add custom logic**: Include any chain-specific setup
+
+The script serves as a complete example of the configuration workflow described in this guide.
+
+
+
+
+**Production Considerations**: The `local_node.sh` configuration is optimized for local development. For testnets and mainnets:
+- Disable debug APIs in JSON-RPC
+- Require transaction signatures (`allow-unprotected-txs = false`)
+- Set appropriate `min-tip` value
+- Use secure key management (not test keys)
+- Configure proper peer discovery and networking
+
+
+---
+
+### Complete 18-Decimal Chain
+
+
+```bash init.sh
+#!/bin/bash
+# Initialize and configure an 18-decimal chain
+
+BINARY="yourchain"
+CHAIN_ID="yourchain-1"
+EVM_CHAIN_ID="262144"
+DENOM="atoken"
+GENESIS=~/.yourchain/config/genesis.json
+
+# Initialize
+$BINARY init mynode --chain-id $CHAIN_ID
+
+# Configure denominations
+jq ".app_state.staking.params.bond_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.mint.params.mint_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.gov.params.min_deposit[0].denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.vm.params.evm_denom=\"$DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata (18 decimals)
+jq ".app_state.bank.denom_metadata=[{
+ \"description\": \"The native staking token\",
+ \"denom_units\": [
+ {\"denom\": \"$DENOM\", \"exponent\": 0, \"aliases\": [\"attotoken\"]},
+ {\"denom\": \"token\", \"exponent\": 18, \"aliases\": []}
+ ],
+ \"base\": \"$DENOM\",
+ \"display\": \"token\",
+ \"name\": \"Token\",
+ \"symbol\": \"TOKEN\"
+}]" $GENESIS > tmp && mv tmp $GENESIS
+
+# Enable specific precompiles
+jq '.app_state.vm.params.active_static_precompiles=[
+ "0x0000000000000000000000000000000000000100",
+ "0x0000000000000000000000000000000000000400",
+ "0x0000000000000000000000000000000000000800",
+ "0x0000000000000000000000000000000000000804"
+]' $GENESIS > tmp && mv tmp $GENESIS
+
+echo "Configuration complete!"
+```
+
+```toml app.toml
+[evm]
+chain-id = 262144
+min-tip = 1000000000 # 1 gwei
+cache-preimage = false
+
+[json-rpc]
+enable = true
+address = "0.0.0.0:8545"
+ws-address = "0.0.0.0:8546"
+api = ["eth", "net", "web3", "txpool"]
+gas-cap = 25000000
+allow-unprotected-txs = false
+```
+
+
+### Complete 6-Decimal Chain with PreciseBank
+
+
+```bash init-6-decimal.sh
+#!/bin/bash
+# Initialize and configure a 6-decimal chain
+
+BINARY="yourchain"
+CHAIN_ID="yourchain-1"
+EVM_CHAIN_ID="262144"
+BASE_DENOM="utoken"
+EXTENDED_DENOM="atoken"
+GENESIS=~/.yourchain/config/genesis.json
+
+# Initialize
+$BINARY init mynode --chain-id $CHAIN_ID
+
+# Configure denominations
+jq ".app_state.staking.params.bond_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.mint.params.mint_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.gov.params.min_deposit[0].denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+jq ".app_state.vm.params.evm_denom=\"$BASE_DENOM\"" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set bank metadata (6 decimals)
+jq ".app_state.bank.denom_metadata=[{
+ \"description\": \"The native staking token\",
+ \"denom_units\": [
+ {\"denom\": \"$BASE_DENOM\", \"exponent\": 0},
+ {\"denom\": \"token\", \"exponent\": 6}
+ ],
+ \"base\": \"$BASE_DENOM\",
+ \"display\": \"token\",
+ \"name\": \"Token\",
+ \"symbol\": \"TOKEN\"
+}]" $GENESIS > tmp && mv tmp $GENESIS
+
+# Set extended denom options (REQUIRED for 6 decimals)
+jq ".app_state.vm.params.extended_denom_options={
+ \"extended_denom\": \"$EXTENDED_DENOM\"
+}" $GENESIS > tmp && mv tmp $GENESIS
+
+echo "Configuration complete! Remember to add precisebank module to app.go"
+```
+
+```go app.go
+// In app.go, you must add precisebank module:
+
+import (
+ precisebankkeeper "github.com/cosmos/evm/x/precisebank/keeper"
+ precisebanktypes "github.com/cosmos/evm/x/precisebank/types"
+)
+
+// Add to store keys
+keys := storetypes.NewKVStoreKeys(
+ // ... other keys
+ precisebanktypes.StoreKey,
+)
+
+// Initialize PreciseBankKeeper
+app.PreciseBankKeeper = precisebankkeeper.NewKeeper(
+ appCodec,
+ keys[precisebanktypes.StoreKey],
+ app.BankKeeper,
+ app.AccountKeeper,
+)
+
+// Use PreciseBankKeeper in EVMKeeper
+app.EVMKeeper = evmkeeper.NewKeeper(
+ // ...
+ app.PreciseBankKeeper, // Not app.BankKeeper!
+ // ...
+)
+
+// Add to module manager
+app.ModuleManager = module.NewManager(
+ // ... other modules
+ precisebank.NewAppModule(app.PreciseBankKeeper, app.AccountKeeper),
+ // ...
+)
+
+// Add to genesis order (after bank, before vm)
+genesisModuleOrder := []string{
+ // ...
+ banktypes.ModuleName,
+ precisebanktypes.ModuleName,
+ evmtypes.ModuleName,
+ // ...
+}
+```
+
+
+---
+
+## Next Steps
+
+Now that your chain is configured:
+
+1. **Test Locally**: Use `./local_node.sh` to test all configurations
+2. **Deploy Contracts**: Verify precompiles work as expected
+3. **Set Up Validators**: Prepare for testnet/mainnet launch
+4. **Document Configuration**: Share configuration choices with users
+5. **Plan Governance**: Determine which parameters may change post-launch
+
+### Further Reading
+
+
+
+Complete guide to forking and customizing evmd
+
+
+
+Detailed migration instructions for v0.5
+
+
+
+VM module configuration and parameters
+
+
+
+Fractional balance tracking for non-18-decimal chains
+
+
+
+---
+
+For additional support, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
diff --git a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/overview.mdx b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/overview.mdx
index 30907d11..7a5af612 100644
--- a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/overview.mdx
+++ b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/overview.mdx
@@ -6,11 +6,8 @@ Cosmos-EVM is the easiest way to build your own EVM compatible L1 blockchain usi
## Why Cosmos-EVM?
-In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules.
+In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules. Using this as a starting point for your project eliminates the complexity of assembling and integrating components from scratch, allowing engineers to focus on building on your chain rather than debugging basic setup issues.
-Because this example is actively developed and maintained alongside the module itself and serves as the canonical reference implementation, it is the perfect starting point to modify and customize into your own EVM-compatible chain.
-One of the largest benefits is the simplicity and time saved. Rather than researching and going through the trial and error process of assembling components individually and figuring out what works, simply fork `evmd` and customize it to your needs.
-This approach lets engineers focus on what makes your chain unique rather than debugging basic integration issues.
## Understanding the Stack
@@ -18,7 +15,6 @@ Before diving into configuration, it's helpful to understand what you're buildin
- **[Cosmos SDK Modules](/docs/evm/v0.5.0/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
- **[Precompiles](/docs/evm/v0.5.0/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
-- **[Security & Audits](/docs/evm/v0.5.0/documentation/overview#audits)** - Third-party security assessments of the codebase
## Advanced Configuration
diff --git a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start.mdx b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start.mdx
index d2a730f1..aefbec65 100644
--- a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start.mdx
+++ b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/quick-start.mdx
@@ -1,180 +1,120 @@
---
-title: "Build A Custom EVM Chain"
-description: "Create your own blockchain by forking and customizing the Cosmos EVM reference chain (evmd). This guide covers the example chain configuration, running the chain locally, and understanding the foundation for building your custom network."
+title: "Quick Start: Build with evmd"
+description: "Get started building with the Cosmos EVM reference implementation (evmd). Run a local chain, configure parameters, and connect your wallet."
---
-# Example Cosmos EVM Chain
+# Quick Start with evmd
-The `evmd` directory in the Cosmos EVM repository contains an example chain that demonstrates the integration of Cosmos EVM modules. This reference implementation is based on the simapp implementation from the Cosmos SDK repository, which provides a simplified yet complete blockchain foundation.
+The `evmd` directory in the Cosmos EVM repository contains a reference chain implementation that demonstrates how to integrate Cosmos EVM modules. Use evmd as a starting point for understanding chain configuration and local development.
-This chain implementation serves two primary purposes:
-1. **Demonstration**: Shows how to integrate Cosmos EVM modules into a blockchain
-2. **Testing Foundation**: Provides a working chain for development and testing
+This quick start guide covers:
+1. **Running evmd locally** - Get a chain running quickly
+2. **Basic configuration** - Understand key parameters
+3. **Wallet connection** - Connect MetaMask for testing
-You can use evmd as the starting point for building your own custom chain.
+For detailed configuration options, see the [Chain Configuration Parameters](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/configuration-parameters) guide.
-## Why Cosmos-EVM?
-
-In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules.
-
-Because this example is actively developed and maintained alongside the module itself and serves as the canonical reference implementation, it is the perfect starting point to modify and customize into your own EVM-compatible chain.
-One of the largest benefits is the simplicity and time saved. Rather than researching and going through the trial and error process of assembling components individually and figuring out what works, simply fork `evmd` and customize it to your needs.
-This approach lets engineers focus on what makes your chain unique rather than debugging basic integration issues.
-
## Prerequisites
-You'll need a standard Go development environment:
-
+Before starting, ensure you have:
- **Go 1.23.8+** - [Installation guide](https://go.dev/doc/install)
-- **Git** - For repository management
+- **Git** - For cloning the repository
- **Make** - For build commands
-- **GCC/Build Tools** - Required for CGo compilation
-
-If you're new to Go development, ensure your `$GOPATH/bin` is in your system PATH. Most package managers (Homebrew, apt, pacman) handle this automatically.
-
-
-## Building Your Custom Chain
+## Clone the Repository
-The `evmd` implementation serves as the foundation for building your own custom blockchain. To create your chain:
-
-
-
-Start by forking the Cosmos EVM repository:
+Start by cloning the Cosmos EVM repository:
```bash
git clone https://github.com/cosmos/evm.git
cd evm
```
-
-
-
-Rename the `evmd` directory and update all references:
-
-```bash
-# Rename directory
-mv evmd yourchain
-
-# Update imports and binary name
-find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
-```
-
-Update `go.mod` to reflect your repository path.
-
-
-Modify the default configuration in your chain:
+## Run a Local Chain
-- **Chain IDs**: Update Cosmos chain ID and EVM chain ID
-- **Bech32 Prefix**: Set your address prefix in `evmd/config/config.go`
-- **Token Denomination**: Configure in genesis
-- **Precompiles**: Enable only the precompiles you need
-- **Modules**: Add or remove modules based on requirements
-
-
-
-
-Use the local node script to test your changes:
+The easiest way to start is using the provided `local_node.sh` script:
```bash
./local_node.sh -y
```
-Verify that:
-- The chain starts successfully
-- JSON-RPC is accessible
-- Wallets can connect
-- Transactions work as expected
-
-
-
-Once testing is complete, prepare for testnet deployment:
-
-- Set up validator infrastructure
-- Configure persistent peers
-- Coordinate genesis with validators
-- Launch the network
+This script handles:
+- Building the `evmd` binary
+- Initializing chain configuration
+- Setting up genesis parameters
+- Starting the chain with JSON-RPC enabled
-
-
+
+**Script Flags**:
+- `-y`: Fresh start (overwrites previous database)
+- `-n`: Resume from previous state
+- `--no-install`: Skip binary rebuild
+- `--remote-debugging`: Build with debugging symbols
+
## Default Configuration
-The example chain (`evmd`) comes with the following default configuration:
+The evmd reference implementation comes with these defaults:
-| Option | Value | Description |
-|---------------------|------------------------|-------------|
-| **Binary** | `evmd` | The compiled chain binary name |
-| **Chain ID** | `cosmos_262144-1` | Default Cosmos chain ID (format: `name_evmChainID-version`) |
-| **EVM Chain ID** | `262144` | EVM chain ID for transaction replay protection |
-| **Custom Opcodes** | - | No custom opcodes by default |
-| **Token Pairs** | 1 (native token) | Default ERC20 token pair for the native denomination |
-| **Denomination** | `atest` | Native token denomination (18 decimals, atto-prefix) |
-| **EVM Permissioning** | Permissionless | Anyone can deploy and call contracts |
-| **Enabled Precompiles** | All | All nine static precompiles are enabled by default |
+| Parameter | Default Value | Configuration Method |
+|-----------|---------------|---------------------|
+| **Chain ID** | `cosmos_262144-1` | Genesis (set at init) |
+| **EVM Chain ID** | `262144` | CLI flag or app.toml |
+| **Base Denomination** | `aatom` (18 decimals) | Genesis |
+| **Token Pairs** | 1 (WEVMOS contract) | Genesis |
+| **Precompiles** | All 9 enabled | Genesis |
+| **EVM Permissions** | Permissionless | Genesis |
-The default configuration uses an 18-decimal token (`atest`) which provides direct EVM compatibility without requiring the precisebank module. This is the recommended setup for new chains.
+The default 18-decimal token (`aatom`) provides direct EVM compatibility without requiring additional modules.
-## Running The Chain
+## Customize Configuration
-To run the example chain locally, use the provided local node script from the repository root:
+To customize your chain configuration, you can modify several parameters:
+
+
```bash
-./local_node.sh [FLAGS]
-```
-
-### Available Flags
-
-- `-y`: Overwrite previous database (fresh start)
-- `-n`: Do **not** overwrite previous database (resume from previous state)
-- `--no-install`: Skip installation of the binary (use existing binary)
-- `--remote-debugging`: Build a binary suitable for remote debugging
-
-
-The `local_node.sh` script handles all the setup including:
-- Building the `evmd` binary
-- Initializing the chain configuration
-- Setting up genesis parameters
-- Starting the chain with JSON-RPC enabled
-
-
-### Example Usage
-
-
-```bash Fresh Start
-# Start with a clean slate
-./local_node.sh -y
+evmd init mynode --chain-id yourchain-1
```
+
-```bash Resume Previous State
-# Continue from where you left off
-./local_node.sh -n
-```
+
+Edit `~/.evmd/config/genesis.json` to set:
+- Token denomination
+- Token pairs
+- Precompiles
+- Access control permissions
+
-```bash Development Mode
-# Skip rebuild if binary already exists
-./local_node.sh --no-install
-```
+
+Edit `~/.evmd/config/app.toml` to set:
+- EVM Chain ID
+- JSON-RPC settings
+- API endpoints
+
-```bash Debug Mode
-# Build with debugging symbols
-./local_node.sh --remote-debugging
+
+```bash
+evmd start
```
-
+
+
-## Connect to Wallet
+
+For detailed configuration instructions, see [Chain Configuration Parameters](/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/configuration-parameters).
+
-Once the chain is running, you can connect using any Ethereum-compatible wallet. The example below uses MetaMask:
+## Connect MetaMask
-### MetaMask Setup
+Once your chain is running, connect a wallet for testing:
-Use the following seed phrase when adding a new wallet in MetaMask:
+Add a new wallet in MetaMask using this test seed phrase:
```
gesture inject test cycle original hollow east ridge hen combine
@@ -183,109 +123,83 @@ unhappy lunar seat
```
-**Notice**: This is a well-known test seed phrase. **Never** use it for mainnet or with real funds. It's provided solely for local development and testing purposes.
+This is a well-known test seed phrase. **Never** use it with real funds. For local development and testing only.
-1. Click the **Network** button on the top left of MetaMask
-2. Click **Add custom network** at the bottom of the modal
-3. Configure the network with these settings:
+Configure MetaMask with these settings:
| Setting | Value |
|---------|-------|
| **Network Name** | Cosmos EVM Local |
| **RPC URL** | `http://localhost:8545` |
| **Chain ID** | `262144` |
-| **Currency Symbol** | `TEST` |
-| **Block Explorer URL** | (leave empty for local) |
-
-
-Make sure your local chain is running before adding the network. The RPC URL must be accessible from your browser.
-
+| **Currency Symbol** | `ATOM` |
+| **Block Explorer URL** | (leave empty) |
After adding the network:
-- Switch to the "Cosmos EVM Local" network in MetaMask
-- You should see your account balance (if the test account was funded in genesis)
-- You can now interact with the chain through MetaMask
+- Switch to "Cosmos EVM Local" in MetaMask
+- You should see your account balance
+- You can now send transactions and interact with contracts
## Key Concepts
-Before diving into configuration, familiarize yourself with:
-
-**Precompiled Contracts** - [Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles) bridge EVM smart contracts with Cosmos SDK modules, enabling Solidity contracts to access staking, governance, IBC, and other native functionality.
-
-**Cosmos SDK Modules** - Explore the [core modules](/docs/evm/next/documentation/cosmos-sdk) that provide blockchain functionality:
-- [Bank](https://docs.cosmos.network/main/build/modules/bank) - Token transfers and balances
-- [Staking](https://docs.cosmos.network/main/build/modules/staking) - Validator delegation and rewards
-- [Governance](https://docs.cosmos.network/main/build/modules/governance) - On-chain voting and proposals
-- [Slashing](https://docs.cosmos.network/main/build/modules/slashing) - Validator penalty enforcement
-- [Distribution](https://docs.cosmos.network/main/build/modules/distribution) - Fee and reward distribution
-
-## Understanding the Stack
-
-Before diving into configuration, it's helpful to understand what you're building with:
+### Precompiles
-- **[Cosmos SDK Modules](/docs/evm/next/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
-- **[Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
-- **[Security & Audits](/docs/evm/next/documentation/overview#audits)** - Third-party security assessments of the codebase
+Precompiles are native Cosmos SDK functionality exposed as EVM contracts. The evmd reference implementation enables all 9 precompiles by default:
-## Configuration Guides
+- **P256** (`0x0100`) - Cryptographic operations
+- **Bech32** (`0x0400`) - Address conversion
+- **Staking** (`0x0800`) - Validator operations
+- **Distribution** (`0x0801`) - Reward distribution
+- **ICS20** (`0x0802`) - IBC transfers
+- **Vesting** (`0x0803`) - Vesting accounts
+- **Bank** (`0x0804`) - Token transfers
+- **Governance** (`0x0805`) - On-chain voting
+- **Slashing** (`0x0806`) - Validator slashing
-The following three guides cover three general categories: Basic/Introductory setup, understanding and setting all network parameters, and final steps to launch the network successfully:
+
+Learn more in the [Precompiles Overview](/docs/evm/v0.5.0/documentation/smart-contracts/precompiles/overview).
+
-
-
-Fork the repository and prepare your development environment
-
-
+### Token Pairs
-
-
-Configure chain identity, parameters, and genesis file
-
-
+The evmd implementation includes a default token pair that maps the native denomination (`aatom`) to an ERC20 contract (WEVMOS). This allows the native token to be used in EVM contracts.
-
-
-Set up node configuration and coordinate network launch
-
-
+### 18-Decimal Tokens
-These guides are designed to be followed in order, taking you from an empty repository to a running blockchain network. For a comprehensive reference of all commands and configuration options, see the [Configuration Reference](/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference).
+The evmd uses 18-decimal precision for direct EVM compatibility:
+- **Base denom**: `aatom` (atto-atom)
+- **Display denom**: `atom`
+- **Exponent**: 18 (1 atom = 10^18 aatom)
-## Advanced Configuration
+This provides 1:1 mapping with Ethereum's wei system without requiring additional modules.
-For specialized customization beyond the core configuration:
+## Next Steps
-
-
-Configure the EVM mempool for nonce gap handling and transaction prioritization
+
+
+Detailed guide to all configuration options
-
-
-
-Deploy standard contracts at genesis for Create2, Multicall3, Permit2, and Safe
+
+Learn about available precompiled contracts
-
-### Recommended Reading
-
-
-EVM execution and parameter configuration
+EVM module documentation and parameters
-
-Available precompiled contracts and integration
+
+Token pair management and configuration
---
-For additional support and community resources, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
\ No newline at end of file
+For additional support, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm).
diff --git a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/using-local-node.mdx b/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/using-local-node.mdx
deleted file mode 100644
index e0b037db..00000000
--- a/docs/evm/v0.5.0/documentation/getting-started/build-a-chain/using-local-node.mdx
+++ /dev/null
@@ -1,270 +0,0 @@
----
-title: "Using the Local Node"
-description: "Learn how to run your Cosmos EVM chain locally for development and testing. This guide covers the local_node.sh script, configuration options, wallet connections, and key management."
----
-
-# Example Cosmos EVM Chain
-
-The `evmd` directory in the Cosmos EVM repository contains an example chain that demonstrates the integration of Cosmos EVM modules. This reference implementation is based on the simapp implementation from the Cosmos SDK repository, which provides a simplified yet complete blockchain foundation.
-
-
-This chain implementation serves two primary purposes:
-1. **Demonstration**: Shows how to integrate Cosmos EVM modules into a blockchain
-2. **Testing Foundation**: Provides a working chain for development and testing
-
-You can use evmd as the starting point for building your own custom chain.
-
-
-## Why Cosmos-EVM?
-
-In addition to being a standalone module, the [Cosmos/EVM](https://github.com/cosmos/evm) project repository includes `evmd`, a complete working blockchain pre-wired with the EVM module and a few supporting modules.
-
-Because this example is actively developed and maintained alongside the module itself and serves as the canonical reference implementation, it is the perfect starting point to modify and customize into your own EVM-compatible chain.
-One of the largest benefits is the simplicity and time saved. Rather than researching and going through the trial and error process of assembling components individually and figuring out what works, simply fork `evmd` and customize it to your needs.
-This approach lets engineers focus on what makes your chain unique rather than debugging basic integration issues.
-
-## Prerequisites
-
-You'll need a standard Go development environment:
-
-- **Go 1.23.8+** - [Installation guide](https://go.dev/doc/install)
-- **Git** - For repository management
-- **Make** - For build commands
-- **GCC/Build Tools** - Required for CGo compilation
-
-
-If you're new to Go development, ensure your `$GOPATH/bin` is in your system PATH. Most package managers (Homebrew, apt, pacman) handle this automatically.
-
-
-## Building Your Custom Chain
-
-The `evmd` implementation serves as the foundation for building your own custom blockchain. To create your chain:
-
-
-
-Start by forking the Cosmos EVM repository:
-
-```bash
-git clone https://github.com/cosmos/evm.git
-cd evm
-```
-
-
-
-Rename the `evmd` directory and update all references:
-
-```bash
-# Rename directory
-mv evmd yourchain
-
-# Update imports and binary name
-find . -type f -name "*.go" -exec sed -i 's/evmd/yourchain/g' {} \;
-```
-
-Update `go.mod` to reflect your repository path.
-
-
-
-Modify the default configuration in your chain:
-
-- **Chain IDs**: Update Cosmos chain ID and EVM chain ID
-- **Bech32 Prefix**: Set your address prefix in `evmd/config/config.go`
-- **Token Denomination**: Configure in genesis
-- **Precompiles**: Enable only the precompiles you need
-- **Modules**: Add or remove modules based on requirements
-
-
-
-
-Use the local node script to test your changes:
-
-```bash
-./local_node.sh -y
-```
-
-Verify that:
-- The chain starts successfully
-- JSON-RPC is accessible
-- Wallets can connect
-- Transactions work as expected
-
-
-
-Once testing is complete, prepare for testnet deployment:
-
-- Set up validator infrastructure
-- Configure persistent peers
-- Coordinate genesis with validators
-- Launch the network
-
-
-
-
-## Default Configuration
-
-The example chain (`evmd`) comes with the following default configuration:
-
-| Option | Value | Description |
-|---------------------|------------------------|-------------|
-| **Binary** | `evmd` | The compiled chain binary name |
-| **Chain ID** | `cosmos_262144-1` | Default Cosmos chain ID (format: `name_evmChainID-version`) |
-| **EVM Chain ID** | `262144` | EVM chain ID for transaction replay protection |
-| **Custom Opcodes** | - | No custom opcodes by default |
-| **Token Pairs** | 1 (native token) | Default ERC20 token pair for the native denomination |
-| **Denomination** | `atest` | Native token denomination (18 decimals, atto-prefix) |
-| **EVM Permissioning** | Permissionless | Anyone can deploy and call contracts |
-| **Enabled Precompiles** | All | All nine static precompiles are enabled by default |
-
-
-The default configuration uses an 18-decimal token (`atest`) which provides direct EVM compatibility without requiring the precisebank module. This is the recommended setup for new chains.
-
-
-## Running The Chain
-
-To run the example chain locally, use the provided local node script from the repository root:
-
-```bash
-./local_node.sh [FLAGS]
-```
-
-### Available Flags
-
-- `-y`: Overwrite previous database (fresh start)
-- `-n`: Do **not** overwrite previous database (resume from previous state)
-- `--no-install`: Skip installation of the binary (use existing binary)
-- `--remote-debugging`: Build a binary suitable for remote debugging
-
-
-The `local_node.sh` script handles all the setup including:
-- Building the `evmd` binary
-- Initializing the chain configuration
-- Setting up genesis parameters
-- Starting the chain with JSON-RPC enabled
-
-
-### Example Usage
-
-
-```bash Fresh Start
-# Start with a clean slate
-./local_node.sh -y
-```
-
-```bash Resume Previous State
-# Continue from where you left off
-./local_node.sh -n
-```
-
-```bash Development Mode
-# Skip rebuild if binary already exists
-./local_node.sh --no-install
-```
-
-```bash Debug Mode
-# Build with debugging symbols
-./local_node.sh --remote-debugging
-```
-
-
-## Connect to Wallet
-
-Once the chain is running, you can connect using any Ethereum-compatible wallet. The example below uses MetaMask:
-
-### MetaMask Setup
-
-
-
-Use the following seed phrase when adding a new wallet in MetaMask:
-
-```
-gesture inject test cycle original hollow east ridge hen combine
-junk child bacon zero hope comfort vacuum milk pitch cage oppose
-unhappy lunar seat
-```
-
-
-**Notice**: This is a well-known test seed phrase. **Never** use it for mainnet or with real funds. It's provided solely for local development and testing purposes.
-
-
-
-
-1. Click the **Network** button on the top left of MetaMask
-2. Click **Add custom network** at the bottom of the modal
-3. Configure the network with these settings:
-
-| Setting | Value |
-|---------|-------|
-| **Network Name** | Cosmos EVM Local |
-| **RPC URL** | `http://localhost:8545` |
-| **Chain ID** | `262144` |
-| **Currency Symbol** | `TEST` |
-| **Block Explorer URL** | (leave empty for local) |
-
-
-Make sure your local chain is running before adding the network. The RPC URL must be accessible from your browser.
-
-
-
-
-After adding the network:
-- Switch to the "Cosmos EVM Local" network in MetaMask
-- You should see your account balance (if the test account was funded in genesis)
-- You can now interact with the chain through MetaMask
-
-
-
-## Key Concepts
-
-Before diving into configuration, familiarize yourself with:
-
-**Precompiled Contracts** - [Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles) bridge EVM smart contracts with Cosmos SDK modules, enabling Solidity contracts to access staking, governance, IBC, and other native functionality.
-
-**Cosmos SDK Modules** - Explore the [core modules](/docs/evm/next/documentation/cosmos-sdk) that provide blockchain functionality:
-- [Bank](https://docs.cosmos.network/main/build/modules/bank) - Token transfers and balances
-- [Staking](https://docs.cosmos.network/main/build/modules/staking) - Validator delegation and rewards
-- [Governance](https://docs.cosmos.network/main/build/modules/governance) - On-chain voting and proposals
-- [Slashing](https://docs.cosmos.network/main/build/modules/slashing) - Validator penalty enforcement
-- [Distribution](https://docs.cosmos.network/main/build/modules/distribution) - Fee and reward distribution
-
-## Understanding the Stack
-
-Before diving into configuration, it's helpful to understand what you're building with:
-
-- **[Cosmos SDK Modules](/docs/evm/next/documentation/cosmos-sdk)** - Core blockchain functionality including staking, governance, and token management
-- **[Precompiles](/docs/evm/next/documentation/smart-contracts/precompiles)** - Smart contract interfaces that bridge EVM and Cosmos SDK capabilities
-- **[Security & Audits](/docs/evm/next/documentation/overview#audits)** - Third-party security assessments of the codebase
-
-
-These guides are designed to be followed in order, taking you from an empty repository to a running blockchain network. For a comprehensive reference of all commands and configuration options, see the [Configuration Reference](/docs/evm/next/documentation/getting-started/build-a-chain/configuration-reference).
-
-## Advanced Configuration
-
-For specialized customization beyond the core configuration:
-
-
-
-Configure the EVM mempool for nonce gap handling and transaction prioritization
-
-
-
-
-
-Deploy standard contracts at genesis for Create2, Multicall3, Permit2, and Safe
-
-
-
-### Recommended Reading
-
-
-
-EVM execution and parameter configuration
-
-
-
-Available precompiled contracts and integration
-
-
-
----
-
-For additional support and community resources, visit the [Cosmos EVM GitHub repository](https://github.com/cosmos/evm) or join the Cosmos developer community.
\ No newline at end of file
diff --git a/docs/evm/v0.5.0/documentation/migrations/migration-v0.4-to-v0.5.mdx b/docs/evm/v0.5.0/documentation/migrations/migration-v0.4-to-v0.5.mdx
index e9a53647..7f96449c 100644
--- a/docs/evm/v0.5.0/documentation/migrations/migration-v0.4-to-v0.5.mdx
+++ b/docs/evm/v0.5.0/documentation/migrations/migration-v0.4-to-v0.5.mdx
@@ -2,6 +2,8 @@
title: "Migration: v0.4.x to v0.5.0"
---
+# Cosmos EVM v0.4.0 → v0.5.0 Migration
+
## 0) Prep
- Create a branch: `git switch -c upgrade/evm-v0.5`.
@@ -243,69 +245,13 @@ function can now happen *alongside the keeper instantiation*, and not after. The
)
```
-### Denom Configs
+#### Denom Configs
[#661](https://github.com/cosmos/evm/pull/661) removes the instantiation of chain configs via app.go
and moves them to state or genesis.
It is critical to remove any use of EvmAppOptions as calling the configurator will panic the chain
at runtime during startup.
-#### EVM Chain ID
-
-The EVM chain ID is now retrieved directly from `appOpts` instead of being passed as a parameter. In `app.go`, the chain ID is obtained using:
-
-```go
-evmChainID := cast.ToUint64(appOpts.Get(srvflags.EVMChainID))
-```
-
-See `evmd/app.go:216` for the reference implementation.
-
-#### Function Signature Changes
-
-In `app.go`, remove evmChainID and evmAppOptions from the NewApp signature.
-
-```diff
-// NewExampleApp returns a reference to an initialized EVMD.
-func NewExampleApp(
- logger log.Logger,
- db dbm.DB,
- traceStore io.Writer,
- loadLatest bool,
- appOpts servertypes.AppOptions,
-- evmChainID uint64,
-- evmAppOptions evmconfig.EVMOptionsFn,
- baseAppOptions ...func(*baseapp.BaseApp),
-) *EVMD {
-```
-
-Afterwards, fix any reference to the function by removing the inputs.
-
-Then, remove any reference of evmAppOptions being called:
-
-`app.go`
-```diff
-- if err := evmAppOptions(evmChainID); err != nil {
-- panic(err)
-- }
-```
-
-`root.go`
-```diff
-- noOpEvmAppOptions := func(_ uint64) error {
-- return nil
-- }
-```
-```diff
-- if initClientCtx.ChainID != "" {
-- if err := config.EvmAppOptions(config.EVMChainID); err != nil {
-- panic(err)
-- }
-- }
-```
-
-`evmd_config.go`, `chain_id.go`, `config.go`, `constants.go` have been moved to
-`github.com/cosmos/evm/config` and may be removed to your repo.
-
#### UpgradeHandler
As the configs have been moved to state and genesis, you must include an UpgradeHandler if your chain does
@@ -314,6 +260,7 @@ not satisfy the following conditions.
2. Your EVM Denom must have a display denom associated with it in `DenomMetadata`.
1. The display denom for the EVM Denom must have an accurate decimal value (i.e. for `uatom`, `atom` must have a decimal value of 6.
3. Your chain is an 18-decimal chain.
+4. Call `InitEvmCoinInfo` to initialize EVM coin metadata in the module store.
In your UpgradeHandler: