区块链项目的开发和现有软件开发模式的区别
1、开发模式的转变
互联网的网络效应产生了大量的中心化的数据,这些数据促进了互联网应用的发展。受惠于共享开放的网络协议(比如 TCP/IP,HTTP),诸如 Yelp,Facebook 和 Amazon 这样的公司得以把自己的用户——当然也包括用户产生的数据——集中存储在自己的服务器上。这样一来,这些互联网巨头们除了比用户量小的企业更有优势之外,他们还对自己所拥有的海量用户数据如何变现有着 100% 的控制权。用数字货币投资者 Joel Monegro 的话说就是,现有的互联网模式使得绝大部分的价值被应用层所攫取,而应用层的基础,也就是底层的协议层则获利很少(即,“胖”应用层,“瘦”协议层模式)。
相反,区块链技术带来的价值分布模式,可以被理解为是一种“胖”协议层,“瘦”应用层的模式。正是密码学货币的创新,使得这种模式成为可能。正如 USV 的 Albert Wagner 所说:
“一直以来,靠协议赚钱的方式只有一种,那就是基于该协议开发软件并出售(当然最近都转为出租了)… 然而密码学货币则提供了一种直接在协议层变现的可能,并且随着基于该协议的应用越来越丰富,底层协议的变现能力也会随之越来越强,反映在数字货币上就是价格越来越高。”
从前那些互联网开放协议的开发者们,也就是 DARPA 网的研究员们或者那些无偿的贡献者们,并不会因为开放协议的发展或基于其上的应用越来越多,而获得直接的经济回报。不同的是,现在的协议开发者们可以直接发行数字货币了,比如比特币或以太币,而这些数字货币则直接代表了去中心化协议的价值。
Joel Monegro 相信,区块链技术所带来的这种模式上的转变,将促使开发者重新审视自己的应用。“数据的开放共享和内生激励机制的结合,最终会终结“赢者通吃”的市场现象。这将改变应用层的游戏规则,并且催生一批有着全新业务模型的公司。而这些公司业务模型的不同将主要集中在协议层。”
2、以太坊
前面的讨论带给我们的结论是:区块链技术带来的创新让开发者们可以直接在协议层获得价值。接下来我们将继续讨论,区块链技术是如何朝着开发者友好的方向演进的。8 年前,一种无需中心化金融机构背书的数字货币出现了,它就是现在人们耳熟能详的比特币。一开始,开发者们试图将数据直接存储在比特币的区块链上来开发应用,结果表明,这种方式非常低效(Joel 的这篇文章是个很好的例子)。其中一位开发者 Vitalik Buterin 实在是受够了比特币对于新特性极端谨慎和保守的态度,于是他开发了一个新的区块链平台以太坊(Ethereum)。
比特币的初衷是创造一种新的价值存储的媒介。以太坊则是为了实现一个图灵完备的区块链开发平台。在以太坊网络中,开发者们可以使用 Solidity 这门编程语言编写智能合约,这些合约则由以太坊虚拟机(EVM)来运行。从 Vitalik Buterin 的例子中我们不难看出,开发者们完全可以开发一个全新的区块链网络,以此来满足自己多样的需求。当然,从头开发新的区块链网络也有缺点,比如你要从头开始构建开发者社区。但直接在类似以太坊这类成熟的网络上开发,则没有这样的问题。而且一个显著的不同是,开发基于区块链网络的应用,开发者不仅会是这个应用的所有者,也会成为因此而繁荣的底层协议的直接受益人。
3、去中心化应用(Dapps),代币和智能合约
现在的开发者们基于现有的区块链协议(比如以太坊)开发出了满足不同用户需求的去中心化应用(dapp)。开发者一般会在 dapp 中发行自己的代币(token),用户可以通过消耗代币来让 dapp “执行”相应的操作来实现某个“功能”。代币其实并不神秘,你可以把它想象成人们在商场的电玩世界里买的游戏币。这些通过“智能合约”实现的“功能”通过收取一定的费用(代币),使得 dapp 可以在不依赖第三方的情况下对外提供可靠的服务。用游戏币来类比就是,只要有足够的游戏币,你随时都可以把游戏币塞到篮球机里玩一局!
一般情况下,代币的总量是固定的,因此随着某个 dapp 提供的服务越来越流行,基于简单的供需原理,代币的价格肯定会水涨船高。基于这个逻辑,dapp 的开发者们往往通过发售代币的方式来募集开发资金(而不是通过传统的融资渠道),这一过程的另一个众所周知的名字就是 ICO(初始代币销售)。
看到这里你可能会问,“为什么每个 dapp 都要发行专用的代币,而不是用现成的,比如以太币(eth)呢?”。这个不难解释,因为专用的代币利于特定应用生态里的小微经济。换句话说,专用的代币可以针对应用的特定功能和需求作出灵活的调整,如此一来,这个代币就能更好地服务于这款 dapp。说到这里,我们不得不提到以太坊(Ethereum)。以太坊正是这么一个让 dapp 开发者们可以方便地发行代币的平台。
4、“不可篡改”带来的挑战
就像早期的 Javascript 技术一样,区块链技术演进的过程必然伴随着各式各样的挑战。其中最大的挑战之一,也是区块链技术最突出的特性,那就是“不可篡改”。由于这个特性,开发者们无法更改底层的区块链,也无法更改顶层的智能合约,对基础库和合约进行版本控制也非常困难。最近 Parity 的一个 bug 直接导致了价值 1.5 亿美金的以太币被锁。诸如此类的事故不断地提醒我们,构建经得住未来考验的架构是非常重要的。
关于这种不可篡改性对业务安全所带来的影响,来自 0x 项目的开发者 Brandon Millman 跟我们分享了他的看法:“跟传统项目相比,在这个领域做开发意味着你要加倍小心,因为任何问题都将直接影响用户数字资产的安全。一直以来,区块链技术对于私有财产的有力保护广为人知,也就是说,只要你安全地控制着私钥,理论上没有人可以偷走你的资产。但这个领域更多的偷窃行为并不是通过直接盗取用户的私钥来实施的。骗子们更多地是通过诱骗的方式,让用户将数字资产转移到他们的钱包,最终达成行窃的目的。”
开发者们,尤其是那些来自创业公司习惯了快节奏开发的开发者们,不得不停下来思考如何在速度和安全性之间找到平衡。就像来自 Stream 的 Ben Yu 说的那样:“开发者们普遍推崇的一个原则是:move fast and break things. 这句话在区块链领域只有前半句成立。这个领域的发展日新月异,所以你必须 move fast 才不至于被竞争对手超越,但 break things 则意味着成千上万的金钱损失。”
区块链领域的开发需要更加周密的计划。由于开发者对于整个系统缺少中心化的控制,因此 dapp 是很难像传统应用那样做快速热修复的。相反的,在区块链世界要想做系统级别的变更,则往往意味着整个协议的硬分叉。
5、以太坊的局限性
除了上面讲到的“不可篡改”带来的挑战,开发者在以太坊网络上还可能碰到一些其他限制。比如,以太坊网络不支持通过外部调用的方式获取自身区块链以外的数据。开发者们需要依赖第三方数据提供商来向智能合约注入外部数据,这类数据提供商也常常被称作预言机(Oracle)。
除此之外,以太坊的性能不足以支持实时计算。以太坊网络中区块的处理时间长达 15 秒(跟比特币网络的 10 分钟比起来已经很快了)。因此,开发者们需要写一些异步代码来进行状态的更新(这一点跟 React 很像)。
同时,在以太坊网络中,合约执行的每一步都需要消耗 gas,而 gas 最终会以以太币(eth)进行结算。因此,开发者们可能经常会碰到由于 gas 设置过低,导致计算无法完成的情况(比如这款象棋游戏)。也就是说,以太坊的“链上计算”是非常昂贵的,同时也非常消耗带宽。因此,市面上也产生了一些像 Truebit 这类旨在降低计算成本的“链下计算”服务。
6、开发者如何开始
对于区块链领域的新人,来自 0x 项目团队的 Brandon 给的建议是,选择自己感兴趣或跟自身经历相关的领域为切入点,而不是一上来就想吃成大胖子:“如果你之前做的是 JS 开发工作,那么这个领域有非常多的 JS 库需要你这样的人来完善。假以时日,在开发过程中,你就会逐渐理解并熟悉这一领域。你无须有完成一门课程才能入门的负担。”
正如区块链技术所宣扬的“去中心化”思想那样,这一领域的绝大多数项目的代码都是开源的。下面就列出了一些可以让你快速上手的资源:
• Solidity 官方文档 是学习这门语言的很好的开始。
• Truffle 框架 是 solidity 最好的开发框架之一。
• 在 zeppelinOS 代码库 里可以看到很多知名的开源库。
• Blockgeeks 提供了一个详细的 以太坊代币开发指引,并附有一些代码示例和抽象概念。
• 你也可以从火爆全网的 Crypto Kitties 那里学习 如何在区块链上创建自己的游戏。
除此之外,下面是一些高质量的开发者社区:
• /r/ethereum
• /r/ethdev
•
https://blockgeeks.com/