以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(一)

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

什么是区块链?

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

通常,当你与Web应用程序交互时,你使用Web浏览器通过网络连接到中心服务器。此Web应用程序的所有代码都位于此中心服务器上,并且所有数据都位于中央数据库中。无论何时与应用程序进行交易,都必须与Web上的此中心服务器进行通信。

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

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

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

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

而不是集中式数据库,区块链中节点之间共享的所有交易数据都包含在称为块的记录包中,这些记录捆绑在一起以创建公共分类帐。此公共分类帐表示区块链中的所有数据。公共分类帐中的所有数据都通过加密散列来保护,并通过一致性算法进行验证。网络上的节点参与以确保通过网络分发的所有数据副本是相同的。这是我们在区块链上构建投票申请的一个非常重要的原因,因为我们希望确保我们的投票得到计算,并且它没有改变。

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

作为回顾,当我投票时,我支付gas价格进行投票,当我的投票被记录时,网络上的一台计算机获得我的以太网费用。我反过来相信我的投票是永远准确记录的。

所以同样重要的是要注意,对区块链进行投票会花费以太币,但只是看到候选人名单没有。这是因为从区块链中读取数据是免费的,但写入区块链则不是。

什么是智能合约?

这就是投票过程的工作原理,但我们如何实际编写应用程序代码呢?好吧,以太坊区块链允许我们使用名为智能合约的东西在区块链上使用以太坊虚拟机(EVM)执行代码。

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

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

此外,他们被称为智能合约,因为他们代表契约或协议。在我们的投票dApp的情况下,这是一项协议,我的投票将被计算,其他投票只计算一次,并且投票最多的候选人实际上将赢得选举。

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值