BCHD is a full node and blockchain server written in Go. It serves several purposes in the ecosystem. First it provides a very hackable codebase for Go developers (of which there are a lot out there). It offers a number of packages that can be imported by other projects. For example OpenBazaar uses a number of libs from BCHD. It is arguably the easiest full node codebase to read and understand making it an excellent entry point for beginner blockchain developers. It is the only node which supports bips 157/158 (client side filtering) and the only one capable of supporting neutrino-style p2p SPV wallets with strong privacy. And finally it’s arguably the best blockchain server, not just of any Bitcoin Cash node, but of any coin out there. The gRPC interface is very modern, fast, and extremely well designed.
The immediate goals of this project is to first and foremost support application development as a high performance blockchain server. This will include adding an SLP index to support the burgeoning token sector. Secondly we want BCHD to become a fully capable mining node to help support mining diversity in Bitcoin Cash.
To this end we are raising funds to cover the next six months of operating expenses.
We are seeking $90k USD (currently 360 BCH) to cover:
- Six months of salary for one developer.
- Hosting costs for our websites and public infrastructure.
- Two part time developers building out the SLP index.
The following is a line item of things that we will put the funding towards.
General Maintenance: The total lines of code across all BCHD repos is 300,018. Typically quoted maintenance costs are $1 USD per line of code per year , however we are asking for substantially less than this as we know community resources are at a premium and we believe we can accomplish this goal with less.
Hosting: $500/month for bchd.greyh.at, testnet-bchd.greyh.at, ipfs.greyh.at, seed.bchd.cash, bchd.cash, and neutrino.cash.
Network compatibility: Because this node is written in Go instead of C++ we cannot just cherrypick commits from Bitcoin-ABC to make the node compatible with each network upgrade. Instead we must write the hardfork code and compatibility tests from scratch. This is clearly the most challenging aspect of BCHD as mistakes can result in the node forking off the network.
SLP Index: BCHD has a nicely designed interface for creating new blockchain indexes. We want to use this to create a new index for SLP transactions. This index will be turned off by default but can be enabled via the config options or command line. When enabled, the SLP data will be made available via the gRPC API. (See Issue #328 for more detail). $25k will be split between James Cramer and JT Freeman for work on this project.
Mining Compatibility: Historically we haven’t focused on mining compatibility for BCHD but we’ve received increased requests to do so. The development of the mining template validator that Software Verde has proposed should eliminate most of the risk to miners running BCHD. We know we need to do more testing with P2Pool as there have been reported compatibility issues with it and BCHD. We will also need to implement some mempool changes, such as chained tx limits, so as to have mempool compatibility with other implementations and protect zeroconf transactions.
[Stretch goal] Release Neutrino Android Wallet: The Neutrino Android wallet has been in beta for about a year. There are still some known issues that are preventing us from taking it out of beta. We would like to get these issues resolved and do a formal first release.
[Stretch goal] Double Spend Proofs: Implement the double spend proof relaying protocol in BCHD and, if time allows, also implement double spend notifications as a gRPC and JSON-API service and make the bchwallet codebase consume these notifications and export them via its API.
Each of the above bullet points will be made into a Github Project in the gcash top level repo. Each project will be broken down into individual issues in the relevant repositories. The progress towards each project will be publically visible on github.
Detailed Description of Each Repo:
bchd: See Abstract.
bchwallet: Unlike most other full nodes, BCHD intentionally does not have built-in wallet functionality. This design decision makes the codebase more modular and easier to maintain. For wallet functionality we have a separate application called bchwallet which is basically a wallet daemon that can be used by application developers. Bchwallet has a pluggable chain backend architecture that can communicate with either bchd, bitcoind (ABC/BU etc), or Neutrino SPV. This daemon serves as the backend for the Neutrino Android Wallet (below) and is a great option for powering websites or point of sale software. It also has a gRPC API which can be used by applications.
neutrino: This is the bchwallet backend plugin that enables the client-side filtering SPV mode in bchwallet.
android-neturino: This is a Java based Android UI that wraps the bchwallet daemon, runs it in neutrino SPV mode, and communicates with it via the gRPC API.
bchutil: Utility library for Bitcoin Cash written in Go. Contains libraries for addresses, transactions, bloom filters, gcs filters, merkle blocks, base58, base32, and bip32 keychains.
meep: A popular Bitcoin Cash script debugger written in Go and using the BCHD script virtual machine.
dnsseeder: A Bitcoin Cash network crawler and dns seeder written in Go. This is currently supporting seed.bchd.cash which I believe every other implementation has listed as a dns seed in their code. This may be the only seeder that supports service bit filtering out of the box. We use it to filter for nodes supporting NodeCF which the Neutrino wallet uses to connect to the network.
-  Engelbertink, F.P. and Vogt, H.H. (2010) How to Save on Software Maintenance Costs. Omnext White Paper. Accessed 10 July 2013.
Alternate address to donate funds to that will be forwarded to flipstarter: