Independently Validating the Blockstream Satellite Downlink
The Blockstream Satellite service broadcasts Bitcoin blockchain data (transactions and blocks), Lightning Network gossip data snapshots, and Bitcoin full node source code from geosynchronous satellites blanketing most of the world. The service is essentially acting as a relay for a Bitcoin Core node which Blockstream operates. In the context of running a Bitcoin Core node, the Satellite service is simply another peer that provides data to your node. The way the peer is connected is the only difference — instead of using traditional internet infrastructure, you’re connected via a constellation of four geosynchronous satellites with global coverage.
There are basically two modes of operation when using Blockstream Satellite.
- Stay connected to the internet while simultaneously receiving data from via satellite
- Disconnect from the internet entirely and receive the Bitcoin data strictly via satellite
When receiving strictly via satellite, your Bitcoin Core node is connected to a single peer. It’s no different than if you were connected to a single peer via the internet, except when connected to the internet, your node is able to connect to additional peers to verify its data. Sidenote: There is nothing stopping anyone from duplicating Blockstream’s efforts and broadcasting their own data stream.
If receiving strictly via satellite, you can verify the data is correct using other channels such as:
- SMS (1–833-BLK-HASH)
- Mesh networking with goTenna or LoraWAN
- Browsing a block explorer
- Calling a trusted friend on the phone.
There’s no need to do this every block. Depending on your use case, you can check every other day or so.
Don’t Trust. Cross-Verify.
A convenient way to cross-check the Blockstream Satellite data is by embedding an independently-provided list of Bitcoin block hashes into the Satellite API broadcast. This separate data stream is allocated for users who wish to pay to broadcast via satellite any custom data using Lightning Network micropayments. Both the Satellite API stream and the normal Bitcoin blockchain data stream are broadcasted simultaneously.
This means any given user would receive not only the full Bitcoin blockchain data provided by Blockstream’s node, but also a separate set of block hashes. The trust model for these hashes is similar to Blockstream’s feed, but since you have two separate sources of the Bitcoin header data, you can compare and detect discrepancies — much like what your Bitcoin full node does automatically when connected to the internet.
Proof-of-work has the nice property that it can be relayed through untrusted middlemen. We don’t have to worry about a chain of custody of communication. It doesn’t matter who tells you a longest chain, the proof-of-work speaks for itself. — Satoshi Nakamoto
Preparing a List of Block Hashes.
How can you provide a Bitcoin block hash list for sharing over the Satellite API? It’s pretty simple. If you have a Bitcoin full node running, then you can run this simple bash script which will output the previous 144 block hashes, which is about a single day’s worth.
#!/bin/bashi=0COUNT=$(bitcoin-cli getblockcount)while [ $i -le 143 ]do
bitcoin-cli getblockhash $(($COUNT-$i))
((i++))
done
Run the script.
$ bash hashes.sh > hash_list.txt
Now that you have a list of the latest block hashes, it’s a good idea to GPG clearsign the data with a known public key so people can authenticate the hash list. You can even encrypt the list if you’d prefer.
$ gpg --clearsign hash_list.txt
This will create a file called hash_list.txt.asc
. Here’s what it will look like.
-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA256
000000000000000000069f2fed93f40f5c6e87a95f22cad14c4158c426a583f2
...
0000000000000000000118fe84248c47a031f5a4511c3e4611496c121eda708a
-----BEGIN PGP SIGNATURE-----
iQGzBAEBCAAdFiEERZZ3yTi8nDyij2eQK1HI9qlPd+sFAmB/n54ACgkQK1HI9qlP
d+vAgAwAk7o8Xdc6nYUkXfqcvqIDKFaH2Tc0CL+/j32WC7OrJsqthArE1TZwDQ5B
pRq34lzD9hnjxug1Jr46ptdZjot5DqkzJl4ZI4Cby1DizCwvC9Pr7P5SrrdVdpzy
W0IDg7uNDtAp5kS0P60dFkcX0f1AUrXTysYDXB10sdmQnCi1xzmibA7mnLMT3I/+
w/EEsFxFMjzBzUFp4mG32jtHcgLumpr73ZytR/MdrHBge4OhTI+6nZalwQRzOJbO
gMIukUUzptdIVo1vc9qIGQIXm9dbkEhOY0uT3G/JQsPmD0Lhioc3kmNx/r6DzKJS
GRvFaF/X14WBMX/m43dqTJunGs76XtVFKiicVvfvbkWF1Iskem5Mxd+iBIR6yKn9
Rwaf+cXyPVGkGrq0VBMcnEVpJ/ShRpw7C2TQm8u7g5NDHetq9lL1+ICD3k0QIAPs
YExJ+cERDcojnjA7xAll2QKo1SiFm+LRHkjTcj8sQNfvAIX4WN3nmUQHK52Ygsus
6YPSJAdZ=ghbc-----END PGP SIGNATURE-----
Broadcasting the Block Hash List
Once you have your clearsigned block hash list, you can simply broadcast it via Blockstream Satellite. An easy way to do this is to use the Satellite API web page. Just paste the clearsigned block hash list text into the correct web form.
Simply pay the #unfairlycheap Lightning invoice presented to you and the list will be broadcasted globally.
Once received by users, they can simply verify the list by cross-referencing with their full node. Of course, if there is a discrepancy then something is either wrong with Blockstream’s broadcast or the independent hash list provider. Act accordingly if you detect something is awry.
That’s it! I hope you found this post informative. To learn more about Blockstream Satellite, take a look at our Help Center articles and conference talks. Order a hardware kit to get started receiving data from Blockstream Satellite. Be sure to join the Blockstream Satellite Transmission Feed Telegram group to catch all of the latest broadcasts as well!