JAM is the anticipated future protocol for Polkadot, being implemented by multiple teams across different programming languages. The JAM Gray Paper outlines the protocol, and the Web3 Foundation has many 20+ teams undergoing jam-conformance fuzzing processes.
This repo contains the latest duna_target in support of JAM DUNA M1 milestone delivery and a JAM DUNA PoC JAM Toaster release (Linux AMD64) suitable for PoC JAM Toaster testing.
This repo contains JAM DUNA binary releases suitable to start testing in the JAM Toaster: (GP 0.7.2 Linux)
- bring up a reproducible tiny JAM testnet (6 validators) either in a single-machine local testnet (same as corevm/doom) or multi-machine deployment (a few nodes in a JAM Toaster)
- run FIB flow (
fib-stream-runner) after validators are healthy (optional)
It is expected this can support further testing with real services (smart contract/privacy services) in larger testnets in a multi-client settingg.
Use this bundle in one of these modes:
- Single-machine local testnet (recommended)
- Use the included
Makefiledirectly. - This is the default and documented path.
- Multi-machine deployment (JAM Toaster)
- Use your own deployment/orchestration system (nomad)
- See Multi-machine flow at the end.
If you are not sure, use single-machine.
Download the latest release of jamduna-release-linux-amd64.zip to a folder of your choice and unzip the file
jamdunafib-stream-runner- bundled FIB deps:
runner/fib-builderrunner/fib-feeder
- minimal genesis bundle for
gen-spec:release_genesis_services/auth_copy.pvmrelease_genesis_services/fib.jamrelease_genesis_services/null_authorizer.pvm
chainspecs/local-dev-config.jsonchainspecs/jamduna-spec.jsonMakefile
- Linux AMD64
bash,make- Free local ports:
- P2P:
40000..40005 - JSON-RPC:
19800..19805 - FIB RPC (optional):
8601
- P2P:
Run from this release directory (the folder containing this README and Makefile).
If this folder was reused or unpacked from someone else, reset first:
make clean-statemake helpmake gen-keysThis creates seed_0..seed_6 under state/keys/.
Important:
- validators are
0..5 seed_6is reserved for optional builder role (FIB), not a validator process
make gen-specmake run-validatorsmake status
make healthmake health checks:
- validator logs for
Imported Block - optional FIB logs for submission activity patterns
You have two ways to run FIB:
- Foreground mode:
make run-fib-stream- blocks current shell
- stop with
Ctrl+C
- Background mode:
make run-fib-stream-bg- daemon-like behavior for ops workflows
- stop with:
make stop-fibValidator block production (example for validator 0):
grep -n "Imported Block" logs/jamduna-v0.log | tailFIB work-package submissions (if FIB is running):
grep -n "Work package SUBMITTED\|SubmitBundleToCore CE146 SUCCESS" logs/fib-builder-stream-runner.log | tailFeeder submission activity:
grep -n "submitted call=" logs/fib-feeder-stream-runner.log | tailStop validators and background FIB runner:
make stopReset state:
make clean-stateIf your deployment system manages startup itself, you can bypass the release Makefile.
- Generate keys:
./jamduna gen-keys --data-path /var/lib/jamduna- Generate chainspec:
./jamduna gen-spec /etc/jam/chain-config.json /etc/jam/jamduna-spec.json- Start validator node (example index 0):
./jamduna run \
--data-path /var/lib/jamduna \
--chain /etc/jam/jamduna-spec.json \
--dev-validator 0 \
--pvm-backend compiler \
--rpc-port 19800Repeat for --dev-validator 1..5.
Use this when you want a concrete deployment shape, not just principles.
- Machine A (
10.0.0.11): validator0,1 - Machine B (
10.0.0.12): validator2,3 - Machine C (
10.0.0.13): validator4,5
Optional proxy/builder node:
- Machine C also runs
--dev-validator 6 --role builder
Create a multi-machine chain config (do not use localhost addresses):
{
"genesis_validators": [
{"index": 0, "net_addr": "10.0.0.11:40000"},
{"index": 1, "net_addr": "10.0.0.11:40001"},
{"index": 2, "net_addr": "10.0.0.12:40002"},
{"index": 3, "net_addr": "10.0.0.12:40003"},
{"index": 4, "net_addr": "10.0.0.13:40004"},
{"index": 5, "net_addr": "10.0.0.13:40005"}
]
}Then generate one shared chainspec:
./jamduna gen-spec /etc/jam/chain-config.json /etc/jam/jamduna-spec.jsonDistribute exactly the same jamduna binary and jamduna-spec.json to all machines.
Machine A:
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 0 --pvm-backend compiler --rpc-port 19800
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 1 --pvm-backend compiler --rpc-port 19801Machine B:
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 2 --pvm-backend compiler --rpc-port 19802
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 3 --pvm-backend compiler --rpc-port 19803Machine C:
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 4 --pvm-backend compiler --rpc-port 19804
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 5 --pvm-backend compiler --rpc-port 19805Builder on Machine C: (optional)
./jamduna run --data-path /var/lib/jamduna --chain /etc/jam/jamduna-spec.json --dev-validator 6 --role builder --pvm-backend compiler --rpc-port 19806- Start all validator processes (
0..5) in a tight rollout window. - Verify each node shows block import activity in logs.
- Start optional builder/proxy node (
6) only after validator network is stable.
Use this only when validators run on separate machines.
- Generate one shared chainspec from one chain config.
- Distribute the exact same
jamdunabinary and chainspec to all machines. - Distribute keys so node
ihas access toseed_iunder its--data-path/keys/. - Start validator processes (
0..5) in a tight rollout window. - Optionally run a proxy/builder node as
--dev-validator 6 --role builderfor external sync/debug integration.
This release bundle remains optimized for single-machine testing; multi-machine is an extension for now.
If you want to join the JAM community, join Let's JAM Matrix Room and JAM Conformance Matrix Room