首页>参考读物>计算机科学与技术>综合

区块链开发实战:实用案例分析
作者 : [摩洛哥] 贝拉·巴德(Bellaj Badr) [英] 理查德·霍洛克(Richard Horrocks) [美] 吴勋(Xun (Brian) Wu)著
译者 : 董宁 朱轩彤 王冰 岳蕾 译
丛书名 : 区块链技术丛书
出版日期 : 2019-10-29
ISBN : 978-7-111-63998-5
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 328
开本 : 16
原书名 : Blockchain By Example
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书开始部分对区块链概念进行介绍和高度概括,然后基于以太坊、比特币和超级账本区块链展示不同的使用案例和实际操作。具体内容包括区块链技术的基本概念、创建加密货币、Solidity 智能合约语言、使用Truffle和Drizzle构建Tontine游戏、以区块链为基础的期货系统、商业区块链、分布式存储IPFS和Swarm、超级账本上的供应链、信用证超级账本。

图书特色

区块链技术入门级实战手册,助你快速上手并全面了解各种类型区块链技术
从开发者角度出发,通过具体的案例教你如何使用主流区块链解决方案构建项目

图书前言

区块链是一项可能对全球经济的许多方面产生重大影响的突破性技术。通过将范式从当前占主导地位的中心化架构转移到去中心化架构,这项创新性技术将为那些传统上依赖中介和信任的产业带来翻天覆地的变革。
在过去的几年中,区块链呈指数增长,已经发展成多种形式。目前包含许多不同的技术和工具,其中一些是成熟的,另一些是相对较新的。所有这些都使得理解和掌握关键的思想和概念成为一项艰巨的任务。
这就是本书诞生时的图景。由于区块链大热,因此有许多相关书籍,但是我们认为,其中很多书都只关注区块链的理论性或者推测性,换句话说,就是只介绍区块链未来可能有哪些应用,却没有具体介绍如何落地。这正是本书的与众不同之处:它非常注重实际。从最开始,本书就通过一系列深入并且能够快速上手的案例,详细讲解了区块链今天能做什么,以及到底怎么做。
本书分为几大部分。开始部分对区块链概念进行介绍和高度概括,然后基于以太坊、比特币和超级账本区块链展示不同的使用案例和实际操作。
本书的读者对象
本书的目标读者是区块链新手,本书的目标是为他们提供开发基于区块链的项目的简便方法。本书较详尽地介绍了不同区块链解决方案的技术细节,并一步一步地指导读者实施典型的区块链项目。在学习完本书之后,读者能够自行创建和维护基于区块链的可靠、可扩展的分布式系统。
本书内容
第1章是概览章节,介绍区块链技术的基本理念。
第2章首先通过创建一个客户友好型支付系统来介绍比特币的细节,之后关注在比特币区块链上的智能合约的使用细节。
第3章在前面章节介绍的比特币概览知识的基础上,在比特币代码库上创建一个新的货币。
第4章介绍创建去中心化应用的以太坊的基本特征、理念和工具。该章介绍后面章节将大量使用的Solidity 智能合约语言。
第 5章在第4章的基础上,利用Solidity语言更高级的性能和Truffle 开发环境,创建一个更复杂的去中心化应用。
第6章继续在前两章以太坊内容的基础上推进,该章关注智能合约如何用oracle和第三方API与外界互动。
第7章介绍私有企业级区块链及相关应用案例, 之后详细介绍如何用以太坊的企业分叉Quorum 实现私有网络。
第8章在前面以太坊章节的基础上介绍如何将去中心化的文件存储集成到去中心化应用中去。
第9章介绍本书设计的第三个区块链网络:超级账本。该章介绍超级账本的主要理念和基本特征,以及它与比特币和以太坊的区别,并介绍一个超级账本的实际应用,即供应链溯源。
第10章在前面章节的基础上介绍如何用区块链实现两个银行和两个交易伙伴之间的信用证业务。
充分利用本书
本书假设你会使用命令行界面,但不要求你拥有任何正式的shell脚本技能。还假设你拥有与编程语言无关的基础知识,在某些情况下熟悉一种特定的语言是有益的,尽管这不是必要条件。
由于本书涵盖了多种语言和技术,读者不太可能熟悉所有这些语言和技术。因此,我们当然希望你有学习的意愿。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
下载文件后,请确保使用最新版本的解压软件进行解压缩:
Windows: WinRAR/7-Zip
Mac: Zipeg/iZip/UnRarX
Linux: 7-Zip/PeaZip
本书的代码包还托管在GitHub上,网址为https://github.com/PacktPublishing/Blockchain-By-Example。如果代码有更新,它将在现有的GitHub存储库上进行更新。
我们还在https://github.com/PacktPublishing/上提供了丰富的书籍和视频目录中的其他代码包。查一下吧!
我们还提供了一个pdf文件,其中包含本书中使用的屏幕截图和彩色图表。下载地址为:https://www.packtpub.com/sites/default/files/downloads/9781788475686_ColorImages.pdf。
本书排版约定
本书使用了许多排版约定。
代码文本(CodeInText):表示文本、数据库表名、文件夹名称、文件名、文件扩展名、路径名、用户输入和Twitter句柄中的代码。下面是一个示例:“你可以在任何级别上使用console.log()在控制台中打印接收到的值。”
代码块如下:

任何命令行输入或输出如下所示:

粗体:表示一个新的术语,一个重要的单词,或你在屏幕上看到的单词。下面是一个示例:“……其基本单位称为区块。”
这个图标表示警告或重要说明。
这个图标表示提示和技巧。

上架指导

计算机\程序设计

封底文字

区块链将带来世界大变革,成就一个没有中间人的新世界。从技术角度看,它是一种在点对点网络中针对所有交易的、不可变更的、不可篡改的分布式账本。在本书的指引下,你将学习如何构建真实的区块链生态系统项目。
本书将带领你创建多个不同复杂程度和挑战等级的区块链项目。为了从一开始就让学习富有成效,每个项目的内容都恰好能使你学习本领域的领先知识,如以太坊、Quorum和超级账本等。在学习的过程中,你会了解到区块链生态系统面临的主要挑战,如扩展性、集成性和分布式文件管理。在最后几章中,你会学习创建商业区块链。本书还涵盖了很多实践项目,如超级账本上的供应链、用以太坊创建Tontine游戏等。
学习完本书之后,你不仅能够解决区块链生态系统中的常见问题,还能设计并创建可靠、可扩展的分布式系统。
通过阅读本书,你将学到:
学习去中心化技术基础,掌握区块链原理
基于比特币、以太坊和超级账本创建区块链项目
用比特币创建支付应用
用超级账本实施去中心化应用和供应链系统
编写智能合约,用以太坊创建Tontine去中心化应用
用区块链实施分布式文件管理
将区块链集成到你所在组织的现有系统中

译者序

“每个硬币都有正反两面。”技术和业务就是商业驱动力的两面,交错发展且互相促进。互联网就是最好的例子,技术的发展让全球能够联通成一个大的网络,而基于网络的商业模式创新同时又在推动科技不断迭代。经常听到这样的说法,如果说千禧年的头十年是消费互联网走向巅峰的十年,那么已经开始的下半场属于更多行业、大中小企业参与的产业互联网。我一直工作于企业服务的科技实践一线,深深感受到各个行业为了迎接产业互联网的到来,正在轰轰烈烈地展开一场数字化、端到端、业务创新的战役。同时,像云计算、大数据、区块链、物联网、5G等技术也不再是空中楼阁,而是实实在在地在企业业务中落地应用。
其中,区块链作为最为火热的代表技术之一,近几年的发展尤为明显。但是,由于技术普及书籍和渠道有限,所以社会大众对区块链技术的认知和应用潜力的评估不尽一致。之前我也陆续翻译和自己写作出版了几本专项技术书籍,前不久从出版社和写作伙伴了解到了这本更为全面、可系统地帮助开发人员上手的《Blockchain By Example》并组织翻译。
本书花了很多篇幅在开始章节介绍比特币和以太坊,这诚然和作者自身背景有很大关系。在区块链技术发展早期,很多国外的拥趸者是从比特币开始认识了一个以技术代替中介的“信任机器”,而且他们大多有技术或程序员背景,这也就是所谓的“区块链1.0”阶段。直到2014年,华尔街的很多一线金融机构才开始关注如何参考比特币的技术并将其应用在金融业务中,到今天全球各个产业都有区块链应用的场景和范例,应该说在这个称为“区块链2.0”阶段的形成过程中,区块链技术已经在与行业应用结合方面有了非常大的突破和改变,同比特币的范畴大相径庭,它更看重如何把业务逻辑和链上的可信数据更好地结合。应该说在国内,更多的人是在这个阶段开始了解区块链的,行业龙头、中小企业、科研院所、行业组织、政府监管部门都纷纷投入其中,以至于这两年区块链成了关注度颇高且极具话题性的新兴技术。
在区块链1.0向2.0发展的过程中,也同时出现了以比特币及代币为基础衍生出的“通证经济”的币圈,以及以区块链技术去结合各行业应用而落地的“链圈”,当然这种分类也并不绝对,以这种划分来区分科技从业者或技术爱好者本身也有失偏颇。但是,有少部分人打着“区块链”或金融创新的旗号,在金融领域利用不法手段牟利,再加之社会本身对这项新兴技术还没有准确的认知,因此都为区块链行业的发展蒙上了一层阴影。2017年9月4日,中国人民银行、中央网信办、工业和信息化部、工商总局、银监会、证监会、保监会以七部委名义在官网联合发布了“关于防范代币发行融资风险的公告”,旨在拨乱反正,引导科技发展“避虚向实”,向赋能实体经济方面稳健发展。
客观说,我多年一直在从事科技应用工作,按上面的分类应该属于比较早期的铁杆“链圈”。但为什么要翻译既包含比特币、以太坊等数字货币或公有链技术,又包含像超级账本这样“链圈”使用颇多的联盟链技术的一本引进书籍呢?在我看来主要有以下几点原因:
1.技术没有好或不好之分,作为一本入门区块链技术的手册型图书,本书可以帮助技术开发人员很快上手各种不同类型的区块链技术,并全面了解各种区块链技术栈。之前我已经出版了介绍超级账本、以太坊的技术书籍,这次算是把比特币也补上了。
2.从发展的眼光去看技术发展,要想用好技术的价值,甚至评估技术在行业中的应用前景,就必须了解它的前世今生。
3.现在市面上不乏介绍区块链的图书,应该说是良莠不齐,很多所谓的“专家”对区块链技术本身还缺乏准确的理解,也未从事过具体技术实践,却凭借自己的理解对区块链的发展加以评判,有误导社会认知之嫌。近年来我一直从事科技孵化、将技术和行业场景结合的一线工作,觉得本书在整体架构、技术普及等方面比较有价值,自己也愿意在科技普及之路上做点贡献。
“开卷有益”,祝大家有所收获,身体健康。
感谢杨春程、李素罗参与本书审校工作。

董宁
2019年9月

推荐序

从贝拉·巴德(Bellaj Badr)第一次告诉我,他打算写一本关于区块链的书起,我就非常支持他的决定。作为一名经验丰富的开发人员,我甚至提出了一些需要加强理解的主题。一年后,读完这本书,我的期望被超越了,我高兴极了。因此,我很高兴能受邀写推荐序。
人们普遍认为,区块链是一种颠覆性的技术,已经震撼了IT领域。因此,它越来越引起许多开发人员的兴趣。然而根据我的经验,对于初学者来说,很难找到一个有用的指南——用最简单的术语解释区块链,并用具体的案例教你如何使用主流区块链解决方案构建项目。
本书旨在改变这种情况,并从开发人员的角度介绍区块链技术。这是一项具有巨大潜在价值的事业,贝拉和他的合著者在这方面进行了充分发挥。
事实上,本书将帮助你一步一步地用不同的概念和技术——比特币(Bitcoin)、以太坊(Ethereum)、Quorum和超级账本(Hyperledger)——从头开始建立现实的项目。在其他主题
中,你将学到开发人员如何创建代币、在业务中实现隐私保护解决方案等。
本书不仅适合初学者。它也可向经验丰富的程序员很好地介绍区块链技术,甚至提高成熟开发人员的开发速度。如果你在初学本书时对区块链有些了解,阅读本书会有所裨益,但是如果你不了解区块链,坚持下去,也能在前进的过程中了解区块链的基本理念。
贝拉是一名出色的教育家。他希望我们掌握实际技能,而不是仅仅理解浮在表面的概念!他知道,如果我们做好了学习的准备,我们就必须练习,必须完成功课。在各章节中,他将不断挑战你,让你为所展示的项目提出新的功能。在尝试执行他的建议时,我们都得到了很好的反馈。
我喜欢这本书,觉得它很有价值。我想你也会深有同感。享受阅读时光吧!

Sam Hauer
NSApps联合创始人

图书目录

推荐序
译者序
前言
审校者简介
第1章 初识区块链 1
1.1 区块链和加密货币的兴起 2
1.1.1 从虚拟货币到加密货币 2
1.1.2 比特币的出现 2
1.1.3 什么是区块链 3
1.2 与区块链交互 5
1.2.1 入门 6
1.2.2 方法1——使用Bitcoin Core创建原始交易 10
1.2.3 方法2——用JavaScript创建原始比特币交易 18
1.3 区块链类型 21
1.4 小结 22
第2章 建立比特币支付系统 23
2.1 什么是比特币 23
2.2 开始使用比特币 24
2.2.1 设置Regtest环境 24
2.2.2 用比特币交易 26
2.3 构建支付网关 31
2.3.1 项目描述 31
2.3.2 准备环境 33
2.3.3 项目设置 33
2.3.4 商家方面 34
2.3.5 客户端 39
2.3.6 预览应用程序 42
2.4 使用BitcoinJ的支付协议 44
2.4.1 准备环境 44
2.4.2 BitcoinJ 客户端 45
2.5 比特币智能合约 51
2.5.1 什么是Rootstock 51
2.5.2 编写你的第一个比特币智能合约 54
2.6 小结 56
第3章 创建加密货币 57
3.1 从源代码处编译比特币 57
3.1.1 准备创建系统 58
3.1.2 创建Bitcoin Core 59
3.2 新加密货币——Readercoin 61
3.2.1 克隆比特币 61
3.2.2 重新包装Readercoin 62
3.2.3 更改端口 63
3.2.4 更改pchMessageStart 63
3.2.5 创世区块 64
3.2.6 删除种子节点 67
3.2.7 检查点 68
3.2.8 ChainTxData 69
3.2.9 奖励 70
3.2.10 减半 70
3.2.11 总供给量 71
3.2.12 POW参数——目标 71
3.2.13 时间成熟度 74
3.2.14 区块大小 75
3.2.15 BIP:比特币改进建议 76
3.2.16 编译和测试 77
3.2.17 设计和图形(Qt钱包) 78
3.2.18 重新设计比特币-Qt钱包 79
3.2.19 建立一个Readercoin 网络 84
3.2.20 Readercoin 挖矿 86
3.2.21 发送交易 89
3.2.22 创建交易和区块浏览器 89
3.2.23 建立交易所 92
3.3 小结 93
第4章 以太坊中的点对点拍卖 94
4.1 以太坊简介 95
4.1.1 以太坊虚拟机和智能合约 95
4.1.2 以太币和gas 96
4.1.3 你的第一个智能合约 96
4.1.4 DApp是什么 97
4.2 创建拍卖DApp 98
4.2.1 拍卖描述 98
4.2.2 使用Solidity语言编写拍卖合约 99
4.2.3 合约代码分析 100
4.2.4 继承 105
4.2.5 Remix IDE 110
4.2.6 web3.js中的投标表格 113
4.2.7 web3.js API简介 116
4.3 部署环境——方法多多 122
4.3.1 选择1:Ganache 122
4.3.2 选择2:测试网 124
4.3.3 选择3:私有网络 126
4.3.4 用solc编译和部署合约 132
4.3.5 POA共识机制和难度调整 132
4.4 运行拍卖DApp 134
4.4.1 合约和交易成本 135
4.4.2 Solidity 的几个实用技巧 138
4.5 小结 138
第5章 使用Truffle和Drizzle构建Tontine游戏 139
5.1 背景情况 140
5.2 快速了解Truffle 140
5.2.1 安装Truffle 141
5.2.2 简单了解Truffle 141
5.2.3 首次运行Truffle 142
5.3 Tontine合约 145
5.4 作为CRUD合约的Cplayer 147
5.4.1 智能合约数据位置 147
5.4.2 CRUD——创建 149
5.4.3 CRUD——读取 149
5.4.4 CRUD——更新 151
5.4.5 CRUD —— 删除 151
5.5 Tontine接口——Itontine 152
5.6 接口实现——Ctontine合约 153
5.6.1 智能合约交互 154
5.6.2 加入游戏 156
5.6.3 ping()方法 159
5.6.4 eliminate()方法 160
5.6.5 share_pension()方法 160
5.6.6 claimReward()方法 161
5.7 Truffle单元测试 162
5.7.1 准备测试环境 162
5.7.2 迁移合约 162
5.7.3 准备测试 163
5.7.4 测试addPlayer() 164
5.7.5 测试findPlayer() 164
5.7.6 测试removePlayer() 165
5.7.7 测试Ctontine 165
5.7.8 测试payable函数 166
5.7.9 测试事件 167
5.7.10 测试claimReward() 167
5.7.11 运行测试 169
5.7.12 使用Solidity进行测试 169
5.7.13 使用Truffle 和Remix进行调试 171
5.8 使用Drizzle的前端 180
5.8.1 准备环境 180
5.8.2 Drizzle box是什么 180
5.8.3 初次了解Drizzle box 181
5.8.4 黑客攻击Drizzle box 183
5.8.5 游戏主页 184
5.9 试用DApp 187
5.9.1 将Ganache连接到MetaMask 188
5.9.2 运行Tontine DApp 189
5.9.3 表演时间——准备好了吗 191
5.9.4 获取帮助 193
5.10 小结 194
第6章 以区块链为基础的期货系统 195
6.1 项目展示 195
6.2 期货智能合约 196
6.3 web3j 199
6.3.1 准备环境 200
6.3.2 设置web3j Maven 项目 200
6.3.3 安装web3j 202
6.3.4 创建钱包 202
6.4 Java客户端 203
6.4.1 封装生成器 205
6.4.2 初始化web3j 205
6.4.3 设置以太坊账户 206
6.4.4 部署合约 206
6.4.5 与智能合约交互 207
6.4.6 调用合约函数 207
6.4.7 调用 view 方法 209
6.4.8 web3j事件 209
6.4.9 性能提升 210
6.5 小结 211
第7章 商业区块链 212
7.1 区块链的公共与私有、许可与无许可 212
7.2 以太坊中的隐私和匿名 213
7.3 为什么隐私和匿名很重要 214
7.4 以太坊企业联盟 214
7.5 区块链即服务 215
7.6 Quorum 215
7.6.1 隐私 215
7.6.2 更高性能和吞吐量 216
7.6.3 许可和治理 216
7.6.4 Quorum 客户端 216
7.6.5 我们的项目 217
7.7 小结 223
第8章 分布式存储IPFS和Swarm 224
8.1 背景 224
8.2 Swarm和IPFS 225
8.2.1 IPFS的安装 226
8.2.2 安装Swarm 228
8.3 托管前端 229
8.3.1 使用IPFS服务前端 229
8.3.2 使用Swarm服务前端 231
8.4 IPFS文件上传器项目 234
8.4.1 创建项目 234
8.4.2 网页 235
8.5 小结 238
第9章 超级账本上的供应链 239
9.1 食品供应链 239
9.2 超级账本概览 240
9.2.1 Hyperledger Fabric 240
9.2.2 Hyperledger Composer 242
9.3 建立开发环境 242
9.3.1 准备环境 243
9.3.2 安装Hyperledger Fabric 243
9.4 Fabric链码 243
9.4.1 编写链码 244
9.4.2 Init函数 245
9.4.3 Invoke函数 247
9.4.4 Query函数 250
9.5 创建商业网络 252
9.5.1 超级账本隐私 253
9.5.2 定义compose文件中的服务 253
9.5.3 资源和概要文件 256
9.5.4 Fabric通道和创世区块 257
9.5.5 生成对等节点和订单方证书 258
9.5.6 启动Docker容器 260
9.5.7 加入通道并安装链码 262
9.6 链码编译和部署 263
9.7 运行项目 264
9.7.1 通过REST API/JSON-RPC交互 266
9.7.2 Hyperledger Composer 272
9.8 小结 278
第10章 信用证超级账本 279
10.1 信用证理念和设计 279
10.2 开发环境 280
10.2.1 设置IDE 280
10.2.2 启动Hyperledger Fabric 281
10.3 创建一个Composer Fabric应用 282
10.4 信用证商业网络 286
10.4.1 初始信用证模型 287
10.4.2 参与者上线 288
10.4.3 初始协议 289
10.4.4 信用证请求 291
10.4.5 信用证批准 292
10.4.6 信用证通知 293
10.4.7 货物运输 293
10.4.8 提交文件 294
10.4.9 文件交付 295
10.4.10 借方付款 296
10.4.11 支付转账 297
10.4.12 给卖方付款 298
10.4.13 信用证闭卷 299
10.5 部署信用证 300
10.5.1 部署商业网络 300
10.5.2 生产一个REST服务器 301
10.5.3 测试信用证项目 302
10.6 IBM云上的Hyperledger Fabric 308
10.7 小结 313

教学资源推荐
作者: [美]马克·J.班纳特(Mark J. Bennett)德克·L.胡根(Dirk L. Hugen)著
作者: [美]陈封能(Pang-Ning Tan)迈克尔·斯坦巴赫(Michael Steinbach)阿努吉·卡帕坦(Anuj Karpatne)维平·库玛尔(Vipin Kumar)著
作者: 钱晓捷 主编
参考读物推荐
作者: 视觉新媒体 编著
作者: 软考新大纲研究组 编著
作者: (美)Osamu Takagiwa 等