2019独角兽企业重金招聘Python工程师标准>>>
【本文作者:Alex Van de Sande,译者:王建(万云平台区块链技术专家)/蔡佳慧(万云实习生区块链技术爱好者),国内首次刊登于万云微信公众号】
以太坊并不是那种需要一个STEM文凭(指:科学-science,科技-technology,工程-engineering,及数学-mathematics相关文凭。)才能理解的高深莫测的智能合约应用建立平台,它的目标其实是成为万维网中各种应用架构的支柱。在这篇文章里,我们尝试去阐述如何实现这个目标,并提供一些基本例子来展示如何开始构建一个去中心化的应用。
目标读者
这篇文章面向有以下背景的读者:
对于Web技术有基本了解,并知道如何构建一个简单的基于javascript和html的应用。同时,希望使用这些技能为以太坊生态系统构建应用。
没有服务器,应用是如何运行的
当前,Web应用中的服务器所做的工作已经远超当初的设想。除了提供静态网页,它们还保管私有信息,处理用户验证,同时还提供复杂数据分析与保存。而用户计算机(在Web技术刚被发明的年代,这种设备会被认为是超级计算机)所做的仅仅是加载信息,并展示给用户而已。
与此不同的是,更为去中心化的系统结构则会允许一种更加模块化的处理方式。在这种方式中,不同的机器与不同的协议将会处理特定的任务,有些属于用户方面,而也有些属于配置于点对点网络中的专用机器方面。因此所有的数据逻辑(什么会被储存,谁会去储存,如何解决冲突等)是由区块链上的智能合约解决的,静态文档由Swarm提供,同时实时通信在Whisper上进行。用户设备保留用户认证信息并运行程序界面。
几乎没有单节点保留大量未加密数据,这么做将会降低数据泄漏与攻击的危险。同时,通过将其分散于全网络,也可以降低应用的加载与花销成本。由于所有这些协议都是去中心化的,任何人都可以连接到网络并开始提供特定服务:比如说,如果用户在一个功能强大的笔记本电脑上浏览,这台电脑也可以向网络邻居们提供静态文件。
一个去中心化的系统结构同时鼓励创新:由于交互界面脱离于数据,任何人都可以为同一个应用提出一个全新的用户界面,创建一个更富生机与竞争力的生态系统。可以说,Twitter历史上最具趣味性及创新力的时期之一便是它作为中央数据中心提供服务,同时任何人都可以创建他们自己的Twitter应用。
观察它如何运作
如果你想在学习这个应用之前实验它,我们推荐你下载Mist并阅读我们关于如何安装应用并运行的入门教程(下载链接:https://github.com/ethereum/mist/releases/tag/v0.9.0)。如果你只是想要看一看完整的应用,你可以直接从Github上将其下载下来(下载链接:https://github.com/ethereum/stake-voice)。
我们现在上手操作
我们将会建立一个叫做“Stake Voice”的非常简单的应用。其主旨是允许以太币投注人对任何他们想投的事情进行投票,同时这个应用将会计算所有同意与不同意这个陈述的以太币总和。
下面代码是这个应用里用Solidity语言编写合约,Solidity是一种类似于javascript的语言,非常简单:
第一行建立了合约名称,同时第二行创建了一个命名为“LogVote”的事件,它将会在日志文件中记录以下内容:
-
将会被投票的提案的哈希值
-
投票者是同意还是反对提案
-
投票者的地址
函数“vote”接着会启动日志,应用程序稍后会计数。它同时会检查确保没有意外发送的以太币。当任何以太币被存入智能合约时,“匿名”函数会被执行,并会自动拒绝接收以太币。
如果你想要学习关于Solidity更多的编程内容,我们推荐你从以太网solidity教程( https://ethereum.org/dao)开始,阅读官方文档页面( https://solidity.readthedocs.io/en/latest/)并在你的浏览器上尝试在线编译器( https://ethereum.github.io/browser-solidity/#version=soljson-latest.js)。
大致上就是如此了:你选择一个哈希值,选择一方然后运行Vote()。所以这又如何转化成一个投票应用?
无服务器架构
遵循KISS原则,我们正在制作尽量小却仍然可使用的产品。这意味着我们不会使用数据库来储存提案,也不会使用普通javascript与纯粹html之外的功能。
因此,我们将使用应用本身的URL来保存提案文本,并且我们会使用URL来向用户展示提案内容,再生成一个用来检测投票的哈希值。用户可以使用社交媒体来分享他们想要辩论的提案,或者直接使用链接。
从基础开始
拿出你最喜欢的html框架,并在你本地机器上建立一个简单网站,然后在Mist上打开它。Mist上所有的页面都可以访问一个名叫web3的javascript对象,这也是你的主要工作区域。我们要做的第一件事就是检查web3是否存在:
一些应用开发者也许会想要去加载他们自己的web3对象,以保证向前的兼容性。要做到这些,只需要在