Bitok - Bitcoin v0.3.19 CompletedBitcoin before the compromises. Satoshi's unfinished work, finished.Quick LinksBlock explorer:
bitokd.runDownload latest release:
bitokd.run/downloadQuick Docs:
bitokd.run/docsGitHub:
github.com/elvisjedusor/bitokWeb wallet:
wallet.bitokd.runFaucet:
freebitok.comWEB3 SDK:
github.com/elvisjedusor/bitok-sdkRPC API docs:
RPC_API.mdX:
x.com/bitok_coin
Downloads - Bitok 0.3.19.13 ATOM. The Lost Bitcoin Layer 🜂Windows (64-bit):
bitok-0.3.19.13-win64.zip - GUI + daemon
Linux:
bitok-gui-0.3.19.13-linux-x86_64.tar.gz - GUI (AppImage)
bitokd-static-0.3.19.13-linux-x86_64.tar.gz - daemon only
macOS Intel:
bitok-macos-x86_64.zip - GUI
bitokd-macos-x86_64.zip - daemon only
macOS Apple Silicon:
bitok-macos-arm64.zip - GUI
bitokd-macos-arm64.zip - daemon only
Source:
github.com/elvisjedusor/bitok/releases/tag/0.3.19.13---
What This IsBetween 2009 and 2010, Satoshi built a peer-to-peer electronic cash system with a programmable script engine, free transactions for established coins, CPU mining, lightweight client support, and built-in privacy primitives. Then he left.
What followed was a decade of things being removed. The script opcodes were disabled. Free transactions were eliminated. Mining went to ASICs. Privacy was never implemented. Replace-By-Fee made zero-confirmation payments unreliable. The system that arrived was narrower than the one that was designed.
Bitok starts from Bitcoin v0.3.19 Satoshi's last release, December 2010, and takes the design in the direction it was pointing.
- The full script engine - every opcode works and is safe.
- Transactions are free for coins held a day or more.
- Mining is CPU-optimized. Your laptop can compete.
- SPV lightweight wallets work as Satoshi described in the whitepaper.
- Native stealth addresses - Satoshi's key blinding, implemented.
- Raw transaction toolkit for arbitrary script contracts.
Same 21M supply. Same halving schedule. Same 10-minute blocks. New genesis. Separate network.
---
SpecificationsAlgorithm: Yespower 1.0 (N=2048, r=32) pers="BitokPoW"
Block time: 10 minutes
Block reward: 50 BITOK
Halving: every 210,000 blocks
Max supply: 21,000,000
Difficulty adjust: every 2016 blocks
Coinbase maturity: 100 blocks
P2P port: 18333
RPC port: 8332
Network magic: 0xb40bc0de
---
Script EngineIn August 2010, Bitcoin Core disabled most scripting opcodes, citing denial-of-service risk. The practical consequence was the removal of Bitcoin's native programmability. A decade later, restoring OP_CAT alone remains one of the most contentious proposals in Bitcoin development.
Bitok kept every opcode and made the VM safe with deterministic execution limits. The script engine activated at block 18,000 and has been live since.
Active opcodes:- OP_CAT - concatenation. Covenant patterns work.
- OP_SUBSTR, OP_LEFT, OP_RIGHT - string slicing and extraction.
- OP_MUL, OP_DIV, OP_MOD, OP_2MUL, OP_2DIV - on-chain arithmetic.
- OP_LSHIFT, OP_RSHIFT - bitwise shifts.
- OP_AND, OP_OR, OP_XOR, OP_INVERT - bitwise logic.
- OP_CHECKMULTISIG - bare m-of-n multisig, standard and relayable.
- OP_RETURN - provably unspendable. The original was bugged; this is fixed.
- All six sighash types: ALL, NONE, SINGLE, with or without ANYONECANPAY.
Execution limits:Max script size: 10,000 bytes
Max stack depth: 1,000 items
Max element size: 520 bytes
Max opcodes/script: 201
Max sigops/block: 20,000
Max multisig keys: 20
Evaluation model: Separated. scriptSig is push-only - it delivers data to the stack. scriptPubKey contains all logic. The scriptSig cannot influence control flow. Strict DER signatures, low-S enforcement, minimal push encoding. Scripts up to 10KB are standard and relayable.
Any well-formed script works: arithmetic puzzles, hashlocks, covenants via OP_CAT, timelocked payments with nLockTime, crowdfunding with SIGHASH_ANYONECANPAY, bare multisig with up to 16 keys.
---
Raw Transaction ToolkitA full suite of RPC commands for building, signing, inspecting, and verifying arbitrary transactions:
- createrawtransaction - construct a transaction from explicit UTXOs and outputs. Output keys can be addresses, OP_RETURN data, or raw hex scriptPubKey for custom contracts.
- signrawtransaction - sign with wallet keys or explicit WIF keys. Supports all sighash types. Preserves partial signatures across multiple signers for multisig workflows.
- buildscript - assemble a scriptPubKey from opcode names and hex data pushes.
- setscriptsig - set an explicit scriptSig on a transaction input. The key tool for spending custom contracts.
- getscriptsighash - compute the 32-byte sighash digest for an input. For offline and external signing.
- verifyscriptpair - execute scriptSig + scriptPubKey against a real transaction and return the result with diagnostics.
- decodescriptsig - decode a scriptSig in context, showing the role of each push element.
- decoderawtransaction, decodescript, createmultisig, addmultisigaddress - inspection and multisig tooling.
Workflow: build a script, fund it with createrawtransaction, spend it with setscriptsig and sendrawtransaction. Offline cold-signing is supported - sign with explicit keys on an air-gapped machine, broadcast on the online node.
---
Native Privacy: Stealth ok-AddressesOn August 13, 2010, Satoshi described key blinding:
"What we need is a way to generate additional blinded variations of a public key. The blinded variations would have the same properties as the root public key, such that the private key could generate a signature for any one of them. Others could not tell if a blinded key is related to the root key, or other blinded keys from the same root key." - Satoshi Nakamoto, BitcoinTalk #356, August 13, 2010
He described it in detail. He never coded it. Bitok implements it.
How it works:The receiver publishes a single stealth address (prefixed
ok) that encodes two compressed public keys. Every sender independently derives a fresh one-time destination using ECDH with the receiver's scan key and spend key. The ephemeral public key is embedded in an OP_RETURN output (34 bytes on-chain). The receiver's wallet scans every transaction, derives the expected one-time key, and if it matches, computes the private key and imports the funds automatically.
- Every payment to the same stealth address creates a different on-chain destination.
- No outside observer can link two payments to the same person.
- No interaction required - the receiver does not need to be online.
- Deterministic change key derivation - change from stealth spends is recoverable from the SK secret alone.
- No consensus changes - everything fits within the existing transaction format.
Backup and restore work through the same dumpprivkey / importprivkey commands as regular addresses. The combined SK export contains everything needed to recover both the stealth address and all derived change keys on any node via rescan.
RPC commands: getnewstealthaddress, liststealthaddresses, decodestealthaddress. sendtoaddress auto-detects ok-addresses and constructs the stealth transaction transparently.
---
Fee PolicyBitcoin's original fee design was priority-based. Satoshi's intent was that coins held for a day move for free, and fees exist only to deter spam. Bitcoin Core replaced this with a pure fee market.
Bitok restores it:
priority = sum(input_value * confirmations) / tx_size
- Coins held ~1 day at typical amounts qualify for free relay.
- First 27KB of each block is reserved for high-priority free transactions.
- Remaining block space is sorted by fee-per-byte.
- When fees apply: 0.01 BITOK per KB.
- Outputs below 0.01 BITOK (dust) always require a fee.
The wallet handles this automatically. If your coins qualify, they move for free. If not, the required fee is calculated and shown before sending.
---
CPU MiningSatoshi wrote in 2009:
"It's nice how anyone with just a CPU can compete fairly equally right now." That stopped being true within a year.
Bitok uses
Yespower 1.0 (N=2048, r=32, pers="BitokPoW") - memory-hard, CPU-optimized, ASIC and GPU resistant. ~128KB memory per hash. SSE2, AVX, and AVX2 are auto-detected with no configuration required.
./bitokd -gen # mine on all cores
./bitokd -gen -genproclimit=4 # limit to 4 cores
In the GUI: Settings > Options > Generate Coins.
Pool operators: the node supports getblocktemplate (BIP 22) and getwork. Full Stratum-compatible pool integration is documented.
---
SPV / Lightweight WalletsSection 8 of the Bitcoin whitepaper described simplified payment verification - lightweight clients that verify payments without downloading the full chain. The protocol is fully implemented:
- Header sync - getheaders/headers, 2,000 headers per batch.
- Bloom filters - filterload, filteradd, filterclear for transaction matching.
- Filtered blocks - merkleblock messages with Merkle proofs for matched transactions.
- Merkle proof RPC - gettxoutproof/verifytxoutproof for independent verification.
- Transaction broadcast - sendrawtransaction for pre-signed transactions.
A lightweight wallet can verify payments trustlessly without a full node.
---
SecuritySatoshi-era fixes (included from genesis):- Value overflow protection (184-billion coin bug)
- Blockchain checkpoints at blocks 0, 6666, 14000, 16000
- DoS limits on connection rate, message size, and message rate
Network hardening:- Time warp attack protection - timestamps validated at difficulty boundaries
- DNS seed infrastructure - seed1/2/3.bitokd.run with hardcoded fallback peers
- Anchor connections - 2 longest-lived peers saved and reconnected on restart (eclipse attack resistance)
- Network group diversity - peers grouped by /16 subnet, capped at 2 outbound + 8 inbound per group (Sybil resistance)
- External IP detection learned from peers via P2P, no HTTP dependency
Script hardening:- Strict DER signature validation
- Low-S signature enforcement (anti-malleability)
- SIGHASH_SINGLE out-of-range fix (prevents coin theft vector)
- CHECKMULTISIG NULLDUMMY enforcement (anti-malleability)
- OP_RETURN hard failure (original Bitcoin had a bug here)
- Separated evaluation - scriptSig cannot manipulate scriptPubKey
- Bounded execution - no CPU or memory exhaustion via scripts
---
RunningExtract and run. Peers are discovered via IRC bootstrap (irc.libera.chat #bitok) and DNS seeds - same mechanism early Bitcoin used.
Data directories:
- Windows: %APPDATA%\Bitok\
- Linux: ~/.bitokd/
- macOS: ~/Library/Application Support/Bitok/
./bitokd # start a node
./bitokd getinfo # check status
./bitokd getnewaddress # new address
./bitokd sendtoaddress <addr> <amount>
./bitokd getnewstealthaddress # new stealth ok-address
./bitokd -gen -genproclimit=4 # start mining on 4 cores
---
Key Management./bitokd dumpprivkey <address> # export WIF or SK secret
./bitokd importprivkey <key> [label] # import, triggers rescan
GUI: right-click any address in the address book to export. Import via File menu. Stealth address import runs two blockchain scan passes to recover all derived change keys.
---
Technical DocumentationProtocol:
SCRIPT_EXEC.md - Execution limits, separated evaluation, signature rules
SCRIPT_DEV.md - Full script developer guide: all opcodes, contract patterns, RPC toolkit
FEES.md - Priority-based fee policy
PRIVACY.md - Native stealth addresses (Satoshi's key blinding, implemented)
SPV_CLIENT.md - SPV lightweight client protocol
RAW_TRANSACTIONS.md - Raw transaction construction, multisig, custom scripts
SECURITY_FIXES.md - Security hardening details
Mining:
BITOKPOW.md - Yespower proof-of-work specification
SOLO_MINING.md - Solo mining with built-in miner or cpuminer-opt
POOL_INTEGRATION.md - Pool integration guide
MINING_OPTIMIZATIONS.md - CPU performance tuning
API & Building:
RPC_API.md - Complete JSON-RPC reference
BUILD_UNIX.md - Linux/BSD
BUILD_MACOS.md - macOS
BUILD_WINDOWS.md - Windows
---
LicenseMIT. Same as original Bitcoin.
---
Bitcoin v0.3.19, running as Satoshi designed it - with the parts he never had time to finish.