Goes live in …
Get started
Four steps. You need Docker, a computer that stays on, and a bit of patience. The commands take minutes, but one download takes a while.
Step one
Get the node.
docker pull ghcr.io/kosinskihenry/bitcoin-splice
# 38 MB, linux/amd64
git clone https://github.com/kosinskihenry/bitcoin
cd bitcoin
docker build -t ghcr.io/kosinskihenry/bitcoin-splice .
# same name, so everything below works either way
That's an ordinary Bitcoin node with a different difficulty rule. It can't connect to the real Bitcoin network, in either direction, even if you tried. The two networks speak different greetings. That's what makes it safe to leave this thing plugged into the internet like any other node.
The published image is amd64 only. On an ARM machine,
a Raspberry Pi or an Apple-silicon Mac, the pull fails with no
matching manifest and building it yourself is the way in. Tag your
build with the same name, as above, and every command on this page
works unchanged. There is a 961635 tag as well, if you
would rather pin an exact image than follow latest.
Don't start it yet. A node needs a chain to open, and on this network you can't collect one from strangers as you go, so the chain comes first and the node starts on top of it. That's step two.
Step two
Get the chain, then start on it.
Bitcoin Splice continues from a real Bitcoin block, number 961,635, mined this August, and your node needs Bitcoin's history up to that point before it can do anything at all. The snapshot is where that comes from.
# 11.4 GiB, the chain at block 961,635
curl -O https://snapshots.bitcoinsplice.com/splice-961635-pruned.tar.zst
curl -O https://snapshots.bitcoinsplice.com/SHA256SUMS
curl -O https://snapshots.bitcoinsplice.com/SHA256SUMS.asc
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
mkdir -p ~/.bitcoin-splice tar -I zstd -xf splice-961635-pruned.tar.zst \ -C ~/.bitcoin-splice # blocks/ and chainstate/, 14.6 GiB. Nothing else. docker run -d --name bitcoin \ -e FORK_RPC_PASSWORD=pick-a-password \ -v ~/.bitcoin-splice:/home/bitcoin/.bitcoin \ ghcr.io/kosinskihenry/bitcoin-splice \ -printtoconsole -prune=550
The snapshot is the ordinary way in, not a shortcut.
It is this chain already at block 961,635, pruned back to the last few
hundred blocks, so your node opens at the fork point and syncs forward
from there like any other. The archive holds blocks/ and
chainstate/ and nothing else: no config, no wallet, no
keys. The node writes its own bitcoin.conf on first start
and finds the network through a built-in seed, so you don't have to
know anyone to join.
Pick a real password. The node refuses to start on the default one,
because that password can mine, rewrite and read everything. Keep the
-prune=550 as well: a pruned datadir records that it is
pruned, and a node started without the flag asks for a reindex it has
no blocks left to do.
DE25 4950 C136 1D98 B87F 33E2 7043 0561 A29C 5FB7, and
that check is the one that matters. A snapshot leading anywhere except
the fork hash won't start at all, but one with the right hashes and a
doctored ledger inside would start fine and only misbehave later.
Check where it opened. The best block hash has to be the one below. That value is compiled into the binary, so a node disagreeing with it is not on this chain, and it will say so and refuse to start rather than mine somewhere plausible and wrong.
After that it syncs forward over P2P to whatever the network has mined since, which is ordinary catching up and nothing to do but watch. Once it's current, mining will work.
Not taking the snapshot? Then the history has to arrive over P2P too, and the ordinary Bitcoin network cannot give it to you. Splice speaks its own protocol, so only another Splice node will serve this history, and right now that is a single machine: the seed node the developer runs. It is kept unpruned for exactly this purpose, but it is one computer with one connection, so expect a long download and be patient with it.
Already run a Bitcoin node? Then you have nearly all of this on disk already, and copying that folder across is quicker than pulling it down again. Stop your node cleanly first. That route also leaves you unpruned, which is the kind of node this network is short of.
docker exec --user bitcoin bitcoin \ bitcoin-cli getblockchaininfo # "blocks": 961635 # "pruned": true # "bestblockhash": # 00000000000000000000c705b7a0a847d2713d73da4a1b20cea3dfdd617fa651
Step three
Make yourself a wallet.
docker exec --user bitcoin bitcoin \
bitcoin-cli createwallet mining
docker exec --user bitcoin bitcoin \
bitcoin-cli getnewaddress "" legacy
# 1… this is where your coins go
Ask for a legacy address, as above. BFGMiner cannot mine
to a bech32 one, so a legacy address is the type that works with every
miner here.
It will start with a 1, exactly like an ordinary Bitcoin
address. That's a bit unfortunate and worth remembering: label things
clearly so you never paste one into the other.
Step four
Point a miner at it.
Three have been tested against Splice: BFGMiner, cpuminer-opt
and a commercial ASIC. None of them needs modifying. cpuminer-opt
is the quickest on a CPU, so it is the one set up below.
# restart with the mining port open docker rm -f bitcoin docker run -d --name bitcoin -p 8455:8455 \ -e FORK_RPC_PASSWORD=pick-a-password \ -e FORK_RPC_ALLOW_IP=172.17.0.0/16 \ -v ~/.bitcoin-splice:/home/bitcoin/.bitcoin \ ghcr.io/kosinskihenry/bitcoin-splice \ -printtoconsole -prune=550 # unpruned? your own datadir, and no -prune
sudo apt install build-essential automake autoconf \ pkg-config libssl-dev libcurl4-openssl-dev \ libjansson-dev libgmp-dev zlib1g-dev git clone https://github.com/JayDDee/cpuminer-opt cd cpuminer-opt ./autogen.sh ./configure CFLAGS="-O3 -march=native -Wall" make -j"$(nproc)" \ LIBS="-lz -lcurl -lcrypto -lssl -lpthread -lgmp"
./cpuminer -a sha256d \ -o http://your-node:8455 \ -u fork -p pick-a-password \ --coinbase-addr=1…your…legacy…address # accepted 1/1 (100%), 114.8 MH/s # BLOCK SOLVED 961636
That's it. Leave it running. Blocks arrive quickly at first and then slow down to roughly one every ten minutes as the chain works out how much power is pointed at it.
Coins you mine become spendable after 101 confirmations, the same as on Bitcoin, so about a day once things settle.
# BFGMiner, with the GPU switched on bfgminer -S opencl:auto \ -o http://your-node:8455 \ -u fork -p pick-a-password \ --coinbase-addr 1…your…legacy…address # GPU0: 3.73 GH/s
BFGMiner drives a graphics card as well as a CPU, and on this chain that is the fastest thing most people own. An RTX 3090 manages about 3.73 GH/s, roughly seven times what the same machine got out of its processor.
It needs the legacy address from step three. BFGMiner will
not mine to a bech32 address, which is the whole reason this guide asks
for the older type.
curl,
that's a known quirk in cpuminer-opt. The LIBS= line above is
the fix, so don't drop it. If mining does nothing, check
the node actually reached block 961,635 first; below that, it's still
playing by Bitcoin's rules and nothing you own will ever find a block.
If you took the long route and your node is unpruned,
restart it with your own datadir and no -prune: adding the
flag to an unpruned node throws away the history it holds, and that
history is the only thing anyone else can join from.
Stuck? The developer is one person and reads everything.