-
Notifications
You must be signed in to change notification settings - Fork 0
RUN_A_NODE
Goal: other people can create wallets, relay traffic, and (with approval) produce blocks — not only the original lab host.
| Host | Google Cloud meshchain-testnet · us-central1-a
|
| Public IP | 34.172.103.125 |
| Faucet (HTTPS) | https://faucet.34.172.103.125.sslip.io/info |
| Scanner (HTTPS) | https://34.172.103.125.sslip.io/ |
| Faucet (HTTP) | http://34.172.103.125:8787 |
| Scanner (HTTP) | http://34.172.103.125:8788/ |
| Submit / seed |
34.172.103.125:9100 (also 9101, 9102) |
| Genesis | testnet/published/genesis.json |
| Seeds | testnet/seeds.json |
| Catch-up | Observers request full chain_state via gossip SyncRequest / SyncResponse
|
# Observer
cp testnet/published/genesis.json data/genesis.json
./target/debug/mesh observer --peer 34.172.103.125:9100
# Wallet
./target/debug/mesh new-wallet --name me.json
./target/debug/mesh register --wallet data/keys/me.json --submit 34.172.103.125:9100
# drip: POST http://34.172.103.125:8787/drip with mesh_name + public_key_hex
./target/debug/mesh send <NAME> 1 --wallet data/keys/me.json --submit 34.172.103.125:9100MeshChain testnet uses Proof of Authority (PoA): a fixed list of validator public keys is in genesis.json.
That is different from Bitcoin/Ethereum open mining.
| Role | Who | Needs genesis seat? | What you run |
|---|---|---|---|
| A. Wallet / user | Anyone | No |
mesh CLI only |
| B. Full node (observer) | Anyone | No (needs shared genesis + seeds) | meshchain-node run --observer |
| C. Validator (producer) | Operators on the set | Yes — pubkey in genesis | meshchain-node run --validator-index N |
Also always available:
| Role | Notes |
|---|---|
| Private lab |
mesh testnet-setup + 3 local validators — your own chain, not shared public state |
| Faucet / scanner host | Public HTTP services; can be separate from validators |
git clone https://github.com/krewdev/meshchain.git
cd meshchain
cargo build -p mesh -p meshchain-node
./target/debug/mesh new-wallet --name my.json
# When a public peer is up:
./target/debug/mesh register --wallet data/keys/my.json --submit SEED_HOST:9100
./target/debug/mesh send <NAME> 1 --wallet data/keys/my.json --submit SEED_HOST:9100You need a public seed (faucet/scanner/submit endpoint) published in testnet/network.json → endpoints.
Observers:
- Connect to seed peers over TCP
- Relay txs / blocks
- Track
chain_state(same chain_id) - Do not produce blocks or cast validator ACKs
Coordinator publishes (HTTPS or git):
-
genesis.json(same for everyone onmeshchain-testnet-1) -
testnet/seeds.json(bootstrap peers)
mkdir -p ~/mesh-node/data
# download published files into data/
cp /path/to/published/genesis.json ~/mesh-node/data/cd meshchain
cargo build -p meshchain-node --release
./target/release/meshchain-node run \
--data-dir ~/mesh-node/data \
--observer \
--listen 0.0.0.0:9100 \
--peer SEED1:9100 \
--peer SEED2:9100Or:
./target/debug/mesh --dir ~/mesh-node/data observer \
--listen 0.0.0.0:9100 \
--peer SEED1:9100Open TCP 9100 (or your listen port) if you want others to peer with you.
Point wallets at your node if you relay:
mesh send … --submit YOUR_IP:9100Validators are permissioned for testnet safety (PoA). Process:
./target/debug/mesh validator-keygen --name my-validator.jsonPrints:
-
public_hex(safe to share) - file path (secret — never commit or post in Discord)
Open a GitHub issue / Discord #validators with:
{
"role": "validator-applicant",
"chain_id": "meshchain-testnet-1",
"public_hex": "<from keygen>",
"operator_name": "your-handle",
"contact": "discord or email",
"region": "e.g. us-east",
"listen": "host.example.com:9100",
"uptime_plan": "VPS / home / always-on?"
}Template: testnet/operator_application.example.json
Maintainers rebuild genesis including your public_hex, publish:
- new
genesis.json - your index (e.g. validator index
3) - updated
seeds.json
Note: Adding validators is a set change — often a coordinated restart / reset on testnet. See reset policy in TESTNET.md.
# data/genesis.json = published shared genesis
# data/keys/validator-3.json = YOUR key (rename from my-validator.json)
# index must match your slot in genesis.validators
./target/release/meshchain-node run \
--data-dir ./data \
--validator-index 3 \
--listen 0.0.0.0:9100 \
--peer seed1.example:9100 \
--peer seed2.example:9100Or:
mesh validator --index 3 --listen 0.0.0.0:9100 --peer seed1:9100 --peer seed2:9100Anyone can run their own 3-validator network without asking anyone:
mesh testnet-setup
./scripts/run_local_validators.sh
# or: ./validator-automation/mesh-validator startThis is great for development. It is not the same balances/history as the public host unless you intentionally share that genesis.
| Design | Tradeoff |
|---|---|
| PoA (now) | Simple, fits testnet + radio; set is known |
| Open PoS / mining | Needs staking, sybil resistance, harder on LoRa |
| Dynamic validator txs | Protocol upgrade (future) |
Roadmap: keep PoA for testnet-1; expand set via applications; later consider on-chain set updates.
- Publish stable
genesis.json+seeds.jsonon site/GitHub releases - Keep ≥1 public seed with open
9100(or private VPN for trusted ops) - Document faucet/scanner HTTP URLs in
testnet/network.json - Accept operator applications; rotate genesis when adding seats
- Never put validator secrets in git
- Validator key = can sign blocks for that genesis — treat like a production server key
- Observers: no block power; still sandbox the process
- Don’t expose faucet mint keys publicly
- Testnet only — tMESH has no value
- MULTI_VALIDATOR.md — gossip details
- TESTNET.md — parameters
- CLOUD.md — VPS / GCE host
- validator-automation — local ops package
See MULTI_OPERATOR.md for observers on other machines and adding producers.