零基础学区块链和以太坊开发

课程介绍

从区块链和以太坊的概念入手,梯次配置、逐层深入,逐渐学习 Solidity 语言、智能合约以及以太坊环境的搭建、在私有链上挖矿、Python 语言、Web3.py、PyQt5 等技术,最后会介绍两个实战项目:基于 PyQt5 和 Web3.py 的以太坊钱包和在以太坊上发布自己的数字货币,让读者从技术的角度对区块链和以太坊有更深入的理解,最后,祝大家学习愉快。

作者介绍

李宁,欧瑞科技创始人 & CEO,技术狂热分子,IT 畅销书作者,CSDN 特约讲师、CSDN 博客专家,拥有近 20 年软件开发和培训经验。主要研究领域包括 Python、深度学习、数据分析、区块链、Android、Java 等。曾出版超过 30 本 IT 畅销书,主要包括《Python 从菜鸟到高手》、《Swift 权威指南》、《Android 开发指南》等。

作者在 GitChat 上的个人主页信息详见这里。

  • 小程序与云开发实战 36 讲
  • Python 爬虫和数据分析实战

课程内容

导读:课程概要

逐渐错失的比特币

自从比特币、以太坊、区块链被一一引爆以来,很多人觉得自己从来没有离财富如此之近。制作代币→ICO→募集资金→实现财富自由→成为高富帅→迎娶白富美,相信这是很多人做梦都想实现的,不过现实却很残酷。当这些技术和概念被炒起来时,只说明一点:你没机会了。因为只有大多数人都知道的东西才会被炒起来,就像全球有至少一半人都知道某个地方有大量金矿,那么对于一无资金、二无人力的你来说,是绝无可能抢在其他人前面挖到大量的金子的。

当比特币刚开始发行的时候,只有十几美元,那时候很多人看不明白,认为是骗子。现在每个比特币价值超过 8000 美元(对,你没看错,是美元),与北京一平米房子均价相当。所以现在购买比特币,通过炒币挣钱的可能性越来越小了,而且风险极大,关键是也没那么多钱。总之,比特币的机会现在已经彻底错过了。

零基础学区块链和以太坊开发_第1张图片

不过大家也不必过于灰心,“风口与猪”总会不期而遇的,称为第二代区块链的以太坊正在向我们走来。之所以称为第二代,是指以太坊是可以编程的,也就是说,通过 Solidity 语言可以很容易实现自己的代币,当然,这些代币都必须发布在以太坊上。我们还是有机会 ICO 的,不过目前中国和其他很多政府对数字货币 ICO 监管很严,弄不好在实现财富自由之前,可能就会挂掉。

区块链已来临

区块链之所以现在仍然非常热,主要是因为区块链并不等于比特币、以太(以太坊的数字货币)和其他数字货币,区块链是完全独立存在的一种技术,可以应用于很多其他的领域。因为区块链具有很多特性,非常适合于嫁接到其他领域。例如,区块链拥有的去中心化思想可以应用于任何企图摆脱过度依赖中心化服务器的领域。例如,文件存储就属于这个领域。很久以前,文件备份的方式都是集中存储在单一的服务器上,随后出现了网盘(百度网盘、360 网盘等),到后来的云存储(阿里云、腾讯云等)。不管是什么方式,这都是集中存储,一旦云服务挂了,所有的一切都灰飞烟灭。现在网盘能用而且免费的就剩百度云一家了,这就是个很好的例子。XX 云曾说,打败你的可能不是技术,而是一纸文件(说多了全是泪)。

不过基于区块链的存储解决方案就不一样了,由于没有中心服务器,封是不可能的,除非彻底禁止上网,否则任何人都对这个架设在区块链上的网盘毫无办法。因为网盘中的文件会通过一些特定算法分散在成千上万的区块链节点上,而且即使有一部分节点挂掉,其文件也不会丢失(当然,挂掉太多不行)。这有点类似现在的 P2P,我们可以看到,基于 P2P 技术下载的资源通常是无法彻底封死的。当然,基于区块链的存储解决方案的运作方式与以太坊类似,上传文件是需要付出代价的,如 FileCoin,不过利用自己的机器为整个网络存储部分文件,也会得到奖励,可以实现真正的人人为我、我为人人的互联网精神。

区块链的另外一个特性是不可篡改,区块链相当于分布式数据库。但和传统的数据库不同的是区块链只允许增加,不允许修改和删除数据。这种特性可以用到任何需要签名验证的领域,如房产证明、结婚证明、个人信用等,一旦信息存入区块链,将伴随自己的一生,而且只能增加,不能修改。现在已经有一些这样的应用上线,例如,有一款小程序,允许上传一些协议,并经过数字签名,永久保存在以太坊上,每次存储费用 3 元起,主要用于支付在以太坊上的存储费用。当然,保存的信息越多,费用越高。

DApp——下一次革命

前面列举了一些基于区块链的应用,这些应用可以统称为 DApp,也就是去中心化应用,目前很多 DApp 是运行在以太坊上的。由于区块链底层的算法和协议很复杂,不是一般人能掌握的,所以 V 神弄出了一个以太坊,基本上就是封装了底层算法和协议的一个平台,通过 Solidity 语言(相当于 Office 中的 VBA)作为接口,让普通程序员与区块链底层交互。通过这种封装,开发 DApp 的程序员就只需要了解 Solidity 语言和客户端编程技术了(如 Web3.js、Web3.py 等),所以一个 DApp 通常是由若干个 Solidity 程序(智能合约程序)和一个或多个客户端组成的。客户端需要通过以太坊节点调用以太坊上的智能合约,而智能合约可以接收客户端发过来的数据,将其永久保存在区块链上。至于如果将这些数据分别保存到其他的节点,如果对数据进行切块划分,共识机制、维护以太等电子货币等工作,就统统交给以太坊来完成了。

零基础学区块链和以太坊开发_第2张图片

在前面说了一大堆,也给出了一些例子,可能有很多读者会问,那么机会在哪里呢?对,就是 DApp,这也被称为第三代区块链技术,而只有通过 DApp,才能形成一个完整的生态。就像支付宝,如果只是阿里自己用,那么是形成不了生态的,只有将支付宝接口开发,无论是线下,还是线上,都可以使用支付宝,从而出现了大量的 Android、iOS、Web 等形式的客户端,以及扫描支付,从而形成了一个支付网络,也就是一个支付生态,只有这样整个系统才会进入良性循环。

很多人将 DApp 比喻成互联网后的下一次革命,其实不管 DApp 是不是下一次革命,都无法阻挡 DApp 朝我们走来。可能现在很多读者还不了解 DApp,以及如何开发 DApp,这就像数年前比特币只有十几美元一样。这次我可要先抓住机会了,深入研究一下区块链、DApp 等技术,因为机会总会在人少的时候才有意义。人多那叫打酱油,打酱油的人通常被尊称为“吃瓜群众”。

零基础学区块链和以太坊开发_第3张图片

本课程的目的

由于 DApp 涉及到的技术比较多,所以后面我们推出一系列文章介绍如何开发各种类型的 DApp(如基于 DApp 的云笔记),但在学习开发 DApp 之前,先要了解一下区块链、以太坊这些概念,以及学会搭建以太坊私有区块链,当然,还要学习 Solidity 语言,以及至少一种客户端编程语言,如 Python。这就是本系列文章的目的,带领大家进入区块链和以太坊的大门,以后财富自由、高富帅、白富美就靠区块链了。

第01课:区块链相关概念(1)

本文先介绍一下区块链以及相关技术的概念,因为在正式讲解区块链、以太坊、智能合约等技术之前,必须对相关的概念有所了解,否则看到智能合约以及其他相关程序,即使每行代码都知道是什么意思,但却不知道为什么要这样写,运行结果代表什么,甚至不知道如何运行,就像做英文阅读理解,光认识英文单词是不够的,必须要对文章的背景和文化比较了解,否则就算所有的英文单词都认识,可能也无法正确理解文章的意思。因此,我们首先要做的就是要了解区块链以及相关技术的文化和背景,然后才能往下进行。

DApp(去中心化应用)

DApp 的概念

DApp 是一种互联网应用程序,这种应用程序的后台运行在去中心化的点对点网络中,在网络中任何节点都无法完全控制整个 DApp。

DApp 技术的主要卖点之一,是其可容纳无限数量的参与者,而且 DApp 可以用于任何用户,其中比特币就是一个非常典型的应用。

任何类型的应用程序都需要存储数据,DApp 也不例外,根据不同 DApp 的不同特性,会使用多种数据结构存储数据,例如,比特币使用了区块链存储数据。

DApp 的挑战

DApp 网络中的节点可以是任何连入互联网的计算设备(不光是计算机,手机、智能手表、智能电视、甚至是无人驾驶汽车都有可能成为 DApp 网络中的节点),也就是说这些节点可能处于世界的任何一个角落,以任何形态存在,同时,所有的节点都共享同样的数据,例如,数据都会保持中区块链中。因此,DApp 面临的一个非常大的挑战就是检测那些非法的数据修改,并阻止这些非法修改生效,也就是如何阻止对 DApp 网络的攻击。

如何应对挑战

通过经济惩罚让攻击变得毫无意义,使用 PoW(工作量证明,Proof of Work),也就是工作量证明。

PoW(工作量证明)

前面提到一个概念:PoW,那么什么是 PoW 呢?

PoW 就是在修改区块链之前先证明你没有对 DApp 网络进行攻击,那么怎么证明呢?那么就是在本地先完成一项艰巨的任务,然后将完成的结果上传到 DApp 网络进行验证。这项艰巨的任务的条件:没有可以投机取巧的方式完成,必须用最原始、最暴力的方式一点一点完成,完全是拼体力。

那么可能有很多同学会问,完成任务和阻止攻击有什么关系呢?这就涉及到一个经济学的概念了:经济惩罚。大概的意思就是既然无法阻止攻击,那么就让攻击付出惨重的代价。

完成 DApp 网络交给你的任务是要付出代价的,通常的任务是要解决计算难题,这种解决计算难题的过程被称为挖矿,挖矿的概念本文后面会详细介绍。

下面给出一个 PoW 的具体例子。

现在给定的一个基本的字符串“Hello, world!”,我们的任务是,可以在这个字符串后面添加一个叫做 nonce 的整数值,对变更后(添加 nonce)的字符串进行 SHA256 哈希运算,如果得到的哈希结果(以 16 进制的形式表示)是以“0000”开头的,则验证通过。为了达到这个工作量证明的目标,我们需要不停的变化 nonce 值,对得到的新字符串进行 SHA256 哈希运算。按照这个规则,我们需要经过 4251 次计算才能找到恰好前4位为0的哈希散列。会发现,随着0的个数增加,计算难度会以指数级增加,而且并没有算法可以一下子算出结果,但结果却是非常好验证的,所以要完成这项任务,就需要非常强的算力,也就是说,要想搞定这个任务,需要自己花钱买一大堆高性能的计算机。这样一来,而且现在区块链分派的任务越来越艰巨,计算量越来越大,如果是以营利为目的的攻击,可能为了价值几百万的比特币,你要花几千万去购买计算机来完成这项计算任务,完全是得不偿失。所以就很少有人去做这总攻击,因为攻击成本会远大于收益。

PoS(股权证明)

区块链的最大特点就是概念多,这不,又出来了一个 PoS,这又是什么东东呢?

PoS(Proof of Stake,股权证明),这又是什么意思呢?简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明 POS 模式下,有一个名词叫币龄,每个币每天产生1币龄。比如你持有 100 个币,总共持有了 30 天,那么,此时你的币龄就为 3000,此时,如果你发现了一个 POS 区块,你的币龄就会被清空为 0。每被清空 365 币龄,你将会从区块中获得 0.05 个币的利息(可理解为年利率 5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41 个币,这下就很有意思了,持币有利息,非常好!

需要注意的是,5% 的年利率仅仅是作者举例,并非每个 POS 模式的币种都是 5%,比如点点币 PPCoin 就是 1% 年利率。其实用 PoS 防止攻击的方式与很多网站限制新用户权限类似,例如,要想发帖子,必须是注册 24 小时以上的用户,而且还必须要有网站特有的电子货币(如金币),如果没有该怎么办呢?花钱买,或共享资源挣金币啊!在这一定程度上也防止了攻击者大量注册网站用户以及在网站乱发帖子的行为。

51% 攻击

那么可能有同学会想对策了,由于区块链分配的任务难易程度不同,我不用那么大的计算量,少买点计算机,是否可以找到一个盈利的平衡点呢?其实一开始我也是这么想的,但根据 PoW 算法机制,如果你的计算量不够大,是无法控制区块链的走向的,也就是说,即使你投入了大量的成本用于完成任务,也不能保证自己成功。这就像花了数百万就购买彩票,你只能保证比只花两元钱购买一张彩票的人的中奖几率要大,但并不能保证一定能中奖,花几十万上百万就中了袋洗衣粉,花 2 元中 500 万的也大有人在。彩票奖金的设置永远要远小于购买所有彩票的成本,所以你是无法采用穷举的方式保证 100% 中奖率的。区块链也是一样,即使你的算力非常强,也不能保证 100% 成功,只是成功的可能性更大而已。

前面说过,谁的算力多,谁最先解决问题的概率就越大。当掌握超过全网一半算力时,从概率上就能控制网络中链的走向,这也是所谓 51% 攻击。这也是区块链的弱点,如果谁掌握了超过全网一半的算力,谁就可以主导区块链网络,也就是说,区块链并非 100% 安全,但如果要蓄意攻击区块链网络,需要付出很大的代价,但从理论上来说,区块链可能会受到攻击。

DAO(去中心化自治组织)

DAO(Decentralized Autonomous Organization,去中心化自治组织)是一种通过智能合约将个体与个体、个人与组织、或组织与组织联系在一起的新型组织形式。智能合约是在以太坊上运行的程序,关于智能合约和以太坊我们后面会讨论。

在展开讨论 DAO 之前,让我们先来看看传统的组织。

社会生活中普遍存在着各种形式的组织,如公司、政府、军队、学校、行业协会等等,不胜枚举。在组织中,财务制度和人事制度是维持组织运行极其重要的两个方面,传统组织的这些制度都由法律保障,并强制执行。法律保障分为两步:

  • 签订合约/制定规则;
  • 法院判决并强制执行。

正是这些可强制执行的制度将不同的个体、实体联系在一起,使得组织成为一个功能有机体。

智能合约是以太坊(这两个概念在以后会介绍)上最重要的概念。顾名思义,智能合约是一个合约;而不同于传统的合约,智能合约自带强制执行体系,也就是可以看成是自带法院的合约。智能合约的这一特性来自于它的固有本质——它是一段计算机代码,这些代码是计算机的语言,特定智能合约的建立者就是使用这些语言描述、规定了合约的内容。

通俗地讲,可以把智能合约想象成以太坊平台上的代理机器人,这个机器人的所有行为都是可预测的,因为它的行为方式都是合约创建的时候设立好的。智能合约的用途非常广泛,其中一个就是 DAO。设想一个组织创立的时候,将资金交给(智能合约)机器人保管,并且告诉机器人哪些人是组织的成员,另外合约的规则还可以包括:什么条件下可以使用资金、增加/删除成员、修改 DAO 规则、解散 DAO 等。这样,DAO 就将各个的成员从财务上、人事上捆绑在一起,形成一个组织。

DAO 相比与传统的组织,以下优势非常明显,我们以公司为例:

  • 创立一个 DAO 比注册成立公司快得多,并且费用低得多;
  • 运行成本低,财务和出纳人员不再是必需,也不用与开户银行不定期地对账;
  • DAO 存在于互联网,对成员所在同一地域的要求降低;
  • 如果成员之间出现争议,实施强制执行的成本比司法程序低得多。

在以太坊上创建 DAO 尚无先例,如何设置 DAO 的规则,使得组织更有效地运行也还没有可借鉴的历史经验,我们只能探索前行。以下为(bitfarm.io)比特坊 DAO 初步构思:

  • 将比特坊所有资金转换成以太,注入 DAO,以太是以太坊的内部货币,我们后面再详细介绍。
  • 所有成员均享 DAO 股权,即每位成员对 DAO 中的资产享有均等收益权。
  • 为提升组织运行效率,DAO 设运营人,运营人单独支配资金的上限为总资金池的 5%。
  • 新加入成员,需要 1/2(含)以上现有成员的同意,并且支付该新成员对应的资金份额到 DAO。
  • 删除某位成员,需 2/3(含)以上现有成员同意。
  • 任何情况下,均不得没收、转移成员所属的资金份额,即使某位成员被投票除名,属于其的资金份额一同撤离。
  • 除特定代码除外,修改 DAO 原有代码,需 2/3(含)成员同意;2/3(含)以上成员同意可解散 DAO,并按股份分配资金。
第02课:区块链相关概念(2)
第03课:Solidity 语言与智能合约
第04课:在以太坊测试环境(Testrpc)部署智能合约
第05课:通过以太坊节点(Geth)挖矿
第06课:Python 语言入门
第07课:Web3.py 详解
第08课:PyQt5 入门
第09课:在以太坊上发布自己的数字货币(代币)
第10课:用 PyQt5 和 Web3.py 实现以太坊钱包

阅读全文: http://gitbook.cn/gitchat/column/5ae14aa2d7ab44391b5a00df

你可能感兴趣的:(零基础学区块链和以太坊开发)