如何从零打造一个去中心化应用的区块链


挖矿以太币编程


最后咱们决定本身挖掘以太币。若是想了解一下在以太坊挖矿究竟是不是有利可图,本身挖确实也是一个很好的方法。咱们制做了一个很是大的亚马逊EC2实例,它具备强大的GPU计算能力(是一个g2.2xlarge实例)。这个实例的价格是天天17美圆。咱们安装了以太网,并启动了咱们的节点。因为高内存和存储需求,咱们很快就必须加强这个实例。加入区块链时节点作的第一件事就是下载过去交易的所有历史记录。这须要大量的存储空间:区块链历史记录超过14GB,Ethash工做证实大约须要3GB。api


一旦以太坊节点启动,咱们就必需要挖掘3天才能建立出一个有效的区块:网络


640?wx_fmt=png工具


提醒一下,以太坊区块链每10秒钟挖一块。开采一个区块能够得到5个以太币,售价大约为55美圆(做者写文章时的价格)。咱们的加强版EC2实例运行3天的成本约为51美圆。总而言之,在AWS上挖以太币比直接买以太币更便宜。可是咱们很是幸运:咱们开发这个区块的时候挖掘难度并不很大,在开发完以后,网络的挖掘难度就增长了三倍。区块链


5个以太币可让咱们运行“零美圆主页”多长时间呢?如今咱们来计算一下。网站


“零美圆主页”的工做流程意味着天天都会有一笔交易,另外每一个声明的PR都会有一笔交易。假设贡献者天天声明一个PR,那么运行该平台每一年最多将花费365 * 2 * 0.00098 = 0.72 以太币。5个以太币可让咱们运行该平台近7年。ui


正如你所看到的,在以太坊运行合约并非免费的,不过以目前的价格来讲,它仍然很便宜。固然,以太币价值的变化很大。因为挖比特币的利润愈来愈低,一些大型比特币矿场开始转向以太坊。这也让采矿变得愈来愈困难,而且使得以太网天天都在变得更加昂贵。spa



最终的惊喜.net


最终,咱们的智能合约在EC2上托管的现实世界以太坊节点中运行很是好。设计


但当咱们完成这个项目的时候,以太坊发布了它们的Homestead版本,这带来了不少新东西,彻底破坏了咱们的代码。咱们花了大约一个星期的时间才明白,而且经过反复试验修复了因不明缘由而不兼容的代码。


Tip


Homestead发布了一个隐藏的以太坊功能——私有网络——来简化开发。以前以太坊缺少私有网络是咱们当时选择使用Eris的缘由之一。


“零美圆主页”平台如今已经启动而且开始运行了。你能够经过在GitHub上的marmelab的开源库之一上开一个Pull请求来使用它,上当前显示的广告,或浏览marmelab / ZeroDollarHomePage上的应用程序代码。是的,咱们正在开源整个广告平台,以便你能够详细了解其工做原理,并在本地进行复制。


640?wx_fmt=png


调试


以太坊留给开发者的体验实际上是很是糟糕的。想象一下没有日志,也没有调试工具,你发现程序失败的惟一方法是经过一行一行输出“I'm here”字符串来查找问题。甚至有时(例如在Solidity合约中),你都不能这样作。或者某些在开发环境中完美工做的程序在生产环境中却没法实现。这就是以太坊的开发者体验。


若是你将数据存储在智能合约中,是没有内置的方式能够在交易后显示此数据当前状态的。这意味着你须要构建本身的可视化工具来排除错误。


可用于跟踪以太坊合约和交易的工具备:


  • etherscan.io:显示有关合约,交易,区块的数据

  • etherchain.org:区块和以太网信息

  • 你还能够得到有关网络和节点的汇总统计信息


例如,这是咱们的合约在etherscan上的可视化界面:


640?wx_fmt=png


每次交易(对合约方法的调用)以及合约执行的痕迹都会用机器语言记录下来。除了用于确保你调用到了合约以外,这个工具不能用于调试的其余部分。


并且,这些工具只能监视公共以太坊网络。因此你不能用它们来调试本地的区块链。


若是你曾经见过比特币交易审计网站,千万不要觉得以太坊能够达到相同的复杂程度。此外,比特币网络只有一种交易,所以比设计用于运行智能合约的网络更容易监控。


文档


这还不是所有:以太坊文档与代码不一样步(至少在Frontier版本中),因此大多数时候咱们必需要经过查看这些库的源代码来了解如何写代码。因为有些出问题的库使用的语言(Solidity)不多人用,因此咱们在这里只能祝福它们的工做方式不出问题了。还有,也不要期望Stack Overflow的帮助。像咱们这样勇于作一些认真的事情来为社区提供支持的人太少了。


不过这里须要明确的是:咱们不是在批评以太坊社区缺少努力。以太坊背后的发展势头巨大,事情进展迅速。全部文档贡献者的工做都值得赞扬。但仍是要认可在咱们开发应用程序时,现有文档状态不足以让新的以太坊开发人员启动一个项目。


在网上搜索以太坊的教程很容易,但大多数时候,这些教程中复制粘贴的代码根本没法使用。



结论


通过两位经验丰富的开发人员4周的艰苦努力,咱们的代码终于能够在公有以太坊网络中工做了(心累)。在Frontier和Homestead版本之间的以太坊库中的回归和兼容性中断也并无起到什么做用。查看marmelab / ZeroDollarHomePage上的项目源代码能够详细了解其内部工做原理。由于确实是第一次开发,咱们在这方面的经验也实在有限,请原谅咱们代码中的潜在错误,以及本文中的不许确之处。请随时在GitHub向咱们提交更正或评论。


咱们不喜欢这段经历。经过糟糕的文档和不成熟的软件库摸索编程的方式并非很让人开心。用半熟的语言来实现简单的功能(如字符串操做)也很差玩。尤为是意识到本身尽管有着多年丰富的脚本语言编程经验,但却没法编写简单的可靠合约,这就更使人沮丧。最重要的是,以太坊生态系统的年轻人彻底没法预测他们实现一个简单的功能所需的时间。因为时间就是金钱,目前咱们还没法肯定开发去中心化应用到底须要多少代价。


在时间和资源方面,“零美圆主页”表明着超过20,000欧元的开发成本——即便它是一个很是简单的系统。与咱们在其余项目中使用的工具(Node.js,Koa,React.js,PostgreSQL等)相比,在区块链上开发很是昂贵。对于开发团队来讲,这也是很是使人失望的。咱们还能够从中发现一个很强烈的信号:这个生态系统尚未准备好!



对区块链的见解


在探索了区块链的理论,并真正开发以后,咱们已经对它的优缺点有了切身的体会。但使人惊讶的是,咱们的大部分结论都和媒体上一直吹捧的不太同样。或许这是由于咱们并无迷信比特币和其余人的疯狂估值,也多是由于区块链确实面临着不够成熟的现状。


区块链确实是一个很是聪明的想法,具备巨大的潜在影响。可是目前的方案究竟可否为下一个十年颠覆性应用的诞生提供动力还还没有可知。


在技术方面,它的一些基本特征根本不可行。区块链效率不够高,对开发人员不够友好,并且它的技术特性颇有可能被恐怖分子或地下黑市利用,用于非法毒品、武器、人口等的贩卖,而难以监管。


在商业方面,区块链变化速度过快,价格昂贵。费用可能会平白无故地变化数十倍。在这样一个不稳定的平台上开展业务是很是危险的。


个人意思是,咱们必须等待。区块链尚未准备好。它须要更成熟些,须要成为另外一个杀手级应用而不是成为一个投机引擎,须要更大的开发者社区,须要承担更多的生态和经济责任。这须要多长时间?也许一年或两年?没人能说出来。


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------