新書推薦:
《
文本的密码:社会语境中的宋代文学
》
售價:HK$
69.0
《
启微·狂骉年代:西洋赛马在中国
》
售價:HK$
80.5
《
有趣的中国古建筑
》
售價:HK$
68.8
《
十一年夏至
》
售價:HK$
78.2
《
如何打造成功的商业赛事
》
售價:HK$
91.9
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:HK$
59.8
《
慈悲与玫瑰
》
售價:HK$
89.7
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:HK$
78.2
|
編輯推薦: |
一本书讲透区块链技术
系统全面:从区块链系统构建,到完整DAPP开发,全流程知识点覆盖
由浅入深:从区块链基础切入,一步步掌握智能合约、DAPP、以太坊钱包开发
案例丰富:结合案例讲解,生动形象,附赠实战项目源代码
区块链专业平台 登链社区、无退社区 重磅推荐!
|
內容簡介: |
区块链现在仍然是一个新生事物,就像其他所有新生事物一样,充满了争议。但不可否认,它也给逐渐变得稳定的互联网带来一股新的活力。
本书力图为区块链从业人员提供一份完整的开发指南。
本书首先从区块链的起源出发,简单介绍区块链的基本概念、历史以及区块链底层所使用的技术,如密码学、零知识证明等。将比特币作为样板,简单介绍了它的历史和各种设计取舍。接下来是这本书的重点——区块链应用开发,主要内容包括以太坊工作原理、以太坊智能合约的开发与实践,等等。
这是一本非常全面的智能合约开发指导书,包含大量的实例代码以及实战讲解,让读者能够跟随书本开发出各种基于智能合约的可交互应用。书的末尾,还讲解了如何开发一个简单的钱包,来完成以太坊账号的生成、以太坊转账、调用合约等功能。
|
關於作者: |
熊丽兵(网络ID:Tiny熊),北京航空航天大学硕士,登链科技创始人、登链社区(https://learnblockchain.cn/)发起人,图书《精通以太坊智能合约开发》作者。
董一凡,河海大学本科学士,上海笛艺符科技联合创始人、首席技术官,无退社区特邀专栏作者。
周小雪,中国科学技术大学信息安全专业学士,复旦大学硕士。无退社区联合创始人,金融领域十多年量化经验。
|
目錄:
|
第1章 区块链概要 1
1.1 区块链诞生之前1
1.2 区块链的诞生标志—比特币 1
1.3 比特币之后的区块链2
1.3.1 比特币与区块链的分离 2
1.3.2 智能合约 2
1.4 分布式系统3
1.5 什么是区块链 5
1.6 代币是什么6
1.7 什么是区块6
1.7.1 区块是怎么产生的 6
1.7.2 区块生成时间 7
1.8 区块链的硬分叉8
1.9 区块链的去中心化 8
1.10 区块链的主要种类9
1.10.1 公链(public blockchain) 9
1.10.2 私链(private blockchain) 10
1.10.3 联盟链(consortium blockchain) 10
1.11 加密货币 11
1.12 智能合约(smart contract) 12
1.12.1 什么是智能合约 12
1.12.2 智能合约的实现方式 12
1.13 区块链应用 13
1.13.1 金融服务 13
1.13.2 游戏 14
1.13.3 数字资产 15
1.13.4 供应链管理 15
1.13.5 其他 15
1.14 比特币的历史16
1.14.1 比特币前传 16
1.14.2 比特币面世 16
1.14.3 比特币发展中的主要事件 18
1.15 比特币的设计取舍19
1.15.1 区块链 19
1.15.2 共识算法 19
1.15.3 比特币中的交易 20
1.15.4 比特币的供应模式 21
1.15.5 去中心化与中心化 22
1.15.6 可替换性 22
区块链应用开发指南:业务场景剖析与实战
第2章 密码学基础24
第3章 零知识证明 54
2.1 密码学发展历史24
2.1.1 密码学发展的三个阶段 24
2.1.2 近代密码学的开端 26
2.1.3 区块链去中心化密钥共享 28
2.2 密码系统 31
2.2.1 定义 31
2.2.2 对称加密 32
2.2.3 非对称加密 32
2.3 区块链常用密码学知识 33
2.3.1 Hash(哈希)算法 33
2.3.2 RSA算法 36
2.3.3 默克尔树 36
2.3.4 数字签名 39
2.3.5 零知识证明和Zcash 40
2.4 加密货币 41
3.1 抛砖引玉:初识零知识证明 56
3.1.1 为什么会有零知识证明? 56
3.1.2 简述零知识证明在区块链中的应用 57
3.2 零知识证明使用场景案例 59
3.2.1 场景一:万圣节糖果59
3.2.2 场景二:洞穴 60
3.2.3 场景三:数独挑战 61
2.4.1 什么是加密货币 41
2.4.2 热门加密货币 42
2.4.3 运作方式 43
2.4.4 加密货币的安全性 44
2.5 加密经济学45
2.5.1 货币的功能 45
2.5.2 货币的属性 46
2.5.3 货币的种类 47
2.5.4 Fiat货币 47
2.5.5 比特币有货币属性吗48
2.5.6 加密货币经济的未来49
2.6 比特币中的密码学 49
2.6.1 比特币中的哈希处理50
2.6.2 比特币中的公钥加密50
2.6.3 比特币中的钱包和数字签名 52
3.2.4 场景四:一个“真实世界中”的案例 67
3.3 零知识证明的应用发展 74
3.3.1 区块链扩容的挑战 75
3.3.2 ZK Sync的承诺:免信任、保密、快速 77
3.3.3 RedShift:透明的通用SNARK 81
3.4 libsnark开源实践简介 81
3.5 术语介绍 88
第4章 进入以太坊世界 90
第5章 探索智能合约109
4.1 以太坊概述90
4.2 智能合约 91
4.3 账户93
4.4 以太币的单位 95
4.5 以太坊虚拟机(EVM) 95
4.6 以太坊客户端 97
4.6.1 geth安装 97
4.6.2 geth使用 97
4.7 以太坊钱包98
4.8 以太坊交易100
4.8.1 价值传递 100
4.8.2 创建智能合约 101
4.8.3 调用合约方法 101
4.9 以太坊网络102
5.1 Remix IDE109
5.2 MetaMask110
5.2.1 安装MetaMask 110
5.2.2 配置MetaMask账号 110
5.2.3 为账号充值以太币 111
5.3 合约编写 113
5.4 合约编译 114
5.5 合约部署及运行115
4.9.1 主网网络(Mainnet)102
4.9.2 测试网络(Testnet)102
4.9.3 私有网络、开发者模式 103
4.9.4 模拟区块链网络 103
4.10 以太坊历史回顾 104
4.10.1 奥林匹克(Olympic)104
4.10.2 边疆(Frontier) 104
4.10.3 家园(Homestead)104
4.10.4 DAO分叉105
4.10.5 拜占庭(Byzantium) 106
4.10.6 君士坦丁堡(Constantinople) 106
4.10.7 伊斯坦布尔(Istanbul) 107
4.10.8 以太坊2.0 107
5.5.1 部署JavaScript VM 115
5.5.2 部署到以太坊网络 117
5.6 合约内容 119
5.6.1 编译器版本声明 119
5.6.2 定义合约 119
5.6.3 状态变量 120
5.6.4 合约函数 120
区块链应用开发指南:业务场景剖析与实战
第6章 Solidity语言基础 121
第7章 Solidity进阶 167
6.1 Solidity数据类型 121
6.1.1 值类型 122
6.1.2 整型 122
6.1.3 地址类型 125
6.1.4 合约类型 128
6.1.5 函数类型 130
6.1.6 引用类型 132
6.1.7 数组 134
6.1.8 映射 139
6.1.9 结构体 140
6.2 合约141
6.2.1 可见性 142
6.2.2 构造函数 143
6.2.3 使用new创建合约 143
6.2.4 constant状态常量144
7.1 合约继承 167
7.1.1 多重继承 168
7.1.2 基类构造函数 169
7.1.3 抽象合约 170
7.1.4 函数重写(overriding)171
7.2 接口172
7.3 库 174
7.3.1 内嵌库 175
7.3.2 链接库 175
6.2.5 immutable不可变量 145
6.2.6 视图函数 146
6.2.7 纯函数 146
6.2.8 访问器函数(getter) 147
6.2.9 receive函数(接收函数) 149
6.2.10 fallback函数(回退函数) 150
6.2.11 函数修改器 151
6.2.12 函数重载(Function Overloading) 155
6.2.13 函数返回多个值 156
6.2.14 事件 157
6.3 错误处理及异常159
6.3.1 错误处理函数 159
6.3.2 require还是assert? 161
6.3.3 try/catch 162
7.3.3 Using for 176
7.4 应用程序二进制接口(ABI)178
7.4.1 ABI编码 178
7.4.2 函数选择器 179
7.4.3 参数编码 180
7.4.4 ABI接口描述 181
7.5 Solidity全局API 183
7.5.1 区块和交易属性API 184
7.5.2 ABI编码及解码函数API184
7.6 使用内联汇编 186
7.6.1 汇编基础概念 186
7.6.2 Solidity中引入汇编 188
7.6.3 汇编变量定义与赋值189
7.6.4 汇编中的块和作用域190
7.6.5 汇编中访问变量 190
8.1 OpenZeppelin 194
8.2 SafeMath安全算数运算 196
8.3 地址工具 197
8.4 ERC165接口发现 198
8.5 ERC20代币 200
8.6 ERC777功能型代币 205
8.6.1 ERC1820接口注册表 206
8.6.2 ERC777标准 211
9.1 什么是DAPP 252
9.2 Web3.js 254
9.2.1 Web3.js简介 254
9.2.2 引入Web3.js 255
9.2.3 用web3.js跟合约交互 256
9.3 DAPP开发工具257
9.3.1 Truffle 258
9.3.2 Ganache 258
7.6.6 for循环 191
7.6.7 if判断语句 191
7.6.8 汇编Switch语句 192
7.6.9 汇编函数 192
7.6.10 元组 193
7.6.11 汇编缺点 193
8.6.3 ERC777实现 217
8.6.4 实现钩子函数 227
8.7 ERC721231
8.7.1 ERC721代币规范 232
8.7.2 ERC721实现 235
8.8 简单的支付通道247
8.8.1 创建支付通道智能合约 247
8.8.2 支付签名 250
9.4 DAPP投票应用259
9.4.1 投票应用需求 260
9.4.2 创建项目 260
9.4.3 编写智能合约 261
9.4.4 合约编译及部署 263
9.4.5 合约部署 264
9.4.6 执行部署 267
9.4.7 合约测试 270
第8章 智能合约实战 194
第9章 去中心化DAPP实战252
区块链应用开发指南:业务场景剖析与实战
9.4.8 编写应用前端 272
9.4.9 前端与合约交互 273
9.4.10 运行DAPP276
9.4.11 部署到公网服务器 278
9.5 使用Vue.js开发众筹DAPP 279
9.5.1 Vue.js简介 279
9.5.2 众筹需求分析 281
9.5.3 实现众筹合约 281
9.5.4 合约部署 283
9.5.5 众筹Web界面实现 284
9.5.6 与众筹合约交互 286
9.5.7 DAPP运行 291
9.5.8 DAPP发布 292
9.6 后台监听合约事件 293
9.6.1 Node.js及Express简介 293
9.6.2 常驻服务监听合约事件 296
9.6.3 MySQL数据库环境准备 298
9.6.4 创建数据库及表 300
9.6.5 监听数据入库 301
9.6.6 为前端提供众筹记录303
10.1 数字钱包基础327
10.2 钱包相关提案328
10.2.1 BIP32分层推导 329
10.2.2 密钥路径及BIP44 331
10.2.3 BIP39 331
10.2.4 生成助记词 332
9.7 DAPP去中心化存储 306
9.7.1 IPFS协议 307
9.7.2 IPFS安装 308
9.7.3 IPFS初始化 308
9.7.4 上传文件到IPFS309
9.7.5 上传目录到IPFS312
9.8 Embark框架 312
9.8.1 Embark概述312
9.8.2 Embark安装313
9.9 Embark重写投票DAPP 313
9.9.1 创建Embark项目313
9.9.2 Embark项目结构314
9.9.3 编写合约及部署 315
9.9.4 Embark DashBoard 316
9.9.5 Embark Cockpit 317
9.9.6 Embark Artifacts 318
9.9.7 前端index.html 319
9.9.8 使用Artifacts与合约交互321
9.9.9 Embark部署324
10.2.5 用助记词推导出种子 333
10.3 钱包功能 334
10.4 创建钱包账号335
10.4.1 随机数为私钥创建账号 335
10.4.2 助记词创建账号 337
10.5 导入账号 339
第10章 以太坊钱包开发 327
10.5.2 导出和导入keystore 344
10.6 获取钱包余额347
10.6.1 连接以太坊网络 347
10.6.2 查询余额 348
10.7 发送交易 350
10.7.1 构造交易 350
10.7.2 交易签名 352
10.7.3 发送交易 352
10.7.4 Ethers.js发送交易 352
10.8 交易ERC20代币 354
10.8.1 构造合约对象 355
10.8.2 获取代币余额 355
10.8.2 转移代币 356
|
內容試閱:
|
推荐序
区块链本质上是一种健壮和安全的分布式状态机,典型的技术构成包括点对点通信、密码学、共识算法、数据库技术和虚拟机。这也构成了区块链必不可少的5项核心能力。通俗来讲,隐私保护就是“只有群里的人才能看到群内信息”,共同维护就是“每个人都同时参与维护这个群”,分布式存储就是“群聊天记录,每个群成员的手机里都有一个备份”,密码学就是“群里面只说一种方言,其他地方的人看不懂”,局部去中心就是“群主可以有权把群成员踢掉”,共识算法可以类比为“群成员签到后自动回复问候语的机制”,点对点通信就是“虽然我们在一个群里,但我们仍然可以私聊”。打这些比方,我是想说明:区块链很像是一个社区(群),只不过有些社区是应用层面的,而有些社区是基础设施层面的,但都是关系和网络。小的关系网络是人与人,大一点就是公司与公司,再大一点是行业与行业,甚至还有国家与国家,这些“前台”的背后是数据与数据、信息与信息、机器与机器之间的关系、结构和协同机制。
区块链应用开发指南:业务场景剖析与实战
我之所以愿意在30分钟内砸下数百万支持“无退技术社区”:一方面是因为社区创始人马骏先生很多年前就是国内知名技术社区的大咖,他的理念、心胸与区块链的哲学思想不谋而合;另一方面是因为“无退技术社区”这个名字也很打动我,对!就是这个名字。任何一个人,一旦进入网络(从出生那一刻开始)就失去了可退之路,因为在呱呱坠地的那一秒钟后,很多人的身份就变了,情感连接、关系连接、利益连接瞬间产生,离散的点成为互相干扰的点,所有的“单点”决策都变成了“网络投票决策”,除非从底层把数据库“清零”,但有这样的机制吗?所以“无退”既是无法退,也是退不出来,人生不可撤销、不可逆,我们只有不断前行才能“优化网络”。
本书把区块链技术深入浅出地进行了解读,对那些希望进入行业、了解关键技术以及这些技术应用方法的读者来说有很大帮助。如果遇到不清楚的细节还可以关注作者发起设立的“无退技术社区”,里面有大量成熟的应用以及更多可视化的解读,相信读者读后会颇有收获。
另外我也要感谢马骏先生在行业发展、技术研发上不断地给我建议和帮助,区块链是伸向未来的一只手,我相信世界会更平、天空会更高、路会更远,到了要真正退出的那一刻,我们的灵魂会更纯粹、更洁净。
方天叶上海技术交易所副总裁
|
|