Ethereum for web developers

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