SOST V30000 — MINER & NODE GUIDE

Everything you need to install, configure and run SOST V30000 — and to decide whether you want to enter the DTD Jackpot V2 draw. Written for someone who has never run a node before, with the exact commands for someone who has.

WHERE THE CHAIN IS RIGHT NOW
reading the chain…
V30000 activates at block #30,000, automatically by block height. V30000 changes all three binaries (node, miner and CLI; none byte-identical to v16.2.x) — re-download, verify and swap all three before #30,000. You may install any time before #30,000 — you do not need to wait; the window #29,900 → #30,000 is the recommended final verification window (a last check that your node and miner are running V30000), not the only valid time to install.
Three different things, often confused: installing the software (do it before the window), the consensus activation (happens by itself at #30,000, nobody triggers it), and registering NODE_BIND (optional, only for the Jackpot, and only after #30,000).
1 · Download & verifyOfficial binaries and SHA-256 2 · Do you need a node?Three setups, one honest answer 3 · Your RPC passwordThere is no universal one 4 · Start node & minerVerified commands 5 · EncryptionThree separate things 6 · DTD vs Jackpot V2What you get without doing anything 7 · NODE_BINDOptional, and only after #30,000 8 · Backups & mistakesWhat to keep, what leaks 9 · TroubleshootingThe messages you will actually see 10 · Network statusWhat is not fixed yet
V30000 FINAL SECURITY BUILD — NODE + MINER + CLI UPDATE REQUIRED before #30,000. All three binaries changed following the final pre-activation security hardening. Do not install or keep using earlier V30000 / RC / emergency builds — they are superseded and may diverge from the chain at #30,000. The verified SHA-256 values are in section 1 below. On mainnet, #30,000 activates DTD Jackpot V2 only: Native Assets are DEFERRED / FAIL-CLOSED, SACS V2 is DEFERRED, the monetary rule stays 50% Miner / 50% DTD, and SOST has no burn mechanism.
1 · Download the official binaries and verify them
Download the V30000 FINAL SECURITY BUILD: github.com/Neob1844/sost-core/releases/tag/v30000-final (sost-node, sost-miner, sost-cli, SHA256SUMS; source commit 3acd952bd2c3). The earlier v30000, v30000-rc1 and emergency builds are SUPERSEDED — do not install them.
Optional node-only hardening (v30000-final.1): github.com/Neob1844/sost-core/releases/tag/v30000-final.1 — replaces only sost-node (fail-closed chain replay, safe failed-reorg recovery, no chain-file writes during a reorg). No consensus change; sost-miner and sost-cli are identical, so miners do not recompile. Either node hash below is valid.
MANDATORY: every node and every miner must restart on the FINAL build between #29,900 and #30,000, or risk a chain split and miss the new protocol rules.

HOW TO DO IT — 4 SIMPLE STEPS (do steps 3 and 4 between #29,900 and #30,000)

# 1. GET THE NEW BINARIES  (A: recompile  -or-  B: download)
#    A) recompile (Ubuntu/Debian/WSL2):
sudo apt install -y build-essential cmake git libssl-dev libsecp256k1-dev
git clone https://github.com/Neob1844/sost-core.git sost-final && cd sost-final
git checkout v30000-final
cmake -S . -B build -DSOST_ENABLE_PHASE2_SBPOW=ON -DSOST_TESTNET_FORKS=OFF -DCMAKE_BUILD_TYPE=Release
cmake --build build --target sost-node sost-miner sost-cli -j"$(nproc)"
cd build
#    B) or download the official binaries:
#    for f in sost-node sost-miner sost-cli SHA256SUMS; do wget -q https://github.com/Neob1844/sost-core/releases/download/v30000-final/$f; done; chmod +x sost-*

# 2. VERIFY  (must match exactly)
sha256sum sost-node sost-miner sost-cli
#   ef608cf9e7f6434f8d60b29c3287ca7045cb83de1be1ddf585a9176bf45b39cd  sost-node
#   53c83836bc16e32cd0b9bdda5d15e8936a217079dacde00ca7eba8302b8a1e75  sost-miner
#   09d9a5022b3c03dfbe85df1ea728f931f5287712739921e17138e89dad14f62b  sost-cli

# 3. RESTART THE NODE on the new sost-node   (between #29,900 and #30,000)
#    systemd:  sudo systemctl stop sost-node
#              sudo install -m 0755 sost-node /path/to/your/sost-node
#              sudo systemctl start sost-node
#    by hand:  stop the old node (Ctrl+C) and start the NEW ./sost-node with your usual flags

# 4. RESTART THE MINER on the new sost-miner   (between #29,900 and #30,000)
#    stop the old miner (Ctrl+C), then start the NEW one with your usual flags, e.g.:
./sost-miner --wallet ~/sost-keys/my-wallet.json --mining-key-label "my-mining-key" \
  --genesis genesis_block.json --rpc 127.0.0.1:18232 --rpc-user <user> --rpc-pass-file ~/.sost/rpc.pass \
  --blocks 999999 --max-nonce 500000 --profile mainnet --realtime --threads <N>
#    (--realtime is mandatory. Your chain data is kept: no resync.)

Verify before you run anything

sha256sum -c SHA256SUMS

Or check them one by one against the published values:

FileSHA-256
sost-nodeef608cf9e7f6434f8d60b29c3287ca7045cb83de1be1ddf585a9176bf45b39cd
sost-node (v30000-final.1, optional hardening)7ca5ea630a50f45d70cedd073c1bbb239abd69ac6f2e30c316236121c601b736
sost-miner53c83836bc16e32cd0b9bdda5d15e8936a217079dacde00ca7eba8302b8a1e75
sost-cli09d9a5022b3c03dfbe85df1ea728f931f5287712739921e17138e89dad14f62b
If the hash does not match, stop. Downloading a file from the right URL does not make it the right file. A mismatch means the download is corrupt or the file is not ours — delete it and try again. Never run it "just to see".

What these binaries are

Linux x86-64 ELF executables. They are not signed installers and there is no Windows or macOS build in this release. On Windows, run them under WSL2. Building from source (MIT licence) is always an option and is how you can check the binaries yourself.

Practical requirements: the miner allocates a 4 GB dataset per block, so plan for ~6 GB of free RAM for the miner alone. A full node keeps the chain in memory; today that is under 1 GB, and it grows.

2 · Do you need to run a node?

A miner does not talk to "the network". It talks to one node, over RPC, and that node is what accepts your block and relays it. So the real question is whose node.

A — Node and miner on the same machine

The simplest setup, and the one we recommend if you are starting. The miner connects to 127.0.0.1:18232, which never leaves your machine. You control the password because you set it.

B — Your node on a VPS, your miner at home

Also fine, and it is what we run. The miner still connects to 127.0.0.1:18232 — the difference is that an SSH tunnel maps that local port to the node on the server. The RPC port stays closed to the internet.

C — Someone else's node

Only if that operator has explicitly authorised you to mine against it and has given you credentials. Mining through a node means asking it for work and asking it to accept your blocks; that is not something you do to a stranger's server.

https://sostcore.com/rpc/public is not a mining server. It is a read-only gateway: it answers questions like the block height and it relays a signed transaction. It does not serve mining work and it does not accept submitblock. Pointing a miner at it will not mine anything.

P2P and RPC are not the same port

P2P — 19333RPC — 18232
Who talks to itother nodesyou, and your miner
Should it face the internet?yes, that is its jobno, never
Passwordnone, it is a public protocolyes, always
3 · Your RPC password — read this one
There is no SOST RPC password. There is no shared one, none is issued to you, and nobody can send you one. You create your own when you start your own node. If you mine against someone else's node, only that operator can give you theirs.

Create one and put it in a file

umask 077
mkdir -p ~/.sost
openssl rand -hex 32 > ~/.sost/rpc.pass
chmod 600 ~/.sost/rpc.pass

That is 256 bits of randomness. It must be a single line, owned by the account that runs the node, mode 600. The binaries refuse to read a secret from a file that is group- or world-readable, and refuse a file with more than one line — that is deliberate, not a bug.

Never pass it on the command line

--rpc-pass <password> puts your password in the process arguments, where any local user can read it with ps for as long as the process runs. It does not matter that you typed it invisibly. Use --rpc-pass-file (or --rpc-pass-fd). The binaries' own help says the same.

Keep it on loopback

The node binds RPC to 127.0.0.1 by default. Leave it there. --rpc-public exists for people who know exactly why they need it; if you are reading this guide, you do not. To reach a remote node, use SSH (next section) — it gives you an encrypted tunnel and it does not open a port to the world.

4 · Starting your node and your miner

Every option below was checked against --help on the published V30000 binaries. Paths, labels and users are placeholders — replace them with yours.

Start a node

./sost-node \
  --genesis genesis_block.json \
  --chain chain.json \
  --rpc-user myuser \
  --rpc-pass-file ~/.sost/rpc.pass \
  --profile mainnet \
  --p2p-enc on

Start a miner

./sost-miner \
  --wallet ~/sost-keys/my-wallet.json \
  --mining-key-label "my-mining-key" \
  --genesis genesis_block.json \
  --rpc 127.0.0.1:18232 \
  --rpc-user myuser \
  --rpc-pass-file ~/.sost/rpc.pass \
  --blocks 999999 --max-nonce 500000 \
  --profile mainnet --realtime --threads 8
--realtime is not optional. Without it the miner stamps blocks far in the future and your node rejects every one of them with "timestamp too far in future". You can mine for hours and produce nothing.

--mining-key-label must match a label that actually exists in your wallet, exactly, spaces included. Check what you have:

./sost-cli --wallet ~/sost-keys/my-wallet.json info

Miner at home, node on a VPS

ssh -N -L 18232:127.0.0.1:18232 \
  -o ServerAliveInterval=15 -o ExitOnForwardFailure=yes \
  -i ~/.ssh/your_key user@your-server

Leave that running, and point the miner at 127.0.0.1:18232 exactly as above. The RPC port on the server stays closed; the traffic travels inside SSH.

Is it actually mining?

Startup takes a minute or two — it loads the chain and builds a 4 GB dataset. You are mining when you see [DATASET] regenerated followed by [MINING] Starting N threads and a line with att/s. Compare the height and difficulty it prints against the Explorer: they should agree.

Found is not the same as accepted

What you seeWhat it means
[BLOCK 12345] …your machine solved it. Nothing is on the chain yet.
-> submitted to node OKyour node accepted and stored it, and is relaying it.
It appears in the Explorerthe network has it. This is the one that counts.
Do not run two miners with the same wallet and label. They race for the same height, both submit, and one of the two is thrown away as a duplicate. You do not get more blocks — you burn electricity to lose half your work. Check with pgrep -ax sost-miner.
5 · "Encryption" means three different things

People mix these up constantly. They protect different things and none of them replaces another.

What it protectsHow
RPC transportthe channel between your miner and your nodeloopback, or SSH tunnel
P2P transportthe channel between your node and other nodes--p2p-enc on
Wallet v2your private keys, on diskpassphrase, AES-256-GCM

P2P: what on really does

--p2p-enc takes off (the default), on or required. With on, your node offers an X25519 + ChaCha20-Poly1305 handshake and falls back to plaintext if the other node does not support it. That fallback is what keeps the network connected while operators upgrade — and it also means "on" does not guarantee an encrypted link. If you need the guarantee, required refuses plaintext peers, at the cost of connecting to fewer of them.

Wallet v2 is optional, and v1 still works

A v1 wallet holds your private keys unencrypted: anything that can read the file can spend your coins. It keeps working, and the miner will warn you on every start. Converting changes nothing about your mining identity or your payout address — same keys, different container.

./sost-cli --wallet ~/sost-keys/my-wallet.json wallet-export

For unattended restarts the miner reads the passphrase from a file or a descriptor (--wallet-passphrase-file, --wallet-passphrase-fd) instead of prompting. -fd takes the descriptor number, never the passphrase itself.

Do not delete your v1 file until the v2 one has mined a block. Keep it offline until then. The passphrase cannot be recovered: lose it and the keys in that file are gone, with no support desk to call.
6 · Normal DTD and Jackpot V2 are not the same thing
Normal DTDDTD Jackpot V2
Sinceblock #25,000first draw at #30,186, then every 288 blocks
How oftenevery blockevery 288 blocks (~48 h)
NODE_BINDnot neededrequired
What you must donothing — just minebind a node key and keep it online

Half of every block's emission already goes to the DTD distribution, and you take part by mining. Nothing to register, nothing to sign up for.

What Jackpot V2 asks for

  • Your SbPoW mining identity — the key behind --mining-key-label.
  • At least 3 blocks mined in the last 2,016 (~14 days).
  • An active NODE_BIND tying a node key to that mining key.
  • Heartbeats, on a ramp: 0 are required for the first draw at #30,186, because no epoch has completed yet. It rises 1-of-1, then 2-of-2, then 3-of-3, and settles at the permanent rule — 3 of the last 4 epochs of 288 blocks — from #31,338.

Check your own eligibility — no keys involved

curl -s -X POST https://sostcore.com/rpc/public -d '{"jsonrpc":"1.0","id":"a",
 "method":"checkhistoricaljackpoteligibility","params":["sost1YOUR_MINING_ADDRESS"]}'

It takes a public address and returns node_bound, pow_blocks, heartbeats_valid, eligible and the reasons you are not. It never asks for a private key. Anyone who asks you for one is stealing from you.

7 · NODE_BIND — optional, and not before #30,000
You do not need this to mine. Mining and normal DTD work without it. NODE_BIND exists for one reason: to enter the Jackpot V2 draw.

Preparing is not registering

You can create and protect the key today. You cannot register it until V30000 is live at #30,000 — the transaction type does not exist before that height, and broadcasting it early achieves nothing.

Now: create the node key

umask 077
openssl rand -hex 32 > ~/.sost/node.key
chmod 600 ~/.sost/node.key

This is a different key from your mining key and from your wallet. It identifies your node. It cannot move coins — but whoever holds it can impersonate your node's heartbeats, so treat it as a secret and back it up (see the next section).

⚠ DO NOT SUBMIT A NODE_BIND YET. Wait for the explicit go-ahead in the site banner. From #30,000 NODE_BIND uses the new two-signature ownership rule (mining key + node key); a bind mined while a major miner still runs an older build could split the chain. ALL validating nodes and miners must be on the V30000 FINAL SECURITY BUILD first.

After #30,000: build the transaction

./sost-cli --wallet ~/sost-keys/my-wallet.json \
  --mining-key-label "my-mining-key" \
  createnodebind 1 --node-key-file ~/.sost/node.key

It prints which mining key it is binding and then the raw transaction hex. The label must be the same one your miner signs blocks with — if it does not exist, the command refuses and lists your wallet's labels instead of binding the wrong key. 1 is the bind sequence; it only increases if you ever replace the node key.

There is an older form, createnodebind 1 <hex>, that takes the private key on the command line. It still works and the tool warns you: it leaves your node key visible in ps. Use --node-key-file.
Right after your NODE_BIND confirms: check that it is yours.
  1. Verify that the registered owner/address of your node key is your intended mining address.
  2. Verify that the following heartbeats are associated with that node.
  3. If the registered owner is not yours, stop relying on Jackpot eligibility and report it to the SOST developers.
NODE_BIND affects Jackpot eligibility only: it does not give anyone access to your wallet, does not let anyone spend your SOST, and can not create or burn SOST. From #30,000 the FINAL build enforces a stronger ownership rule: a NODE_BIND must be signed by both your mining key and your node key (the CLI does both from the command above), so only the holder of a node key can bind it and a bind cannot be copied to another miner.

Then: broadcast it and check it landed

curl -s -X POST https://sostcore.com/rpc/public \
  -d '{"jsonrpc":"1.0","id":"a","method":"sendrawtransaction","params":["PASTE_HEX"]}'

If it does not return a txid, do not resend blindly — check getrawmempool first. Then restart your node with --node-key-file ~/.sost/node.key so it emits its own heartbeats.

The proof that it worked is not "I sent the transaction". It is checkhistoricaljackpoteligibility answering "node_bound": true and "eligible": true. Check it before #30,186.

Keeping the heartbeats alive

Once the node runs with --node-key-file, it does the heartbeats by itself: a thread signs and broadcasts one NODE_HEARTBEAT per epoch — an epoch is 288 blocks (~48 h), the same cadence as the jackpot — but only once the node is bound and V30000 is live (#30,000). You do not run nodeheartbeat by hand; that command exists only for unusual setups where the signing node is not the one you want emitting.

What you actually have to do is keep the node up. Miss an epoch (node down, key removed) and that epoch's heartbeat is simply absent — the permanent rule is 3 of the last 4 epochs, so one gap is survivable, two in a row are not. Check it is working:

ssh root@YOUR_VPS 'grep -a "auto-heartbeat" /var/log/sost-node.log | tail -2'

You want [NODE-HEARTBEAT] auto-heartbeat enabled for node pubkey … at startup, and later emitted heartbeat for epoch N once per epoch. Or read it back from consensus: checkhistoricaljackpoteligibility shows heartbeats_valid climbing toward heartbeats_required. Before #30,186 both are 0, which is why the first draw needs no heartbeat history at all.

Being eligible is not winning. The draw weights miners by their proof-of-work over the last 2,016 blocks. Registering NODE_BIND buys you a ticket, nothing more.
8 · What to back up, and the mistakes people actually make
FileSecret?If you lose it
wallet .jsonYES — the worst oneyour coins are gone. Nobody can help.
node.keyyesmake a new one, register with bind_seq 2
rpc.passyesset a new one, restart node and miner
chain.jsonnonothing — it re-syncs
your mining addressno, it is public—

How to keep a backup that is actually a backup

  • Encrypt it, and store it off the machine that holds the original. A copy on the same server does not survive losing the server.
  • Store the passphrase separately. On the same USB stick as the encrypted file, the encryption is decoration.
  • Test the restore. An untested backup is a belief, not a backup. Recover it into a temporary folder and compare the checksum.
  • chmod 600 and owned by the right account, everywhere.

The five we keep seeing

  1. Password in ps — started with --rpc-pass. Every local user can read it.
  2. Two miners running — usually one forgotten in another terminal. Half your work is discarded.
  3. RPC exposed — --rpc-public without a firewall. That is your wallet on the internet.
  4. Wrong --mining-key-label — a label that does not exist, or with different spacing.
  5. Unverified binaries — downloaded and run without checking the SHA-256.
9 · Troubleshooting — the messages you will actually see

"Why is nothing asking me for an RPC password?"

Because there is nothing to ask. You create it yourself on your own node. If you are mining against someone else's node, that operator gives it to you. Nobody else can.

"UNENCRYPTED (v1) wallet" on every miner start

A warning, not an error. Your wallet file holds the keys in the clear. Mining works. Section 5 covers converting.

"Local height: 0" when it starts

Normal. It is still loading. Wait for [DATASET] regenerated and then [MINING] Starting N threads — typically one to two minutes.

"Is it really mining?"

Look for a line with att/s that keeps updating, and CPU usage near threads × 100%. A static log is a stuck miner.

"submitted to node OK" — did I earn it?

Your node accepted it. It is on your chain and being relayed. It is really yours when the Explorer shows it.

"RPC AUTHENTICATION REJECTED (HTTP 401)"

User or password does not match what the node was started with. Most often: the password file changed but the node or the miner was never restarted — both read it once, at startup.

"My node has no peers"

Check that P2P port 19333 is open inbound on your server; that is a different port from RPC. Read the status section below before assuming your node is broken.

"Am I ready for Jackpot V2?"

Run checkhistoricaljackpoteligibility (section 6). It answers with reasons.

"Do I restart at #30,000?"

No. Activation is automatic. Install the binaries in the window, and then leave your node alone. The only later restart is optional: adding --node-key-file for the Jackpot.

"What if I stay on the old version?"

Before #30,000, nothing happens. From #30,000 a pre-V30000 node applies the old rules and will reject blocks the network accepts — it follows a chain nobody else is on. Your coins are safe; your node is not useful.

10 · Honest network status — what is not fixed yet
Both problems this section used to list are now fixed in the source and running on the network's production node. They never affected your coins, your keys or your ability to mine — only a node's ability to serve the chain to a brand-new node.
  • Block serving & sync rate limit. Under load a node could leave a block frame half-written, desynchronising the peer, and a freshly-synced node could ban the very peer that had just served it the chain. Fixed in main (commit cfcfe9df) and deployed to the production node on 2026-09-24 — the node accepted new blocks after the restart with zero undue bans.
  • Historical revalidation. 66 blocks (19 with recomputed cASERT values, 4,160–5,410; 47 with a since-corrected profile-parameter table, 4,715–5,038), all mined in April 2026, could not be re-validated by today's rules. The fix pins each one by height and full block hash, changes no rule for any new block, and is in the same commit. Verified by a full genesis→tip sync (encrypted and plaintext): both clients reached the tip with the same hashes as the reference node, 0 rejects, all 66 exceptions used once each.
This is fixed and downloadable in V30000 (the binaries at the top of this page). A node from V30000 completes a full sync from genesis; you no longer need a pre-seeded chain.json. Older versions do NOT contain the fix — update to V30000. All three binaries (sost-node, sost-miner, sost-cli) changed in V30000 and are not byte-identical to v16.2.x; re-download and verify all three.

We describe as done only what is proven: the fix is merged in GitHub, running on the production node, and published as a signed binary release (V30000) whose downloaded artifacts were re-verified against their SHA-256. No external security audit of this software has been performed.

Questions: sost@sostcore.com · Telegram · BitcoinTalk · Source (MIT)
Nobody from SOST will ever ask you for a private key, a wallet file or a passphrase.

🎮