For a while now I have wanted to articulate why I believe BCHD is one of the most important projects in the BCH ecosystem today. I also wanted to briefly cover how the project came to light, and the players who have helped us along the way. I hope this can give people more insight into what we have been doing, how I view the community, and the importance of multiple full node implementations.
The BCHD project began in Sept of 2018, when Chris Pacia decided to port over btcd to Bitcoin Cash. This was quite ambitious, a single developer deciding to port over such a large codebase, and bring the first non-Satoshi codebase to BCH. After about 2 weeks of solo development, I saw what Chris was doing and decided to get involved myself. I had been writing Go for years, and figured this was a project I could really sink my teeth into. Chris had provided an excellent base for the community, and I figured the least I could do is pitch in and help build the best full node on the market.
Jumping into BCHD development was quite easy, there was a Slack channel where we started to gather like minded developers who were interested in helping out. There was little to no drama like I had seen in other popular forums and chats. The focus was clear, build the best possible developer experience we could, and bring in cutting edge features that could be developed faster in Go than other languages.
Chris from the beginning was the brain child of the project, but I found that he needed a lot of help, as there weren't enough hours in the day for him to do everything that was needed. He was a coding machine, and he has been responsible for most of the consensus critical code in BCHD. If you look over the commit history, most of the upgrade changes were his work, with me doing code review and discussing the changes with him on Slack.
So, I decided to pitch in where I could. Here is a list of what I helped out with, to provide some clarity on what help I thought was needed.
Created Docker and Kubernetes configurations to simplify deployments.
Put up public mainnet and testnet nodes at bchd.greyh.at and bchd-testnet.greyh.at. These are used extensively by the community and have constant traffic!
Put up a public IPFS node to store our fastsync UTXO snapshots. This is one of the fastest IPFS nodes out there, as you can see at https://ipfs.github.io/public-gateway-checker/
Put up a reliable DNS seeder at seed.bchd.cash. This also powers x101.seed.bchd.cash and x105.seed.bchd.cash which powers the Neutrino wallet.
Updated the syncing code to make sure it didn't have stalls like we saw in btcd.
Backported tons of changes from btcd.
Built an automated release flow that builds release binaries and cross compiles builds for most popular operating systems.
Helped triage bugs and put up fixes for issues reported by the community.
Coordinated the building of https://neutrino.cash and https://bchd.cash with Cameron.
Tons of testing of the Neutrino wallet.
Now, why would I spend so much time and effort working on BCHD? Why would I spend my money on infrastructure and marketing materials? Well because I think the barrier to entry for BCHD is far lower than Satoshi based clients, and I want to attract more developers to Bitcoin Cash!
One of the biggest problems I see in the BCH community is lack of tooling. There is tons of activity, but to get a full BCH dev environment up you still need a lot of pieces. SLP is getting more and more popular, but isn't built into any of the heavily used nodes; Bitcoin Verde is the only full node with SLP support.
I want a world where the only tooling a dev needs is a working BCHD instance. That is why I have written up a proposal to add SLP support at https://github.com/gcash/bchd/issues/328. We have also talked to several of the developers who are experts in the SLP spec, James Cramer and JT, who have already shown interest to help build SLP support into BCHD! This is is why there is a fundraiser right now at https://bchd.flipstarter.cash to help get them on board and building the SLP integration immediately!
With the addition of SLP support, this would give developers all the tools they need to build awesome BCH applications with almost no setup. They can just launch a docker image, sync the chain, and get started!
What has been amazing is the support of other developers in the community. FreeTrade built hooks into Member so that BCHD could be used in the backend for improved performance and managing UTXO's for the wallet. James Cramer wrote multiple libraries to interact with the BCHD gRPC interface, and also updated SLPDB to sync significantly faster from BCHD than the legacy JSON-RPC interfaces found in other nodes.
Pretty much all the developers I know in the ecosystem are excited by what BCHD has to offer, but the items above are just a small piece of why I find it so important. The other side of the equation is making sure developers have mature libraries for the languages they use most. Go is getting more and more popular among developers and having a well supported set of Go libraries for BCH is critical if we want more people building on top of BCH. This is where projects like bchutil become critical. This library is well maintained, and allows Go developers the types they need to quickly integrate BCH into their projects.
I am fortunate that I have gotten to work with many different developers in the BCH ecosystem and find that BCHD has generally tried to stay out of the politics that constantly seem to consume the time of people in BCH. The focus has always been on providing the tools necessary for developers and stay out of the drama. That being said, developers always have opinions on what is going on. So, in a world of multiple nodes, multiple dev teams, and multiple personalities, I believe it is inevitable that people disagree or have different points of view on what is good or bad for Bitcoin Cash.
The problems come when developers force features on their users without consensus. This is why BCHD, during this next upgrade, will follow the longest chain no matter what. There is no IFP code in BCHD, and actions speak louder than words. I am happy that people have different points of view, and think that leads to honest and constructive conversations about the future of BCH. There is no world where everyone agrees about everything, this is literally impossible for a global currency. If you think everyone needs to think the same way about every issue, then you don't know what a global currency really means. The key is that developers don't think their opinion is the only one that matters, and don't force features into their full node projects without broad support.
Currently I am hoping the fundraiser at https://bchd.flipstarter.cash ends up being funded. It would be a shame to delay SLP integration, and I would LOVE to see James Cramer and JT become more involved in BCHD. This would give the tooling needed to see a much better developer experience, and make it far easier for exchanges and other businesses to support SLP and get more SLP adoption.
If BCHD has been able to do so much in the past couple years with only part time development, imagine what funding means for this project! As a community I hope we can band together and make funding a reality.
Anyhow, thanks for reading, and lets build an amazing future.
It is no doubt that BCHD is a useful tool aiding the promotion of BCH worldwide. I urge you to keep doing the good job.