Cryptocurrency and Software Development — How the Two Mashup to Create Major Change
*a shorter version of this article was originally posted on Forbes.com
So maybe you’re curious about programming or even write software for living, and you’ve heard a bit about the virtual currency, Bitcoin and now with a sense of newfound curiosity wanted to explore how virtual currencies and computer programming, in general, might change the way we liveLet me just tell you, outright, my thoughts on this. The ability to write software is already a game changer today, but is going to be one of the most defining skills in the future. If you think I’m a bit crazy in saying this, I probably am, I mean, I’m the President and Co-Founder of a software development company, and live and breathe it every day. My very existence revolves around the ability to write software programs. But just think about how many times you interface with someone else’s written software. Heck, you’re probably reading this very article on a website written in someone’s software. I wrote this article using a well known software platform written by a well known software developer. We play games, buy everyday goods, order services on demand, and watch TV using someone else’s software. It is everywhere.
Perhaps less conspicuously present is a fast growing and highly disruptive software technology called cryptocurrency. If you’re not already familiar with what cryptocurrency is, check out this article. I liken the adoption of cryptocurrency today to the early users of the internet back when you had to connect to it using AOL on a dial-up modem. Both parties knew, deep down, that what they were participating in had the potential to be life changing tech, but few knew that it would have the potential to change the world over.
In this article I will explore a few ways that these two incredible technologies can work together, more specifically how software development can enhance the use of cryptocurrency and the real world implications of this.
A Brief Intro
This is some confusing stuff. There are hundreds of software languages in use today and it can take the better part of a lifetime to master just a few. Developers are in a constant argument about the merits of each one, and few have agreed on any single software as the standard by which all programs should be written in.
The world of cryptocurrency operates like no other. Even brilliant software developers throw me confused looks when I mention things like hash power, User Activated Soft Fork, SegWit2x, and BIP 91 (read more about the current Bitcoin scaling debate here). It’s part of the beauty of it, but contributes to its inherently high learning curve. I find people asking, what is cryptocurrency, how do I obtain it, and for what purpose does it exist? Beyond that are more complicated questions such as how the current value of it is derived, the related technologies that support it (blockchain, exchanges, wallets, miners) and why any of this stuff is important or relevant. Rather than attempting to address this, I defer to a great many articles written about it, one of my favorites here.
One of the hallmarks of transacting in cryptocurrency is that it is decentralized. This means that it is not governed or controlled by a single entity or institution, but rather a network of many connected computers, generally called nodes. This is in contrast to, say, a bank, where the control of the fiat currency is centralized in the hands of a few major institutions, that work closely with that nation’s governments and fiscal policy makers.
However, with cryptocurrency, the way transactions are performed is through the use of a distributed ledger system called the blockchain. The blockchain is a record of all transactions that have occurred on the network and serves as a way to publicly validate and verify the integrity of a transaction.
Because the blockchain and all of its transactions are publicly accessible and immutable, the incidence of fraudulent transactions are significantly reduced and thus the reliability of transactions are generally higher than traditional forms of payment such as the credit card.
This same principle can apply to other transactions that are performed on the blockchain as well. Enter blockchain contracts. This is where things can get a little interesting. What is it? A blockchain contract is simply a software program that acts as an agreement where the terms of the agreement can be preprogrammed with the ability to self-execute and self-enforce itself. This allows to parties to do business together without the need for a middleman such as an attorney, and provides a way to vastly reduce cost of the transaction as well as provide significant savings in time that might normally be spent in the contract negotiation process.
The most popular blockchain contract technology is Ethereum’s Smart Contracts. Smart Contracts are software written contracts that can perform a variety of event based transactions based on the language programmed into the contract.
Here’s an example of a contract I whipped up that can be written as a Smart Contract in Ethereum’s network, or any other blockchain contract technology. This program describes a basic use case of a how a Smart Contract can be used to govern the payment and delivery of assets between a client and software vendor.
**Release of Agency Deliverables Upon Receipt of Payment**
· Client deposits the contract value of the deliverable into a virtual wallet EscrowETHAddress that serves as an escrow account
· Contract then listens for the appropriate number of blockchain confirmation and calls function to confirm receipt of funds and match of balances to the preprogrammed amount
· If the the above is valid then the contract calls a function to signal to Vendor that funds are verified
· Vendor can then begin work to produce a previously agreed deliverable
· Once the deliverable is complete the vendor notifies the contract that the works are done by adding a URL to the Smart Contract for the proof-of-work for the deliverable (not to be confused with the proof-of-work process performed by crytocurrency miners) such as a InVision link to preview design comps
· Client reviews the comps and verifies that vendor obligations have been met for that billing milestone, and then authorizes the Smart Contract to release funds from EscrowETHAddress to VendorETHAddress
o Client may also reject deliverable and provide reasons for rejection, requiring the vendor to resubmit revised assets
o Client may also ignore the notification, at which case the Smart Contract may utilize a timeout function to release funds to VendorETHAddress
· Contract programmatically validates receipt of funds in VendorETHAddress and inspects blockchain to confirm the minimum number of confirmations
· Once ConfirmationValid=Yes, contract programmatically provides the credentials to access the deliverable files on the Vendor’s server
· Contract listens for login via the credential provided to confirm client access to deliverables
· Client downloads deliverables
· Contract enforces a self kill and is removed from the blockchain
Notwithstanding the many contractual loopholes, in the example above, the contract can be broken down into two or more contracts that are interdependent. The process above can also be truncated if proof of funds in an escrow account are not necessary. This simple example of how a contract can be structured demonstrates the possibility of eliminating an otherwise human intensive transaction, that could potentially be wrought with the following issues and concerns:
- Multiple client/vendor communications
- The requirements to utilize a bank to perform the funds transfer and any applicable fees
- The use of attorney’s and any applicable fees
- Significant amount of time in contract negotiation and discussion
- Inspection of receipt funds and clearance from the bank
- Potential issues on whether the client feels comfortable wiring funds without seeing proof of work
- Whether the vendor feels comfortable performing the work without any proof of the necessary capital to pay for the work
- The requirement to necessitate a deposit in good faith
- Questions around whether the final deliverable will be accessible
- Problems with enforceability, say if the deliverable was transferred but no funds were received or vice versa
The one tradeoff in the above is the knowledge and ability to write computer software. For those of you that are already in the trade, this is a non-issue, but many of us out there don’t have a clue and have enough trouble reliably programming the alarm on our smartphones. The question is whether it is less expensive to invest into the technology to “template out” these blockchain contracts and build an easy to use UI to add/remove contract rules and export out the finished blockchain contract, much like how attorney’s utilize boilerplate legal documents as the basis to craft their customized contract. The argument on the win side of blockchain contracts is that one contract template can be used countless times by an individual or company, while a legal contract is generally reviewed on a case-by-case basis by each new pair of companies engaged in a transaction. In addition to this, a blockchain contract operates on a set of rules that are self-enforced and complete at the end of the transaction. A legal contract requires enforcement of the rules by a regulatory body, which can further increase costs if things go awry.
Still, the real world implications are being studied by the largest immediate benefactors of this disruptive technology, the banking industry. According to an article published by the Deloitte University Press, the Depository Trust & Clearing Corp. (DTCC) processed over $1.5 quadrillion worth of securities in 2015 alone, representing 345 million transactions. The article further states that it expects $15–20 billion in annual savings in infrastructure costs by switching to smart contracts to perform trade clearing and settlement. That figure is hard to ignore, and though it doesn’t necessarily place the bet on any single existing cryptocurrency, but rather the blockchain contract tech as a whole.
Automated Trading Bots
One of my favorite topics around leveraging computer programming in the crypto space is in the use of it in automated exchange trading bots. Having spent the better half of my early career as an investment advisor representative and former FINRA licensed individual, I naturally have a core passion centered around where software meets finance and how this applies to the world of cryptocurrency trading.
Trading bots are simply computer programs that determine when to buy and sell cryptocurrency on an exchange. They are very similar to the high frequency trading algorithms that are employed by institutional investors trading on a traditional stock exchange. However, obtaining access to the feed and bandwidth on a regulated stock exchange to make HFT programs profitable are prohibitively expensive for the average person. Cryptocurrency exchanges, however, were borne out of the very essence of decentralization. Most have well published API’s that are publicly accessible. A software developer with a computer and internet connection can essentially open an account and interface with this API to perform a number of functions including buying and selling. A more advanced trading program could even analyze patterns across a wide range of cryptocurrencies and employ complex trading strategies such as statistical arbitrage or resolve pricing inefficiencies by utilizing API’s across multiple exchanges.
What we are talking about is essentially giving a software developer the ability to perform the exact same market trading strategies that the large institutions employ on traditional exchanges. Giving this much power and access to the public is one of the things I love about today’s cryptocurrency markets. In addition to this, regular users have access to high powered charting tools with information into the order spread, market depth, order book and trade history. To get this level of information from a traditional financial institution requires having a high account level with specialized access and very high fees.
Continued advancements in software technology are completely disrupting the very world we live in. Nearly everything around us is powered by it, from the computers and smartphones we use to read this article, to the $100 billion dollar cryptocurrency market that is still largely tucked away and out of site to the general public. Having a core skillset in computer programming is not a trivial thing. It can open up the possibilities of exploration into many growing technologies and at least in the context of this conversation, serve to democratize the massive global currency transaction market.