This website is maintained on the internet by this Raspberry Pi, a $50 credit-card-sized minicomputer. While the device is capable of serving the website directly, the secret is that it broadcasts the content over the Inter-Planetary File System (IPFS) network. That content is downloaded and rebroadcast by several other servers around the internet. Anyone who downloads that content also helps broadcast the IPFS content. The Raspberry Pi (RPi), is just a backup as a last resort, in case no other systems on the internet have the content.
Copies of this site can be accessed in several different ways:
- Conveniently at a normal url: troutsblog.com
- Tor hidden service: http://2noppt2w3u6t4mbd6sjtxyabfwuyyuw6osgap7anl3scarc3oamgbiqd.onion/
- IPFS not found
- Click the IPFS links in this Memo.cash feed.
Videos - Learn More
- Here is a non-technical video overview of how governments censor content on the internet, and how decentralized publishing tools can be used to circumvent it.
- Here is a walkthrough video of how to use the tools discussed above, to publish your own website in a decentralized, censorship-resistant way.
How it Works
Content on the IPFS network is linked by its hash. A hash looks like this:
The cryptography behind these hashes ensures that any random person can provide a copy of the conent, and you can be sure it hasn't been tampered with. But the downside is that any time a piece of content (like this website) is updated, the hash must also change, and that change must be broadcast to the people who want to access the content.
IPFS has a general solution to this problem called IPNS, which can be very slow. Instead, this site uses the Bitcoin Cash Blockchain (BCH) to syndicate updates. The uncensorable nature of the BCH blockchain ensures that updates to the site can not be blocked, and links to past and present conent can not be lost.
This new, permissionless, censorship-resistant form of publishing makes use of a few tools that I created:
- ipfs-web-server is the 'back end' web server running on the Raspberry Pi pictured above. It serves the content in a conventional way, but also syndicates it over the IPFS and Tor networks.
- gatsby-ipfs-boilerplate is the 'front end' website template used to create this site. You can fork it to create your own website. It includes all the prerequisits for syndicating your site over the IPFS network.
- memo-push is a tool used to publish the IPFS link on the Bitcoin Cash blockchain, using the Memo.cash protocol. It's important to note that Memo.cash is just a site. The data can be accessed directly off the BCH blockchain.
- ipfs-stay-connected (optional) Will connect your local IPFS node to an array of other IPFS nodes, and will renew the connection every couple minutes to ensure nodes stay connected. It's very useful when uploading and syndicating data over the IPFS network.
Decentralized Publishing Model
Below is a model illustrating the different ways this website can be accessed over the internet.
- The website is updated on a Dev Box. Updated content is uploaded to the IPFS network and the new link is published to the BCH blockchain.
- The Raspberry Pi periodically checks the BCH network for updates published to a specific address. If an update is detected, the updates are downloaded from the IPFS network.
- The Rasberry Pi then serves the content over the clearnet and Tor darkweb. It also begins pinging IPFS public gateways so that other servers begin downloading and syndicating the IPFS content.
- Mirror servers, Random IPFS users, and distributed web apps (dapps) can independently and permissionlessly check the BCH address and syndicate the IPFS data too. This all taps into the Streisand Effect, causing content to be easier to syndicate if an authority-in-power tries to censor it.
How You Can Help
You can help distribute this site and any other content on IPFS by running your own node and pinning the content. This allows your node to download and share the content with anyone else in the network.
- Install IPFS on your own computer.
- Get the latest IPFS hash of this blog from this memo.cash feed.
ipfs pin add -r hashto download and share the content. Replace 'hash' with the hash at the top of the memo.cash feed.
You are now doing your part to fight censorship on the internet!