主页 > imtoken钱包安卓版下载步骤 > 在以太坊上开发 DApp 应用程序的介绍性区块链技术教程

在以太坊上开发 DApp 应用程序的介绍性区块链技术教程

编辑推荐:

文章主要以投票应用为引子以太坊用什么软件,介绍区块链开发的相关知识,包括去中心化应用架构、以太坊、交易数据等,希望对大家有所帮助。

本文来自cnblogs,火龙果软件Luca编辑推荐。

概述

对于初学者,首先要了解以太坊开发相关的基本概念。

以太坊矿机软件_以太坊用什么软件_以太坊挖矿软件官网

学习以太坊开发的通用前置知识要求,最好对以下技术有一些基本的了解:

一种面向对象的开发语言,例如:Python、Ruby、Java……

前端开发语言:HTML/CSS/JavaScript

Linxu命令行的使用

数据库基本概念

项目介绍

我们构建了一个去中心化(Decentralized)的投票应用。 通过这个投票应用程序,用户可以在去信任的分布式环境中为特定候选人投票,每一次投票都将记录在区块链上:

以太坊用什么软件_以太坊矿机软件_以太坊挖矿软件官网

所谓去中心化应用(DApp:Dcentralized Application)就是没有中央服务器的应用。 应用程序的副本可以在网络中的成百上千台计算机上运行,​​因此几乎不可能出现停机。

基于区块链的投票是完全去中心化的,因此不需要任何中心化的权力。

投票被选为我们的第一个区块链应用程序,因为集体决策——尤其是投票——是以太坊的核心价值主张。

另一个原因是投票是很多复杂的去中心化应用的基础构建块,所以我们选择了投票应用作为学习区块链应用开发的第一个项目。

了解区块链

如果你熟悉关系数据库,你应该知道一个数据表可以包含很多行数据记录。 例如,下面的数据表包含6条交易记录:

以太坊用什么软件_以太坊矿机软件_以太坊挖矿软件官网

从本质上讲,区块链首先是一个分布式数据库,用于维护不断增长的记录列表。 现在,我们把数据分批存储起来,比如说每批存储 100 行,然后将存储的批次连接起来,这不就像一个链条吗?

以太坊用什么软件_以太坊挖矿软件官网_以太坊矿机软件

在区块链中,一批多条数据记录称为一个区块,一个区块中的每一行数据记录称为一个交易:

以太坊矿机软件_以太坊挖矿软件官网_以太坊用什么软件

第一个块,通常称为创世块,不指向任何其他块。

不变的

区块链的一个显着特点是数据一旦写入链中,就无法被篡改和改写。

在传统的关系数据库中,您可以轻松地更新一条数据记录。 然而,在区块链中,数据一旦写入,就无法更新——因此,区块链一直在增长。

那么,区块链是如何实现数据不可篡改的特性的呢?

这首先得益于散列(Hash)函数——如果你没有接触过散列函数,不妨把它当做数字指纹计算函数:输入任意长度的内容,输出固定长度的码流(指纹) . 哈希函数的一个重要特性是输入的任何微小变化都会导致输出发生变化。 散列值因此可以用作内容的指纹。

由于区块链中的每个区块都存储了前一个区块内容的哈希值,如果任何一个区块的内容被篡改,那么被篡改区块之后的所有区块的哈希值也会随之发生变化,所以我们是易于检测区块链的每个区块是否被篡改。

权力下放的挑战

一旦完全去中心化,网络上就会有大量的区块链副本(即:全节点),很多东西会变得比以前的中心化应用环境更加复杂,比如:

我如何保证所有副本都是最新的?

如何保证所有交易都广播到所有运行和维护区块链副本的节点计算机?

如何防止恶意行为者篡改区块链

……

通过与经典的C/S架构对比,我们将逐步了解去中心化应用的核心思想,掌握如何在以太坊上构建去中心化应用。

C/S架构以服务器为中心

理解去中心化应用程序架构的最佳方式是将其与熟悉的客户端/服务器架构进行比较。 如果你是一名 Web 开发人员,你应该熟悉下图,这是一个典型的 Client/Server 架构:

以太坊矿机软件_以太坊用什么软件_以太坊挖矿软件官网

典型的Web应用的服务器端通常由Java、Ruby、Python等语言实现。 前端代码由HTML/CSS/JavaScript实现。 然后将整个应用程序托管在云中,例如 AWS、Google Cloud Platform、Heroku...,或者将其放在您租用的 VPS 主机上。

用户通过客户端(Client)与网络应用(Server)进行交互。 典型的客户端包括浏览器、命令行工具(curl、wget 等)或 API 访问代码。 请注意,在此架构中,始终存在一个(或一组)集中式 Web 服务器,所有客户端都需要与这(一组)服务器进行交互。 当客户端向服务器发出请求时,服务器处理请求,与数据库/缓存交互以太坊用什么软件,读取/写入/更新数据库,并返回响应给客户端。

这就是我们熟悉的中心化架构。

去中心化架构——节点之间是平等的

下图展示了基于以太坊的去中心化应用架构:

以太坊矿机软件_以太坊用什么软件_以太坊挖矿软件官网

您应该已经注意到,每个客户端(浏览器)都与自己的节点应用程序实例进行交互,而不是向中央服务器请求服务。

在理想的去中心化环境中,每个想要与 DApp 交互的人都需要在他们的计算机或手机上运行一个完整的区块链节点——简而言之,每个人都运行一个完整的节点。 这意味着用户必须先下载整个区块链才能真正使用去中心化应用程序。

但是我们并不是生活在乌托邦中,期望每个用户都先运行一个全节点然后再使用你的应用是不现实的。 但去中心化背后的核心思想是不依赖中心化服务器。 因此,区块链社区出现了一些解决方案,比如提供公链节点的Infura,以及浏览器插件Metamask等。通过这些解决方案,你不需要花费大量的硬盘、内存和下载并运行一个完整的区块链节点的时间,您还可以利用去中心化的优势。 我们将在以后的课程中单独评估这些解决方案中的每一个。

以太坊——世界计算机

以太坊是区块链的一种实现。 在以太坊网络中,许多节点相互连接形成以太坊网络:

以太坊矿机软件_以太坊用什么软件_以太坊挖矿软件官网

以太坊节点软件提供两大核心功能:数据存储和合约代码执行。

在每个以太坊全节点中,都存储着完整的区块链数据。 以太坊不仅将交易数据保存在链上,还将编译好的合约代码保存在链上。

在以太坊的全节点中,还提供了一个虚拟机来执行合约代码。

交易数据

以太坊中的每笔交易都存储在区块链上。 当您部署合约时,部署就是一个事务。 当您投票给候选人时,一票就是另一笔交易。 所有这些交易都是公开的,每个人都可以看到和验证。 这些数据永远不会被篡改。

为了保证网络中所有节点拥有相同的数据副本,不向数据库写入无效数据,以太坊目前采用工作量证明(POW:Proof Of Work)算法来保证网络安全,即通过矿工挖矿(Mining)达成共识(Consensus)——将数据同步到所有节点。

工作量证明不是达成共识的唯一算法,挖掘也不是区块链的唯一选择。 现在,我们只需要明白,共识就是每个节点的数据是一致的,而POW只是用来建立共识的众多算法中的一种。 该算法需要矿工挖矿才能实现可靠的信函交易。 共识是目的,POW是手段。

合约代码

以太坊不仅可以在链上存储交易数据,还可以在链上存储合约代码。

在数据库层面,区块链的作用是存储交易数据。 那么投票候选人或检索投票结果的逻辑在哪里? 在以太坊世界中,可以使用Solidity语言编写业务逻辑/应用代码(即合约:Contract),然后将合约代码编译成以太坊字节码,并将字节码部署到区块链上:

以太坊用什么软件_以太坊挖矿软件官网_以太坊矿机软件

其他语言也可用于编写合约代码,但 Solidity 是迄今为止最受欢迎的选择。

以太坊虚拟机

以太坊区块链不仅存储数据和代码,每个节点还包含一个虚拟机(EVM:Ethereum Virtual Machine)来执行合约代码——听起来像一个计算机操作系统。

其实这就是以太坊区别于比特币(Bitcoin)的核心点:虚拟机的存在让区块链进入了2.0时代,也让区块链第一次成为了对应用开发者友好的平台。 .

JS开发库

为了方便构建基于Web的DApps,以太坊还提供了一个非常方便的JavaScript库web3.js,它封装了以太坊节点的API协议,让开发者可以方便的连接到区块链节点,而无需编写繁琐的RPC协议包裹。 因此,我们可以在常用的JS框架(如reactjs、angularjs等)中直接引入这个库来构建去中心化应用:

以太坊用什么软件_以太坊挖矿软件官网_以太坊矿机软件