diff --git a/NETWORKS.md b/NETWORKS.md index c6caa04..1350d21 100644 --- a/NETWORKS.md +++ b/NETWORKS.md @@ -4,7 +4,6 @@ |-----------------|-----------|------------|----------|---------------| | tacchain_239-1 | `mainnet` | **Active** | `v1.0.1` | Mainnet | | tacchain_2391-1 | `testnet` | **Active** | `v1.0.2` | Saint Petersburg Testnet | -| tacchain_2390-1 | `testnet` | **Inactive** | `v0.0.7-testnet` | Turin Testnet | # Mainnet (`tacchain_239-1`) @@ -26,7 +25,7 @@ | Peer 2 | 10550a03e4f7fa487c78fbd07e0770e2b0f085c7@64.46.115.78:58960 | | Peer 3 | 0efae9d157f0ef60ad7d25507d6939799f832e34@173.244.202.99:58960 | | Peer 4 | 78079166d06e345dbf4a5c932ee3c69a04148e92@107.6.91.38:58960 | -| Snapshots | http://snapshot.tac.ankr.com/tac-{mainnet,spb,turin}-{full,archive}-latest.{tar.lz4,shasum} | +| Snapshots | http://snapshot.tac.ankr.com/tac-{mainnet,spb}-{full,archive}-latest.{tar.lz4,shasum} | | - full | http://snapshot.tac.ankr.com/tac-mainnet-full-latest.tar.lz4 | | - archive | http://snapshot.tac.ankr.com/tac-mainnet-archive-latest.tar.lz4 | ### Hardware Requirements @@ -287,7 +286,7 @@ pex = false | Peer 2 | 04a2152eed9f73dc44779387a870ea6480c41fe7@206.217.210.164:45140 | | Peer 3 | 5aaaf8140262d7416ac53abe4e0bd13b0f582168@23.92.177.41:45110 | | Peer 4 | ddb3e8b8f4d051e914686302dafc2a73adf9b0d2@23.92.177.41:45120 | -| Snapshots | http://snapshot.tac.ankr.com/tac-{mainnet,spb,turin}-{full,archive}-latest.{tar.lz4,shasum} | +| Snapshots | http://snapshot.tac.ankr.com/tac-{mainnet,spb}-{full,archive}-latest.{tar.lz4,shasum} | | - full | http://snapshot.tac.ankr.com/tac-spb-full-latest.tar.lz4 | | - archive | http://snapshot.tac.ankr.com/tac-spb-archive-latest.tar.lz4 | @@ -564,350 +563,8 @@ pex = false #### 4. Restart validator node and start sentry node. -# Turin Testnet (`tacchain_2390-1`) +# FAQ -| Chain ID | `tacchain_2390-1` | -|-----------------------------|-----------------------------------------------------------------------------------------------| -| Tacchaind version | `v0.0.7-testnet` | -| RPC | | -| Genesis | | -| gRPC | | -| REST API | | -| EVM JSON RPC | | -| Faucet | | -| EVM Explorer | | -| Cosmos Explorer | | -| Timeout commit (block time) | 3s | -| Peer 1 | f8124878e3526a9814c0a5f865820c5ea7eb26f8@72.251.230.233:45130 | -| Peer 2 | 4a03d6622a2ad923d79e81951fe651a17faf0be8@107.6.94.246:45130 | -| Peer 3 | ea5719fe6587b18ed0fee81f960e23c65c0e0ccc@206.217.210.164:45130 | -| Snapshots | http://snapshot.tac.ankr.com/tac-{mainnet,spb,turin}-{full,archive}-latest.{tar.lz4,shasum} | -| - full | http://snapshot.tac.ankr.com/tac-turin-full-latest.tar.lz4 | -| - archive | http://snapshot.tac.ankr.com/tac-turin-archive-latest.tar.lz4 | -| Staking UI | https://staking.spb.tac.build/ | - -#### Hardware Requirements - - - CPU: 8 cores - - RAM: 16GB (rpc) / 32GB (validator) - - SSD: 500GB NVMe - -### Join Tac Turin Testnet Using Official Snapshots - -This example guide connects to testnet. You can replace `chain-id`, `persistent_peers`, `timeout_commit`, `genesis url` with the network you want to join. `--home` flag specifies the path to be used. The example will create [.testnet](.testnet) folder. - -### Prerequisites - - - [Go >= v1.21](https://go.dev/doc/install) - - jq - - curl - - tar - - lz4 - - wget - -### 1. Install latest `tacchaind` [v0.0.7-testnet](https://github.com/TacBuild/tacchain/tree/v0.0.7-testnet) - -``` shell -git checkout v0.0.7-testnet -make install -``` - -### 2. Initialize network folder - -In this example our node moniker will be `testnode`, don't forget to name your own node differently. - -``` sh -tacchaind init testnode --chain-id tacchain_2390-1 --home .testnet -``` - -### 3. Modify your [config.toml](.testnet/config/config.toml) - -``` toml -.. -timeout_commit = "3s" -.. -persistent_peers = "f8124878e3526a9814c0a5f865820c5ea7eb26f8@72.251.230.233:45130,4a03d6622a2ad923d79e81951fe651a17faf0be8@107.6.94.246:45130,ea5719fe6587b18ed0fee81f960e23c65c0e0ccc@206.217.210.164:45130" -.. -``` - -### 4. Fetch genesis - -``` sh -curl https://raw.githubusercontent.com/TacBuild/tacchain/refs/heads/main/networks/tacchain_2390-1/genesis.json > .testnet/config/genesis.json -``` - -### 5. Fetch snapshot - -``` sh -cd .testnet -rm -rf data -wget http://snapshot.tac-turin.ankr.com/tac-turin-full-latest.tar.lz4 -lz4 -dc < tac-turin-full-latest.tar.lz4 | tar -xvf - -``` - -### 6. Start node - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet -``` - -### Join Tac Turin Testnet Using Docker - -#### Prerequisites - - - [Go >= v1.21](https://go.dev/doc/install) - - jq - - curl - - lz4 - - docker - - docker compose - -``` shell -export TAC_HOME="~/.tacchain" -export VERSION="v0.0.7-testnet" - -git clone https://github.com/TacBuild/tacchain.git && cd tacchain -mkdir -p $TAC_HOME -cp networks/tacchain_2390-1/{docker-compose.yaml,.env.turin} $TAC_HOME/ -git checkout ${VERSION} -docker build -t tacchain:${VERSION} . -cd $TAC_HOME -wget http://snapshot.tac.ankr.com/tac-turin-full-latest.tar.lz4 -wget http://snapshot.tac.ankr.com/tac-turin-full-latest.shasum -shasum -c tac-turin-full-latest.shasum -lz4 -dc < tac-turin-full-latest.tar.lz4 | tar -xvf - -docker compose --env-file=.env.turin up -d -## Test -curl -L localhost:45138 -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","method": "eth_blockNumber","params": [],"id": 1}' -``` - -Assuming all is working you can now proceed from "Join as a validator” - - -## Join Tac Turin Testnet Manually - -This example guide connects to testnet. You can replace `chain-id`, `persistent_peers`, `timeout_commit`, `genesis url` with the network you want to join. `--home` flag specifies the path to be used. The example will create [.testnet](.testnet) folder. - -### Prerequisites - - - [Go >= 1.23.6](https://go.dev/doc/install) - - jq - - curl - -### 1. Install `tacchaind` [v0.0.1](https://github.com/TacBuild/tacchain/tree/v0.0.1) - -``` shell -git checkout v0.0.1 -make install -``` - -### 2. Initialize network folder - -In this example our node moniker will be `testnode`, don't forget to name your own node differently. - -``` sh -tacchaind init testnode --chain-id tacchain_2390-1 --home .testnet -``` - -### 3. Modify your [config.toml](.testnet/config/config.toml) - -``` toml -.. -timeout_commit = "3s" -.. -persistent_peers = "f8124878e3526a9814c0a5f865820c5ea7eb26f8@72.251.230.233:45130,4a03d6622a2ad923d79e81951fe651a17faf0be8@107.6.94.246:45130,ea5719fe6587b18ed0fee81f960e23c65c0e0ccc@206.217.210.164:45130" -.. -``` - -### 4. Fetch genesis - -``` sh -curl https://raw.githubusercontent.com/TacBuild/tacchain/refs/heads/main/networks/tacchain_2390-1/genesis.json > .testnet/config/genesis.json -``` - -### 5. Start node with `--halt-height` flag. - -`--halt-height` flag which will automatically stop your node at specified block height - we want to run `v0.0.1` until block height `1727178`, then we will update our binary before we proceed. - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet --halt-height 1727178 -``` - -### 6. Update binary to [v0.0.2](https://github.com/TacBuild/tacchain/tree/v0.0.2) - -Once your node has stopped at specified height, we need to update our binary. This is required because it has breaking changes, which would break our state if run before that point. In this case we enabled EIP712 support. - -``` shell -git checkout v0.0.2 -make install -``` - -### 7. Start node with `--halt-height` flag. - -We will repeat the same procedure and we need to stop our node once again at specified block, then update our binary. - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet --halt-height 2259069 -``` - -### 8. Update binary to [v0.0.4](https://github.com/TacBuild/tacchain/tree/v0.0.4) - -In `v0.0.4` we introduced support for `mcopy`, which is another breaking change. - -``` shell -git checkout v0.0.4 -make install -``` - -### 9. Start node with `--halt-height` flag. - -We will repeat the same procedure and we need to stop our node once again at specified block, then update our binary. - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet --halt-height 3192449 -``` - -### 10. Update binary to [v0.0.5](https://github.com/TacBuild/tacchain/tree/v0.0.5) - -In `v0.0.5` we introduced changes to `DefaultPowerReduction` variable and updated validators state, which is another breaking change. - -``` shell -git checkout v0.0.5 -make install -``` - -### 11. Start node - -This time we are not going to use `--halt-height` flag, instead we'll wait for our node to hit height `3408172`, at which we applied our next upgrade - `v0.0.6-testnet`. At the specified height, you should see a consensus error stating that you need to upgrade your binary version. - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet -``` - -### 12. Upgrade binary to [v0.0.6-testnet](https://github.com/TacBuild/tacchain/tree/v0.0.6-testnet) - -Once you get the error we mentioned above, you can stop your node and proceed with next update. In this version bumped GETH to v1.13.15. - -``` shell -git checkout v0.0.6-testnet -make install -``` - -### 13. Start node - -``` shell -tacchaind start --chain-id tacchain_2390-1 --home .testnet -``` - -## Join as a validator - -NOTE: The provided examples use `--keyring-backend test`. This is not recommended for production validator nodes. Please use `os` or `file` for encryption features and more advanced security. - -### 1. Make sure you followed [Join Tac Turin Testnet](#join-tac-turin-testnet) guide and you have a fully synced node to the latest block. - -### 2. Fund account and import key - -1. Use the [faucet](https://faucet.tac-turin.ankr.com/) to get funds. - -2. Export your metamask private key - -3. Import private key using the following command. Make sure to replace `` with your funded private key. - -``` sh -tacchaind --home .testnet keys unsafe-import-eth-key validator --keyring-backend test -``` - -### 3. Send `MsgCreateValidator` transaction - -1. Generate tx json file - -In this example our moniker is `testnode` as named when we initialized our node. Don't forget to replace with your node moniker. - -``` sh -echo "{\"pubkey\":$(tacchaind --home .testnet tendermint show-validator),\"amount\":\"1000000000utac\",\"moniker\":\"testnode\",\"identity\":null,\"website\":null,\"security\":null,\"details\":null,\"commission-rate\":\"0.1\",\"commission-max-rate\":\"0.2\",\"commission-max-change-rate\":\"0.01\",\"min-self-delegation\":\"1\"}" > validatortx.json -``` - -2. Broadcast tx - -``` sh -tacchaind --home .testnet tx staking create-validator validatortx.json --from validator --keyring-backend test -y -``` - -### 4. Delegate more tokens (optional) - -In this example our moniker is `testnode` as named when we initialized our node. Don't forget to replace with your node moniker. - -``` sh -tacchaind --home .testnet tx staking delegate $(tacchaind --home .testnet q staking validators --output json | jq -r '.validators[] | select(.description.moniker == "testnode") | .operator_address') 1000000000utac --keyring-backend test --from validator -y -``` - -### 5. Participating in governance (optional) - -``` sh -# list all proposals on chain -tacchaind q gov proposals - -# once you have identified the proposal (need `proposal_id`) you can place your vote. In the following example we vote with 'yes', alternatively you can vote with 'no' -tacchaind tx gov vote yes --from validator -``` - -## Validator Sentry Node Setup - -Validators are responsible for ensuring that the network can sustain denial of service attacks. - -One recommended way to mitigate these risks is for validators to carefully structure their network topology in a so-called sentry node architecture. - -Validator nodes should only connect to full-nodes they trust because they operate them themselves or are run by other validators they know socially. A validator node will typically run in a data center. Most data centers provide direct links to the networks of major cloud providers. The validator can use those links to connect to sentry nodes in the cloud. This shifts the burden of denial-of-service from the validator's node directly to its sentry nodes, and may require new sentry nodes be spun up or activated to mitigate attacks on existing ones. - -Sentry nodes can be quickly spun up or change their IP addresses. Because the links to the sentry nodes are in private IP space, an internet based attack cannot disturb them directly. This will ensure validator block proposals and votes always make it to the rest of the network. - -To setup your sentry node architecture you can follow the instructions below: - -### 1. Initialize a new config folder for the sentry node on a new machine with tacchaind binary installed - -`tacchaind init --chain-id tacchaind_2390-1 --default-denom utac` - -- NOTE: This will initialize config folder in $HOME/.tacchaind - -- NOTE: Make sure you have replaced your genesis file with the one for Tac Turin Testnet. Example script to download it: -`curl https://raw.githubusercontent.com/TacBuild/tacchain/refs/heads/main/networks/tacchain_2390-1/genesis.json > .testnet/config/genesis.json` - -### 2. Update `config.toml` for sentry node - -`private_peer_ids` field is used to specify peers that will not be gossiped to the outside world, in our case the validator node we want it to represent. Example: `private_peer_ids = "3e16af0cead27979e1fc3dac57d03df3c7a77acc@3.87.179.235:26656"` - -``` toml -.. -timeout_commit = "3s" -.. -persistent_peers = "f8124878e3526a9814c0a5f865820c5ea7eb26f8@72.251.230.233:45130,4a03d6622a2ad923d79e81951fe651a17faf0be8@107.6.94.246:45130,ea5719fe6587b18ed0fee81f960e23c65c0e0ccc@206.217.210.164:45130" -.. -private_peer_ids = "@ -.. -``` - -- NOTE: Make sure you add persistent peers as described in previous steps for validator setup - -### 3. Update `config.toml` for validator node - -Using the sentry node setup, our validator node will be represented by our sentry node, therefore it no longer has to be connected with other peers. We will replace `persistent_peers` so it points to our sentry node, this way it can no longer be accessed by the outter world. We will also disable `pex` field. - -```toml -.. -persistent_peers = @ -.. -pex = false -.. -``` - -### 4. Restart validator node and start sentry node. - -## FAQ - -**1) I need some funds on the `tacchain_2390-1` testnet, how can I get them?** - -You can request testnet tokens for the `tacchain_2390-1` testnet from the faucet available at . Please note that the faucet currently dispenses up to 10 TAC per day per address. - -**2) I have completed the guide to join as a validator, but my node is not in the active validator set?** +**1) I have completed the guide to join as a validator, but my node is not in the active validator set?** In order to be included in the active validator set, your validator must have atleast 1 voting power, or if the maximum validators limit has been reached your validator must have greater amount of TAC delegated to them than the validator with lowest amount delegated. Read more - https://forum.cosmos.network/t/why-is-my-newly-created-validator-unbonded/1841/2 diff --git a/docs/cosmovisor-setup.md b/docs/cosmovisor-setup.md index b97df4d..1735445 100644 --- a/docs/cosmovisor-setup.md +++ b/docs/cosmovisor-setup.md @@ -106,6 +106,69 @@ readlink -f "$DAEMON_HOME/cosmovisor/current" "$DAEMON_HOME/cosmovisor/current/bin/tacchaind" version ``` +`cosmovisor init` also writes `$DAEMON_HOME/cosmovisor/config.toml` with default +values, for example `unsafe_skip_backup = false`. Keep that file consistent with +the `Environment=` values in the systemd unit so that node behaviour does not +depend on which source wins. + +## Migrating an Already Running Node to Cosmovisor + +`cosmovisor init` creates only the `genesis` slot. That is enough only for a +node that has never applied an upgrade. If the chain has already executed at +least one upgrade on this node, Cosmovisor will refuse to start: + +```text +Error: binary not present, downloading disabled: stat \ + $DAEMON_HOME/cosmovisor/upgrades//bin/tacchaind: no such file or directory +``` + +The reason is that on start Cosmovisor reads +`$DAEMON_HOME/data/upgrade-info.json`. That file records the **last upgrade this +node already applied**, not the next planned one, and Cosmovisor expects a +binary in the matching upgrade directory before it will run. + +### 1. Read the last applied upgrade name + +```bash +export DAEMON_NAME=tacchaind +export DAEMON_HOME=/root/tacchain/.testnet + +cat "$DAEMON_HOME/data/upgrade-info.json" +LAST_UPGRADE=$(jq -r .name "$DAEMON_HOME/data/upgrade-info.json") +echo "$LAST_UPGRADE" +``` + +If `upgrade-info.json` does not exist, this node has never applied an upgrade. +The `genesis` slot alone is sufficient — skip to the systemd section. + +### 2. Register the currently running binary under that name + +The binary the node is running right now is by definition the binary for that +upgrade, so register the very same file: + +```bash +cosmovisor add-upgrade "$LAST_UPGRADE" /path/to/running/tacchaind --force +``` + +`/path/to/running/tacchaind` is the binary from the node's current `ExecStart` +(before the switch to Cosmovisor), for example `/root/tacchain/tacchaind`. + +Cosmovisor normalizes upgrade names to lowercase unless +`cosmovisor_disable_recase = true`. Pass the name exactly as it appears in +`upgrade-info.json`; `add-upgrade` applies the same normalization to the +directory it creates. + +### 3. Verify before starting the service + +```bash +find "$DAEMON_HOME/cosmovisor/upgrades" -maxdepth 3 -type f -name tacchaind -print +"$DAEMON_HOME/cosmovisor/upgrades/$LAST_UPGRADE/bin/tacchaind" version +``` + +Expected: the binary exists and reports the version the node is currently +running on the network. On the first start Cosmovisor moves the `current` +symlink from `genesis` to `upgrades/$LAST_UPGRADE` by itself. + ## Systemd Service Create or update the service file: @@ -196,7 +259,19 @@ For automatic downloads, the accepted upgrade proposal must include a they only need to verify that the published proposal contains an entry for their OS and CPU architecture. -Example: +Read the pending plan from the node itself instead of copying values from an +announcement: + +```bash +tacchaind query upgrade plan --node tcp://127.0.0.1:26657 --output json | jq . +tacchaind query upgrade plan --node tcp://127.0.0.1:26657 --output json | jq -r .plan.name +tacchaind query upgrade plan --node tcp://127.0.0.1:26657 --output json | jq -r .plan.info +``` + +Check the platform of the node with `uname -m` (`x86_64` maps to `linux/amd64`, +`aarch64` to `linux/arm64`). + +Example `plan.info`: ```json { @@ -260,14 +335,20 @@ sudo systemctl restart tac_node.service ### Prepare the Next Binary -Set the upgrade name exactly as it appears in the on-chain upgrade plan: +Set the upgrade name exactly as it appears in the on-chain upgrade plan. Read it +from the node so the value is correct for any network and any upgrade: ```bash export DAEMON_NAME=tacchaind export DAEMON_HOME=/root/tacchain/.testnet -export UPGRADE_NAME=v1.6.0-spb-hotfix +export UPGRADE_NAME=$(tacchaind query upgrade plan \ + --node tcp://127.0.0.1:26657 --output json | jq -r .plan.name) +echo "$UPGRADE_NAME" ``` +Do not confuse this with the name in `$DAEMON_HOME/data/upgrade-info.json` — +that one is the upgrade already applied in the past. + Create the target directory: ```bash @@ -336,7 +417,7 @@ After the upgrade height, check: ```bash export DAEMON_HOME=/root/tacchain/.testnet -export UPGRADE_NAME=v1.6.0-spb-hotfix +export UPGRADE_NAME=$(jq -r .name "$DAEMON_HOME/data/upgrade-info.json") sudo systemctl status tac_node.service --no-pager -l readlink -f "$DAEMON_HOME/cosmovisor/current" @@ -373,6 +454,31 @@ Fix: 3. Keep the future binary only under `upgrades//bin/tacchaind`. 4. Start the service again. +### Node exits with `binary not present, downloading disabled` + +Full error: + +```text +Error: binary not present, downloading disabled: stat \ + $DAEMON_HOME/cosmovisor/upgrades//bin/tacchaind: no such file or directory +``` + +Most likely cause: a running node was just migrated to Cosmovisor and only the +`genesis` slot was initialized, while `$DAEMON_HOME/data/upgrade-info.json` +still points at the last upgrade the node applied. + +Fix: + +```bash +LAST_UPGRADE=$(jq -r .name "$DAEMON_HOME/data/upgrade-info.json") +cosmovisor add-upgrade "$LAST_UPGRADE" /path/to/running/tacchaind --force +``` + +See [Migrating an Already Running Node to Cosmovisor](#migrating-an-already-running-node-to-cosmovisor). + +Note that `` in this error is the **past** upgrade, not the upcoming one. +Preparing only the next upgrade directory does not fix it. + ### Cosmovisor cannot find the upgrade binary Check: @@ -425,6 +531,11 @@ Before upgrade: - Confirm the announced target version and build tag. - Confirm `DAEMON_HOME` equals the node `--home`. - Confirm `DAEMON_NAME=tacchaind`. +- On a node just migrated to Cosmovisor, confirm the upgrade named in + `$DAEMON_HOME/data/upgrade-info.json` has a binary under + `upgrades//bin/tacchaind`. +- Confirm `$DAEMON_HOME/cosmovisor/config.toml` does not contradict the systemd + `Environment=` values. - Confirm `current/bin/tacchaind` is still the current version. - Confirm the next binary is either downloadable from `plan.info` or already placed under `upgrades//bin/tacchaind`. diff --git a/networks/tacchain_2390-1/.env.turin b/networks/tacchain_2390-1/.env.turin deleted file mode 100644 index f219bad..0000000 --- a/networks/tacchain_2390-1/.env.turin +++ /dev/null @@ -1,9 +0,0 @@ -USER_ID=1000 -GROUP_ID=1000 -MONIKER=tac-validator -P2P_PERSISTENT_PEERS=f8124878e3526a9814c0a5f865820c5ea7eb26f8@72.251.230.233:45130,4a03d6622a2ad923d79e81951fe651a17faf0be8@107.6.94.246:45130,ea5719fe6587b18ed0fee81f960e23c65c0e0ccc@206.217.210.164:45130 -EXT_IP=0.0.0.0 -P2P_PORT=45130 -RPC_PORT=45131 -RPC_PORT_EVM=45138 -WS_PORT_EVM=45139 diff --git a/networks/tacchain_2390-1/docker-compose.yaml b/networks/tacchain_2390-1/docker-compose.yaml deleted file mode 100644 index 48be087..0000000 --- a/networks/tacchain_2390-1/docker-compose.yaml +++ /dev/null @@ -1,39 +0,0 @@ -services: - tac-turin-testnet-init: - user: "${USER_ID}:${GROUP_ID}" - image: tacchain:v0.0.7-testnet - env_file: - - .env.turin - volumes: - - "./:/data" - entrypoint: /bin/sh - command: > - -c "[ ! -e /data/config/config.toml ] && tacchaind init $MONIKER --chain-id tacchain_2390-1 --home /data && cd /data/config && rm genesis.json && wget https://raw.githubusercontent.com/TacBuild/tacchain/refs/heads/main/networks/tacchain_2390-1/genesis.json || exit 0" - - tac-turin-testnet-validator-1: - user: "${USER_ID}:${GROUP_ID}" - network_mode: host - restart: unless-stopped - image: tacchain:v0.0.7-testnet - env_file: - - .env.turin - volumes: - - "./:/data" - depends_on: - tac-turin-testnet-init: - condition: service_completed_successfully - entrypoint: tacchaind - command: > - start - --chain-id=tacchain_2390-1 - --home=/data - --db_dir=data - --pruning=default - --log_level=info - --p2p.persistent_peers=${P2P_PERSISTENT_PEERS} - --p2p.laddr=tcp://0.0.0.0:${P2P_PORT} - --p2p.external-address=${EXT_IP}:${P2P_PORT} - --rpc.laddr=tcp://0.0.0.0:${RPC_PORT} - --json-rpc.address=0.0.0.0:${RPC_PORT_EVM} - --json-rpc.ws-address=0.0.0.0:${WS_PORT_EVM} - --json-rpc.enable diff --git a/networks/tacchain_2390-1/genesis.json b/networks/tacchain_2390-1/genesis.json deleted file mode 100644 index 460abf5..0000000 --- a/networks/tacchain_2390-1/genesis.json +++ /dev/null @@ -1,684 +0,0 @@ -{ - "app_name": "tacchaind", - "app_version": "32e29d1", - "genesis_time": "2024-11-08T12:01:27.393983011Z", - "chain_id": "tacchain_2390-1", - "initial_height": 1, - "app_hash": null, - "app_state": { - "07-tendermint": null, - "auth": { - "params": { - "max_memo_characters": "256", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - }, - "accounts": [ - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "tac1ddyrc503phsxhrkqghjlwya5antghvc42huyes", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "tac1p0z8379znvnjszqc66fka9w22rpwkfq4t8q6ch", - "pub_key": null, - "account_number": "1", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "tac19kdjjkj4muxjmsf9ukmu8hnfj0js0vj5fxmc5m", - "pub_key": null, - "account_number": "2", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "tac17cqym9c8xagl8etvfede9nr8ku20yrn7ts8hgj", - "pub_key": null, - "account_number": "3", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - }, - { - "@type": "/ethermint.types.v1.EthAccount", - "base_account": { - "address": "tac1nh8cm7mdrfcrfskpww4evcn4l2cr9qefk82qjd", - "pub_key": null, - "account_number": "4", - "sequence": "0" - }, - "code_hash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" - } - ] - }, - "authz": { - "authorization": [] - }, - "bank": { - "params": { - "send_enabled": [], - "default_send_enabled": true - }, - "balances": [ - { - "address": "tac1p0z8379znvnjszqc66fka9w22rpwkfq4t8q6ch", - "coins": [ - { - "denom": "utac", - "amount": "10000000000000000000000" - } - ] - }, - { - "address": "tac19kdjjkj4muxjmsf9ukmu8hnfj0js0vj5fxmc5m", - "coins": [ - { - "denom": "utac", - "amount": "10000000000000000000000" - } - ] - }, - { - "address": "tac1ddyrc503phsxhrkqghjlwya5antghvc42huyes", - "coins": [ - { - "denom": "utac", - "amount": "10000000000000000000000" - } - ] - }, - { - "address": "tac1nh8cm7mdrfcrfskpww4evcn4l2cr9qefk82qjd", - "coins": [ - { - "denom": "utac", - "amount": "10000000000000000000000000000" - } - ] - }, - { - "address": "tac17cqym9c8xagl8etvfede9nr8ku20yrn7ts8hgj", - "coins": [ - { - "denom": "utac", - "amount": "10000000000000000000000" - } - ] - } - ], - "supply": [ - { - "denom": "utac", - "amount": "10000040000000000000000000000" - } - ], - "denom_metadata": [], - "send_enabled": [] - }, - "capability": { - "index": "1", - "owners": [] - }, - "circuit": { - "account_permissions": [], - "disabled_type_urls": [] - }, - "consensus": null, - "crisis": { - "constant_fee": { - "denom": "utac", - "amount": "1000" - } - }, - "distribution": { - "params": { - "community_tax": "0.020000000000000000", - "base_proposer_reward": "0.000000000000000000", - "bonus_proposer_reward": "0.000000000000000000", - "withdraw_addr_enabled": true - }, - "fee_pool": { - "community_pool": [] - }, - "delegator_withdraw_infos": [], - "previous_proposer": "", - "outstanding_rewards": [], - "validator_accumulated_commissions": [], - "validator_historical_rewards": [], - "validator_current_rewards": [], - "delegator_starting_infos": [], - "validator_slash_events": [] - }, - "evidence": { - "evidence": [] - }, - "evm": { - "accounts": [], - "params": { - "evm_denom": "utac", - "enable_create": true, - "enable_call": true, - "extra_eips": [ - "3855" - ], - "chain_config": { - "homestead_block": "0", - "dao_fork_block": "0", - "dao_fork_support": true, - "eip150_block": "0", - "eip150_hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155_block": "0", - "eip158_block": "0", - "byzantium_block": "0", - "constantinople_block": "0", - "petersburg_block": "0", - "istanbul_block": "0", - "muir_glacier_block": "0", - "berlin_block": "0", - "london_block": "0", - "arrow_glacier_block": "0", - "gray_glacier_block": "0", - "merge_netsplit_block": "0", - "shanghai_block": "0", - "cancun_block": "0" - }, - "allow_unprotected_txs": false - } - }, - "feegrant": { - "allowances": [] - }, - "feeibc": { - "identified_fees": [], - "fee_enabled_channels": [], - "registered_payees": [], - "registered_counterparty_payees": [], - "forward_relayers": [] - }, - "feemarket": { - "params": { - "no_base_fee": true, - "base_fee_change_denominator": 8, - "elasticity_multiplier": 2, - "enable_height": "0", - "base_fee": "1000000000", - "min_gas_price": "0.000000000000000000", - "min_gas_multiplier": "0.500000000000000000" - }, - "block_gas": "0" - }, - "genutil": { - "gen_txs": [ - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "node0", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "", - "validator_address": "tacvaloper1ddyrc503phsxhrkqghjlwya5antghvc4h9825c", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "taLMbOFCeclyC4PSsE4QfffRBd3bte2GDfUMEqQjVB4=" - }, - "value": { - "denom": "utac", - "amount": "10000000000000000000000" - } - } - ], - "memo": "5a6f0e342ea66cb769194c81141ffbff7417fbcd@72.251.230.233:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "A4eZTlt1CBBDhGzvuSm00eA2kPplS1XVjomnfyqpIFnO" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "iJ8vahs4DZsaCKJWACgKwwmG7YdYsWGR4OZWpHadWWhCzz9xcjAudPRj5AMLinVMGT32dH5gQiLv9MgbDFGVXQ==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "node3", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "", - "validator_address": "tacvaloper17cqym9c8xagl8etvfede9nr8ku20yrn7kzue96", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "uY1lJrMtzM7YvevMIy7e8ncBw2H/rF80Hsy1Za76Gs8=" - }, - "value": { - "denom": "utac", - "amount": "10000000000000000000000" - } - } - ], - "memo": "9b4995a048f930776ee5b799f201e9b00727ffcc@72.251.230.233:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "At4D1/UB5imKvf4gOpoegSN2t7SCzaXi9aGygQP7Snk6" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "hbaqt+ZzeSwXYU95lNoGin8Z9T0XGibIwwztzKvsUSpvuUb7NEXinPjEKGzxJmO/YVY07UtSZS0z/WHIbUPYMQ==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "node1", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "", - "validator_address": "tacvaloper1p0z8379znvnjszqc66fka9w22rpwkfq4k4m54l", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "MKl1KagA7T6KicN3fj7BHihg3KwDsbqHLSCUYXhdkbo=" - }, - "value": { - "denom": "utac", - "amount": "10000000000000000000000" - } - } - ], - "memo": "e3c2479a6f418841bd64bae6dff027ea3efc1987@72.251.230.233:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AiMGur/D1UXhfHFhLKGlchExg7gy49Q/xSW8zTwTI8Gg" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "IB82o6G58fpe/B+mr7chAPbCJTsq4we4QNqhzpjeZLwkzYLnWydDo+wa00GEgY7jLqFJcPWLkbe8hia3/QhPdA==" - ] - }, - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "node2", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "", - "validator_address": "tacvaloper19kdjjkj4muxjmsf9ukmu8hnfj0js0vj555qken", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "IXbZunQ86cctrrLCvi1IdSo4lUbQ9Yn8ZvJE8NJBUU0=" - }, - "value": { - "denom": "utac", - "amount": "10000000000000000000000" - } - } - ], - "memo": "fbf04b3d67705ed48831aa80ebe733775e672d1a@72.251.230.233:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "A4nuTsSHtkf2/39AEvUDaRgbTOeUvk98llCvOMBX8o92" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "PntA8usF85y7trLcRvlLWBdwt+yzHauVLF+75OZazQhAsgWXsPQqdACaJFV04FFAwDevLpZsDyds4nsdtIf0rQ==" - ] - } - ] - }, - "gov": { - "starting_proposal_id": "1", - "deposits": [], - "votes": [], - "proposals": [], - "deposit_params": null, - "voting_params": null, - "tally_params": null, - "params": { - "min_deposit": [ - { - "denom": "utac", - "amount": "10000000" - } - ], - "max_deposit_period": "172800s", - "voting_period": "172800s", - "quorum": "0.334000000000000000", - "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000", - "min_initial_deposit_ratio": "0.000000000000000000", - "proposal_cancel_ratio": "0.500000000000000000", - "proposal_cancel_dest": "", - "expedited_voting_period": "86400s", - "expedited_threshold": "0.667000000000000000", - "expedited_min_deposit": [ - { - "denom": "utac", - "amount": "50000000" - } - ], - "burn_vote_quorum": false, - "burn_proposal_deposit_prevote": false, - "burn_vote_veto": true, - "min_deposit_ratio": "0.010000000000000000" - }, - "constitution": "" - }, - "group": { - "group_seq": "0", - "groups": [], - "group_members": [], - "group_policy_seq": "0", - "group_policies": [], - "proposal_seq": "0", - "proposals": [], - "votes": [] - }, - "ibc": { - "client_genesis": { - "clients": [], - "clients_consensus": [], - "clients_metadata": [], - "params": { - "allowed_clients": [ - "*" - ] - }, - "create_localhost": false, - "next_client_sequence": "0" - }, - "connection_genesis": { - "connections": [], - "client_connection_paths": [], - "next_connection_sequence": "0", - "params": { - "max_expected_time_per_block": "30000000000" - } - }, - "channel_genesis": { - "channels": [], - "acknowledgements": [], - "commitments": [], - "receipts": [], - "send_sequences": [], - "recv_sequences": [], - "ack_sequences": [], - "next_channel_sequence": "0", - "params": { - "upgrade_timeout": { - "height": { - "revision_number": "0", - "revision_height": "0" - }, - "timestamp": "600000000000" - } - } - } - }, - "interchainaccounts": { - "controller_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "ports": [], - "params": { - "controller_enabled": true - } - }, - "host_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "port": "icahost", - "params": { - "host_enabled": true, - "allow_messages": [ - "*" - ] - } - } - }, - "mint": { - "minter": { - "inflation": "0.130000000000000000", - "annual_provisions": "0.000000000000000000" - }, - "params": { - "mint_denom": "utac", - "inflation_rate_change": "0.130000000000000000", - "inflation_max": "0.200000000000000000", - "inflation_min": "0.070000000000000000", - "goal_bonded": "0.670000000000000000", - "blocks_per_year": "6311520" - } - }, - "nft": { - "classes": [], - "entries": [] - }, - "params": null, - "slashing": { - "params": { - "signed_blocks_window": "100", - "min_signed_per_window": "0.500000000000000000", - "downtime_jail_duration": "600s", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.010000000000000000" - }, - "signing_infos": [], - "missed_blocks": [] - }, - "staking": { - "params": { - "unbonding_time": "1814400s", - "max_validators": 100, - "max_entries": 7, - "historical_entries": 10000, - "bond_denom": "utac", - "min_commission_rate": "0.000000000000000000" - }, - "last_total_power": "0", - "last_validator_powers": [], - "validators": [], - "delegations": [], - "unbonding_delegations": [], - "redelegations": [], - "exported": false - }, - "transfer": { - "port_id": "transfer", - "denom_traces": [], - "params": { - "send_enabled": true, - "receive_enabled": true - }, - "total_escrowed": [] - }, - "upgrade": {}, - "vesting": {}, - "wasm": { - "params": { - "code_upload_access": { - "permission": "Everybody", - "addresses": [] - }, - "instantiate_default_permission": "Everybody" - }, - "codes": [], - "contracts": [], - "sequences": [] - } - }, - "consensus": { - "params": { - "block": { - "max_bytes": "22020096", - "max_gas": "20000000" - }, - "evidence": { - "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000", - "max_bytes": "1048576" - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": { - "app": "0" - }, - "abci": { - "vote_extensions_enable_height": "0" - } - } - } -} \ No newline at end of file