揭秘区块链查看源代码讨论查看历史
《揭秘区块链》,陈晓华,刘彬,姚顺,刘纳新 编,陈晓华,刘彬,姚顺,刘纳新 编,出版社: 北京邮电大学出版社。
书,是历史的见证、文化的赋形、知识的宝库、智慧[1]的结晶,是一个民族一个国家显示其文明的标志。读书,是时代的呼唤、历史的昭示、职责的要求,是一个民族一个国家走向伟大复兴的证明[2]。
内容简介
想真正了解区块链,需要先从了解区块链家族开始。《揭秘区块链》讲解了区块链的思想起源、去中心化以及在去中心化思想下发展起来的一系列技术。了解了去中心化及其相关技术,才能对区块链的演变、发展及其特性有更深刻的理解。区块链源自金融,本书讲解了跟金融相关的知识——借贷、众筹、ICO,这为读者深入了解比特币奠定了基础;同时本书给大家讲解了区块链的一个产品比特币的发展经历、思想起源。《揭秘区块链》对区块链的本质、核心技术、应用场景以及其对未来的影响进行了简要介绍,目的是希望读者能对区块链技术有一个整体上的认识。但比特币本身只是一套货币系统,无法满足更为复杂的业务需求,于是以太坊应运而生,以太坊解决了比特币扩展性不足等问题。在本书中我们将深入学习以太坊的概念和运行原理。《揭秘区块链》适合于对区块链技术感兴趣的读者阅读,也可作为与区块链技术相关的培训教材。
目录
第1章区块链入门基础1
1.1初识比特币与区块链1
1.1.1比特币发展简史1
1.1.2比特币的定义4
1.1.3比特币的发行5
1.1.4比特币与区块链的关系7
1.2区块链的起源思想7
1.2.1去中心化7
1.2.2区块链雏形8
1.2.3区块链家族9
1.3区块链的本质及特性10
1.3.1区块与区块链10
1.3.2区块链的本质11
1.3.3区块链中的核心技术13
1.3.4区块链模型13
1.3.5目前区块链几大知名产品的编程语言14
1.3.6区块链分类15
1.4区块链技术的发展脉络及其对未来的影响16
1.4.1区块链技术的发展脉络16
1.4.2区块链技术对未来的影响16
1.5区块链的应用场景17
1.5.1全球最有代表性的区块链技术平台17
1.5.2区块链的应用领域17
1.5.3国外区块链的知名项目18
1.5.4国内企业在区块链技术上的进展18
1.5.5区块链的相关应用及公司20
1.6区块链的不足21
1.7参考资料22
第2章区块链常见问题集23
2.1比特币挖矿相关问题23
2.1.1比特币节点23
2.1.2挖矿、矿工、矿机、矿场、矿池24
2.1.3挖矿设备25
2.1.4算力26
2.1.5难度、难度目标、难度重定26
2.1.6区块结构27
2.1.7默克尔树及默克尔根28
2.1.8挖矿原理28
2.2比特币交易相关问题30
2.2.1比特币交易30
2.2.2比特币钱包30
2.2.3冷钱包和热钱包31
2.2.4全节点钱包、轻钱包31
2.2.5HD钱包31
2.2.6比特币钱包随机生成私钥的安全性32
2.2.7私钥的格式33
2.2.8比特币地址34
2.2.9私钥、公钥、比特币地址之间的关系35
2.2.10UTXO35
2.2.11比特币交易的找零机制35
2.2.12发出交易到矿工打包的步骤36
2.2.13比特币交易验证过程36
2.2.14双重支付36
2.2.15最长链及六次交易确认37
2.3区块链其他相关问题37
2.3.1中本聪37
2.3.2图灵完备38
2.3.3比特币与图灵完备性38
2.3.4P2P网络38
2.3.5LevelDB39
2.3.6共识机制39
2.3.7比特币扩容40
2.3.8隔离见证40
2.3.9区块链分叉40
2.3.10BIP41
2.3.11IPFS41
2.3.12Token与积分的区别41
2.3.13对区块链存在的误解42
2.3.14区块链生态系42
2.3.15区块链与编程语言的关系43
2.4参考资料43
第3章区块链骨骼——密码学算法44
3.1密码学家族44
3.2哈希算法45
3.2.1Hash的定义45
3.2.2流行的Hash算法46
3.2.3Hash与加密解密的区别48
3.3对称加密算法50
3.3.1概述50
3.3.2DES和3DES算法51
3.3.3AES算法52
3.4非对称加密算法52
3.4.1非对称加密算法发展史52
3.4.2非对称加密的概念53
3.4.3非对称加密与对称加密的区别53
3.4.4RSA加密算法54
3.4.5椭圆曲线加密算法54
3.4.6数字签名的概念55
3.4.7数字签名应该满足的要求57
3.4.8比特币系统中的数字签名57
3.5字符编码与解码58
3.5.1Base64编码与解码58
3.5.2Base64编码的步骤58
3.5.3Base58编码与解码59
3.5.4Base58编码的步骤60
3.6比特币地址的生成算法61
3.6.1生成比特币地址的理论概述61
3.6.2Base58Check62
3.6.3比特币地址的生成步骤63
3.7生成WIF和WIFcompressed格式私钥的步骤64
3.8ECDSA实现交易签名及签名验证66
3.8.1初步认识比特币交易66
3.8.2交易链67
3.9签名序列化68
3.10参考资料70
第4章区块链灵魂——共识算法71
4.1共识算法概述71
4.1.1分布式系统71
4.1.2分布式系统的一致性问题73
4.1.3FLP定理与CAP定理73
4.1.4拜占庭将军问题74
4.1.5共识算法的概念78
4.2共识算法的目的和价值79
4.2.1共识算法的目的79
4.2.2共识算法的假设条件80
4.3常用的共识算法80
4.3.1PoW算法80
4.3.2PoS算法81
4.3.3DPoS算法83
4.3.4PBFT算法84
4.3.5Paxos算法85
4.3.6Raft算法85
4.3.7共识算法总结86
4.4比特币挖矿原理88
4.5计算难度目标88
4.6验证挖矿结果89
4.7难度目标Hash值的快速算法90
4.7.1比特币区块bits值变化趋势90
4.7.2bits值与目标Hash值的规律90
4.7.3计算难度目标的步骤91
4.7.4计算挖矿难度difficulty91
4.8参考资料91
第5章比特币系统架构93
5.1比特币系统的整体架构93
5.1.1早期的比特币系统架构93
5.1.2目前的比特币系统架构94
5.2比特币系统的前端模块95
5.2.1钱包服务95
5.2.2HTTPJSONRPC接口服务96
5.2.3bitcoincli命令行接口服务96
5.2.4GUI图形开发工具96
5.3比特币系统的后端模块97
5.3.1区块链管理97
5.3.2交易验证98
5.3.3共识管理98
5.3.4密码及数字签名98
5.3.5脚本引擎98
5.3.6P2P网络管理99
5.3.7数据库管理99
5.3.8挖矿模块99
5.3.9其他管理模块100
5.4区块链节点101
5.4.1节点类型101
5.4.2维护区块链需要优质节点101
5.4.3节点相关问题102
5.5区块链钱包103
5.5.1钱包的含义103
5.5.2钱包的类型103
5.6比特币核心钱包105
5.6.1BitcoinCore的安装105
5.6.2BitcoinCore客户端目录结构107
5.7bitcoincli命令110
5.7.1进入BitcoinCore的RPC控制台110
5.7.2执行bitcoincli命令110
5.8bitcoind的定义114
5.9bitcoincli高级命令115
5.10参考资料117
第6章比特币交易及交易脚本118
6.1比特币交易的流程118
6.1.1比特币交易的本质118
6.1.2比特币交易的生命周期119
6.1.3比特币交易的规则122
6.1.4交易验证的过程122
6.1.5比特币交易的优先级123
6.2比特币交易脚本123
6.2.1比特币交易脚本概述123
6.2.2比特币交易脚本中常用的指令124
6.2.3简单数学运算的脚本执行过程124
6.2.4比特币交易的脚本执行过程125
6.2.5比特币交易类型(交易脚本的类型)129
6.3比特币交易的数据结构130
6.3.1比特币区块的结构130
6.3.2比特币交易的数据结构131
6.4P2PKH交易的数据解析案例132
6.4.1P2PKH交易的原始数据132
6.4.2P2PKH交易数据结构解析134
6.4.3P2PKH交易记录的JSON格式137
6.5P2PK交易的数据结构解析140
6.5.1P2PK交易的原始数据140
6.5.2P2PK交易数据结构解析141
6.5.3P2PK交易记录的JSON格式143
6.6比特币交易构造过程145
6.6.1在regtest模式下搭建测试私链145
6.6.2比特币交易流程146
6.6.3bitcoincli实现比特币交易146
6.7参考资料152
第7章以太坊原理及核心概念153
7.1以太坊的定义153
7.1.1以太坊产生的项目背景153
7.1.2以太坊的概念154
7.1.3比特币和以太坊挖矿算法的优势和劣势154
7.1.4以太坊出块速度快的原因156
7.1.5以太坊的发展历程156
7.1.6以太币的通货膨胀问题157
7.2以太坊的架构组成158
7.2.1以太坊的架构图158
7.2.2以太坊中的软件组成159
7.2.3学习以太坊的网站资源160
7.3以太坊中的核心概念160
7.3.1状态160
7.3.2账户161
7.3.3交易164
7.3.4收据165
7.3.5区块头166
7.3.6燃料167
7.3.7以太坊挖矿Ethash算法的原理171
7.3.8Keccak256Hash:以太坊中的Hash算法173
7.3.9GHOST协议174
7.3.10孤块和叔块177
7.3.11以太币178
7.4参考资料179
第8章以太坊数据存储180
8.1以太坊数据存储基础180
8.1.1以太坊数据存储概述180
8.1.2以太坊LevelDB中的数据格式181
8.2RLP182
8.3Trie和PatriciaTrie183
8.3.1Trie的基本概念183
8.3.2传统Trie的局限184
8.3.3PatriciaTrie185
8.4MPT186
8.4.1基本概念186
8.4.2以太坊中的MPT对Trie的改进186
8.4.3MPT中的4种节点187
8.4.416进制前缀189
8.4.5MPT存储的3种编码格式189
8.5状态的存储190
8.5.1StateDB190
8.5.2结构体源码分析191
8.5.3状态数据的三级存储机制192
8.5.4状态存储设置两层缓存的原因192
8.5.5状态信息三层存储的完整流程193
8.6交易的存储196
8.6.1交易存储的图示196
8.6.2交易信息在LevelDB中的存储196
8.7收据的存储197
8.7.1收据存储的图示197
8.7.2收据信息在LevelDB中的存储198
8.8参考资料198
第9章以太坊开发前准备199
9.1使用Mist钱包199
9.1.1Mist钱包介绍199
9.1.2下载钱包199
9.1.3安装并进入钱包200
9.1.4转账200
9.1.5备份钱包201
9.1.6数据存储路径202
9.2主网络与测试网络204
9.2.1以太坊的主网络204
9.2.2以太坊的测试网络205
9.3使用MetaMask206
9.4搭建以太坊私链213
9.4.1安装客户端213
9.4.2新建创世区块的配置文件213
9.4.3配置初始状态215
9.4.4启动私链客户端215
9.4.5以太坊常用对象及其用法216
9.4.6调用以太坊对象的方法来查看数据216
9.5参考资料219
第10章以太坊开发智能合约220
10.1智能合约221
10.1.1智能合约的基本定义221
10.1.2智能合约的特点及优势222
10.1.3智能合约与区块链的关系223
10.1.4基于区块链的智能合约构建及执行步骤223
10.1.5智能合约应用场景224
10.2DApp225
10.2.1DApp的概念225
10.2.2DApp的应用领域225
10.3使用remixide开发智能合约226
10.3.1remixide简介226
10.3.2安装remixide226
10.3.3创建合约227
10.3.4选择运行环境228
10.3.5部署智能合约229
10.3.6执行合约231
10.4Solidity基本语法233
10.4.1Solidity的定义233
10.4.2Solidity的数据类型233
10.4.3Solidity的基本构成233
10.4.4Solidity合约文件的存储位置234
10.5发布ERC20标准代币236
10.5.1ERC20介绍236
10.5.2ERC20Token协议的实现236
10.5.3Token合约的发布238
10.6web3.js的定义243
10.6.1web3.js简介243
10.6.2web3.js环境搭建244
10.7Truffle概述244
10.8参考资料245