程序员也追风口:这里是一份区块链开发进阶指南
编者按:区块链的火爆让很多人都跃跃欲试。YC在其博客上发布了一篇文章指出,区块链将会带来开发范式的转变,并且给出了应对这一范式转变的操作建议。文章由36氪编译。
引言
如果你点开了这篇文章,我们就假设你是一个对区块链感兴趣的开发者/黑客。你确信你能理解它的工作原理,现在你想要搞清楚区块链对你和你的开发者技能意味着什么。
如果你需要学习更多的入门知识,我们建议你从比特币白皮书和以太坊白皮书开始。
这篇文章的主要目标是:
1、解释区块链开发与现有开发范例的不同之处。
2、为这个领域的机遇和挑战提供背景信息。
3、给你指出一些资源, 这些资源将帮你在这个新范式开始发展中奠定基础。
开发者的范式转换
互联网应用程序受益于网络效应,因为它们把信息孤岛集中了起来。基于共享的开放协议(如TCP/IP协议、HTTP协议),Yelp、Facebook和亚马逊等公司都能在一个地方拥有大量的用户和用户的数据,这样一来,他们不仅比那些数据更少的竞争对手有更大的优势,而且还能完全控制数据变现的方式。
用加密货币投资者乔伊·钱格罗(Joel Monegro)的话来说,当前的互联网范式是在应用层获取了大部分的价值,而从底层通信协议层获得的价值却非常低。
或者,区块链范式的价值分布可以用协议层(比较多)和应用层(比较少)来描述。这种模式的转变是有可能的,因为加密代币的发明,正如USV的阿尔伯特·瓦格纳(Albert Wagner )所描述的那样:
“从历史上看,从协议中赚钱的唯一途径是创建软件来实现它,然后尝试出售这个软件(或者托管它)……然而,使用加密代币,协议的创建者可以直接将协议货币化。事实上,当其他人在协议之上建立业务时,协议的创建者实际上会受益更多。”
在此之前,互联网开放通信协议的开发者,主要是DARPA的研究人员和非营利贡献者,从而没有将财务激励与协议开发结合起来。相比之下,如今的协议开发者可以发布“代币”,比如比特币和以太坊,这些“代币”代表了它们去中心化协议的价值。
乔尔(Joel Monegro)认为,这种范式的转变会影响开发者对应用程序的思考方式:“共享开放数据与激励机制的结合,会颠覆‘赢者通吃’的应用层市场,从而改变应用层的游戏规则,并在协议层创建一个全新类别的公司,这些公司与当前挖掘应用层价值的公司的商业模式有着根本的不同。”
以太坊
我们已经认识到,在区块链范式中,开发者可以通过协议创新来获取价值。为了继续我们的讨论,我们回顾一下区块链技术是如何演变,最终迎合开发者的。8年前,比特币被认为是一种虚拟货币,消除了人们对集中式金融体系的需要。最初,开发者实际上是在比特币区块链上尝试构建应用,方法是将数据存储在区块链中,但结果是效率非常低下。其中一名开发者维塔利克·布特林(Vitalik Buterin)对比特币的不动员和风险规避文化化感到失望。因为他想要打造对开发者友好的新功能。因此,他建立了自己的平台——以太坊。
虽然比特币最初的目的是成为一种新的金融价值储存媒介,但以太坊被的出现是作为一个完整的开发者环境。在以太坊中,开发者们会在Solidity编程语言中编写智能的合同,而那些智能的合同都是在以太坊虚拟机(EVM)中运行的,在这里,我们看到开发者有机会分叉或使用他们自己的区块链来实现不同的目的。然而,要做到这一点,就需要开发者的支持,以及激发现有区块链技术此前实现的网络效应。今天,在以太坊这样的现有网络基础之上,开发者不仅可以成为他们自己的应用程序的利益相关者,而且还可以成为底层协议的利益相关者。
去中心化应用程序(Dapps)、加密货币和智能合同
如今的区块链开发者通常做法是,在现有协议的基础上开发去中心化的应用程序,以解决特定市场和终端用户所需要的问题。这样一来,开发者就可以发布代币,用于执行去中心化应用程序本身的某些“功能”。这些“功能”是一种“智能合同”,它们承诺为去中心化应用程序提供服务,以换取数字资产,从而消除中间人来担保交易的需要。
随着去中心化应用程序的功能越来越受到人们的追捧,固定数量的加密货币的价值随着供不应求而增加。换句话说,如果事实证明,去中心化应用程序的体验真的是非常引人注目和高度需求的,那么固定的代币供应就会变得更有价值。这是所有ICO的基本原则,去中心化应用程序开发者通过提供一种用于应用中的加密货币来吸引投资,来资助他们的项目。
但是,等等,你可能会问:“为什么不使用现有的代币,而是在一开始就发行自己的、特定于去中心化应用程序的代币呢?”
特定于去中心化应用程序的代币可以帮助小规模经济体实现应用的目的。这些代币是一种稀缺资源,可以对其进行管理,使其与去中心化应用程序的功能更加紧密地结合在一起。
这就是以太坊的出发点——在以太坊中,开发者可以很容易地为他们自己的去中心化应用程序的指定用途发布自己的代币。
早期机会
了解了去中心化应用程序的底层机制后,很重要的一点是要仔细思考去中心化最终能够对用户带来什么样的好处。我们并不是要跳到一份附带项目的列表中,而是将关系数据库交给区块链来实现,我们敦促你考虑去中心化的好处。例如,奥格尔(Augur)通过分散的参与者做出正确的预测来预测市场,因为他们会分享财务激励。
在一个元级别上,开发者堆栈中也有创新的机会。许多区块链开发者将区块链工具和框架的成熟度比作互联网早期的网络。我们采访了Stream的Ben Yu,他称这对开发者来说是一个新的机遇:“在让这个领域变得更容易获取的过程中,存在着唾手可得的成果,需要建立大量的技术基础设施来将区块链的发展水平,从1994年互联网水平,带到2017年。”
随着区块链的创新,许多人发现了建立一个新的、去中心化的网络栈的机会,这种网络栈,不依赖于集中式的政府或企业实体。传统的网络栈由诸如TCP/IP、DNS、数据库、Web服务器、身份验证系统和CDN等构建模块组成,我们正在使用以太坊作为基础层来复制这些组件。
不可变性的挑战
不幸的是, 一种类似于JavaScript早期迭代的技术几乎肯定会带来挑战,其中最明显的是与新协议的不可变性有关。开发者无法改变基础区块链或更高级别的智能合约。合约不能轻易地被版本化。最近的奇偶校验bug,冻结了1.5亿美元的资金,以及许多其他类似的事件,提醒我们有必要建立“基于未来”的架构。
0x工程师布兰登·米尔曼(Brandon Millman)描述了区块链的不变性如何影响他对安全问题的看法:“身处这个领域意味着要谨慎得多,特别是因为这会给人们的钱带来风险。”区块链范式的好处之一是,如果你持有私钥,人们很难从你那里把钱取走,但很多骗局会让你心甘情愿地把钱投到错误的地方,而不是从你的钱包里偷钱。”
开发者们,尤其是那些习惯了快节奏的创业公司的开发者,不得不在速度和安全性之间权衡取舍。
正如Stream的Ben Yu所描述的,“你必须非常快地移动,因为空间正在飞速发展,但你不能快速移动,打破常规。如果你把事情搞砸了,你就会损失数亿美元。”
在区块链上进行开发需要不同程度的规划。开发者不能再使用热补丁或过夜补丁,因为他们不再对整个系统进行集中控制。相反,引入系统变更通常需要对整个协议进行严格的处理,或者在某些情况下,为不直接绑定到区块链的协议参数提供单独的源代码。
以太坊的局限性
除了一般的不可变性的挑战外,以太坊还包含了一些区块链开发者可能会遇到的限制。
首先,以太坊无法从区块链外部获取实时数据。开发人员需要依赖可信的第三方数据提供商,来为智能合同提供与外部信息如天气、随机数字或货币价值等等。
此外,以太坊的规范还阻止了实时计算。区块交易的处理时间超过15秒(与比特币的10分钟相比,这是闪电般的速度)。因此,开发人员需要编写带有前端框架的异步代码,这些框架可以相应地更新状态(如 React)。
在以太坊中,你还要为你的交易支付交易费用,使用当前版本的Solidity, 如果你打算执行的计算过于昂贵,那么你很有可能会发现自己遇到了一个交易限制。因此,在区块链中的计算成本在金钱和网络带宽上变得昂贵。有一些有趣的替代方法,比如Truebit,可以在非链中执行更密集的计算。
开始行动
总的来说, 进入这个领域肯定会让人感到无法抗拒。这是一个跨学科领域,涵盖了经济学、博弈论、金融学、计算机科学、数学、密码学等领域。然而,这也意味着有很多的领域可供新入行者选择。
0x的布兰登建议,你应该去那些你感兴趣或有经验的领域,而不是一次性地学习所有东西:“如果你之前已经做过JS开发,你可以做很多的JS库。虽然你肯定需要知道所有东西最终都是如何组合在一起的,但你不需要一开始就学习整个课程。”
本着去中心化的精神,区块链项目的大部分代码也可以通过开源获得。有很多好的资源可以让你使用:
-
官方的Solidity文件是一个很好的起点。
-
Truffle框架是最坚固的框架之一。
-
看看如何在zeppelinOS repo中开发出代币和销售代币的方式,这是开发去中心化应用程序最受信任的库之一。
-
Blockgeek还提供了一份带有代码样本和高级概念的深度以太坊代币指南。
-
你甚至可以从Crypto Kitties中学习,在区块链上创建自己的数字游戏。
此外,开发者社区非常善于接纳和帮助新人:
-
/r/ethereum
-
/r/ethdev
-
https://blockgeeks.com/
如果你主要通过编写自己的项目来学习,这里有一些想法可以开始:
-
打造自己的钱包。它可以是一个网页、移动应用或桌面应用。
-
创建您自己的ERC-20令牌,并将其部署到测试网络中。
-
把Crypto Kitties做成狗、坦克、僵尸…并将它部署到测试网络中。
展望未来
在当前的状态下,区块链的开发是混乱的。没有类似于现代Web开发那样的框架和工具。但为什么不把区块链的新生状态看作是影响一种范式转换技术的机会呢?