mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
Feat/add networks (#1303)
* No commit suggestions generated * No commit suggestions generated * No commit suggestions generated
This commit is contained in:
@@ -0,0 +1,247 @@
|
||||
# Environment Variables
|
||||
|
||||
This document describes all environment variables that can be configured for the Sonr testnet.
|
||||
|
||||
## Configuration File
|
||||
|
||||
All variables are defined in `.env` file in the repository root. Copy `.env.example` to `.env` and customize:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Global Configuration
|
||||
|
||||
These variables are used during initialization and apply to all services.
|
||||
|
||||
### Chain Configuration
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `CHAIN_ID` | `sonrtest_1-1` | Blockchain chain identifier |
|
||||
| `DENOM` | `usnr` | Base denomination for the native token |
|
||||
| `KEYRING` | `test` | Keyring backend (test, file, os) |
|
||||
| `KEYALGO` | `eth_secp256k1` | Key algorithm for validator keys |
|
||||
|
||||
### Network Parameters
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `BLOCK_TIME` | `5s` | Target block time |
|
||||
| `VOTING_PERIOD` | `30s` | Governance proposal voting period |
|
||||
| `EXPEDITED_VOTING_PERIOD` | `15s` | Expedited proposal voting period |
|
||||
| `MAX_GAS` | `100000000` | Maximum gas per block |
|
||||
| `MIN_COMMISSION_RATE` | `0.050000000000000000` | Minimum validator commission rate (5%) |
|
||||
|
||||
### Validator Mnemonics
|
||||
|
||||
**⚠️ WARNING**: Change these for production! Default mnemonics are public.
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `ALICE_MNEMONIC` | 24-word mnemonic for Alice validator |
|
||||
| `BOB_MNEMONIC` | 24-word mnemonic for Bob validator |
|
||||
| `CAROL_MNEMONIC` | 24-word mnemonic for Carol validator |
|
||||
| `FAUCET_MNEMONIC` | 24-word mnemonic for faucet account |
|
||||
|
||||
### Initial Balances
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `BASE_ALLOCATION` | `100000000000000000000000000usnr` | Base allocation per validator (100M SNR) |
|
||||
| `STAKE_AMOUNT` | `30000000000000000000000usnr` | Initial stake per validator (30M SNR) |
|
||||
| `FAUCET_ALLOCATION` | `250000000000000000000000000000usnr` | Faucet account balance (250M SNR) |
|
||||
|
||||
### Docker Configuration
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `DOCKER_IMAGE` | `onsonr/snrd:latest` | Docker image for validator and sentry nodes |
|
||||
|
||||
---
|
||||
|
||||
## Container-Specific Variables
|
||||
|
||||
These variables are set in `docker-compose.yml` for each container.
|
||||
|
||||
### Validators (val-alice, val-bob, val-carol)
|
||||
|
||||
All validators share the same environment variables but with different values:
|
||||
|
||||
| Variable | Value | Description |
|
||||
|----------|-------|-------------|
|
||||
| `CHAIN_ID` | `sonrtest_1-1` | Chain identifier (same for all) |
|
||||
| `MONIKER` | `val-{name}` | Validator node name (val-alice, val-bob, val-carol) |
|
||||
|
||||
**Command-line flags:**
|
||||
- `--home /root/.sonr` - Node home directory
|
||||
- `--pruning=nothing` - Disable state pruning
|
||||
- `--minimum-gas-prices=0usnr` - Minimum gas price (0 for testnet)
|
||||
- `--chain-id=sonrtest_1-1` - Chain identifier
|
||||
|
||||
**Networks:**
|
||||
- Private network: `net-{name}` (net-alice, net-bob, net-carol)
|
||||
|
||||
**Volumes:**
|
||||
- `./val-{name}:/root/.sonr` - Bind mount for node data
|
||||
|
||||
---
|
||||
|
||||
### Sentries (sentry-alice, sentry-bob, sentry-carol)
|
||||
|
||||
All sentries share the same environment variables but with different values:
|
||||
|
||||
| Variable | Value | Description |
|
||||
|----------|-------|-------------|
|
||||
| `CHAIN_ID` | `sonrtest_1-1` | Chain identifier (same for all) |
|
||||
| `MONIKER` | `sentry-{name}` | Sentry node name (sentry-alice, sentry-bob, sentry-carol) |
|
||||
|
||||
**Command-line flags:**
|
||||
- `--home /root/.sonr` - Node home directory
|
||||
- `--pruning=nothing` - Disable state pruning
|
||||
- `--minimum-gas-prices=0usnr` - Minimum gas price (0 for testnet)
|
||||
- `--rpc.laddr=tcp://0.0.0.0:26657` - RPC listen address
|
||||
- `--json-rpc.api=eth,txpool,personal,net,debug,web3` - Enabled JSON-RPC APIs
|
||||
- `--json-rpc.address=0.0.0.0:8545` - EVM JSON-RPC address
|
||||
- `--json-rpc.ws-address=0.0.0.0:8546` - EVM WebSocket address
|
||||
- `--chain-id=sonrtest_1-1` - Chain identifier
|
||||
|
||||
**Networks:**
|
||||
- Private network: `net-{name}` (connects to validator)
|
||||
- `net-public` (connects to other sentries)
|
||||
- `cloudflare-net` (for DockFlare tunnels)
|
||||
|
||||
**Volumes:**
|
||||
- `./sentry-{name}:/root/.sonr` - Bind mount for node data
|
||||
|
||||
**DockFlare Labels (indexed):**
|
||||
|
||||
Each sentry exposes 4 endpoints via Cloudflare tunnels:
|
||||
|
||||
| Index | Hostname Pattern | Service | Description |
|
||||
|-------|------------------|---------|-------------|
|
||||
| `0` | `{name}-rpc.sonr.land` | `http://sentry-{name}:26657` | Tendermint RPC |
|
||||
| `1` | `{name}-rest.sonr.land` | `http://sentry-{name}:1317` | Cosmos REST API |
|
||||
| `2` | `{name}-grpc.sonr.land` | `http://sentry-{name}:9090` | gRPC endpoint |
|
||||
| `3` | `{name}-evm.sonr.land` | `http://sentry-{name}:8545` | EVM JSON-RPC |
|
||||
|
||||
**Example for sentry-alice:**
|
||||
```yaml
|
||||
labels:
|
||||
- "dockflare.enable=true"
|
||||
- "dockflare.0.hostname=alice-rpc.sonr.land"
|
||||
- "dockflare.0.service=http://sentry-alice:26657"
|
||||
- "dockflare.1.hostname=alice-rest.sonr.land"
|
||||
- "dockflare.1.service=http://sentry-alice:1317"
|
||||
- "dockflare.2.hostname=alice-grpc.sonr.land"
|
||||
- "dockflare.2.service=http://sentry-alice:9090"
|
||||
- "dockflare.3.hostname=alice-evm.sonr.land"
|
||||
- "dockflare.3.service=http://sentry-alice:8545"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### IPFS (ipfsctl)
|
||||
|
||||
| Variable | Value | Description |
|
||||
|----------|-------|-------------|
|
||||
| `IPFS_PROFILE` | `server` | IPFS configuration profile for server mode |
|
||||
|
||||
**Networks:**
|
||||
- `net-public` (connects to sentries)
|
||||
- `cloudflare-net` (for DockFlare tunnels)
|
||||
|
||||
**Volumes:**
|
||||
- `ipfs-data:/data/ipfs` - Named volume for IPFS data
|
||||
|
||||
**DockFlare Labels:**
|
||||
|
||||
| Index | Hostname | Service | Description |
|
||||
|-------|----------|---------|-------------|
|
||||
| `0` | `ipfs-api.sonr.land` | `http://ipfsctl:5001` | IPFS API endpoint |
|
||||
| `1` | `ipfs-gateway.sonr.land` | `http://ipfsctl:8080` | IPFS Gateway |
|
||||
|
||||
---
|
||||
|
||||
## DockFlare Configuration
|
||||
|
||||
DockFlare requires the following environment variables (not in `.env`, set when running DockFlare container):
|
||||
|
||||
| Variable | Required | Description |
|
||||
|----------|----------|-------------|
|
||||
| `CLOUDFLARE_API_TOKEN` | ✅ Yes | Cloudflare API token with Tunnel:Edit, DNS:Edit, Zone:Read permissions |
|
||||
| `CLOUDFLARE_ACCOUNT_ID` | ⚠️ Recommended | Cloudflare account ID (found in dashboard) |
|
||||
| `CLOUDFLARE_ZONE_ID` | ⚠️ Recommended | Cloudflare zone ID for domain (found in dashboard) |
|
||||
|
||||
**Example DockFlare Setup:**
|
||||
```bash
|
||||
docker run -d \
|
||||
--name dockflare \
|
||||
--restart unless-stopped \
|
||||
--network cloudflare-net \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-e CLOUDFLARE_API_TOKEN=your_token_here \
|
||||
-e CLOUDFLARE_ACCOUNT_ID=your_account_id \
|
||||
-e CLOUDFLARE_ZONE_ID=your_zone_id \
|
||||
ghcr.io/sonr-io/dockflare:latest
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Runtime Overrides
|
||||
|
||||
You can override specific values at runtime by modifying `docker-compose.yml` or passing environment variables:
|
||||
|
||||
### Override Docker Image
|
||||
```bash
|
||||
export DOCKER_IMAGE=onsonr/snrd:v1.2.3
|
||||
make start
|
||||
```
|
||||
|
||||
### Override Chain ID
|
||||
Edit `docker-compose.yml` and change all instances of:
|
||||
```yaml
|
||||
environment:
|
||||
- CHAIN_ID=your-custom-chain-id
|
||||
```
|
||||
|
||||
And update command flags:
|
||||
```yaml
|
||||
command: >
|
||||
snrd start
|
||||
...
|
||||
--chain-id=your-custom-chain-id
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Security Best Practices
|
||||
|
||||
1. **Never commit `.env` to version control** - It's already in `.gitignore`
|
||||
2. **Generate new mnemonics for production**:
|
||||
```bash
|
||||
snrd keys add test --keyring-backend test --output json | jq -r .mnemonic
|
||||
```
|
||||
3. **Use KMS for production validator keys** (e.g., tmkms)
|
||||
4. **Rotate Cloudflare API tokens** regularly
|
||||
5. **Use strong passwords** if switching from `test` keyring to `file` or `os`
|
||||
6. **Backup mnemonics securely** - They cannot be recovered if lost
|
||||
|
||||
---
|
||||
|
||||
## Verification
|
||||
|
||||
After configuration, verify your setup:
|
||||
|
||||
```bash
|
||||
# Check .env is loaded
|
||||
make status
|
||||
|
||||
# Test endpoints
|
||||
make test
|
||||
|
||||
# View container environment
|
||||
docker inspect sentry-alice -f '{{json .Config.Env}}' | jq
|
||||
```
|
||||
Reference in New Issue
Block a user