以太坊开发完整去中心化应用 —— 区块链投票系统

第一节 课程概述

本课程面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 —— 区块链投票系统。

ethereum logo

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

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

前序知识要求

为了顺利完成本课程,最好对以下技术已经有一些基本了解:

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

课程的所有代码均已在Ubuntu(Trusty、Xenial)和 macOS 上测试过。

第二节 课程简介

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

所谓去中心化应用(DApp:Dcentralized Application),就是一个不存在中心服务器 的应用。在网络中成百上千的电脑上,都可以运行该应用的副本,这使得它几乎不可能 出现宕机的情况。

基于区块链的投票是完全去中心化的,因此无须任何中心化机构的存在。

第三节 开发迭代

本课程将涵盖应用开发的整个过程,我们将通过三次迭代来渐进地引入区块链应用 开发所涉及的相关概念、语言和工具:

voting dapp iteration

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

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

之所以选择投票作为我们的第一个区块链应用,是因为集体决策 —— 尤其是投票机制 —— 是以太坊的 一个核心的价值主张。

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

第四节 初识区块链

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

本质上,区块链首先就是一个分布式(Distributed)数据库,这个数据库维护了一个不断增长的记录列表。 现在,让我们对数据进行批量(batch)存储,比如每批 100 行,并将各存储批次连接起来,是不是就像一条链?

在区块链里,多个数据记录组成的批次就被称为块(block),块里的每一行数据记录就被称为交易(transaction):

basic blockchain

最开始的那个块,通常被称为创世块(genesis block),它不指向任何其他块。

不可篡改性

区块链的一个显著特点是,数据一旦写入链中,就不可篡改重写。

在传统的关系型数据库中,你可以很容易地更新一条数据记录。但是,在区块链中,一旦数据写入就无法 再更新了 —— 因此,区块链是一直增长的。

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

这首先得益于哈希(Hash)函数 —— 如果你还没接触过哈希函数,不妨将它视为一个数字指纹的计算函数: 输入任意长度的内容,输出定长的码流(指纹)。哈希函数的一个重要特性就是,输入的任何一点微小变化,都会 导致输出的改变。因此可以将哈希值作为内容的指纹来使用。 你可以点击这里进一步了解哈希函数。

由于区块链里的每个块都存储有前一个块内容的哈希值,因此如果有任何块的内容被篡改,被篡改的块之后 所有块的哈希值也会随之改变,这样我们就很容易检测出区块链的各块是否被篡改了。

去中心化的挑战

一旦完全去中心化,在网络上就会存在大量的区块链副本(即:全节点),很多事情都会变得比之前中心化 应用环境复杂的多,例如:

  • 如何保证所有副本都已同步到最新状态?
  • 如何保证所有交易都被广播到所有运行和维护区块链副本的节点计算机上?
  • 如何防止恶意参与者篡改区块链
  • ......

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

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

理解去中心化应用架构的最好方法,就是将它与熟悉的Client/Server架构进行对比。如果你是一个web开发者, 应该对下图很了解,这是一个典型的Client/Server架构:

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

用户通过客户端(Client)与 web 应用(Server)进行交互。典型的客户端包括浏览器、命令行工具(curlwget等)、 或者是API访问代码。注意在这种架构中,总是存在一个(或一组)中心化的 web 服务器,所有的客户端都需要 与这一(组)服务器进行交互。当一个客户端向服务器发出请求时,服务器处理该请求,与数据库/缓存进行交互, 读/写/更新数据库,然后向客户端返回响应。

这是我们熟悉的中心化架构。在下一节,我们将会看到基于区块链的去中心化架构的一些显著区别。

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

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

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

在一个理想的去中心化环境中,每个想要跟DApp交互的人,都需要在他们的计算机或手机上面运行 一个的完整区块链节点 —— 简言之,每个人都运行一个全节点。这意味着,在能够真正使用一个 去中心化应用之前,用户不得不下载整个区块链。

不过我们并非生活在一个乌托邦里,期待每个用户都先运行一个全节点,然后再使用你的应用是不现实的。 但是去中心化背后的核心思想,就是不依赖于中心化的服务器。所以,区块链社区已经出现了 一些解决方案,例如提供公共区块链节点的Infura, 以及浏览器插件Metamask等。通过这些方案, 你就不需要花费大量的硬盘、内存和时间去下载并运行完整的区块链节点,同时也可以利用去中心化 的优点。我们将会以后的课程中对这些解决方案分别进行评测。

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

以太坊是一种区块链的实现。在以太坊网络中,众多的节点彼此连接,构成了以太坊网络:

ethereum

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

在每个以太坊全节点中,都保存有完整的区块链数据。以太坊不仅将交易数据保存在链上,编译后 的合约代码同样也保存在链上。

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

交易数据

以太坊中每笔交易都存储在区块链上。当你部署合约时,一次部署就是一笔交易。当你为候选者投票时,一次投票 又是另一笔交易。所有的这些交易都是公开的,每个人都可以看到并进行验证。这个数据永远也无法篡改。

为了确保网络中的所有节点都有着同一份数据拷贝,并且没有向数据库中写入任何无效数据,以太坊 目前使用工作量证明 (POW:Proof Of Work)算法来保证网络安全,即通过矿工挖矿(Mining)来达成共识(Consensus)—— 将数据同步到所有节点。

工作量证明不是达成共识的唯一算法,挖矿也不是区块链的唯一选择。现在,我们只需要了解,共识是指各节点 的数据实现了一致,POW只是众多用于建立共识的算法中的一种,这种算法需要通过矿工的挖矿来实现非可信环境下的 可信交易。共识是目的,POW是手段。

合约代码

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

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

编写合约代码也可以使用其他的语言,不过 Solidity是到目前为止最流行的选择。

以太坊虚拟机

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

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

JS开发库

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

我的微信:

PC端课程地址:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=cnblog1

原文地址:https://www.cnblogs.com/xuema/p/8493646.html

时间: 2024-10-30 09:09:17

以太坊开发完整去中心化应用 —— 区块链投票系统的相关文章

区块链虚拟收藏品+手机挖矿:构建去中心化的区块链会员积分系统

距离以太坊的"CryptoKitties"上线已过去了半年的时间.在这半年中各种各样的区块链宠物养成游戏层出不穷,同时人们也对区块链有了深刻的认识.从区块链宠物养成游戏中衍生而来的则是各类区块链虚拟收藏品游戏,除了那些加密宠物,还有不同展现形式的加密资产.很多服务商陆续推出了各种以"加密资产游戏+手机挖矿+积分变现"模式的全新去中心化商业应用,我们称之为"区块链会员积分系统".这类应用将区块链技术的核心理念应用到积分变现中,为企业又开辟了一种新的

以太坊 DApp 开发入门实战! 用Node.js和truffle框架搭建——区块链投票系统!

第一节 概述 面向初学者,内容涵盖以太坊开发相关的基本概念,并将手把手地教大家如何构建一个 基于以太坊的完整去中心化应用 -- 区块链投票系统. 通过学习,你将掌握: 以太坊区块链的基本知识 开发和部署以太坊合约所需的软件环境 使用高级语言(solidity)编写以太坊合约 使用NodeJS编译.部署合约并与之交互 使用Truffle框架开发分布式应用 使用控制台或网页与合约进行交互 前序知识要求 为了顺利完成,最好对以下技术已经有一些基本了解: 一种面向对象的开发语言,例如:Python,Ru

以太坊Crypto Countries加密国家火爆,区块链游戏成智能合约应用探索突破口

继加密猫(CryptoKitties)之后,以太坊上又出现了几款火爆的区块链游戏,它们是CryptoCountries,Crypto-All Stars,CryptoCelebrities和EtherBots. 这几款游戏目前的知名度还不如CryptoKitties,不过相信用不了多久,它们中的某一款肯定会比CryptoKitties更有名. 为什么这么说,因为它们是比CryptoKitties更好玩的区块链游戏,或者说是CryptoKitties的进化版.加密猫(CryptoKitties)是

【免费下载】全套最新 04区块链投票系统 视频教程+教学资料+学习课件+源代码+软件开发工具

04区块链投票系统视频教程 网盘地址: 链接:https://pan.baidu.com/s/10f26Ev\_PA3X\_grQmasd1ww 提取码:6uer 加公众号 获取更多新教程 教程目录大纲 ./04区块链投票系统 ├── 视频 │?? ├── 投票系统 (10).avi │?? ├── 投票系统 (11).avi │?? ├── 投票系统 (12).avi │?? ├── 投票系统 (13).avi │?? ├── 投票系统 (14).avi │?? ├── 投票系统 (15).a

以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售商品,买家可以自由地购物: 去中心化: 和淘宝或eBay不同,我们把所有的商业逻辑和核心数据都放在以太坊区块链上,这使 得它成为一个完全去中心化的应用.和淘宝这样中心化的电商平台相比,一个去中心化的P2P电商应用显然有其独特的价值--至少你不用担心被平台封账户了. IPFS: 在以太坊上存储用于商品

中心化与去中心化,BDEX或将终结交易所世纪之争

数字资产交易所领域一直有一个世纪之争---中心化,还是去中心化? 都说币圈一天,世间一年.币圈一个小小的举动,就有可能在你不经意之间掀起一番巨浪,或者直接迎来一个时代的变革.那么,去中心化跨链交易所BDEX的横空出世,圈内如何评判,看好还是看空?它是否会终结中心化与去中心化的世纪之争?我们从以下几个方面聊起: 一.去中心化---区块链技术的最大特征之一提到区块链,相信90%以上的人首先想到的就是去中心化这一关键词.区块链的本质就是一个去中心化的分布式账本或数据库,它依靠遍布全球的全节点运行,每个

以太坊去中心化淘宝智能合约案例

篇文章我们来介绍一个简易的区块链电商系统的核心功能,10多年来,我们习惯了淘宝的电商模式,淘宝为电商在中国普及做出了突出贡献,值得肯定,也完成了历史使命. 淘宝模式的核心是什么? 免费是一方面,我认为最核心的是解决了网上交易买卖家的信任问题,通过支付宝作为资金中介,使买卖家可以放心的交易. 但是,淘宝迅速崛起为巨头后,交易环节出现了很多不好的现象:刷信誉.巨大经济利益带来的内部腐败等等.因此,淘宝虽然成为了电商巨头,但是却没有真正的解决电商产业的信誉问题.这个问题其实不是淘宝特有,是一种社会现象

区块链去中心化技术开发场外OTC法币点对点系统开发有限公司

区块链去中心化技术开发场外OTC法币点对点系统开发法币交易所允许用户将法币转换为数字资产,由于涉及当地的银监法规,一般法币交易所可以交易的法币种类比较有限,目前全球共有23家数字交易所开通法币交易且有交易额产生.法币交易所可分为两种: 一种是场内交易所如Coinbase, K网等,场内交易所是指可以直接通过或者银行转账从交易所购买数字资产的交易方式.数字资产交易所开发公司,数字资产点对点交易系统定制开发 第二种被称为场外交易所,包括火币网,OTCBTC, Gate等.场外交易所是用户通过交易所撮

我们开发了一个去中心化虚拟互联网,请评测。

经过40天的努力,新的去中化虚拟互联网DVPN,中文名字昆仑网发布了. 在这个网络中,网络中的基础架构最主要体现在如下几个版块: 1.实现P2P域名系统,域名可以无阻碍使用任何文字和后缀,域名实现和传统域名并用,不发生冲突,同一个网站,可以在两个网中同时运行.:(a.传统互联网上所有的域名都可以再注册一遍,也可以是单词,也可以是一句话:b.秒杀花生壳) 2.实现P2P远程代理功能.既我能上这个网,我邀请你,你能通过我上这个网:(这个是一个非常个性化的代理上网方式,比如你有亲人和朋友在国外,你就可