科技>计算机>网络与互联网
区块链通俗读本

区块链通俗读本"

作者:漆英,冯浩铭
ISBN:9787121398087
定价:¥99.0
字数:459千字
页数:384
出版时间:2020-10
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书以区块链科普内容为主,同时兼顾专业级别的实战技能。科普级别的内容旨在以妙趣横生的手法向公众普及区块链知识,包括公共账本的概念及记账机制、数据块的“指纹”与“指针”、解答谜题证明工作量、区块树被剪枝成树干(链)、公有链的社会条件、分蛋糕的“军备竞赛”、货币发行、账户与钱包、矿池与交易所、以太坊的机器人造“币”(Token)、联盟链的“减”与“加”,等等。专业级别的内容旨在为区块链技术从业者提供必要的理论知识、操作实践和应用开发实例,包括密码学应用、共识算法、比特币闪电网络、以太坊工作原理、以太坊组网实践、Solidity语言、智能合约开发、以太坊DApp,以及如何将传统的数据库应用改造成区块链应用,等等。

前言

序:以书为链 1 在我国的强力推动和支持下,区块链技术的研发和应用必将迎来新的高潮。你不能、也无法置身事外。那么,问题来了:你对区块链的了解或理解有多少? 2 在区块链浪潮中,工商银行软件开发中心成立了相应的创新实验室,并于2018年年底正式发布了金融行业企业级区块链技术平台“工银玺链”。它在研发模式上以“自主可控研发”为主线,同时吸收业界技术精华,具备多模式跨链互联、分钟级集约化部署、灵活定制服务、高性能架构、安全保护、自适应智能运维等技术特点,是同行业中首批通过中国工业和信息化部的可信区块链权威认证、完成国家网信办备案的区块链平台,且应用场景不断增加。目前,工商银行软件开发中心已围绕服务民生、普惠金融、“一带一路”倡议、跨境贸易等多个领域,构建了区块链服务体系,如贵州脱贫攻坚投资基金区块链平台、“工银e信”网络融资金融服务平台、“中欧e单通”和“中非e链通”贸易金融区块链平台等。 学习的目的在于应用:审视我们周围的业务场景,是否有“工银玺链”或其他区块链适用的应用场景?或者换个视角来看:你或你的同事是否具有挖掘区块链应用场景的能力?答案在大多数情况下是:没有。因此,向大家普及区块链知识是当务之急。 3 回顾一下区块链发展中的一些社会“乱象”,也很有意思: 区块链很火的时候,卖菜的大妈都在议论比特币或山寨币,大有与股市争风头之势。 区块链很热的时候,仿佛是科技会议的标配,会议新闻通稿中必列“区块链”。 区块链又热又火的时候,名人站台、资本疯狂、项目跃进。 区块链不温不火的时候,哲学的、经济学的、金融学的、社会学的论战四起。 …… 产生这些“乱象”的原因是多方面的,其中,重要的一点是向公众普及区块链知识不够。为写作此书,我们做了一个简单的市场调研,发现市面上区块链的书籍还真不少,其中科普类的书籍普遍写得“云里雾里”、夸夸其谈,甚至还有一些不当言论,如“去中心化的虚拟货币将颠覆金融”。因此,一本正本清源的区块链科普书,如这本书,是大家所希望的。 4 回归技术原理,让科学落地生根。本书生逢其时,它定会如你所愿。 如果你是“吃瓜看客”,它会从科普层面让你获得对区块链的全方位了解。例如:比特币与代币的区别是什么?盗币是如何发生的?“以太猫”好玩吗?“防篡改”是防谁呢? 如果你是普通大学生,它会让你在学习区块链的同时获得多项周边知识。例如:鸽笼原理与抗碰撞性;射箭打靶与“计算谜题”;哈希的指纹作用与指针特性;加入经济刺激因素,使社区公众的决策趋同,从而迂回地解决“一致性”的技术难题。 如果你是政府干部,它会为你的报告添加技术色彩,也会让你的演讲更有趣。例如:区块链有哪些特征?有哪些安全性需要考虑?为什么我国政府要取缔虚拟货币交易平台?为什么找不出“中本聪”却找出了个“澳本聪”?“去中心化”是原因还是结果? 如果你是区块链项目投资人(或潜在投资人),它会让你明白哪些是靠谱的、哪些是夸大的。例如:以太坊是如何众筹的?ICO有哪些“陷阱”?联盟链有哪些特点? 如果你是区块链的从业者,那么,书中标星号的专业级别内容是专门为你而定制的。例如:共识算法有哪些?其技术特点各是什么?还会教你动手做一个小小的实验——发行个“币”玩玩(当然,该“币”没有什么经济价值,因为,它只是部署在几台计算机上的实验而已)。 5 我们不想当知识的搬运工,而要对知识进行“烹饪”。因此,让读者享受知识、享受学习,是本书的责任。本书力求“把别人没讲清楚的讲清楚,把别人讲清楚了的讲得更漂亮”。如是便有:以记账室的改革方案引入公共账本(区块链)的概念;将智能合约拟人化为“机器人”,解释以太坊若干疑团;农民工模型和两赌徒模型更是化繁为简地解析了神秘的闪电网络,等等。 通俗易懂的类比与趣谈,让普通读者共识于茶余饭后;深入浅出的理论知识,更让专业人士有了共同语言。 6 本书作为中国工商银行软件开发中心“工软学院”的重点教材之一,我们努力让它满足广大员工的实际需求:科普与提高相结合、理论与实践相结合,许多内容是在交流和课程进行的过程中不断打磨和完善的。以书为链,链接一份情意,感谢区块链实验室、“工软学院”教研室及作者所在的广州研发部的同事们! 写书难,难就难在它是一场脑力的马拉松,特别是利用业余时间写作,创作周期更是以年计(从笔者发表论文《区块链原理及应用》于《中国金融电脑》(2017年第6、7期)算起,也有两年多时间了)。像马拉松一样,它挑战着自我,考验着毅力与意志。在漫长的创作过程中,离不开领导和同事的加油、鼓劲。感谢工行软件开发中心副总经理吴绵顺、总经理助理苏恒等领导的大力支持!感谢同事、好友的鼓励与督促! 再者,业余写作意味着牺牲本应贡献给家庭的时间,因此,这里要特别感谢家人的理解与支持。在写作此书过程中,第二作者恰逢升级当爸爸,他说此书是献给儿子的礼物。是的,有此礼物他应当自豪。以书为链,链接着未来,当他儿子能读懂本书时,相信区块链的世界将是一番新天地。我们期待着。 7 创作本书就像创造一条信息共享的公有链:解一道道谜题,挖一个个矿藏,建一座座桥梁。把区块链故事讲好,是我们的共识;让区块链普及,是我们的初心。 我写你读,愿以书为链,链出一个缤纷的世界,链出一个美好的未来。 漆 英

目录

目录 第1章 从这里开始 1 1.1 改革 1 1.2 共识机制 2 1.2.1 记账员的工作 2 1.2.2 审核员的工作 2 1.2.3 权威发布 3 1.3 竞争机制 4 1.3.1 记账与审核串行 4 1.3.2 记账与审核并行 5 1.4 向“去中心化”迈进 6 1.4.1 神奇的“缩放机” 6 1.4.2 隐性投票 6 1.4.3 改弦易辙 8 1.5 防篡改原理 8 1.6 去中心化 10 1.6.1 自动发放奖金 10 1.6.2 改革的“最后一公里” 10 1.7 行为艺术 11 1.8 小结 14 第2章 “请签名并按手印” 16 2.1 密码本 16 说明:带星号*的内容为专业篇 2.2 搅拌机 16 2.2.1 ASCII编码 17 2.2.2 公开算法 17 2.2.3 信息搅拌 18 2.2.4 搅拌16次 18 2.2.5 加密与解密 18 2.3 非对称密码体系 18 2.3.1 快!来不及了 18 2.3.2 RSA三人首功 19 2.3.3 椭圆曲线密码体系 20 2.3.4 加密与解密 20 2.3.5 数字签名 21 2.4 哈希函数Hash 21 2.4.1 消息摘要 21 2.4.2 数字指纹 22 2.4.3 数据块的指针 22 2.4.4 基于Hash的数字签名 23 2.5 小结 24 2.6* 附:闲话Hash 24 2.6.1 此哈希非彼哈希 24 2.6.2 碰撞,别发生 26 2.6.3 碰撞,不会发生 26 2.6.4 妙用Hash 27 第3章 下载那些事 29 3.1 服务器瘫了 29 3.2 计数器废了 30 3.3 “缩放机”原理 30 3.4 网上的“缩放机” 31 3.5* 过滤 31 3.5.1 降低一点儿标准 32 3.5.2 一个算法 33 3.5.3 对算法的优化 33 3.5.4 布隆过滤器 34 3.5.5 布隆过滤器效率优化 35 3.5.6 缺点及应对 36 3.5.7 应用举例 36 3.6 公共账本的副本 37 3.7 小结 38 第4章 物竞天择 39 4.1 运气 39 4.1.1 公平悖论 39 4.1.2 射箭比赛 40 4.2 计算谜题 40 4.2.1 谜题(一) 40 4.2.2 谜题(二) 41 4.2.3 谜题(三) 41 4.3 长枝生存 42 4.3.1 挖矿 43 4.3.2 软分叉 43 4.3.3 剪枝成干 44 4.3.4 不被剪掉 46 4.4 工作量证明 47 4.5 小结 48 第5章 良序社会 50 5.1 社区假设 50 5.2 守规矩的记账员 53 5.2.1 作为网络节点 53 5.2.2 作为审计员 54 5.2.3 作为记账员 54 5.2.4 作为矿工 54 5.3 天下无恶 55 5.3.1 难度优先 55 5.3.2 恶者无利 55 5.4 且慢,且慢 56 5.4.1 “双花” 56 5.4.2 作恶的付款者 57 5.4.3 多次确认 57 5.4.4 何时发货 58 5.4.5 连锁交易 59 5.4.6 “双花”趣事 60 5.5 布道者 60 5.6 小结 61 第6章 蛋糕之诱惑 63 6.1 分蛋糕 63 6.1.1 固定大小的蛋糕 63 6.1.2 “备竞赛” 64 6.1.3 宣传机器 64 6.1.4 偷懒验证与私自挖矿 65 6.2 硬分叉 66 6.2.1 分裂 66 6.2.2 私有网络环境 67 6.2.3 比特币分叉大战 69 6.3 “无限”发币 71 6.3.1 比特币溢出 72 6.3.2 美链溢出 72 6.4 盗币 72 6.4.1 两种“币” 72 6.4.2 分裂 73 6.4.3 攻击 74 6.4.4 分叉之战 75 6.4.5 两难境地 76 6.5 小结 77 6.6* 附:溢出原理 77 6.7* 附:怪函数,隐问题 79 第7章 瘦身,瘦身 81 7.1 分体式区块 81 7.2 梅克尔树 82 7.2.1 梅克尔树 82 7.2.2 梅克尔树的防篡改功能 83 7.2.3 残梅克尔树 84 7.3 区块头 85 7.3.1 区块头模板 85 7.3.2 挖矿 86 7.4 全节点与轻量节点 87 7.4.1 两种验证与两类节点 87 7.4.2 全节点 87 7.4.3 轻量节点 88 7.5 小结 89 第8章 账号与钱包 91 8.1 身份证明 91 8.2 账号太长 92 8.2.1 用Hash函数压缩 92 8.2.2 用大进制表示 92 8.3 地址 93 8.3.1 Base58Check 93 8.3.2 二维码地址 94 8.3.3 要一个漂亮的账号 94 8.4 钱包 95 8.4.1 钱包不存钱 95 8.4.2 查询余额 96 8.4.3 多个私钥与多个钱包 97 8.4.4 私钥及其表示形式 97 8.5 跟踪与隐私 98 8.6 小结 99 8.7* 附:进制转换 100 8.8* 附:密钥树 101 8.8.1 分裂 101 8.8.2 关联 102 8.8.3 公钥树(拓展公钥) 102 8.8.4 加强(拓展私钥) 103 8.8.5 订规范 104 8.8.6 助记词 105 第9章 UTXO交易模型 107 9.1 交易新观念 107 9.1.1 交易成链 107 9.1.2 “产币”交易 109 9.1.3 解锁与上锁 109 9.1.4 IN与OUT 111 9.1.5 脚本 112 9.2* 交易与签名 112 9.2.1 原始交易 112 9.2.2 签名交易 112 9.2.3 合资交易 113 9.2.4 多签交易 114 9.2.5 两种地址 115 9.2.6 交易类型 115 9.2.7 共管账户 116 9.3 无块之链 116 9.3.1 账本的体系结构 116 9.3.2 交易链与区块链的区别 118 9.4 交易验证 118 9.4.1 这笔交易是真的 118 9.4.2 这笔资金未花 119 9.5 交易的跟踪与反跟踪 120 9.5.1 熔旧与铸新 120 9.5.2 隐身人 121 9.6 存下证据 121 9.6.1 中本聪的嘲讽 121 9.6.2 证据在某时点之前 122 9.6.3 证据的精确时间 123 9.7 小结 124 9.8* 附:借助本地数据库 124 9.8.1 区块的高度 124 9.8.2 判断双重支付 125 9.9* 附:交易格式 127 9.9.1 币基交易 127 9.9.2 组合交易 128 9.10* 附:脚本体系 130 第10章 聚与散 132 10.1 核心 132 10.2* 矿池 133 10.2.1 扩展“幸运数” 133 10.2.2 矿池的控制中心 134 10.2.3 算力合并的效果 134 10.3* 交易所 136 10.3.1 关联 136 10.3.2 隔离 138 10.3.3 风险 140 10.4 小结 141 第11章 萤火与闪电 142 11.1 老板与农民工模型 142 11.1.1 保证金 142 11.1.2 链下交易系列 144 11.1.3 预约交易 145 11.1.4 损失风险 146 11.2 预约与撤销 146 11.2.1 绝对时间 146 11.2.2 相对时间 148 11.2.3 阻止与撤销 150 11.3 两赌徒模型 151 11.3.1 问题来了 152 11.3.2 共同基金 152 11.3.3 调整份额交易 152 11.3.4 “萤火虫” 153 11.3.5 开通与关闭通道 155 11.3.6 损失风险 156 11.4 借道 156 11.4.1 购“物” 157 11.4.2 特殊的赌博 157 11.4.3 三赌徒模型 158 11.4.4 一串赌徒模型 159 11.5 小结 161 11.6* 附:预约与撤销(续) 162 11.6.1 RSMC交易及其阻止 交易 162 11.6.2 HTLC交易及其阻止 交易 165 11.6.3 HTLC与RSMC组合 168 11.6.4 组合交易的应用模型 170 第12章 链上机器人 174 12.1 账户及状态 174 12.1.1 账户余额 174 12.1.2 世界状态(一) 175 12.2 智能合约机器人 175 12.2.1 图灵两难 176 12.2.2 “机器人” 176 12.2.3 机器人的小世界 177 12.2.4 世界状态(二) 178 12.2.5 别让机器人累死 179 12.2.6 人类指使机器人 180 12.2.7 对机器人查账 181 12.2.8 制造与安装机器人 182 12.3* 矿工的以太币 183 12.3.1 竞争协议 183 12.3.2 挖矿奖励 184 12.3.3 交易费 184 12.3.4 叔祖先区块 184 12.3.5 “助人奖”与“安抚 奖” 185 12.4 以太坊交易 185 12.4.1 交易发起人 185 12.4.2 交易结构 186 12.5* 区块结构 187 12.5.1 三棵树 187 12.5.2 Storage树 188 12.5.3 区块头 188 12.5.4 区块 189 12.6* 其他特色 190 12.6.1 区块大小 190 12.6.2 抵抗专用芯片 191 12.7 小结 191 12.8* 附:MPT 192 12.8.1 简介 192 12.8.2 先躺着 192 12.8.3 查增删 193 12.8.4 “站”起来 195 12.8.5 防篡改 196 12.9* 附:RLP 198 12.9.1 RLP简介 198 12.9.2 表达单个字符 198 12.9.3 表达短字符串 198 12.9.4 表达长字符串 199 12.9.5 表达短列表 200 12.9.6 表达长列表 201 12.9.7 递归 202 第13章 公链上的“货币”发行 203 13.1 比特币的发行 203 13.1.1 挖矿发行 203 13.1.2 控制总量 203 13.1.3 总量的耗损 205 13.2 利息发行 205 13.3 以太坊项目 206 13.3.1 众筹比特币 206 13.3.2 团队的证明 206 13.3.3 出资者的证明 207 13.4 以太币 208 13.5 以太坊代币 209 13.5.1 代币存在哪儿 209 13.5.2 众筹发行 209 13.5.3 代币的特征 210 13.5.4 多重签名 210 13.6 ICO 211 13.7 链上动物园 212 13.7.1 以太猫 212 13.7.2 非同质代币 212 13.8 小结 213 第14章 联盟“恋”链 215 14.1 联盟链的特点 215 14.1.1 联盟链的建立 215 14.1.2 联盟链的特点 216 14.2 减法 217 14.2.1 不需挖矿 217 14.2.2 不需原生币 217 14.2.3 没有分叉 218 14.2.4 不需要特殊的虚拟机 218 14.2.5 节点很少 218 14.3 加法 219 14.3.1 节点分工 219 14.3.2 多通道与多链 219 14.3.3 成员管理 220 14.3.4 验证策略 220 14.3.5 配置区块 220 14.4* 变化 221 14.4.1 交易 221 14.4.2 区块 222 14.4.3 “树”再没必要 222 14.5 交易过程 223 14.5.1 世界状态 223 14.5.2 “算”与“记”分开 223 14.5.3 找“认可人” 224 14.5.4 交易排序 225 14.5.5 批量记账 226 14.6 智能合约 226 14.6.1 智能合约的特征 226 14.6.2 智能合约接口 227 14.6.3 链码部署 227 14.6.4 链码运行 228 14.7* 超级账本 229 14.7.1 设计理念 230 14.7.2 网络架构 230 14.7.3 证书管理 232 14.7.4 共识算法 232 14.7.5 数据存储 233 14.7.6 创建通道 234 14.7.7 创建区块 235 14.7.8 系统链码及系统链 236 14.7.9 “读”与“写” 237 14.8 小结 237 14.9* 附:交易结构 238 14.10 附:再谈速度 240 14.10.1 造块速度的限制 241 14.10.2 公有链一定是一个 慢系统 242 14.10.3 串行执行的限制 242 14.11 附:再谈防篡改 243 14.11.1 三个阶段的防篡改 243 14.11.2 防篡改与防伪 245 14.12 附:私有链 245 第15章 以太坊初级实践 247 15.1* 以太坊客户端简介 247 15.1.1 客户端的种类 247 15.1.2 Geth客户端简介 247 15.1.3 Ethereum Wallet客户端 简介 248 15.1.4 客户端操作方式 248 15.2* 参与以太坊公链 249 15.2.1 安装Geth客户端 249 15.2.2 安装Ethereum Wallet 客户端 250 15.2.3 创建账户 252 15.2.4 接收以太币 253 15.2.5 转账操作 254 15.2.6 挖矿 255 15.2.7 浏览公链网络状态 256 15.3* 搭建以太坊私有链 257 15.3.1 安装Go语言 258 15.3.2 安装Geth客户端 258 15.3.3 初始化节点 259 15.3.4 启动节点 260 15.3.5 创建账户 261 15.3.6 挖矿 262 15.3.7 转账 263 15.3.8 组建网络 265 15.4 小结 268 第16章 以太坊智能合约原理 269 16.1* 以太坊中的智能合约 269 16.1.1 智能合约生命流程 269 16.1.2 什么是EVM字节码 270 16.1.3 什么是ABI 271 16.2* Solidity语言 273 16.2.1 语法结构 273 16.2.2 地址 275 16.2.3 状态变量和局部变量 277 16.2.4 memory和storage 278 16.2.5 constant、view和 pure 281 16.2.6 payable函数 282 16.2.7 fallback函数 283 16.2.8 可见性 284 16.2.9 内置的单位、变量和 函数 284 16.2.10 事件 286 16.2.11 继承 287 16.2.12 库 288 16.3* EVM 290 16.3.1 EVM结构 290 16.3.2 EVM指令表 291 16.3.3 栈、内存、数据存储 291 16.3.4 输入数据与Gas池 293 16.3.5 执行智能合约 293 16.4* 以太坊DApp 294 16.4.1 以太坊DApp生态 295 16.4.2 以太坊DApp运行 流程 296 16.5 小结 298 第17章 以太坊进阶实践 299 17.1* 开发以太坊智能合约 299 17.1.1 环境准备 299 17.1.2 编写合约 300 17.1.3 编译合约 301 17.1.4 调试合约 303 17.1.5 部署合约 304 17.1.6 调用合约 307 17.2* 开发以太坊DApp 308 17.2.1 要做什么 308 17.2.2 环境准备 310 17.2.3 创建项目 310 17.2.4 初始化数据库 310 17.2.5 编写DAO 311 17.2.6 编写Service 312 17.2.7 编写Controller 312 17.2.8 编写前端页面 312 17.2.9 先运行看看 313 17.2.10 如何改造成DApp 316 17.2.11 增加区块链配置参数 317 17.2.12 生成智能合约Java Bean 320 17.2.13 改造Service 322 17.2.14 增加调度分配以太币 325 17.2.15 再运行看看 326 17.2.16 还可以怎么优化 330 17.3 小结 331 第18章 共识算法 332 18.1 什么是共识算法 332 18.1.1 状态机复制 332 18.1.2 分布式的问题 333 18.2* Paxos算法 334 18.2.1 算法流程 334 18.2.2 算法要点 337 18.2.3 算法与区块链 338 18.3* RAFT算法 339 18.3.1 节点状态 339 18.3.2 选举领导者 340 18.3.3 区块复制 344 18.4* PBFT算法 347 18.4.1 拜占庭将军问题 347 18.4.2 算法简介 348 18.4.3 一致性协议 350 18.4.4 检查点协议 353 18.4.5 视图切换协议 355 18.5* PoS机制 357 18.5.1 PoW的问题 357 18.5.2 PoS机制简介 358 18.5.3 PoW+PoS机制 359 18.5.4 纯PoS机制 360 18.5.5 新的挑战 362 18.6* DPoS机制 364 18.6.1 DPoS机制简介 364 18.6.2 选举超级节点 365 18.6.3 生成区块 365 18.6.4 稳定运行 366 18.6.5 高吞吐量 367 18.7 各有千秋 367 18.7.1 CAP定律 367 18.7.2 不可能三角 368 18.8 小结 369

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个