博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给Web开发人员的以太坊入坑指南
阅读量:5949 次
发布时间:2019-06-19

本文共 1787 字,大约阅读时间需要 5 分钟。

以太坊现在各种学习资料数不胜数,但由于以太坊正处于飞速发展阶段,有些学习资料很快就过时了。所以想找到有价值的资料无异于大海捞针。我费了很大功夫,才建立起对以太坊的整体认识,搞清楚它的工作机制。我相信很多跃跃欲试的开发人员正面临着跟我一样的问题,所以我把自己的认识整理出来,希望能对大家有所帮助。

对于web开发人员来说,webapp的客户端服务器架构很清晰。

我们一般会把web程序部署在AWS、Heroku或某个云平台提供的云主机上,所有客户端都跟这个中心程序交互。这些客户端可能是浏览器,也可能是使用API的其它程序,不管怎样,总是客户端发起请求给服务器,服务器再跟数据库或缓存交互,读/写/更新数据库中的数据,然后给客户端发送一个响应。

大部分情况下,这个架构很好用。但有时候,如果数据库是公开的,所有人都可以安全地访问,不用把数据全权交给webapp的控制者,对你来说真的非常重要。

比如说你是eBay上的明星卖家,已经赚了上千个好评了。但不知为什么eBay忽然把你的账号给封了,这可能会让你损失惨重,甚至给你的生意带来毁灭性的打击。如果能把顾客对你的评论和打分都挪到另外一个平台上,比如到eBay的竞争对手那里,你是不是马上就会有种绝处逢生的感觉?

虽然eBay还充当着买卖双方的担保人,但每一笔生意他都是要抽取佣金的。如果不需要担保人,买卖双方不仅能降低交易成本,并且还能访问到自己的所有数据,你是不是会觉得特别理想?去中心化应用就是要帮你实现这个理想,而以太坊会让DApp(去中心化应用)的搭建变得非常轻松。

以太坊DApp的架构如下所示:

\"image\"

如果仔细观察,你会发现所有客户端(浏览器)都是跟自己的程序实例通讯的,不再连到一个中心服务器上。这就是说每个想要跟Dapp交互的人都要在自己的电脑/手机上跑一份完整的区块链,也就是说想用这个程序,你必须先把整条区块链全都下载到本地。乍一看你可能会觉得这很搞笑,但这样确实能解决对中心服务器的依赖问题。

实际上也并不需要真的把整条区块链都下载下来,有几种两全其美的办法,既能得到去中心化的好处,又可以快捷地完成交互。

那么区块链究竟是什么呢?

  • 数据库:以太坊网络中每出现几笔交易,就会打包成一个区块,并且每个新的区块都会连到区块链的最后一个区块上。所有的交易数据都放在这些连在一起的区块里,这就是区块链。如果eBay用区块链做数据库,那么买卖双方之间发生的所有交易,不管是销售、退款,还是纠纷,都被记录在区块链上,并且所有人都能看到。为了确保网络中所有节点都有相同的数据副本,同时也为了确保写到这个数据库中的数据都是有效的,以太坊用了一种被称为工作证明的算法。

  • 代码:刚才只是介绍了区块链作为数据库存储数据的一面。但购买、销售、取消订单、退款等诸如此类的业务逻辑要放在哪里呢?在以太坊上,我们用一种被称为Solidity的语言编写程序代码(被称为合约)。然后再用Solidity编译器将这些合约编译成以太坊字节码,部署到区块链上。虽然目前能够编写合约的不止Solidity一种语言,但其他语言相对来说要小众得多。

    所以我们基本上可以说,区块链存储你的数据,存储你的代码,还在EVM(以太坊虚拟机)上运行这些代码。

为了搭建在web上运行的dapp,以太坊推出了一个Javascript库,web3.js,它可以连接区块链节点。所以我们只要把这个库加到自己熟悉的框架中就可以了,比如reactjs、angularjs或vuejs。

这个平台的另一个重要特性是它的金融功能。如果我告诉你,只要用上dapp,就会给你一个银行账户,你会不会觉得很吃惊?实际上不是一个银行账户,而是随便你创建多少个账户都行。这些账户被称为钱包,用来存放你的以太币(以太坊体系内所用的货币)和交易。

本文没有介绍区块链的内部工作机制,因为我想一篇文章能完成一件事情就够了,这里的重点是让你了解基于区块链的dapp跟中心化的webapp有什么不同。希望你现在对以太坊是什么,以及怎么用它搭建去中心化应用程序有了一个清晰的总体认识。

原文链接:

活动推荐

\"\"

12 月 7 日北京 ArchSummit 全球架构师峰会上,来自阿里、京东、360 的讲师齐聚一堂,共同分享“分布式 BaaS”、“区块链安全”和“智能合约”等区块链技术相关经验与实践。详情点击

转载地址:http://pqsxx.baihongyu.com/

你可能感兴趣的文章
网址收藏
查看>>
2013 Linux领域年终盘点
查看>>
linux学习之查看程序端口占用情况
查看>>
相逢在栀枝花开的季节
查看>>
linux下git自动补全命令
查看>>
Ubuntu14.04LTS更新源
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>
mysql多实例实例化数据库
查看>>
我的友情链接
查看>>
golang xml和json的解析与生成
查看>>
小弟的新书《Ext JS权威指南》终于出版了
查看>>
好吧好吧,就在这里消磨时间
查看>>
二层的,DTP+CAM/ARP
查看>>
2011工作总结
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>