CJDNS
Vasil Dimov created a pull request to add support for CJDNS in Bitcoin Core. Since I know less about CJDNS, I decided to do more research before reviewing the pull request in detail. Although I don’t think we need another network in Bitcoin Core considering ipv4,ipv6, Tor and i2p are good enouugh if we can use them without any issues.
What is CJDNS?
CJDNS is an encrypted IPv6 network using cryptography for address allocation and DHT for routing. What, Why and How is explained in the Cjdns whitepaper
Noticed something interesting in testimonials on github repository:
00:36 < tester> man sites take so long to load on i2p 00:36 < tester> i value speed over anonymity any day
If a project considers speed over anonymity I don’t think we need it in Bitcoin Core at this point. Although lets not jump to conclusions based on this.
I understood its a distributed network that uses ipv6. Personal opinion: I don’t like ipv6. Lets try CJDNS and see how things work.
Ubuntu:
-
Installed dependencies:
sudo apt-get install nodejs git build-essential python2.7
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
Run the commands to clone, compile and install as mentioned in doc/install/ubuntu-18.04.md. Unfortunately it didn’t work. I was getting error that Rust and Cargo are required even though are already installed. Tried running the commands in terminal from do.sh but terminal closed automatically after L10.
-
Tried to look for help in IRC channel for CJDNS on Libera. But nothing could resolve the issues. So decided to give up and try run CJDNS on other OS.
Windows:
-
Installed dependencies:
Rust: https://win.rustup.rs/x86_64
OpenVPN: https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.3-I601-amd64.msi
-
Run the commands to clone and compile (WSL) as mentioned in doc/install/windows.md
-
Error:
./do: 2: export: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/Program: bad variable name
I think documentation about installing CJDNS needs to be updated. Not the best feeling wasting few hours and not able to run CJDNS. Anyway, time to look for alternatives and compare them with CJDNS. First thing that I found on r/darknetplan was GNUnet.
What is GNUnet?
GNUnet is an alternative network stack for building secure, decentralized and privacy-preserving distributed applications. I like the things mentioned in philosophy section of GNUnet handbook.
GNUnet presented at the Decentralized Internet and Privacy devroom at FOSDEM20 in 2020: https://git.gnunet.org/gnunet-videos-2020.git/plain/FOSDEM20/dip_gnunet.webm
This presentation was interesting and the most important thing that he mentioned in the video was after 06:00:
You cannot build applications on top of a centralized network and expect them to be decentralized. Lets try to install GNUnet and see how it works.
First thing that I noticed on the GNUnet 0.15.0 download page:
In terms of usability, users should be aware that there are still a number of known open issues in particular with respect to ease of use, but also some critical privacy issues especially for mobile users. Also, the nascent network is tiny and thus unlikely to provide good anonymity or extensive amounts of interesting information. As a result, the 0.15.0 release is still only suitable for early adopters with some reasonable pain tolerance.
So I don’t think this can be used for Bitcoin Core. However, I like the project website, docs and presentation so will try to run it.
Steps that I followed to install GNUnet:
$ sudo apt-get install gnunet
One command and it is done! Now lets use it.
How to use GNUnet - in a nutshell:
$ gnunet-arm -s
$ gnunet-arm -I
$ gnunet-core
$ gnunet-peerinfo
There are lot of other things mentioned in the docs which I won’t go through in this post however this stuff really works and I am happy with it. You can check other things on GNUnet website
- Filesharing
- Chat
- Name resolution using GNS
- Serving a website using VPN
Lets move on to another project which tries to solve similar problems.
What is Yggdrasil?
Yggdrasil is end-to-end encrypted IPv6 mesh network. Yggdrasil does not require you to have IPv6 Internet connectivity - it also works over IPv4. There is a table on Yggdrasil website which explains the difference between Yggdrasil and traditional networks like the internet.
Traditional | Yggdrasil | |
---|---|---|
End-to-end encryption for all traffic across the network | No | Yes |
Decentralised routing information shared using a DHT | No | Yes |
Cryptographically-bound IPv6 addresses | No | Yes |
Node is aware of its relative location to other nodes | No | Yes |
IPv6 address remains with the device even if moved | No | Yes |
Topology extends gracefully across different mediums | No | Yes |
Yggdrasil is still an alpha project, early in development but actively maintained. I don’t think we can use this for Bitcoin Core yet but will surely check the progress in few months.
Did you like the post? Subscribe to the feed