Run a Logos Blockchain node on the public testnet from the CLI
Start a node and verify runtime and consensus signals.
This document is accurate for Testnet v0.2.1.
With this tutorial, you will install the Logos Blockchain node, connect to the public testnet, and verify that your node is running. The Logos Blockchain is the blockchain component of the Logos technology stack, providing a privacy-preserving and censorship-resistant framework for decentralised applications. This procedure is for node operators setting up a node for the first time.
- A supported OS:
- Linux x86_64
- macOS aarch64 (recent versions)
- Raspberry Pi 5 with Raspberry Pi OS
- glibc version 2.39 or later (Linux only)
- On x86_64, a CPU with ADX instruction support: Intel Broadwell or later, or any AMD Zen. On virtual machines, configure the hypervisor to pass through host CPU features. Generic CPU models such as
kvm64andqemu64hide ADX and cause the blockchain module to crash withsignal 4. - 2 Core CPU, 2Ghz. Modern multi-core processor.
- Minimal RAM (1 Gb).
- SSD with 100+ GB free with ability to expand storage on demand.
- Relatively reliable network connection. 1Mbps of free bandwidth.
What to expect
- You can install the node binary, generate a configuration, and join the public testnet.
- You can verify that your node is syncing and connected to peers using the local API.
- You can receive test tokens from the faucet and automatically participate in the consensus lottery once your stake matures.
Step 1: Install Logos core tools
-
Use the
install-node-tools.shhelper script to installlogoscore,lgpd, andlgpminto./bin:curl -fsSL https://raw.githubusercontent.com/logos-co/logos-docs/main/resources/scripts/install-node-tools.sh | shexport PATH="$PWD/bin:$PATH"infoOn Linux,
logoscore,lgpd, andlgpmship as AppImages, which require FUSE. In environments without FUSE, such as Docker containers and minimal installations, the tools fail withNo suitable fusermount binary found on the $PATH. Either install FUSE withapt install fuse3or setexport APPIMAGE_EXTRACT_AND_RUN=1to run the tools without FUSE.
Step 2: Load the Logos Blockchain module
Download the Logos Blockchain module with lgpd, then install it with lgpm before loading it with logoscore.
-
Download the module. The root hash selects the exact published package identity for the pinned version:
lgpd download blockchain_module --version 0.2.3 --output ./# writes ./blockchain_module-0.2.3.lgx -
Install the module:
lgpm --modules-dir ./modules install --file blockchain_module-0.2.3.lgx -
Launch
logoscorein daemon mode:logoscore -m ./modules -D & -
Confirm the daemon RPC server is up. The daemon needs a few seconds to start, so repeat this command until the daemon reports
running:logoscore statusExample response once the daemon is ready:
{"daemon":{"pid":4720,"status":"running","version":"1.0.0"},"modules":[...]} -
Load the Logos Blockchain module:
logoscore load-module blockchain_module- A
load-modulesent before the daemon is ready fails with an RPC or missing client config error. If that happens, checklogoscore statusagain and retry.
- A
Step 3: Configure and start the node
The generate_user_config subcommand generates a user configuration that includes per-node settings such as keys, ports, and peer addresses, along with fresh cryptographic keys and an auto-detected public IP.
Make sure to use the current bootstrap peer addresses in the Logos Blockchain Node release notes for your selected release.
-
Generate your
user_config.yamlby runninggenerate_user_configwith the bootstrap peer addresses. For example, for release 0.2.3:logoscore call blockchain_module generate_user_config '{"initial_peers": ["/ip4/65.109.51.37/udp/3000/quic-v1/p2p/12D3KooWFrouXfmrR4nsLMtE7wu15DoMJ6VtoUtHinREZCvbWHar","/ip4/65.109.51.37/udp/3001/quic-v1/p2p/12D3KooWJRGau8M1rjT7R5e4YYsgdFhsMX35nRDtMwCDjxQkXAHz","/ip4/65.109.51.37/udp/3002/quic-v1/p2p/12D3KooWQXJavMDTRscjauFSgVAB1VLB6Rzpy2uY5SU9Tk7927tb","/ip4/65.109.51.37/udp/50001/quic-v1/p2p/12D3KooWSQc7CcGtvWDPF1yCbBthFnQjprfCVHmfmNDUrSmqQsU1"]}'- To change the API port, set
api.backend.listen_addressinuser_config.yamlbefore starting. The default is8080.
- To change the API port, set
-
Start the node:
logoscore call blockchain_module start user_config.yaml ""infoThe Logos Blockchain node does not currently support dynamic wallet key management. To add new keys you must manually edit
user_config.yamland restart the node. If the node is restarted while bootstrapping, it does not save sync progress and restarts from the beginning.
Step 4: Verify that your node is running and connected to peers
Wait for your node to finish syncing and reach Online mode before requesting tokens. Pipe the get_cryptarchia_info command through jq . to format JSON output.
-
Check the consensus state. The
logoscorecall and the node's HTTP endpoint return the same data in slightly different shapes.logoscore call blockchain_module get_cryptarchia_info | jq -r .result.value | jq .Example response (the
logoscorecall returns a flat object with amodefield):{"lib": "3d0c...4e6d","lib_slot": 0,"tip": "f44d...e2f5","slot": 70899,"height": 120,"mode": "Bootstrapping"}Alternatively, send a request directly to your node port:
curl -s http://localhost:8080/cryptarchia/info | jq .Example response (the HTTP endpoint nests the fields under
cryptarchia_info, names the status fieldstate, and adds a top-levelphase):{"cryptarchia_info": {"lib": "3d0c...4e6d","lib_slot": 0,"tip": "f44d...e2f5","slot": 70899,"height": 120,"state": "Bootstrapping"},"phase": "ProlongedBootstrapPeriod"}- The status field (
modefrom thelogoscorecall,statefrom the HTTP endpoint) starts asBootstrappingwhile syncing and transitions toOnlineonce caught up. - Confirm
slotandheightare increasing.heightcounts confirmed blocks;slotcounts elapsed time intervals, with a new block expected roughly every 10 seconds.
- The status field (
-
Check peer connectivity:
curl -s http://localhost:8080/network/info | jq .Example response:
{"listen_addresses": ["/ip4/127.0.0.1/udp/3001/quic-v1"],"peer_id": "12D3...fuS2","connected_peers": ["12D3...Mxu1", "12D3...sbD3"],"discovered_peers": ["12D3...Mxu1", "12D3...sbD3"],"n_peers": 16,"n_connections": 19,"n_discovered_peers": 18,"n_pending_connections": 0}- Confirm
n_peersis greater than0.
- Confirm
-
After 30–60 seconds, run the
get_cryptarchia_infocommand again and confirmslotandheighthave increased. -
Wait until
modetransitions toOnlinebefore continuing. Bootstrapping should take approximately 1 hour.
Step 5: Request tokens from the faucet
A faucet distributes free tokens on test networks so you can experiment without financial risk. Navigate to the public faucet site after your node reaches Online mode.
-
Find the keys associated with your node:
grep -A6 known_keys user_config.yamlExample output:
known_keys:57364103d3ff29c35d2073cba0526ef729b8e08490bddfc6b74128b6613fe923: ...de3233cec107e6589f83d4f3094caa65c633b5b33601211353779dc01972ca14: ...voucher_master_key_id: de3233cec107e6589f83d4f3094caa65c633b5b33601211353779dc01972ca14 -
Choose any key from
known_keys, enter it in Destination Public Key (Hex) on the faucet site, and press Request Funds.
tipThe faucet UI POSTs to
https://testnet.blockchain.logos.co/web/faucet-backend/<your-chosen-key>. You can call that endpoint directly from a script or headless host:curl -X POST "https://testnet.blockchain.logos.co/web/faucet-backend/<your-chosen-key>"# {"status":"queued"} -
Wait 1 to 2 minutes, then check your balance. Replace
<your-chosen-key>with the key you used:curl -s http://localhost:8080/wallet/<your-chosen-key>/balance | jq .Example response:
{"tip": "5d16d4bd3712dc5869fc624e59774552b4fb0c974a6efa516563b3778bac9258","balance": 1000,"address": "57364103d3ff29c35d2073cba0526ef729b8e08490bddfc6b74128b6613fe923"}- The faucet enforces a rate limit per key. A request made during the cooldown returns
429with{"status":"cooldown","retry_after_secs":...}. Wait for the cooldown to pass, then retry.
- The faucet enforces a rate limit per key. A request made during the cooldown returns
Your tokens become eligible for consensus after 3.5 hours. Confirm that your node is participating by checking that mode remains Online and height continues to increase.
Block proposal is probabilistic. Your node will not propose on every slot; participation depends on your stake relative to total active stake in the network.
Troubleshooting the Logos Blockchain node
logoscore call fails with RPC call failed?
An error such as:
{"code":"RPC_FAILED","message":"callModuleMethod('blockchain_module','generate_user_config') RPC call failed.","status":"error"}
means the logoscore daemon isn't reachable, or the module isn't loaded. Run logoscore status to tell the cases apart: it reports the daemon state, running or not_running, and the status of each module, loaded, not_loaded, or crashed. Restart the daemon if needed, then load the module:
logoscore -m ./modules -D &
logoscore load-module blockchain_module
If the module shows not_loaded again after a successful load-module, or calls keep failing, check the daemon output for a module crash:
[critical] [logos] [blockchain_module] FATAL: module 'blockchain_module' crashed (signal 4).
signal 4 is an illegal-instruction fault. One known cause: the blockchain module requires a CPU with ADX support. Run grep -c adx /proc/cpuinfo to check. An output of 0 means the CPU, or the CPU model of the VM, lacks ADX. On physical hardware, the module needs an Intel Broadwell or later, or an AMD Zen CPU. On a virtual machine, set the CPU model to pass through host features, for example host in QEMU and Proxmox.
If the count is greater than 0, the crash has a different cause. Collect the complete FATAL lines from the daemon output, including the backtrace addresses, together with the last lines of the newest node log file in the directory where the daemon runs, and report them to the Logos team.
Loaded modules don't persist across daemon restarts, so always re-run load-module after restarting the daemon. A METHOD_FAILED error such as Call to blockchain_module.<method> failed. means the daemon is reachable but the call itself failed. The most common causes are a module that isn't loaded or a missing required argument, such as calling generate_user_config without the JSON initial_peers argument.
The testnet explorer shows an error when I click on a transaction?
The testnet explorer does not support clicking on individual transactions. Searching by address is also not supported. Transaction hashes returned by the faucet may appear truncated and may not be immediately findable.
My wallet balance is not updating after requesting tokens?
If the balance endpoint returns 404 with The requested address could not be found in the wallet, your node hasn't yet synced past the block containing the faucet transaction. Funded addresses aren't visible while the node is still Bootstrapping. Wait for the node to reach Online mode and check again.