以太坊-web开发指南

时间:2023-01-23 23:36:02

    原文地址: Ethereum for web developers

    我学习以太坊区块链平台有一段时间了,学的越多,它越是令人兴奋。关于以太坊有很多的资源(文章、视频、官方文档),让人眼花缭乱。但是,其中许多都过时了,这是可以理解的,因为这个以太坊平台仍在迅速发展。我花了一些时间来拼凑出一个完整的画面: 什么是以太坊、它是怎么运行的。在Meetup和其他在线社区的开发者说,这感觉就像大家都想拥抱这项新技术但是遇到相同的困难。本文从Web开发者的角度来解释以太坊.


    如果你是一个web开发者, 那应该很清楚web应用其实是客户端-服务器的架构.

以太坊-web开发指南

    你一般将你的Web应用托管在服务器上、像亚马逊云AWS、Heroku或VPS。所有客户端都与这一个中心应用程序交互。客户端可以是浏览器,或者其他与服务器交互的程序。当客户端向服务器发出请求时,服务器会执行相应处理,与数据库或缓存进行交互,读/写/更新数据库, 并为客户端服务。

    这种架构大部分时间都运行得很好。然而,对于某些应用,如果数据库能够被公开,每个人都安全地访问,将是非常有益的,不需要靠这个webapp访问数据。


    例如,让我们看看eBay。如果你是一个赢得了数百次好评的电商,或者出于某种原因,eBay暂停你的账户。那会很糟糕,而且会严重影响你的生意。如果可以让你的电商数据(接受的好评和评级)完全转移到另一个平台(比如淘宝)那是非常好的(但是目前是不可能的)。eBay提供的服务是买家和卖家之间信任的第三方。但是,他们也会在每次销售时收取佣金。如果有一种方法可以完全消除eBay在买卖双方之间的交易,这样你就可以节省佣金,而且你还可以访问自己所有的电商数据?这是去中心化应用程序进入我的画面的地方。以太坊它使Dapps(去中心化应用)很容易实现。

这是以太坊DAPP架构图:

以太坊-web开发指南

    如果您注意到,每个客户端(浏览器)都与应用程序自身的实例进行通信。没有一个中心服务器让所有客户端去连接。这意味着,每一个想与DAPP(去中心化应用程序)交互的人,将需要在他们的电脑或者手机上运行一个完整的副本。也就是说在使用一个应用程序之前,您必须下载整个区块链然后才开始使用该应用程序。这听起来可能有点荒谬,但它的好处是不依赖于一个单一的*服务器(说不准哪天服务器就不见了)。


在现实中,你不需要花费你很多的硬盘和内存下载整个blockchain。有几个方法优化保持应用去中心化斌并且使交互方便快捷。

讲到这里,那个就是区块链是什么呢?它包含:

        数据库:以太坊网络中每几个交易就会被记录在一个块中,块与块间有链接关系。这一些列持有交易数据的块组成了区块链。如果我们回到eBay的例子,买家和卖家之间的所有交易,无论是销售、退款或纠纷都会被记录在区块链上,每个人都可以看到。以太坊使用工作量证明算法(新版本已经不是工作量证明算法)来确保所有节点的数据一致性,确保没有无效的数据被记录.


        代码:数据库方面只存储数据。但在所有的逻辑(买、卖、退款等)在哪里呢?在以太坊平台上,你用Solidity写的应用程序代码称为合约。然后使用Solidity的编译器来编译它生成字节码然后将该字节码部署到区块链上。Solidity是迄今为止最流行的智能合约开发语言,少有替代者。

    所以基本上,区块链存储您的数据、代码,并且在以太坊虚拟机(EVM)中运行你的代码。
构建基于Web的dapps,以太坊有一个方便的JavaScript库可以连接到区块链节点上,称为web3.js。所以只需在你数据的框架中如 reactjs,AngularJS导入这个库然后开始构建。

    另一个重要的特点是平台的金融能力。在你开始使用DAPP时,内部会给你分配一个账户,事实上,你在短时间内分配很多账户都没问题。这些银行账户被称为钱包,用来存贮数字资产和交易。

有很多区块链内部细节我故意忽略了因为我想集中精力在中心化app和基于区块链的DAPP上。希望通过这篇文件能让大家对以太坊有一个很好的视角、知道如何去构建一个DAPP。
我今年打算写更多关于DAPP开发文章和教程。如果你想得到通知,你可以在这里订阅!

[我已经写了3部教程在 《建立一个全栈DAPP》: 第一章第2章第3章 ]


我也编写了一个更复杂的教程,基于以太坊和IPFS来构建一个DAPP(需要*访问)。

进阶阅读:
为了深入了解以太坊工作机制你可以阅读 以太坊白皮书
学习更多关于 solidity语言
对于所有的问题,你可以访问 Ethereum Stack Exchange
超有用的社区: https://gitter.im/ethereum/solidity 和  https://gitter.im/ethereum/web3.js
感谢 @raineorshine, @alwaysbcoding, @kinjalmurthy对文章的反馈