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