终极以太坊 Dapp 教程(如何逐步构建全栈去中心化应用程序)

本文档详述如何在以太坊区块链上构建一个去中心化的投票应用,涉及区块链原理、智能合约、前端开发等多个方面。通过实例,讲解了如何使用Solidity编写智能合约,利用Truffle框架进行测试和部署,以及开发与智能合约交互的前端客户端。此外,还介绍了必备的依赖项如NPM、Truffle、Ganache和Metamask,并展示了投票功能的实现及测试流程。
摘要由CSDN通过智能技术生成

今天,我将向您展示如何在以太坊区块链上构建您的第一个去中心化应用程序或 dApp。我将向您展示如何编写您的第一个以太坊智能合约,我们将在其中举行两名候选人之间的选举。我们将针对智能合约编写测试,将其部署到以太坊区块链,并开发一个允许账户投票的客户端应用程序。我们还将研究诸如“什么是区块链?”、“什么是智能合约?”和“dApp 是如何工作的?”等关键概念。

什么是区块链?

让我们用一个类比来理解区块链是什么以及它是如何工作的。让我们看一个 Web 应用程序。

 

通常,当您与 Web 应用程序交互时,您使用 Web 浏览器通过网络连接到中央服务器。这个 Web 应用程序的所有代码都存在于这个中央服务器上,所有数据都存在于一个中央数据库中。每当您与您的应用程序进行交易时,都必须与网络上的这个中央服务器进行通信。

如果我们要在网络上构建我们的投票应用程序,我们会遇到一些问题:

  1. 数据库中的数据可以更改:可以多次计算,也可以完全删除。
  2. Web 服务器上的源代码也可以随时更改。

我们不想在网络上构建我们的应用程序。我们希望将其构建在区块链上,任何连接到网络的人都可以参与选举。我们要确保对他们的选票进行统计,并且只统计一次。那么让我们来看看它是如何工作的。

区块链没有网络、中央服务器和数据库,而是一个网络和一个数据库。区块链是一个点对点的计算机网络,称为节点,它们共享网络中的所有数据和代码。因此,如果您是连接到区块链的设备,那么您就是网络中的一个节点,并且您与网络中的所有其他计算机节点进行通信。您现在拥有区块链上所有数据和代码的副本。没有更多的中央服务器。只是一堆在同一网络上相互通信的计算机。

 

区块链节点之间共享的所有交易数据不是集中式数据库,而是包含在称为块的记录包中,这些记录捆绑在一起以创建公共分类帐。这个公共分类账代表了区块链中的所有数据。公共分类账中的所有数据都通过加密哈希保护,并通过共识算法进行验证。网络上的节点参与以确保分布在网络上的所有数据副本都是相同的。这是我们在区块链上构建投票应用程序的一个非常重要的原因,因为我们希望确保我们的投票被计算在内,并且它没有改变。

我们应用程序的用户在区块链上投票会是什么样子?好吧,对于初学者来说,用户需要一个带有钱包地址的帐户,其中包含一些以太坊的加密货币。一旦他们连接到网络,他们就会投票并支付一小笔交易费用来将此交易写入区块链。这种交易费用称为“gas”。每当投票时,网络上的一些节点,称为矿工,竞争完成这个交易。完成此交易的矿工将获得我们支付的用于投票的以太币。

回顾一下,当我投票时,我会支付 gas 费用来投票,当我的投票被记录时,网络上的一台计算机会获得我的以太币费用。反过来,我相信我的投票会被永远准确地记录下来。

因此,同样重要的是要注意,在区块链上投票会花费以太币,但仅查看候选人名单不会。那是因为从区块链读取数据是免费的,但写入它不是。

什么是智能合约?

这就是投票过程的运作方式,但我们如何实际编写我们的应用程序?嗯,以太坊区块链允许我们使用称为智能合约的区块链上的以太坊虚拟机 (EVM) 执行代码。

智能合约是我们应用程序的所有业务逻辑所在。这是我们实际编写应用程序去中心化部分的地方。智能合约负责向区块链读取和写入数据,以及执行业务逻辑。智能联系人是用一种叫做Solidity的编程语言编写的,它看起来很像 Javascript。它是一种成熟的编程语言,可以让我们做许多与 Javascript 相同类型的事情,但由于它的用例,它的行为有点不同,正如我们将在本教程中看到的那样。

区块链上智能合约的功能与网络上的微服务非常相似。如果公共分类账代表区块链的数据库层,那么智能合约就是与该数据进行交易的所有业务逻辑所在的地方。

此外,它们被称为智能合约,因为它们代表契约或协议。In the case of our voting dApp, it is an agreement that my vote will count, that other votes are only counted once, and that the candidate with the most votes will actually win the election.

现在让我们快速浏览一下我们正在构建的 dApp 的结构。

 

我们将拥有一个用 HTML、CSS 和 Javascript 编写的传统前端客户端。此客户端将连接到我们将安装的本地以太坊区块链,而不是与后端服务器对话。我们将使用 Solidity 编程语言在 Election 智能合约中编写有关 dApp 的所有业务逻辑。我们将把这个智能合约部署到我们本地的以太坊区块链上,并允许账户开始投票。

现在我们已经了解了区块链是什么以及它是如何工作的。我们已经看到了为什么要在区块链而不是当前的网络上构建我们的投票 dApp。我们已经看到我们希望通过编写将部署到以太坊区块链的智能合约来编写我们的 dApp。现在让我们开始编程吧!

我们将建造什么

这是我们将要构建的投票 dApp 的演示。

 我们将构建一个客户端应用程序,它将与我们在区块链上的智能合约进行对话。这个客户端应用程序将有一个候选人表,其中列出了每个候选人的 ID、姓名和投票数。它将有一个表格,我们可以在其中为我们想要的候选人投票。它还显示了我们在“您的帐户”下连接到区块链的帐

为了构建我们的 dApp,我们首先需要一些依赖项。

节点包管理器 (NPM)

我们需要的第一个依赖项是Node.js 附带的Node Package Manager或 NPM。您可以通过转到终端并键入以下内容来查看是否已经安装了节点:

$ node -v

松露框架

下一个依赖项是Truffle 框架,它允许我们在以太坊区块链上构建去中心化应用程序。它提供了一套工具,允许我们使用 Solidity 编程语言编写智能联系人。它还使我们能够测试我们的智能合约并将它们部署到区块链。它还为我们提供了一个开发客户端应用程序的地方。

您可以在命令行中使用 NPM 安装 Truffle,如下所示:

$ npm install -g truffle

伽纳彻

下一个依赖项是Ganache,一个本地内存区块链。您可以通过从 Truffle Framework 网站下载来安装 Ganache 。它将为我们提供 10 个外部账户,地址位于我们本地的以太坊区块链上。每个帐户都预装了 100 个假以太币。

元掩码

下一个依赖项是Google Chrome 的 Metamask 扩展。为了使用区块链,我们必须连接到它(记住,我说区块链一个网络)。我们必须安装一个特殊的浏览器扩展才能使用以太坊区块链。这就是 metamask 的用武之地。我们将能够使用我们的个人帐户连接到我们本地的以太坊区块链,并与我们的智能合约进行交互。

我们将在本教程中使用 Metamask chrome 扩展程序,因此如果您还没有安装 google chrome 浏览器,您还需要安装它。要安装 Metamask,请在 Google Chrome 网上商店中搜索 Metamask Chrome 插件。安装后,请确保已在扩展列表中选中它。安装后,您会在 Chrome 浏览器的右上角看到狐狸图标。如果遇到困难,请参考视频演练!

语法高亮

依赖项是可选的,但建议使用。我建议为Solidi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值