Jul 22, 2018

Technical Evaluations of Blockchains and How To Start Developing with Them

Technical Evaluations of Blockchain and How To Start Developing With Them

How I started with Decentralized Technologies
I started running nodes of various blockchains in early 2017. I found this was a more powerful learning experience than reading the hype and FUD in places like Reddit or Coindesk. It allowed me to interact with these distributed systems that breathe 24/7 and develop perspectives and knowledge based on my own experience and not someone else’s speculation.
Working from the command line with blockchain nodes represents their most fundamental and primitive behaviors. Same with reading through every line of the logged output of a running node. Some things you’ll see across all blockchains:
  • transactions being verified
  • your command line (or javascript client) requests received via RPC API bitcoin RPC ethereum RPC
  • peer node discovery
I recommend learning each command by running command -help which ought to show you the arguments that accompany it. Further you can often learn each argument by running command <arg> -help
node_name --help
node_name <command> --help
node_name <command> <arg> --help
// e.g. 
geth --help
geth <command> --help
It “should” correlate with what’s in the whitepaper and documentation. Finding solutions in these `— help` pages is a lot faster than changing context to Chrome for web searches.
Note — the most current version of a blockchain software you download is not necessarily the most stable or widely used. This was not clear when I started following an ethereum tutorial that was web3.js v0.2. I noticed its methods and async management were different than web3.js I had just downloaded, which turned out to be v1.0. After reading through lots of online discussions it sounded like everyone was still on v0.2 on Prod and v1.0 might still have stability issues so people were hesitant to switch to it. Normally you npm install a module and you know its the latest and greatest version. Well that’s not the case in the Wild West of Crypto :)
Look how much different the web3 v0.2 documentation looks from the web3 v1.0 documention. Incredibly confusing when its your first time using these and you don’t know which to use!
Is this Blockchain a Maintained Repo?
Go to the Github repo and click Insights, then see how many contributors there are. I like to get a sense of, “How many developers (hopefully +10) are committing code daily, for months at a time?”. Remember there are multiple repo’s involved so you’ll have to decide how to weigh these contributions against each other. Or when you first load the repo, see how many directories or files were updated “days ago”. If there’s +100 files then ctrl+f “days ago”.
Glance at the open Github Issues and see if developers are replying to issues people are opening. Take note out how many Closed Pull Requests there are.
Do Not Expect a Node and Private Net to Run On First Attempt, You’ll Have to do Some Tweaking…
To this day I’ve never found instructions that work on first attempt. I think I can remember manually installing C libraries for EOS in 2017 because the build.sh script still didn’t do that yet, as I was getting errors missing c library. You’ll have to deduce many things on your own.
Its amazing to re-vist these blockchains every few months, `git pull` from the dev branch or even find a famous update (e.g. Ethereum Dawn 4.0) that was tagged and released recently, to see what’s new, and if the developer experience is any better. Don’t forget to change the branch you’re on in the github repo because the README and docs might be completely different. And anything more than a few months old on stackoverflow or its stackexchange might be outdated too. Same for youtube video tutorials.
Containerized Deployment
I look first for the Docker instructions as this is an isolated environment that won’t get interfered with by years of development SDK’s and dependencies bloating your personal machine (e.g. errors start surfacing regarding random things like homebrew or npm, because the build scripts are using them). If you start running mainnet nodes and deploying PROD smart contracts you’ll use a deployment like this anyways, unless you’re using a node that someone else hosts (e.g. Infura for ethereum geth).
Building from Source is hard but you can learn so much more. Sometimes its the only option. I recommend trying this last as you could end up with dependency rot if you only get half-way through then try to un-install things.
Is the Blockchain ready for Smart Contracts and Apps?
I look for the presence of a javascript client library. Look at the parent-most Github repo:
https://github.com/EOSIO // shows the javascript client underneath
https://github.com/EOSIO/eosjs
https://github.com/EOSIO/eos // is the eos node itself
https://github.com/bitcoinjs is separate altogether from
https://github.com/bitcoin/bitcoin
https://github.com/input-output-hk Cardano has everything under IOHK
https://github.com/input-output-hk/cardano-sl

Avoid The Hype
Some crypto communities emit an air of, “We’re established, come use us, we are superior and invincible, you will be forced to use us one day” but that’s rarely how anything is ever adopted. You need activism. You need partnerships. So see if the blockchain is doing anything on this front (e.g. partnering with academic institutions, governments, sponsoring hackathons) It’s a good sign. Recall that much early UNIX development came from academia. For instance, BSD (Mac) UNIX at the University of California Berkeley.

There is so much money involved from early investors and ICO’s that its inevitable people will play favorites. Tribalism. In my opinion, a lot of OS development in past decades was more hobbyist, and people were not raking in millions of dollars just to play around with these things in their free time. Can you expect an engineer with 99% of their portfolio in a single cryptocurrency, which they acquired in say 2015/2016 (so worth big $ today) , to succeed in objectively evaluating the potential of alternative blockchain technologies and maintain an open attitude towards them? #balancedPortfolio
For any blockchain on reddit r/blockchain there’s usually another one with dev appended to it, so try to find that:
r/eth r/ethdev
r/eos r/eosdev
I think r/eth r/eos r/bitcoin are a little heavier on the hype and FUD and people regurgitating catch phrases and tech buzz that no one understands.
“We’re established, come use us, we are superior and invincible, you will be forced to use us one day”
There was a similar movement with the same mantra that rocked the globe but during the 18th century. It was called communism and socialism. They thought they were so right, similar to crypto fans who sit around staring at coinmarketcap.com all day thinking this will somehow 10x the price and get people to adopt crypto. Nothing is immune from failure, and this pathetic attitude is only going to increase your chances.
Additional Troubleshooting
  • When you get command not found, the binary executable is often laying around somewhere in the project files. Poke around the /build or /outputand see if the name of the module/command is in there. Call it directly via like ./build/command or set an alias to it in your bashrc/zshrc
  • These binaries might be available immediately after git clone but sometimes you have to Make or build everything first by following the instructions or build.sh, which will then put it to /build
  • The project structure and files in the Docker build don’t always match what’s in the local build from source. You’re on your own :)

No comments:

Post a Comment