Y Combinator’s official blog postBuilding for the BlockchainArticle, translated as copyright, reprint please contact private letter.
Introduction to the
If you’re reading this, you’re probably a developer or geek who’s attracted to blockchain technology. I’m sure you already understand how blockchain works and are eager to understand how this technology will affect you and your development stack.
If you need a more basic introduction to blockchain technology, you can read white papers on bitcoin and Ethereum.
The objectives of this article are:
- Explain the differences between the development of blockchain projects and existing software development models.
- Provide context to help you better think about the opportunities and challenges in the field.
- Provide basic resources and materials in the field of blockchain to facilitate the development of blockchain projects.
A shift in development patterns
The network effect of the Internet produces a large amount of centralized data, which promotes the development of Internet applications. Thanks to the sharing of open Internet protocols (such as TCP/IP and HTTP), companies such as Yelp, Facebook and Amazon have been able to store their users – and of course the data they generate – centrally on their servers. As a result, in addition to having an advantage over smaller companies, the Internet giants also have 100% control over how their vast troves of user data are monetized. In the words of digital currency investor Joel Monegro, the existing Internet model allows the application layer to capture most of the value, while the underlying protocol layer (i.e., “fat” application layer, “thin” protocol layer) gains little.
On the contrary, the value distribution pattern brought by blockchain technology can be understood as a “fat” protocol layer and a “thin” application layer. It is the innovation of cryptographic currency that makes this model possible. As Albert Wagner of USV put it:
“There has always been only one way to make money from a license, and that is to build software based on that license and sell it (recently for rent, of course)… Cryptocurrencies, on the other hand, provide a way to monetize directly at the protocol level, and as more and more applications are used based on the protocol, the liquidity of the underlying protocol will become more and more powerful, which will be reflected in the higher price of the digital currency.”
In the past, the developers of open Internet protocols, the DARPA researchers or unpaid contributors, did not receive direct financial rewards from the development of open Internet protocols or the increasing number of applications based on them. The difference is that protocol developers can now directly issue digital currencies, such as Bitcoin or Ether, that directly represent the value of decentralized protocols.
Joel Monegro believes this paradigm shift, brought about by blockchain technology, will force developers to rethink their apps. “The combination of open sharing of data and endogenous incentives will ultimately end the winner-takes-all market phenomenon.” This is a game changer for the application layer and will spawn a whole new crop of companies with entirely new business models. The difference between these companies’ business models will be at the protocol layer.”
The etheric fang
The conclusion from the previous discussion is that the innovation brought about by blockchain technology allows developers to derive value directly at the protocol level. We’ll continue our discussion of how blockchain technology is evolving in a developer-friendly direction. Eight years ago, a digital currency emerged that did not require the endorsement of a centralized financial institution. It is now known as Bitcoin. Initially, developers tried to build applications by storing data directly on bitcoin’s blockchain, which turned out to be very inefficient (Joel’s post is a good example). One of the developers, Vitalik Buterin, was so fed up with Bitcoin’s ultra-cautious and conservative approach to new features that he started a new blockchain platform, Ethereum.
Bitcoin was created to create a new store of value. Ethereum aims to implement a Turing-complete blockchain development platform. In the Ethereum network, developers can use the Solidity programming language to write smart contracts, which are run by EVM virtual machines. As We can see from Vitalik Buterin’s example, it is entirely possible for developers to develop a whole new blockchain network to meet their diverse needs. Of course, there are downsides to building a new blockchain network from scratch, such as building a developer community from scratch. But developing directly on a mature network like Ethereum doesn’t have that problem. And one significant difference is that in developing blockchain-based applications, the developer is not only the owner of the application, but also a direct beneficiary of the underlying protocol that thrives as a result.
Decentralized applications (Dapps), tokens and smart contracts
Developers are building decentralized applications (DApps) based on existing blockchain protocols, such as Ethereum, that cater to different user needs. Developers typically issue their own tokens in a Dapp, and users can use the tokens to make the Dapp “perform” actions to achieve a “function.” Tokens aren’t really mysterious. You can think of them as game coins that people buy in the arcade game world. These “features” via “smart contracts” charge dApps a fee (tokens) to provide reliable services without relying on third parties. Using game coins as an analogy, as long as there are enough game coins, you can always put the game coins into the basketball machine to play a game!
Typically, the total number of tokens is fixed, so as a service provided by a dapp becomes more popular, the price of tokens is bound to rise on a simple principle of supply and demand. Based on this logic, dapp developers often raise money for development by issuing tokens (rather than through traditional financing channels), a process known as ICOs (initial coin sales).
You might look at this and ask, “Why does every Dapp issue a dedicated token instead of a ready-made token like ETH?” . This is not hard to explain, because dedicated tokens benefit the micro economy of a particular app ecosystem. In other words, dedicated tokens can be flexibly adapted to the specific functions and needs of the app, so that the token can better serve the dapp. Speaking of which, we have to mention Ethereum. Ethereum is a platform that makes it easy for dapp developers to issue tokens.
Early opportunity
With this understanding of the underlying mechanics of dApps in mind, the next question to ask is: What value does decentralization bring to your users? We want you to think about this question first, rather than start with a rush to “decentralize” existing products. For example, Augur is a product that uses blockchain technology to implement a prediction market. Why use blockchain technology? Participants scattered around the world were able to make more accurate predictions because of the financial incentives for honesty created by the technology.
At the developer level, blockchain technology also brings an opportunity for innovation in the technology stack. Existing blockchain developers like to compare the situation to the early days of the Internet, when tools and frameworks were inadequate, as they are today. Ben Yu of Stream sees a new opportunity for developers: “There’s a lot of ground work that needs to be done that seems like a piece of paper. If the blockchain community looks a lot like the Internet in 1994, there’s still a lot of infrastructure to be done to evolve it into the Internet of 2017.”
Thanks to innovations in blockchain technology, many people have seen an opportunity to create entirely new, decentralized networking stacks. This new network stack will no longer rely on centralized governments or companies. The traditional network stack consists of TCP/IP, DNS, databases, network servers, authentication systems, and CDN. Now, we have the opportunity to re-implement the components of the traditional network stack in a decentralized way through platforms like Ethereum.
The challenge of “immutable”
Just like the early days of Javascript, the evolution of blockchain technology is inevitably accompanied by various challenges. One of the biggest challenges, and one of the most prominent features of blockchain technology, is that it cannot be tampered with. Because of this feature, developers cannot change the underlying blockchain, nor can they change the top smart contract, and versioning the base library and contract is very difficult. A recent Parity bug resulted in $150 million worth of Ether being locked. Accidents like this are a constant reminder of the importance of building structures that can withstand the tests of the future.
Developer Brandon Millman of project 0X shares his thoughts on the impact of immutability on business security: “Developing in this area means you have to be more careful than traditional projects, because any problems can directly affect the security of your users’ digital assets. Blockchain technology has long been known for its robust protection of private property, meaning that no one can theoretically steal your assets as long as you securely control the private key. But much of the theft in this area is not done by directly stealing users’ private keys. “It’s more about tricking users into transferring digital assets to their wallets.”
Developers, especially those from startups who are used to fast-paced development, have to stop and think about how to balance speed and safety. As Ben Yu of Stream puts it: “One of the most common principles among developers is: Move fast and break things. Only the first half of this sentence holds true in the blockchain world. “The space is evolving so fast that you have to move fast to not be overtaken by your competitors, but Break Things means losing thousands of dollars.”
The development of blockchain requires much more careful planning. Because developers lack centralized control over the entire system, dapps are difficult to quickly hotfix like traditional apps. In contrast, system-level change in the blockchain world often means a hard fork of the entire protocol.
Limitations of Ethereum
In addition to the challenges of “immutable” mentioned above, there are other limitations that developers may encounter on the Ethereum network. For example, the Ethereum network does not support external calls to retrieve data from outside its own blockchain. Developers rely on third-party data providers, often referred to as Oracles, to inject external data into smart contracts.
In addition, Ethereum’s performance is not strong enough to support real-time computing. Blocks in the Ethereum network take up to 15 seconds to process (fast compared to the bitcoin network’s 10 minutes). As a result, developers need to write asynchronous code for state updates (much like React).
Meanwhile, in the Ethereum network, each step of contract execution consumes gas, which is ultimately settled in Ether (ETH). As a result, developers may often encounter situations (such as this chess game) where computations cannot be completed due to low gas Settings. That said, Ethereum’s “on-chain computing” is very expensive and bandwidth intensive. Hence the emergence of “off-chain computing” services such as Truebit, which aim to lower computing costs.
How to start
Simply put, it’s a stunning field. Blockchain technology is a typical representative of cross-disciplines, involving economics, game theory, finance, computer science, mathematics, cryptography and many other disciplines. And interdisciplining often means there’s a lot of groundwork to be done.
For new block chain field, Brandon from 0 x project team give advice is to choose their interested or related field with their own experience as the breakthrough point, rather than one would like to have a big fat man: “if you do is JS development work before, so this area has a lot of JS library need someone like you to complete. Over time, as you develop, you will begin to understand and become familiar with this area. You don’t have the burden of completing a course to get started.”
The vast majority of projects in this area have open-source code, as blockchain technology promotes the idea of “decentralization.” Here are some resources to get you started:
• The official Solidity documentation is a good start for learning the language.
• The Truffle framework is one of the best development frameworks for Solidity.
• You can find many well-known open source libraries in the zeppelinOS codebase.
• Blockgeeks provides a detailed guide to ethereum token development, with code examples and abstractions.
• You can also learn how to create your own games on the blockchain from Crypto Kitties, which is popular all over the web.
In addition, here are some of the best quality developer communities:
, a/r/ethereum
, a/r/ethdev
• blockgeeks.com/
If you want to do some projects to get your feet wet, maybe some of the following ideas are good:
• Create your own wallet app. It can be web, mobile or desktop
• Issue your own ERC-20 token and deploy it on the test network.
• Change the crypto Kitties code (e.g. to dogs, tanks, zombies) and deploy it on the test network.
Looking to the future
For now, we have to admit that the development of blockchain is a mess. There are no useful frameworks and tools in the blockchain field, compared to existing mature web development. But if you look at it another way, this early mess is an opportunity, and more importantly, an opportunity for a paradigm shift in development.
On blockchain, you don’t need to deploy any centralized servers, which means the risk of a single point of failure is zero. If your entire tech stack is decentralized, there is no need to bring in a “trusted” third party, and no third party means 100% resistance to censorship. Blockchain technology brings new opportunities for data opening, and a decentralized database based on blockchain can be expected in the future.
With blockchain technology, we can envision a future world in which there are no middlemen and information and rights are systematically dispersed.