描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111652038
编辑推荐
本书是一本区块链技术入门指南,内容涵盖密码学数学基础(包括有限域、椭圆曲线、椭圆曲线密码学)、序列化工具、交易数据的结构与传输,以及数字签名的构造与验证等。通过本书,读者将学习如何使用这种流行的加密货币及其区块链支付系统背后的基础知识,包括数学、密码学、区块、网络等。
内容简介
本书是一本区块链技术入门指南,内容涵盖密码学数学基础(包括有限域、椭圆曲线、椭圆曲线密码学)、序列化工具、交易数据的结构与传输,以及数字签名的构造与验证等。通过本书,读者将学习如何使用这种流行的加密货币及其区块链支付系统背后的基础知识,包括数学、密码学、区块、网络等。
目 录
前言 1
第1章 有限域 11
学习更高等的数学 11
有限域的定义 12
定义有限集合 12
使用Python构建有限域 13
练习1 14
模运算 14
Python的模运算 16
有限域的加法和减法 16
练习2 18
使用Python编写有限域的加法和减法 18
练习3 19
有限域的乘法和指数运算 19
练习4 20
练习5 20
使用Python编写乘法 20
练习6 20
使用Python编写指数运算 21
练习7 21
有限域的除法 21
练习8 23
练习9 23
重新定义指数运算 24
总结 25
第2章 椭圆曲线 26
定义 26
使用Python编写椭圆曲线 31
练习1 32
练习2 32
点的加法 32
点加法的性质 35
实现点加法 37
练习3 38
x1≠x2时的点加法 38
练习4 40
实现x1≠x2时的点加法 40
练习5 40
P1 = P2时的点加法 40
练习6 42
实现P1 = P2时的点加法 42
练习7 42
实现另一个特例 42
总结 43
第3章 椭圆曲线密码学 44
实数域上的椭圆曲线 44
有限域上的椭圆曲线 45
练习1 46
实现有限域上的椭圆曲线 46
有限域上的点加法 48
实现有限域上的点加法 49
练习2 49
练习3 49
椭圆曲线的标量乘法 49
练习4 51
再议标量乘法 51
数学上的群 52
恒等元 53
封闭性 53
可逆性 54
交换律 54
结合律 55
练习5 56
实现标量乘法 56
定义比特币的曲线 58
使用secp256k1 59
公钥密码学 61
签名和验证 61
雕刻靶坐标 62
验证的细节 64
验证签名 65
练习6 66
编程实现签名验证 66
签名的细节 67
创造签名 67
练习7 68
编程实现消息签名 68
总结 70
第4章 序列化 72
未压缩的SEC格式 72
练习1 73
压缩的SEC格式 73
练习2 77
DER签名 77
练习3 79
Base58 79
转录你的公钥 79
练习4 81
地址格式 81
练习5 82
WIF格式 82
练习6 83
再议大端序和小端序 83
练习7 83
练习8 83
练习9 84
总结 84
第5章 交易 85
交易的组成 85
版本号 87
练习1 88
输入 88
解析脚本 92
练习2 92
输出 93
练习3 94
时间锁 94
练习4 95
练习5 95
实现交易的序列化 96
交易手续费 96
计算交易手续费 98
练习6 98
总结 98
第6章 Script 99
Script机制 99
Script如何运作 100
几个操作符的例子 101
实现操作符 101
练习1 102
解析脚本字段 102
实现一个Script解析工具和序列化工具 103
合并脚本字段 105
实现合并命令集 106
标准脚本 106
p2pk 107
实现脚本计算 110
栈元素的本质 112
练习2 113
p2pk的缺陷 113
使用p2pkh修复问题 114
p2pkh 114
脚本可以被任意构建 118
练习3 120
脚本的使用 121
练习4 121
SHA-1 Pin躠ta 122
总结 122
第7章 交易的创建与验证 123
验证交易 123
校验交易输入是否可用 123
校验交易输入的总和与交易输出的总和 124
校验签名 125
练习1 129
练习2 129
校验交易的全部内容 129
创建交易 129
构建交易 130
制作交易 132
签名交易 133
练习3 134
在测试链上创建你自己的交易 134
练习4 135
练习5 135
总结 135
第8章 支付到脚本哈希交易 136
裸多签 136
实现OP_CHECKMULTISIG 140
练习1 140
裸多签的问题 141
支付到脚本哈希 141
实现p2sh 147
更复杂的脚本 148
地址 148
练习2 149
练习3 149
p2sh签名验证 149
练习4 152
练习5 152
总结 152
第9章 区块 153
创块交易 153
练习1 154
签名脚本 154
BIP0034 155
练习2 156
区块头 156
练习3 157
练习4 157
练习5 157
版本号 157
练习6 158
练习7 159
练习8 159
父区块 159
默克尔根 159
时间戳 159
工作量 160
序号 160
工作量证明 160
矿工如何生成新的哈希 161
计算目标 161
练习9 162
计算难度 162
练习10 163
校验工作量证明 163
练习11 163
计算难度调整 163
练习12 165
练习13 165
总结 165
第10章 比特币网络通信 166
网络消息 166
练习1 168
练习2 168
练习3 168
解析payload 168
练习4 169
网络握手 170
连接到比特币网络 170
练习5 172
获取区块头信息 173
练习6 174
区块头响应 174
总结 176
第11章 简单支付验证 177
动机 177
默克尔树 178
默克尔树的父哈希 179
练习1 180
默克尔父节点层数 180
练习2 181
默克尔根 181
练习3 182
区块中的默克尔根 182
练习4 183
默克尔树的使用 183
默克尔块 184
默克尔树结构 186
练习5 187
实现默克尔树 187
默克尔块命令 192
练习6 193
标记位和哈希的使用 193
练习7 197
总结 197
第12章 布隆过滤器 198
什么是布隆过滤器 198
练习1 200
布隆过滤器进阶 200
BIP0037布隆过滤器 201
练习2 203
练习3 203
载入一个布隆过滤器 203
练习4 204
获取默克尔块 204
练习5 205
获取相关交易 205
练习6 206
总结 206
第13章 隔离见证 207
支付到见证公钥哈希 207
交易的延展性 207
修复延展性问题 208
p2wpkh交易 209
p2sh-p2wpkh 212
实现p2wpkh和p2sh-p2wpkh交易 216
支付到见证脚本哈希 220
p2sh-p2wsh 223
实现p2wsh和p2sh-p2wsh交易 228
其他方面的改善 230
总结 230
第14章 高级主题和进阶 231
推荐的学习主题 231
钱包 231
支付通道和闪电网络 232
贡献代码 232
推荐的项目 233
测试链钱包 233
区块链浏览器 233
网上商店 233
工具库 234
寻找工作 234
总结 234
附录 练习答案 235
第1章 有限域 11
学习更高等的数学 11
有限域的定义 12
定义有限集合 12
使用Python构建有限域 13
练习1 14
模运算 14
Python的模运算 16
有限域的加法和减法 16
练习2 18
使用Python编写有限域的加法和减法 18
练习3 19
有限域的乘法和指数运算 19
练习4 20
练习5 20
使用Python编写乘法 20
练习6 20
使用Python编写指数运算 21
练习7 21
有限域的除法 21
练习8 23
练习9 23
重新定义指数运算 24
总结 25
第2章 椭圆曲线 26
定义 26
使用Python编写椭圆曲线 31
练习1 32
练习2 32
点的加法 32
点加法的性质 35
实现点加法 37
练习3 38
x1≠x2时的点加法 38
练习4 40
实现x1≠x2时的点加法 40
练习5 40
P1 = P2时的点加法 40
练习6 42
实现P1 = P2时的点加法 42
练习7 42
实现另一个特例 42
总结 43
第3章 椭圆曲线密码学 44
实数域上的椭圆曲线 44
有限域上的椭圆曲线 45
练习1 46
实现有限域上的椭圆曲线 46
有限域上的点加法 48
实现有限域上的点加法 49
练习2 49
练习3 49
椭圆曲线的标量乘法 49
练习4 51
再议标量乘法 51
数学上的群 52
恒等元 53
封闭性 53
可逆性 54
交换律 54
结合律 55
练习5 56
实现标量乘法 56
定义比特币的曲线 58
使用secp256k1 59
公钥密码学 61
签名和验证 61
雕刻靶坐标 62
验证的细节 64
验证签名 65
练习6 66
编程实现签名验证 66
签名的细节 67
创造签名 67
练习7 68
编程实现消息签名 68
总结 70
第4章 序列化 72
未压缩的SEC格式 72
练习1 73
压缩的SEC格式 73
练习2 77
DER签名 77
练习3 79
Base58 79
转录你的公钥 79
练习4 81
地址格式 81
练习5 82
WIF格式 82
练习6 83
再议大端序和小端序 83
练习7 83
练习8 83
练习9 84
总结 84
第5章 交易 85
交易的组成 85
版本号 87
练习1 88
输入 88
解析脚本 92
练习2 92
输出 93
练习3 94
时间锁 94
练习4 95
练习5 95
实现交易的序列化 96
交易手续费 96
计算交易手续费 98
练习6 98
总结 98
第6章 Script 99
Script机制 99
Script如何运作 100
几个操作符的例子 101
实现操作符 101
练习1 102
解析脚本字段 102
实现一个Script解析工具和序列化工具 103
合并脚本字段 105
实现合并命令集 106
标准脚本 106
p2pk 107
实现脚本计算 110
栈元素的本质 112
练习2 113
p2pk的缺陷 113
使用p2pkh修复问题 114
p2pkh 114
脚本可以被任意构建 118
练习3 120
脚本的使用 121
练习4 121
SHA-1 Pin躠ta 122
总结 122
第7章 交易的创建与验证 123
验证交易 123
校验交易输入是否可用 123
校验交易输入的总和与交易输出的总和 124
校验签名 125
练习1 129
练习2 129
校验交易的全部内容 129
创建交易 129
构建交易 130
制作交易 132
签名交易 133
练习3 134
在测试链上创建你自己的交易 134
练习4 135
练习5 135
总结 135
第8章 支付到脚本哈希交易 136
裸多签 136
实现OP_CHECKMULTISIG 140
练习1 140
裸多签的问题 141
支付到脚本哈希 141
实现p2sh 147
更复杂的脚本 148
地址 148
练习2 149
练习3 149
p2sh签名验证 149
练习4 152
练习5 152
总结 152
第9章 区块 153
创块交易 153
练习1 154
签名脚本 154
BIP0034 155
练习2 156
区块头 156
练习3 157
练习4 157
练习5 157
版本号 157
练习6 158
练习7 159
练习8 159
父区块 159
默克尔根 159
时间戳 159
工作量 160
序号 160
工作量证明 160
矿工如何生成新的哈希 161
计算目标 161
练习9 162
计算难度 162
练习10 163
校验工作量证明 163
练习11 163
计算难度调整 163
练习12 165
练习13 165
总结 165
第10章 比特币网络通信 166
网络消息 166
练习1 168
练习2 168
练习3 168
解析payload 168
练习4 169
网络握手 170
连接到比特币网络 170
练习5 172
获取区块头信息 173
练习6 174
区块头响应 174
总结 176
第11章 简单支付验证 177
动机 177
默克尔树 178
默克尔树的父哈希 179
练习1 180
默克尔父节点层数 180
练习2 181
默克尔根 181
练习3 182
区块中的默克尔根 182
练习4 183
默克尔树的使用 183
默克尔块 184
默克尔树结构 186
练习5 187
实现默克尔树 187
默克尔块命令 192
练习6 193
标记位和哈希的使用 193
练习7 197
总结 197
第12章 布隆过滤器 198
什么是布隆过滤器 198
练习1 200
布隆过滤器进阶 200
BIP0037布隆过滤器 201
练习2 203
练习3 203
载入一个布隆过滤器 203
练习4 204
获取默克尔块 204
练习5 205
获取相关交易 205
练习6 206
总结 206
第13章 隔离见证 207
支付到见证公钥哈希 207
交易的延展性 207
修复延展性问题 208
p2wpkh交易 209
p2sh-p2wpkh 212
实现p2wpkh和p2sh-p2wpkh交易 216
支付到见证脚本哈希 220
p2sh-p2wsh 223
实现p2wsh和p2sh-p2wsh交易 228
其他方面的改善 230
总结 230
第14章 高级主题和进阶 231
推荐的学习主题 231
钱包 231
支付通道和闪电网络 232
贡献代码 232
推荐的项目 233
测试链钱包 233
区块链浏览器 233
网上商店 233
工具库 234
寻找工作 234
总结 234
附录 练习答案 235
前 言
本书将讨论比特币技术的基本内容。书中不包含有关货币、经济学以及社会进程的比特币话题,但是了解比特币背后的工作原理将给我们带来对各种可能性的深入洞察。当下有一种在不真正了解的情况下大肆鼓吹比特币和区块链的趋势。这本书将是这种趋势的“解药”。
毕竟现在有许多关于比特币的书籍,它们有的涵盖了比特币的历史与经济方面,有的提供了详细的技术说明。本书讲解如何编写一个包含所有必要组件的比特币库,以此让人们了解比特币。在本书中,编写这样一个库并不是为了使其完美或高效,而是为了让读者学习比特币技术。
本书的适用人群
本书适用于想通过编写代码来学习比特币的程序员。他们将通过从零开始编写比特币库的基础组件来学习比特币,但本书并不能用作查询某些特征细节的参考书。
书中大部分的内容都取自我教授开发者比特币知识的为期两天的讲座课程。在写作本书的过程中,我已经讲授过20多次该课程,学生超过400人。
当你读完这本书后,你将不仅会创建一笔交易,而且能够从连接节点中获取所有你需要的数据,然后通过网络发送一笔交易。本书涵盖了完成该行为所需的所有知识,从数学基础到解析数据,再到比特币网络连接和最后进行的区块验证。
预备知识
阅读本书的前提条件是你了解编程语言,尤其是Python。比特币库本身是用Python 3编写的,许多练习都可以在特定的环境(如Jupyter笔记本)中完成。熟练掌握Python有助于阅读本书,但即使只具有Python的基础知识也足以学习书中的许多概念。
阅读本书也需要一定的数学知识,第1章和第2章介绍了与本书相关的数学概念,非数学专业的人可能不熟悉这些概念。拥有代数知识应足以帮你理解新概念,并完成这些章节中涵盖的练习。
诸如哈希函数这样的常见计算机科学知识将派上用场,但这些知识对于完成本书中的练习并不是必需的。
本书的结构
本书共分为14章。每一章都是在前一章的基础上构建的,因此我们能从头至尾了解构建比特币库的全过程。粗略地说,第1~4章建立我们需要的数学工具。第5~8章介绍交易,这是比特币的基本单位。第9~12章介绍区块和网络。最后两章涵盖一些高级主题,但实际上并不需要你编写代码。
第1章和第2章介绍我们需要的一些数学知识。 要了解第3章中的椭圆曲线密码学,需要有限域和椭圆曲线知识。在第3章后半部分介绍了公钥密码学之后,第4章增加了解析和序列化,这是存储和传输加密文本的方式。
第5章介绍交易的结构。第6章介绍比特币背后的智能合约语言Script。第7章以前面的章节为基础,展示如何基于前面四章中的椭圆曲线密码学来验证和创建一笔交易。第8章建立支付到脚本哈希(p2sh)交易的工作方式,这是一种制作更强大的智能合约的方式。
第9章介绍区块,它是一组有序交易。第10章介绍比特币中的网络通信。第11章和第12章讨论一个轻节点或者一个无法访问整个区块链的软件如何向存储整个区块链的节点请求数据或向其广播数据。
第13章介绍隔离见证,这是2017年推出的比特币软件向后兼容的升级。第14章提供进一步研究的建议。这两章是选读章节,希望为你学习更多知识提供一个起点。
第1~12章的练习要求你从头开始构建库。答案在本书附录和GitHub存储库(https://github.com/jimmysong/programmingbitcoin)的相应章节目录中。你将编写许多Python类,不仅要验证交易/区块,还要创建自己的交易并将其广播到网络上。
第12章中的最后一个练习特别要求你连接到测试链上的另一个节点,计算你可以花的钱,构造和签名交易,然后在网络上广播。前11章为你完成此练习打下了基础。
你的代码需要通过很多单元测试。本书是按照这种方式设计的,因此你可以写一些代码中的“有趣”部分。为了帮助你进步,我们将在整个过程中加入大量代码和图表。
配置
为了充分利用本书,你需要创建一个环境,在其中可以运行示例代码并进行练习。以下是设置这一环境所需的步骤:
1. 在你的机器上安装Python 3.5或者更高版本:
Windows
https://www.python.org/ftp/python/3.6.2/python-3.6.2-amd64.exe
macOS
https://www.python.org/ftp/python/3.6.2/python-3.6.2-macosx10.6.pkg
Linux
请查看你的版本文档(许多Linux版本如Ubuntu都预先安装了Python 3.5以上的版本)。
2. 通过下载脚本安装pip工具,下载网址为https://bootstrap.pypa.io/get-pip.py。
3. 使用Python 3运行该脚本:
$ python3 get-pip.py
4. 安装Git工具。下载及安装该工具的方式可以在https://git-scm.com/downloads上找到。
5. 下载本书的源代码:
$ git clone https://github.com/jimmysong/programmingbitcoin
$ cd programmingbitcoin
6. 安装virtualenv工具:
$ pip install virtualenv
7. 安装Python依赖:
Linux/macOS
$ virtualenv -p python3 .venv
$ . .venv/bin/activate
(.venv) $ pip install -r requirements.txt
Windows
C:programmingbitcoin> virtualenv -p
C:PathToYourPythonInstallationPython.exe .venv
C:programmingbitcoin> .venvScriptsactivate.bat
C:programmingbitcoin> pip install -r require
毕竟现在有许多关于比特币的书籍,它们有的涵盖了比特币的历史与经济方面,有的提供了详细的技术说明。本书讲解如何编写一个包含所有必要组件的比特币库,以此让人们了解比特币。在本书中,编写这样一个库并不是为了使其完美或高效,而是为了让读者学习比特币技术。
本书的适用人群
本书适用于想通过编写代码来学习比特币的程序员。他们将通过从零开始编写比特币库的基础组件来学习比特币,但本书并不能用作查询某些特征细节的参考书。
书中大部分的内容都取自我教授开发者比特币知识的为期两天的讲座课程。在写作本书的过程中,我已经讲授过20多次该课程,学生超过400人。
当你读完这本书后,你将不仅会创建一笔交易,而且能够从连接节点中获取所有你需要的数据,然后通过网络发送一笔交易。本书涵盖了完成该行为所需的所有知识,从数学基础到解析数据,再到比特币网络连接和最后进行的区块验证。
预备知识
阅读本书的前提条件是你了解编程语言,尤其是Python。比特币库本身是用Python 3编写的,许多练习都可以在特定的环境(如Jupyter笔记本)中完成。熟练掌握Python有助于阅读本书,但即使只具有Python的基础知识也足以学习书中的许多概念。
阅读本书也需要一定的数学知识,第1章和第2章介绍了与本书相关的数学概念,非数学专业的人可能不熟悉这些概念。拥有代数知识应足以帮你理解新概念,并完成这些章节中涵盖的练习。
诸如哈希函数这样的常见计算机科学知识将派上用场,但这些知识对于完成本书中的练习并不是必需的。
本书的结构
本书共分为14章。每一章都是在前一章的基础上构建的,因此我们能从头至尾了解构建比特币库的全过程。粗略地说,第1~4章建立我们需要的数学工具。第5~8章介绍交易,这是比特币的基本单位。第9~12章介绍区块和网络。最后两章涵盖一些高级主题,但实际上并不需要你编写代码。
第1章和第2章介绍我们需要的一些数学知识。 要了解第3章中的椭圆曲线密码学,需要有限域和椭圆曲线知识。在第3章后半部分介绍了公钥密码学之后,第4章增加了解析和序列化,这是存储和传输加密文本的方式。
第5章介绍交易的结构。第6章介绍比特币背后的智能合约语言Script。第7章以前面的章节为基础,展示如何基于前面四章中的椭圆曲线密码学来验证和创建一笔交易。第8章建立支付到脚本哈希(p2sh)交易的工作方式,这是一种制作更强大的智能合约的方式。
第9章介绍区块,它是一组有序交易。第10章介绍比特币中的网络通信。第11章和第12章讨论一个轻节点或者一个无法访问整个区块链的软件如何向存储整个区块链的节点请求数据或向其广播数据。
第13章介绍隔离见证,这是2017年推出的比特币软件向后兼容的升级。第14章提供进一步研究的建议。这两章是选读章节,希望为你学习更多知识提供一个起点。
第1~12章的练习要求你从头开始构建库。答案在本书附录和GitHub存储库(https://github.com/jimmysong/programmingbitcoin)的相应章节目录中。你将编写许多Python类,不仅要验证交易/区块,还要创建自己的交易并将其广播到网络上。
第12章中的最后一个练习特别要求你连接到测试链上的另一个节点,计算你可以花的钱,构造和签名交易,然后在网络上广播。前11章为你完成此练习打下了基础。
你的代码需要通过很多单元测试。本书是按照这种方式设计的,因此你可以写一些代码中的“有趣”部分。为了帮助你进步,我们将在整个过程中加入大量代码和图表。
配置
为了充分利用本书,你需要创建一个环境,在其中可以运行示例代码并进行练习。以下是设置这一环境所需的步骤:
1. 在你的机器上安装Python 3.5或者更高版本:
Windows
https://www.python.org/ftp/python/3.6.2/python-3.6.2-amd64.exe
macOS
https://www.python.org/ftp/python/3.6.2/python-3.6.2-macosx10.6.pkg
Linux
请查看你的版本文档(许多Linux版本如Ubuntu都预先安装了Python 3.5以上的版本)。
2. 通过下载脚本安装pip工具,下载网址为https://bootstrap.pypa.io/get-pip.py。
3. 使用Python 3运行该脚本:
$ python3 get-pip.py
4. 安装Git工具。下载及安装该工具的方式可以在https://git-scm.com/downloads上找到。
5. 下载本书的源代码:
$ git clone https://github.com/jimmysong/programmingbitcoin
$ cd programmingbitcoin
6. 安装virtualenv工具:
$ pip install virtualenv
7. 安装Python依赖:
Linux/macOS
$ virtualenv -p python3 .venv
$ . .venv/bin/activate
(.venv) $ pip install -r requirements.txt
Windows
C:programmingbitcoin> virtualenv -p
C:PathToYourPythonInstallationPython.exe .venv
C:programmingbitcoin> .venvScriptsactivate.bat
C:programmingbitcoin> pip install -r require
评论
还没有评论。