首页>参考读物>计算机科学与技术>软件与程序设计

从零开始自己动手写区块链
作者 : 裴尧尧 著
出版日期 : 2018-11-12
ISBN : 978-7-111-61237-7
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 284
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书是一本区块链底层开发的入门图书,全书围绕作者开发的区块链模拟器,从原理和程序实现两个方面介绍了区块链开发技术。本书共7章,书中首先通过一个数字货币发行的故事,介绍了区块链的专业术语和工作原理;然后结合区块链模拟器的程序实现过程,介绍了区块链的关键技术细节。毫不夸张地讲,本书是一本手把手带领读者学习区块链开发的图书。
本书内容通俗易懂,讲解犹如庖丁解牛,非常适合区块链开发人员作为自己的第一本区块链技术读物,也适合其他区块链爱好者作为兴趣读物。另外,本书还适合作为区块链培训班的教材,以及需要了解区块链知识的相关领导干部的学习指导书。

图书前言

为何写作这本书
  身边的很多朋友听说笔者了解区块链,便向笔者咨询数字货币(如比特币)是否值得购买或投资。于是笔者做了一个简单的测试,并尝试和有过交流的人发起一些关于区块链的讨论。从这些讨论中得出了两个结论:
* 90%以上的人从不同渠道听说过区块链。
* 80%以上的人将区块链等同于比特币。
  这让笔者感到非常惊讶。区块链在社会群体中迅速传播,但是传播者和接收者却对其最基本的概念都没有弄明白,而将其等同于数字货币。这可能会让一些不法之徒有机可乘。由于笔者关注的侧重点主要是区块链的底层技术,并没有意识到原来区块链在社会生活中都已经如此火爆,看到很多人对区块链有严重的认识误区,所以萌生了写一本区块链技术图书的念头。
  还有一些朋友,虽然能够区分区块链和数字货币,知道区块链是比特币的底层技术,但对这个热门的词汇不敢从原理和技术上进行深挖,认为学习门槛过高而避而远之。这其中还包括笔者的一个从事复杂网络研究的博士生同学。区块链真的这么难学吗?抱着这个疑问笔者开展了一个粗浅的网络调查。下面便是笔者通过网络渠道了解的区块链技术在国内的发展现状,虽然不一定完全准确,但应该有一定的代表性。
* 能够真正做区块链开发的人较少,不过他们的待遇比较丰厚。
* 大量技术人员想学习区块链开发技术,或者想从事该领域的工作,但相关的学习资料还比较少。
* 有了一些区块链技术开发培训班,但价格不菲,动辄上万。
  也有一些朋友并不看好区块链的前景。这可以理解,就像早期的互联网技术出现在人们的面前时,人们也是心生疑虑或者是无感的,认为它只是一小部分人所关心的东西。而如今,互联网已经深刻地改变了人们的生活,渗透到了生活的方方面面。同样,区块链太新了,新到还没有系统的理论体系和统一的标准,所以有人不看好也是很正常的事。笔者坚信“发币”不是区块链的最终目标,未来它应该会有更多、更好的应用场景落地生根,只是当前该技术还很难普及到各行各业。可以把“发币”看做是区块链的萌芽阶段,要到成熟阶段还有很长的路要走,需要大量的技术人员投入大量的时间去研究,解决各种技术瓶颈,才会真正迎来区块链应用的大爆发。
  笔者是区块链的推崇者,被区块链完美的构思所深深折服,因此有意为区块链的发展添砖加瓦。笔者想先解决区块链学习资料匮乏的问题,写作一本通俗易懂的区块链读物。这本书既能让大多数人看懂区块链的基本原理,也能引领技术人员在较短的时间内比较轻松地掌握区块链开发的相关技术,从而跨入区块链开发的大门。希望有更多的读者能够加入区块链的学习、研究和开发实践中来,通过大家的努力来构建成熟的区块链理论体系和标准。
本书有何特色
* 本书通过通俗易懂且饶有趣味的数字货币发行故事,向读者剖析了区块链的基本原理,并穿插介绍了区块链的相关概念和术语,这大大降低了理解区块链的门槛,使得大多数人都可以理解区块链的基本原理。
* 区块链的构思是精妙的,但其较为复杂和抽象,要想透彻理解并不容易。为了让读者更好地理解它,笔者耗费大量时间绘制了近90幅与区块链相关的原理图,这必将对读者透彻地理解区块链有很大的帮助。
* 本书围绕笔者开发的区块链模拟器展开讲解,将区块链中的加密、创建交易、创建区块、区块的链接、去中心化等核心环节通过实际代码实现,让读者能够从整体上理解区块链开发的思路,并亲自动手实践区块链开发的重要环节。
* 本书中的区块链模拟器虽然只是一个初级产品,但麻雀虽小,五脏俱全,读者完全可以通过该模拟器的动态展示,直观地体验发币、挖矿、交易等数字货币发行的重要环节,从而更好地理解区块链。
* 笔者用Python语言实现了区块链模拟器的开发,这大大降低了区块链开发的学习门槛。如果你具备Python编程基础,那么可以很顺利地实现书中的案例;如果你没有Python基础,但有其他编程语言基础,那么通过阅读本书第2章的Python入门知识,也可以比较顺利地实现书中的案例。
* 笔者在讲解过程中对区块链开发的各个关键技术进行了算法归纳和程序实现,便于开发人员更加深入地理解区块链的底层技术。
* 笔者请人为本书绘制了9幅漫画插图,穿插于各章。这些漫画插图生动而形象地展示了书中的数字货币发行故事,让抽象、复杂的区块链变得形象、直观,大大提升了读者的阅读体验。
* 本书提供了QQ交流群以方便读者进行区块链技术的学习与讨论。读者不但可以在群里相互交流和学习,而且还可以提出自己阅读本书时的疑问,或者其他意见和建议,笔者都会尽力解决。
为何做区块链模拟器
  目前,区块链技术最成功的应用场景是发行数字货币,所以本书以数字货币为主题展开讲解(更准确地说是以比特币为蓝本)。比特币用户在比特币网络中创建交易、广播交易、验证交易、挖区块、将区块链接到区块链中,这一系列活动确保比特币系统的正常运行。遵照区块链技术的原理,笔者搭建了一个虚拟场景来模拟上述真实活动,这就是区块链模拟器。区块链模拟器使用者可以人为地设计任意环节,包括创建专属对等网络、添加任意数量节点、创建交易、广播交易、指定挖矿节点、修改共识机制、发动攻击等。通过这些环节,使用者可以以“上帝视角”了解区块链的工作原理,观察数据在网络中的传播,学习区块链如何抵御攻击。目前该模拟器就像一个数字货币发行机。
  区块链模拟器非常易用,实现一次共识只需要如下3行Python程序代码:
  
  >>> net = Network()
  >>> net.make_random_transactions()
  >>> net.consensus()
  
  这3行代码描述了区块链系统中的3个关键过程:第1行代码搭建了一个区块链网络;第2行代码在网络中发起了一定数量的随机交易;第3行代码用来达成共识,即由谁来获取记账权。
  区块链模拟器将枯燥的区块链原理用直观的方式呈现,它的实现过程也就是区块链的开发过程。结合区块链模拟器讲解区块链开发会更加形象、直观,可以起到更好的教学效果。本书将区块链关键环节的实现过程用算法归纳和程序代码两种方式呈现,手把手带领读者实际体验区块链的开发过程。另外,该模拟器是开源的,在使用上不存在任何限制,比如可以自由定义新的共识机制。希望后续可以不断地改进和完善该模拟器,让它能够成为区块链技术爱好者和研究者的测试工具。
为何用Python做区块链模拟器
  首先,笔者希望没有编程基础的读者也能轻松地学习和使用区块链模拟器。笔者认为Python是一门优雅、明确和简单的编程语言。Python作为一门解释型语言,在教学上的先天优势是其他编译型语言无法比拟的。它入门简单,代码可读性强,非常容易掌握。这些都为初学者学习区块链技术降低了门槛。比如之前提到,模拟器实现单次区块链的共识只需要3行Python代码。
  其次,用Python编写的区块链模拟器,其源代码的可读性很强。笔者认识一位Java程序员,和他一起讨论过区块链的技术细节。他也想通过编写区块链程序来掌握区块链的关键技术,但由于工作繁重,目前并未实现。他知道笔者用Python语言编写了开源的区块链模拟器,研读模拟器的源代码后告诉笔者,他能够读懂这些源代码。
  再次,Python语言的开源为模拟器的开源提供了基础。笔者认为,开源的Python语言和区块链模拟器,给区块链爱好者研究区块链技术带来了很大的便利。
本书包含哪些主要内容
  本书作为一本区块链开发的基础读物,除了未搭建真正的区块链对等网络外,基本上涵盖了区块链开发的一些关键技术。区块链模拟器贯穿全书讲解,模拟了现实中的对等网络,但并不具备真实性。下面简要介绍本书的主要内容。
  第1章结合区块链故事介绍了区块链的基本原理和相关术语。
  第2章介绍了区块链模拟器的设计和使用,以及Python编程入门知识。
  第3章介绍了区块链中的加密技术,包括哈希算法、椭圆曲线加密和格密码等。
  第4章介绍了区块链中的交易,包括一般交易形式的数据结构及创建、广播和验证的相关知识,以及如何自定义交易形式。
  第5章介绍了区块和区块链,包括区块的数据结构、区块头的组成和意义、梅克尔树的作用和实现、创世区块所包含的内容、区块如何链接成区块链及区块链的分类等。
  第6章介绍了区块链的去中心化共识,包括工作量证明(POW)共识算法的原理和程序实现,以及Raft协议的原理。
  第7章探讨了区块链技术的相关话题,以及笔者对区块链未来发展的展望。
本书读者对象及阅读建议
* 如果你并不从事区块链的相关工作,仅仅是想了解区块链的相关概念和原理,笔者建议你阅读本书第1章中的区块链故事和第2章中的区块链模拟器GUI的使用,这两章内容可以让你从宏观上理解区块链的相关知识。
* 如果你从事区块链的相关工作,但不从事区块链技术开发方面的工作,笔者建议你除了阅读本书第1章中的区块链故事外,还应该阅读和实践本书第2章中的内容,通过使用模拟器来消化第1章中的内容。
* 如果你以后想要从事区块链的研发工作,本书可以作为你的第一本区块链开发技术图书,它会像一个向导一样带领你在区块链开发的正确道路上前行,笔者建议你通读全书各章内容,并且要认真地研读本书源代码。
* 如果你正在从事区块链的研发工作,相信书中的内容会对你有相当的启发,而且从某种意义上来说,本书中的区块链模拟器也是你测试新算法和新技术的好工具。
* 区块链技术具有重塑很多产业的潜质,这就要求相关领导干部也要重视区块链的发展,需要提前了解和学习区块链的相关知识,而本书通俗易懂的特质非常适合他们阅读,建议这类读者精读第1、2、7章,也可略读其他章节。
本书配套资源获取方式
  本书涉及的区块链模拟器源代码文件下载网址为https://github.com/YaoyaoBae/ simchain,该模拟器的GUI游戏下载网址为https://github.com/YaoyaoBae/Blockchain-simulator- exe。另外,读者也可以在机工新阅读网站(www.cmpreading.com)上搜索到本书,然后单击“资料下载”按钮进入本书页面,再单击页面上的“配书资源”链接下载这些资料。
勘误与售后支持
  因笔者水平所限,加之写作时间较为仓促,书中可能还存在纰漏和错误之处,敬请广大读者批评指正。联系邮箱为yaoyao.bae@foxmail.com或hzbook2017@163.com。另外,读者还可以通过本书QQ交流群(区块链技术学习与讨论)进行学习和技术交流,群号为742346441。期待您的反馈意见,您的支持将是笔者前进的动力。
致谢
  感谢中国领先的区块链技术问答社区——链客!社区对笔者写作过程中的一些疑问提供了支持。社区旨在为大家提供一个直接、高效的技术交流平台,为推动中国区块链技术的发展而努力!区块链技术爱好者遇到的每一个问题链客都能做到有问有答。链客区块链技术问答社区的网址为http://liankexing.com。
  感谢WiFicoin开源项目团队!是他们带领笔者走进了区块链的底层世界。区块链是一个运营项目,而很多知识我们只有在实际参与后才能有更加深入的理解。WiFicoin开源项目为大家提供了一个低成本的参与案例,让大家见证了一个项目从启动到上市,以及不断丰富其落地生态的全过程,是一个非常适合学习者参与的项目。WiFicoin开源项目的社区网址为https://talkblock.org/,QQ交流群号为424031785。
  感谢吕博雅为本书绘制了生动有趣的漫画插图!有了这些漫画插图,使得原本一板一眼的技术书籍顿时焕发了活力,可以大大提升读者的阅读体验。
  感谢湖北工业大学土木建筑与环境学院的领导和同事!他们的支持、帮助和鼓励让笔者在面对挑战时能够勇往直前。
  感谢欧振旭编辑和其他相关编辑!本书从选题到内容,从宏观把握到细节处理,都凝聚了他们的大量劳动。
  感谢家人在长达5个月的写作过程中对笔者无条件的支持和宽容!

  裴尧尧
  于湖北工业大学

上架指导

计算机/区块链

封底文字

本书是一本区块链底层开发入门图书,全书围绕作者开发的区块链模拟器,从原理和程序实现两个方面介绍了区块链开发技术。本书共7章,书中首先通过一个数字货币发行的故事,介绍了区块链的专业术语和工作原理;然后结合区块链模拟器的程序实现过程,介绍了区块链的关键技术细节。毫不夸张地讲,本书是一本手把手带领读者学习区块链开发的图书。本书内容通俗易懂,讲解犹如庖丁解牛,非常适合区块链开发人员作为自己的第一本区块链技术读物,也适合其他区块链爱好者作为兴趣读物。另外,本书还适合作为区块链开发培训教材。对于需要了解区块链知识的相关领导干部,本书也是一本很好的学习指导书。

图书目录

前言
第1章 区块链原理简介 1
1.1 区块链简要发展史 2
1.1.1 什么是比特币 2
1.1.2 比特币与区块链的关系 2
1.2 什么是中心化 3
1.2.1 交易 3
1.2.2 数字货币 3
1.2.3 复式记账法 4
1.2.4 未消费交易输出 6
1.2.5 中心化 7
1.2.6 区块与区块链 8
1.2.7 创世区块 9
1.3 去中心化原理 11
1.3.1 分布式存储 12
1.3.2 对等网络 12
1.3.3 交易池 14
1.3.4 “挖矿” 16
1.3.5 创币交易 17
1.3.6 工作量证明 18
1.3.7 共识与共识算法 19
1.3.8 确认 20
1.3.9 诚实节点和恶意节点 20
1.3.10 区块链分叉 21
1.3.11 双重支付 24
1.3.12 虚拟机 25
1.3.13 矿机和矿池 26
1.4 遗留的问题 26
第2章 区块链模拟器及Python入门 29
2.1 区块链模拟器GUI简介 30
2.1.1 为什么写区块链模拟器 30
2.1.2 区块链模拟器GUI简介 30
2.2 Python入门 36
2.2.1 为什么是Python 37
2.2.2 Python基础知识 37
2.3 Simchain简介 59
2.3.1 什么是Simchain 59
2.3.2 Simchain设计 61
2.3.3 Simchain使用 67
2.4 区块链四要素 72
第3章 区块链中的加密 73
3.1 为什么需要加密 74
3.2 如何实现加密 74
3.2.1 哈希算法 74
3.2.2 私钥、公钥和地址 82
3.2.3 实数域上的椭圆曲线 88
3.2.4 有限域上的椭圆曲线 90
3.2.5 椭圆曲线加密 97
3.2.6 钱包 105
3.3 可能的破解算法 111
3.3.1 枚举法 111
3.3.2 BSGS算法 112
3.3.3 Pollard's rho算法 114
3.3.4 随机数攻击 115
3.3.5 如何保护私钥安全 117
3.4 格密码初探 118
3.4.1 抗量子计算密码 118
3.4.2 格基础知识 119
3.4.3 格问题 126
3.4.4 最短向量问题 128
3.4.5 最近向量问题 130
3.4.6 GGH数字签名 133
3.4.7 Lyubashevshy数字签名 135
第4章 交易 141
4.1 创建交易 142
4.1.1 交易的格式 142
4.1.2 交易的数据结构 143
4.1.3 UTXO与UTXO集 151
4.1.4 一般交易的创建 157
4.1.5 创币交易的创建 164
4.2 广播交易 165
4.3 验证交易 166
4.3.1 一般交易的验证 166
4.3.2 创币交易的验证 174
4.4 交易传播中的安全 174
4.4.1 签名明文攻击 174
4.4.2 创币交易的安全 176
4.5 可编程的交易 177
4.5.1 比特币脚本 177
4.5.2 脚本引擎的工作原理 177
4.5.3 堆栈机LittleMachine 183
4.5.4 多重签名 191
4.6 交易的“一生” 193
第5章 区块与区块链 195
5.1 区块 196
5.1.1 什么是区块 196
5.1.2 区块的数据结构 196
5.1.3 区块头 200
5.1.4 梅克尔树的构建 201
5.1.5 简易支付验证与SPV节点 205
5.2 区块链 211
5.2.1 区块链的构成 211
5.2.2 创世区块 213
5.2.3 区块链分类 217
第6章 去中心化共识 219
6.1 常见的共识算法 220
6.1.1 区块链中的共识 220
6.1.2 工作量证明POW 221
6.1.3 Raft协议 228
6.2 创建候选区块 233
6.2.1 交易选择策略 234
6.2.2 消失的交易 234
6.2.3 创建创币交易 234
6.2.4 创建候选区块 237
6.3 挖矿、打包、广播区块 239
6.3.1 “挖矿” 239
6.3.2 打包候选区块 239
6.3.3 广播区块 240
6.4 验证区块 241
6.5 区块链分叉 244
6.5.1 偶然分叉 244
6.5.2 硬分叉和软分叉 247
6.6 添加到区块链 248
6.6.1 比特币中的区块添加原则 248
6.6.2 51%攻击 252
6.6.3 Simchain中的区块添加原则 253
6.7 区块的“一生” 262
6.8 知识总结 263
第7章 杂谈 265
7.1 关于区块链常见问题的讨论 266
7.2 关于真假区块链项目的辨别 268
7.3 关于区块链技术的发展趋势 269
7.3.1 抗量子密码学 269
7.3.2 零知识证明 269
7.3.3 代码漏洞检测 271
7.4 关于以太坊与智能合约 271
7.5 关于区块链应用的愿想 272

教学资源推荐
作者: [美]本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) 著
作者: 朱鸣华等
作者: 郑阿奇 主编 丁有和 编著
作者: (美)Maurice Herlihy 布朗大学 Nir Shavit 麻省理工学院 著
参考读物推荐
作者: [印度]纳拉西姆哈·卡鲁曼希(Narasimha Karumanchi) 斯克林瓦萨·拉奥·梅达(Sreenivasa Rao Meda) 著
作者: 华为云容器服务团队 杜军 等编著
作者: 刘铭 著