Go Chainlink!
By: Steve Ellis
Tags: Golang, Chainlink, Ethereum, Decentralization, Blockchain

We believe blockchain technology to be a foundation on which many applications will be built. Oracles are the middleware of said blockchains, and are a critical component for connecting existing software and enabling future use cases. Chainlink will be that middleware, as a decentralized oracle network for blockchains.

This is a quick post looking at some of the the technical design decisions we made while building the Chainlink node and a little insight into how we’re going to continue development. If you’re interested in the technical side of Chainlink I’d encourage you to checkout the Github project or reach out to us on Gitter.

A big consideration when planning was to enable people to run Chainlink in as many places as possible. An important tenet of Chainlink is a diversity of inputs. We want to make a Chainlink node affordable to run and easy to install, so that people all over the world can run one on whichever computing platform they choose. So, make it accessible and do so without compromising on security or developer productivity.

Enter Golang. Less than a year after Bitcoin’s genesis block kicked off “the blockchain,” the Go programming language was introduced to the world. It has since experienced a meteoric rise, powering many of the tools that developers rely on today. Go achieved this by embracing the sweet spot between usability and security: simplicity.

Golang focuses on a few key features, optimizing for their long term stability, and then builds amazing tooling on top of them. For instance, concurrency comes out of the box, making it great for distributed systems. On top of that, Go’s tooling offers cross compilation, allowing applications to be run natively on just about any device. This helps us keep a low memory footprint, which is important when you consider the cost of running a node, and how that affects the ability for many people around the world to run Chainlink.

Additionally, Go has a thriving community of developers. And not just any developers, blockchain developers. Ethereum, Bitcoin, IPFS… your favorite flavor of trustless distributed system and there is probably already a thriving Go community for it.

So we built the node from the ground up in Golang with an embedded database and no dependencies, making installation of a node as simple as downloading and running a binary. The Chainlink node offers a composable pipeline that’s easy to extend, so any application developer can easily hook into Chainlink and interface with the blockchain reliably. For example, once an app is connected, Chainlink ensures that transactions issued by the app get confirmed by monitoring and modifying the transactions’ fees.

Furthermore, Chainlink has already benefitted tremendously from the Golang blockchain community. By using Geth we were able to leverage the most widely deployed version of Ethereum and rely on the same standards that already secure tens of billions of dollars.

Chainlink’s community is crucial to its future. Similarly, a stable secure node will be the cornerstone of the Chainlink network. Beyond opening up the code for collaboration with the community, we’ve also decided to open up our internal development process to the larger community, by providing public access to our team’s Pivotal Tracker. We’ve been applying the agile process to the development of complex smart contracts since 2014, and think it is the right approach for quickly improving decentralized infrastructure to meet the evolving demands of its users.

If you’re interested in Chainlink’s future development, you can follow the progress on Github, and see the features we’re currently working on. We value contributions of all sizes, including questions, pull requests, and new issues, some of which we’ve begun tagging as good for first timers that are new to ChainLink. If you’re interested in helping us with this, feel free to start working on an issue, open a pull request, or reach out on Gitter.