封面
版权信息
作者简介
推荐序
第1章 区块链概要
1.1 区块链诞生之前
1.2 区块链的诞生标志——比特币
1.3 比特币之后的区块链
1.3.1 比特币与区块链的分离
1.3.2 智能合约
1.4 分布式系统
1.5 什么是区块链
1.6 代币是什么
1.7 什么是区块
1.7.1 区块是怎么产生的
1.7.2 区块生成时间
1.8 区块链的硬分叉
1.9 区块链的去中心化
1.10 区块链的主要种类
1.10.1 公链(public blockchain)
1.10.2 私链(private blockchain)
1.10.3 联盟链(consortium blockchain)
1.11 加密货币
1.12 智能合约(smart contract)
1.12.1 什么是智能合约
1.12.2 智能合约的实现方式
1.13 区块链应用
1.13.1 金融服务
1.13.2 游戏
1.13.3 数字资产
1.13.4 供应链管理
1.13.5 其他
1.14 比特币的历史
1.14.1 比特币前传
1.14.2 比特币面世
1.14.3 比特币发展中的主要事件
1.15 比特币的设计取舍
1.15.1 区块链
1.15.2 共识算法
1.15.3 比特币中的交易
1.15.4 比特币的供应模式
1.15.5 去中心化与中心化
1.15.6 可替换性
第2章 密码学基础
2.1 密码学发展历史
2.1.1 密码学发展的三个阶段
2.1.2 近代密码学的开端
2.1.3 区块链去中心化密钥共享
2.2 密码系统
2.2.1 定义
2.2.2 对称加密
2.2.3 非对称加密
2.3 区块链常用密码学知识
2.3.1 Hash(哈希)算法
2.3.2 RSA算法
2.3.3 默克尔树
2.3.4 数字签名
2.3.5 零知识证明和Zcash
2.4 加密货币
2.4.1 什么是加密货币
2.4.2 热门加密货币
2.4.3 运作方式
2.4.4 加密货币的安全性
2.5 加密经济学
2.5.1 货币的功能
2.5.2 货币的属性
2.5.3 货币的种类
2.5.4 Fiat货币
2.5.5 比特币有货币属性吗
2.5.6 加密货币经济的未来
2.6 比特币中的密码学
2.6.1 比特币中的哈希处理
2.6.2 比特币中的公钥加密
2.6.3 比特币中的钱包和数字签名
第3章 零知识证明
3.1 抛砖引玉:初识零知识证明
3.1.1 为什么会有零知识证明?
3.1.2 简述零知识证明在区块链中的应用
3.2 零知识证明使用场景案例
3.2.1 场景一:万圣节糖果
3.2.2 场景二:洞穴
3.2.3 场景三:数独挑战
3.2.4 场景四:一个“真实世界中”的案例
3.3 零知识证明的应用发展
3.3.1 区块链扩容的挑战
3.3.2 ZK Sync的承诺:免信任、保密、快速
3.3.3 RedShift:透明的通用SNARK
3.4 libsnark开源实践简介
3.5 术语介绍
第4章 进入以太坊世界
4.1 以太坊概述
4.2 智能合约
4.3 账户
4.4 以太币的单位
4.5 以太坊虚拟机(EVM)
4.6 以太坊客户端
4.6.1 geth安装
4.6.2 geth使用
4.7 以太坊钱包
4.8 以太坊交易
4.8.1 价值传递
4.8.2 创建智能合约
4.8.3 调用合约方法
4.9 以太坊网络
4.9.1 主网网络(Mainnet)
4.9.2 测试网络(Testnet)
4.9.3 私有网络、开发者模式
4.9.4 模拟区块链网络
4.10 以太坊历史回顾
4.10.1 奥林匹克(Olympic)
4.10.2 边疆(Frontier)
4.10.3 家园(Homestead)
4.10.4 DAO分叉
4.10.5 拜占庭(Byzantium)
4.10.6 君士坦丁堡(Constantinople)
4.10.7 伊斯坦布尔(Istanbul)
4.10.8 以太坊2.0
第5章 探索智能合约
5.1 Remix IDE
5.2 MetaMask
5.2.1 安装MetaMask
5.2.2 配置MetaMask账号
5.2.3 为账号充值以太币
5.3 合约编写
5.4 合约编译
5.5 合约部署及运行
5.5.1 部署JavaScript VM
5.5.2 部署到以太坊网络
5.6 合约内容
5.6.1 编译器版本声明
5.6.2 定义合约
5.6.3 状态变量
5.6.4 合约函数
第6章 Solidity语言基础
6.1 Solidity数据类型
6.1.1 值类型
6.1.2 整型
6.1.3 地址类型
6.1.4 合约类型
6.1.5 函数类型
6.1.6 引用类型
6.1.7 数组
6.1.8 映射
6.1.9 结构体
6.2 合约
6.2.1 可见性
6.2.2 构造函数
6.2.3 使用new创建合约
6.2.4 constant状态常量
6.2.5 immutable不可变量
6.2.6 视图函数
6.2.7 纯函数
6.2.8 访问器函数(getter)
6.2.9 receive函数(接收函数)
6.2.10 fallback函数(回退函数)
6.2.11 函数修改器
6.2.12 函数重载(Function Overloading)
6.2.13 函数返回多个值
6.2.14 事件
6.3 错误处理及异常
6.3.1 错误处理函数
6.3.2 require还是assert?
6.3.3 try/catch
第7章 Solidity进阶
7.1 合约继承
7.1.1 多重继承
7.1.2 基类构造函数
7.1.3 抽象合约
7.1.4 函数重写(overriding)
7.2 接口
合约间利用接口通信
7.3 库
7.3.1 内嵌库
7.3.2 链接库
7.3.3 Using for
7.4 应用程序二进制接口(ABI)
7.4.1 ABI编码
7.4.2 函数选择器
7.4.3 参数编码
7.4.4 ABI接口描述
7.5 Solidity全局API
7.5.1 区块和交易属性API
7.5.2 ABI编码及解码函数API
7.5.3 数学和密码学函数API
7.6 使用内联汇编
7.6.1 汇编基础概念
7.6.2 Solidity中引入汇编
7.6.3 汇编变量定义与赋值
7.6.4 汇编中的块和作用域
7.6.5 汇编中访问变量
7.6.6 for循环
7.6.7 if判断语句
7.6.8 汇编Switch语句
7.6.9 汇编函数
7.6.10 元组
7.6.11 汇编缺点
第8章 智能合约实战
8.1 OpenZeppelin
8.2 SafeMath安全算数运算
8.3 地址工具
8.4 ERC165接口发现
8.5 ERC20代币
8.6 ERC777功能型代币
8.6.1 ERC1820接口注册表
8.6.2 ERC777标准
8.6.3 ERC777实现
8.6.4 实现钩子函数
8.7 ERC721
8.7.1 ERC721代币规范
8.7.2 ERC721实现
8.8 简单的支付通道
8.8.1 创建支付通道智能合约
8.8.2 支付签名
第9章 去中心化DAPP实战
9.1 什么是DAPP
9.2 Web3.js
9.2.1 Web3.js简介
9.2.2 引入Web3.js
9.2.3 用web3.js跟合约交互
9.3 DAPP开发工具
9.3.1 Truffle
9.3.2 Ganache
9.4 DAPP投票应用
9.4.1 投票应用需求
9.4.2 创建项目
9.4.3 编写智能合约
9.4.4 合约编译及部署
9.4.5 合约部署
9.4.6 执行部署
9.4.7 合约测试
9.4.8 编写应用前端
9.4.9 前端与合约交互
9.4.10 运行DAPP
9.4.11 部署到公网服务器
9.5 使用Vue.js开发众筹DAPP
9.5.1 Vue.js简介
9.5.2 众筹需求分析
9.5.3 实现众筹合约
9.5.4 合约部署
9.5.5 众筹Web界面实现
9.5.6 与众筹合约交互
9.5.7 DAPP运行
9.5.8 DAPP发布
9.6 后台监听合约事件
9.6.1 Node.js及Express简介
9.6.2 常驻服务监听合约事件
9.6.3 MySQL数据库环境准备
9.6.4 创建数据库及表
9.6.5 监听数据入库
9.6.6 为前端提供众筹记录
9.7 DAPP去中心化存储
9.7.1 IPFS协议
9.7.2 IPFS安装
9.7.3 IPFS初始化
9.7.4 上传文件到IPFS
9.7.5 上传目录到IPFS
9.8 Embark框架
9.8.1 Embark概述
9.8.2 Embark安装
9.9 Embark重写投票DAPP
9.9.1 创建Embark项目
9.9.2 Embark项目结构
9.9.3 编写合约及部署
9.9.4 Embark DashBoard
9.9.5 Embark Cockpit
9.9.6 Embark Artifacts
9.9.7 前端index.html
9.9.8 使用Artifacts与合约交互
9.9.9 Embark部署
第10章 以太坊钱包开发
10.1 数字钱包基础
私钥
10.2 钱包相关提案
10.2.1 BIP32分层推导
10.2.2 密钥路径及BIP44
10.2.3 BIP39
10.2.4 生成助记词
10.2.5 用助记词推导出种子
10.3 钱包功能
10.4 创建钱包账号
10.4.1 随机数为私钥创建账号
10.4.2 助记词创建账号
10.5 导入账号
10.5.1 keystore文件
10.5.2 导出和导入keystore
10.6 获取钱包余额
10.6.1 连接以太坊网络
10.6.2 查询余额
10.7 发送交易
10.7.1 构造交易
10.7.2 交易签名
10.7.3 发送交易
10.7.4 Ethers.js发送交易
10.8 交易ERC20代币
10.8.1 构造合约对象
10.8.2 获取代币余额
10.8.2 转移代币
更新时间:2022-07-28 20:19:29