Ethereum Dapp Tutorial — Part 0
学以太坊区块链平台已经有一段时间了,网络上有很多关于以太坊的资料(文章,视频,平台官网),这些很容易就能找到。由于以太坊平台还在快速迭代,所以相关的资料内容普遍滞后。然后自己基于所学整理了一下关于啥是以太坊
,以及怎么搞以太坊
的图。在学习过程中遇到了很多问题,本文整理一下,顺便从一个web开发者的角度来解释以太坊。
什么是webapp
构架webapp的客户端以及服务端:
一个web应用托管在托管服务器上,像AWS,Heroku,VPS等,所有的客户端都是通过一个中心的应用程序进行交流。客户端可以是web浏览器,或者是其它的消费你程序的API等。当一个客户端像服务端发起一个请求,服务器会和数据库进行通信,对数据库进行增删改查,然后相应客户端请求。
这种结构大部分情况下都能很好的运行,但是如果数据库是公开的任何人都可以访问,那么有一些应用就会变得很有用,这样我就不用依赖上面的webapp来获取自己个人的数据了,也就是说我可以从其它渠道获取我的个人数据。
下面举例说明:例如eBay,如果你是一个超级卖家,已经获得了数百的好评。由于某些原因eBay封停了你的帐号。这事会严重的影响你的生意。如果你能够把这数百的好评与评分转移到其他平台(eBay的竞争者)的话,这就很爽了。eBay在买家和卖家之间提供了一个第三方信任服务。并且从买卖双方都要收取佣金。是否有这么一种方式买卖双方在交易的时候完全忽略eBay,这样双方也节省了佣金,同时你又可以访问到你的交易数据?这就是下面的图片提出的去中心化应用。以太坊让你很容易的创建Dapps(去中心化应用)。
什么是以太坊Dapp
你是否发现,每一个客户端交流使用的都是它自己的应用实例。没有一个所有的客户端都链接到服务器上的中心化服务器。这就意味着,每一个想通过去中心化应用交互的人,需要在他们的电脑或者是手机上完整的拷贝区块链。这就意味着,在你可以使用应用之前,你需要下载完整的区块链,然后启动使用这个应用。第一次听说感觉很荒唐,但是他有一个好处就是不需要依赖一个中心化的服务,而且这个中心化的服务有可能明天就不存在了。
现实中你不需要花费很多的内存和硬盘,来下载完整的区块链。已经有了一些变通的方法或者是优化来使的应用去中心化,保证交互方便快捷。
什么是区块链
Database(数据库):在以太坊网络上每发生一个交易就会被包装到一个区块中,每一个区块都和下一个区块相连。这些包含所有交易数据相连的一系列的块就是区块链。如果我们返回去看刚才的eBay的例子,买卖双方无论是出售,退款还是纠纷都将会被记录在区块链上,并且每个人都可以看到。为了保证以太坊网络上的所以网络节点对这条信息都有同样的拷贝,而且为了确保非法数据写入的这个数据库中(区块链的区块中),以太坊使用一个叫做proof的算法来做这件工作。
Code:区块链的数据库部分只是存储了数据,但是像买,买,取消,退款等操作逻辑在什么地方呢?在以太坊的世界里,你可以使用一个叫做Solidity的语言来写应用(合约)代码。然后可以使用Solidity编译器来把代码编译成以太坊二进制文件,然后把这个二进制代码部署到区块链上。除此之外和Solidity很少有其他的交互,但是Solidity是目前开发合约最流行的开发语言。
所以从根本上来说:区块链存储数据
,存储代码
,而且运行EVM(Ethereum Virtual Machine)中的代码
。
如何开发Dapp
基于Dapps构建web,Ethereal有一个很好用的javascript包叫web3.js
,这个包可以和你的区块链接点建立连接。所以只需在javascript框架(reactjs, angularjs等)中引入这个包,然后就可以开始构建应用了。
另一个大而重要的应用方面是平台的财务能力。因为在使用Dapp的时候,你就拥有了一个内置的银行帐户。事实上不只是一个银行帐户,你可以在一分钟内创建多个帐户。这些银行帐户被叫做钱包,你可以用来存钱(用在以太坊生态系统的货币)和交易。
END
有许多关于区块链的内部细节我故意没有讲,因为我想集中精力在基于区块链的Dapp
和中心化的webapp
进行比较。希望这篇文章可以很好的达到说明以太坊是什么,以及怎么去构建去中心化的应用。
请看接下来的3个指导教程来构建全栈的dapp