主页 > imtoken钱包收款地址 > 适合区块链入门学习的以太坊开发教程Solidity、DApp、智能合约

适合区块链入门学习的以太坊开发教程Solidity、DApp、智能合约

imtoken钱包收款地址 2024-01-26 05:09:46

第一节课程概述

本课程针对初学者。 它涵盖了与以太坊开发相关的基本概念,并将教您如何构建一个完整的基于以太坊的去中心化应用——区块链投票系统。

以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发_图解以太坊智能合约

通过本课程的学习,您将掌握:

以太坊区块链基础知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译、部署和交互合约 使用Truffle框架开发分布式应用程序 使用控制台或者网页与合约交互

预购知识要求

要成功完成本课程,最好对以下技术有一些基本了解:

面向对象的开发语言,如:Python, Ruby, Java... 前端开发语言:HTML/CSS/JavaScript Linxu命令行使用数据库的基本概念

本课程的所有代码都已在 Ubuntu(Trusty、Xenial)和 macOS 上进行了测试。

第二课简介

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

图解以太坊智能合约_以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发

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

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

第三节 开发迭代

本课程将涵盖应用程序开发的整个过程。 我们将通过三个迭代逐步介绍区块链应用开发涉及的相关概念、语言和工具:

图解以太坊智能合约_以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发

Vanilla:在第一个迭代周期中,我们没有使用任何开发框架,仅使用NodeJS进行应用开发,这有助于我们更好地理解区块链应用的核心概念。 Truffle:在第二个迭代周期,我们将使用最流行的去中心化应用开发框架Truffle进行开发。 使用开发框架可以帮助我们提高开发效率。 代币:在第三个迭代周期,我们会为投票应用引入代币(Token)——现在大家都改名通证了——都是ICO造成的。 代币是公链上不可或缺的激励机制,也是区块链应用区别于传统中心化应用的又一显着特征。

为什么选择投票应用程序作为课程项目?

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

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

第四节 认识区块链

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

以太坊solidity智能合约开发_图解以太坊智能合约_siteblockvalue.com 以太坊智能合约开发

从本质上讲,区块链首先是一个分布式数据库,用于维护不断增长的记录列表。 现在,让我们对数据进行批处理(batch

) 存储,比如每批100行,把每一个存储批连接起来,是不是像一个链条?

以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发_图解以太坊智能合约

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

以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发_图解以太坊智能合约

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

不变的

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

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

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

这首先归功于哈希(Hash)函数——如果你没有接触过哈希函数,不妨把它看成是数字指纹计算函数:输入任意长度的内容,输出固定长度的码流(指纹) ) 。 哈希函数的一个重要特性是输入的任何微小变化都会导致输出发生变化。 散列值因此可以用作内容的指纹。 您可以在此处了解有关哈希函数的更多信息。

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

权力下放的挑战

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

我如何保证所有副本都是最新的? 如何保证所有交易都广播到所有运行和维护区块链副本的节点计算机? 如何防止恶意行为者篡改区块链……

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

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

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

客户端/服务器架构:

以太坊solidity智能合约开发_siteblockvalue.com 以太坊智能合约开发_图解以太坊智能合约

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

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

这就是我们熟悉的中心化架构。 在下一节中,我们将研究基于区块链的去中心化架构之间的一些显着差异。

第 6 节 去中心化架构——节点彼此平等

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

以太坊solidity智能合约开发_图解以太坊智能合约_siteblockvalue.com 以太坊智能合约开发

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

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

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

第七节以太坊——世界计算机

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

siteblockvalue.com 以太坊智能合约开发_以太坊solidity智能合约开发_图解以太坊智能合约

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

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

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

交易数据

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

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

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

合约代码

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

在数据库层面,区块链的作用是存储交易数据。 那么投票候选人或者检索投票结果的逻辑在哪里?在以太坊世界中,你可以使用

坚固性

编写业务逻辑/应用代码的语言(即合约:Contract),然后将合约代码编译成以太坊字节码,并将字节码部署到区块链:

siteblockvalue.com 以太坊智能合约开发_以太坊solidity智能合约开发_图解以太坊智能合约

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

以太坊虚拟机

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

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

JS开发库

为了方便构建基于web的DApps,以太坊还提供了一个非常方便的JavaScript库

web3.js

,它封装了以太坊节点的API协议,让开发者可以轻松连接到区块链节点,而无需编写繁琐的RPC协议包。 因此,我们可以在常用的JS框架(如reactjs、angularjs等)中直接引入这个库来构建去中心化应用:

siteblockvalue.com 以太坊智能合约开发_图解以太坊智能合约_以太坊solidity智能合约开发

课程地址: