Two stacks, one device
Anyone can watch this ledger. Anyone can make a wallet in the browser. Anyone with a LoRa radio can run a node. Meshtastic is the radio network. Meshchain is the ledger that rides it: 180-byte MC1 datagrams, MESH stake, Proof of Mesh. No account. Blocks leave as Meshtastic text that a paired radio will hop. MQTT is an optional internet gateway, not the chain.
- Diamond — a Meshtastic radio heard live on MQTT.
- Hex identicon — a Meshchain proposer: this node, or a heard radio that won a Proof of Mesh slot. Unique per id.
- Hex + arc — this device running both stacks.
Set up a web wallet
- Open Wallet. No account. No server custody.
- Tap Create wallet. Web Crypto mints an ECDSA P-256 key on this device.
- You receive a mesh1… address and a 250 MESH faucet so you can send immediately.
- Send to another mesh1 address or a !nodeid. Fee is 0.02 MESH.
- Balance and history stay in this browser until you export a keyfile. Factory-reset of the node does not wipe wallets.
Commissioning a radio node also imports that validator address into the wallet with its liquid stake, so send and balance work on the same identity.
Set up a radio node
From this preview you cannot flash firmware over Bluetooth. Commissioning a Meshchain validator mints keys on this device and starts proposing MC1 frames into a hop queue. Pair a physical radio (USB, Bluetooth, or the radio's Wi-Fi AP) to put those frames on LoRa. Without a radio, the chain still lives here.
Hardware
- T-Beam Supreme — ESP32-S3, SX1262, GNSS. Field standard.
- Heltec V3 — compact OLED, USB-C. No GPS.
- RAK WisBlock 4631 — nRF52840, low power.
- Station G2 — high power rooftop / tower.
Field radio (Meshtastic firmware)
- Flash current Meshtastic firmware with the web flasher.
- Set region to match the law (US 915, EU 868, ANZ 915).
- Modem preset LongFast unless you have a short-range high-rate net.
- Set a 4-letter short name. MQTT uplink is optional — only needed for this browser to hear you from the internet.
- Public broker: mqtt.meshtastic.org · meshdev / large4cats · topic msh/REGION/2/json/#
This console (Meshchain)
- Open Node and commission.
- Same callsign is issued to both stacks. Bond at least 1,000 MESH.
- Radio toggle up. LIVE fills toward 100 real Meshtastic nodes.
- Validate to enter Proof of Mesh. Miss three propose slots and you slash.
Field path — internet optional
A Meshchain block is a Meshtastic datagram: magic MC1, packed to 180 bytes, hop limit 3. That is what a T-Beam stores and forwards over LoRa. This console keeps the ledger on the device and queues those frames. If a radio is attached they go out over RF. If MQTT is reachable, the same frames may uplink so a browser without a radio can follow the height.
Switch the node to Field to cut the broker. Height still advances on this radio. Queued frames drain when you attach a T-Beam or turn uplink back on. The mesh survives. The chain survives with it — as long as a radio is hopping, not a website. The ledger VM keeps proposing even when this browser is closed.
Ledger VM
Phone tabs go to sleep. A validator that only lives in this preview cannot keep a chain. LEDG (!1ed9e001, callsign LEDG) is an always-on proposer: a process on this box, the same binary you run on a Linux VPS next to a radio or an MQTT uplink.
node scripts/meshchain-vm.mjs
It loads the shared tip, proposes MC1 frames on its wall-clock slots, and writes the ledger so every scanner follows the same height without commissioning. If the process dies, this console’s hub takes the same identity and keeps the slot. Run that command on a $5 VPS to give Meshchain a machine that does not sleep.
MQTT uplink
JSON on the public broker is how this web node hears radios that already have internet. It is a gateway, not the mesh. Packets are nodeinfo, position, telemetry, and MC1 sendtext. GPS, when present, is coarse. Binary protobuf topics contribute presence by node id when JSON is silent.
msh/+/2/json/# · cap 100
Chain scanner and maps
Scan is the explorer for meshchain-field-1: height, slots, compact MC1 blocks, and wallet transfers once they confirm. You do not need to commission to follow a height that has uplinked. Hexes are Meshchain proposers.
Radio is the RF scanner: live heard count, waterfall, packet log, and the diamond map of Meshtastic radios. You do not need to commission a node to listen.
Proof of Mesh
The validator set is Meshchain nodes heard on this radio (this node plus others that announced DualNode, over LoRa or uplink). Slots rotate among those ids on a shared wall clock. When it is your slot you propose a compact MC1 frame. A paired radio hops it. MQTT may uplink the same bytes so a scanner without RF can follow. Meshtastic diamonds stay radios — they do not vote. Propose pays a small MESH reward. Silence on your slot misses, then slashes.
@meshchain/dual
One package commissions both stacks on the same device. Stake in the node console shows the snippet. Radio identity and chain identity share the callsign and never leave the device.
Secure keyfile storage
Keys are minted here with Web Crypto (ECDSA P-256). They can leave this browser only as a locked keyfile: PBKDF2 (310,000 rounds, SHA-256) derives an AES-GCM key from your passphrase. The private key never sits in the downloaded file in the clear. Public labels (callsign, address, node id) stay visible so you know which file you have.
- Open Wallet → Secure keyfile storage.
- Choose a passphrase of at least 10 characters. It is never stored.
- Lock and download a .lock.json, or save only to the vault on this device.
- On another device, paste or choose that file and enter the same passphrase.
- A locked validator file can be loaded when you commission a node.
Anyone with both the file and the passphrase can spend. Clearing site data destroys the vault copy and any keys you did not download. Unencrypted v1 files still import; lock them before you move them.
Signed transfers
Every MESH send is signed on this device with the wallet’s ECDSA P-256 key. The message is canonical: id, type, from, to, amount. LEDG verifies the signature against the public key before a transfer enters the mempool. Unsigned or tampered sends are dropped. Protocol rewards from meshchain stay unsigned. Compact LoRa frames still carry tx ids; signatures ride the MQTT envelope so the 180-byte airtime budget holds.
Spendable MESH is derived from the chain: testnet opening, plus signed receipts, minus signed sends and fees. The number in the wallet is not a local IOU. LEDG also signs every block it proposes (ECDSA P-256). Unsigned blocks are dropped.
The ledger is an append-only genesis log. LEDG keeps every height, not a rolling window. Wallets ask the log for their delta so a receipt older than the scanner still counts.