以太坊现在各种学习资料数不胜数,但由于以太坊正处于飞速发展阶段,有些学习资料很快就过时了。所以想找到有价值的资料无异于大海捞针。我费了很大功夫,才建立起对以太坊的整体认识,搞清楚它的工作机制。我相信很多跃跃欲试的开发人员正面临着跟我一样的问题,所以我把自己的认识整理出来,希望能对大家有所帮助。
对于web开发人员来说,webapp的客户端服务器架构很清晰。
我们一般会把web程序部署在AWS、Heroku或某个云平台提供的云主机上,所有客户端都跟这个中心程序交互。这些客户端可能是浏览器,也可能是使用API的其它程序,不管怎样,总是客户端发起请求给服务器,服务器再跟数据库或缓存交互,读/写/更新数据库中的数据,然后给客户端发送一个响应。
大部分情况下,这个架构很好用。但有时候,如果数据库是公开的,所有人都可以安全地访问,不用把数据全权交给webapp的控制者,对你来说真的非常重要。
比如说你是eBay上的明星卖家,已经赚了上千个好评了。但不知为什么eBay忽然把你的账号给封了,这可能会让你损失惨重,甚至给你的生意带来毁灭性的打击。如果能把顾客对你的评论和打分都挪到另外一个平台上,比如到eBay的竞争对手那里,你是不是马上就会有种绝处逢生的感觉?
虽然eBay还充当着买卖双方的担保人,但每一笔生意他都是要抽取佣金的。如果不需要担保人,买卖双方不仅能降低交易成本,并且还能访问到自己的所有数据,你是不是会觉得特别理想?去中心化应用就是要帮你实现这个理想,而以太坊会让DApp(去中心化应用)的搭建变得非常轻松。
以太坊DApp的架构如下所示:
如果仔细观察,你会发现所有客户端(浏览器)都是跟自己的程序实例通讯的,不再连到一个中心服务器上。这就是说每个想要跟Dapp交互的人都要在自己的电脑/手机上跑一份完整的区块链,也就是说想用这个程序,你必须先把整条区块链全都下载到本地。乍一看你可能会觉得这很搞笑,但这样确实能解决对中心服务器的依赖问题。
实际上也并不需要真的把整条区块链都下载下来,有几种两全其美的办法,既能得到去中心化的好处,又可以快捷地完成交互。
那么区块链究竟是什么呢?
数据库:以太坊网络中每出现几笔交易,就会打包成一个区块,并且每个新的区块都会连到区块链的最后一个区块上。所有的交易数据都放在这些连在一起的区块里,这就是区块链。如果eBay用区块链做数据库,那么买卖双方之间发生的所有交易,不管是销售、退款,还是纠纷,都被记录在区块链上,并且所有人都能看到。为了确保网络中所有节点都有相同的数据副本,同时也为了确保写到这个数据库中的数据都是有效的,以太坊用了一种被称为工作证明的算法。
代码:刚才只是介绍了区块链作为数据库存储数据的一面。但购买、销售、取消订单、退款等诸如此类的业务逻辑要放在哪里呢?在以太坊上,我们用一种被称为Solidity的语言编写程序代码(被称为合约)。然后再用Solidity编译器将这些合约编译成以太坊字节码,部署到区块链上。虽然目前能够编写合约的不止Solidity一种语言,但其他语言相对来说要小众得多。
所以我们基本上可以说,区块链存储你的数据,存储你的代码,还在EVM(以太坊虚拟机)上运行这些代码。
为了搭建在web上运行的dapp,以太坊推出了一个Javascript库,web3.js,它可以连接区块链节点。所以我们只要把这个库加到自己熟悉的框架中就可以了,比如reactjs、angularjs或vuejs。
这个平台的另一个重要特性是它的金融功能。如果我告诉你,只要用上dapp,就会给你一个银行账户,你会不会觉得很吃惊?实际上不是一个银行账户,而是随便你创建多少个账户都行。这些账户被称为钱包,用来存放你的以太币(以太坊体系内所用的货币)和交易。
本文没有介绍区块链的内部工作机制,因为我想一篇文章能完成一件事情就够了,这里的重点是让你了解基于区块链的dapp跟中心化的webapp有什么不同。希望你现在对以太坊是什么,以及怎么用它搭建去中心化应用程序有了一个清晰的总体认识。
原文链接:https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
活动推荐
12 月 7 日北京 ArchSummit 全球架构师峰会上,来自阿里、京东、360 的讲师齐聚一堂,共同分享“分布式 BaaS”、“区块链安全”和“智能合约”等区块链技术相关经验与实践。详情点击 https://bj2018.archsummit.com/schedule