4.8 用户推荐指数
互联网
类型
7.6
豆瓣评分
可以朗读
语音朗读
398千字
字数
2019-04-01
发行日期
展开全部
主编推荐语
资深区块链开发工者力作,通俗易懂地讲述以太坊开发。
内容简介
本书从区块链的概念、原理、核心技术和应用四个方面,系统地介绍了以太坊区块链开发的相关知识。其中,重点介绍了以太坊的相关概念和原理、以太坊客户端Geth、以太坊常用智能合约开发工具、Solidity语言和智能合约开发等内容,并实现了众筹合约和代币合约两个项目实战案例,可以让读者对智能合约开发的整体流程有一个全面的了解。
另外,书中结合示例对Web3.js的相关知识也做了详细介绍,以帮助读者更好地理解和利用以太坊的相关数据。
本书内容丰富,讲解通俗易懂,案例典型,实用性强,特别适合区块链技术爱好者和智能合约开发的相关从业人员阅读,也适合区块链底层研究人员阅读。
此外,本书还适合作为区块链培训机构作为相关课程的培训教材使用。
目录
- 版权信息
- 前言
- 第1篇 基础理论与原理
- 第1章 与区块链的第一次亲密接触
- 1.1 什么是区块链
- 1.1.1 区块链简介
- 1.1.2 区块链的链式结构
- 1.1.3 区块链上的区块常见数据
- 1.2 工作量证明机制(PoW)
- 1.2.1 区块链遭遇的问题
- 1.2.2 PoW模型
- 1.2.3 PoW为什么能防止篡改
- 1.3 权益证明机制(PoS)
- 1.3.1 什么是PoS
- 1.3.2 PoS的优势与劣势
- 1.4 委托权益证明(DPoS)
- 1.5 权威证明(PoA)
- 1.6 区块链的应用
- 1.7 本章小结
- 第2章 去中心化应用——DApp
- 2.1 DApp简介
- 2.1.1 什么是DApp
- 2.1.2 DApp网络组建过程
- 2.1.3 DApp的优点
- 2.1.4 DApp存在的问题
- 2.2 中心化与去中心化
- 2.2.1 身份验证
- 2.2.2 通信
- 2.2.3 数据交互
- 2.2.4 系统维护
- 2.3 DApp网络与通信
- 2.3.1 P2P网络与WWW
- 2.3.2 P2P网络拓扑结构类型
- 2.3.3 小结
- 2.4 DApp货币与中心化数据交互
- 2.4.1 DApp货币
- 2.4.2 中心化应用获取去中心化数据
- 2.4.3 去中心化应用获取中心化数据
- 2.5 常见的DApp
- 2.5.1 比特币
- 2.5.2 以太坊
- 2.5.3 IPFS存储系统
- 第3章 比特币那些事
- 3.1 比特币简介
- 3.1.1 比特币公钥与私钥
- 3.1.2 数字签名
- 3.2 椭圆曲线算法
- 3.2.1 群
- 3.2.2 椭圆曲线算法定义
- 3.2.3 椭圆曲线几何运算
- 3.2.4 椭圆曲线算法的代码实现
- 3.2.5 椭圆曲线加密与签名原理
- 3.3 比特币私钥、公钥与地址
- 3.3.1 从私钥到地址
- 3.3.2 公钥压缩
- 3.3.3 私钥格式
- 3.3.4 私钥与安全
- 3.4 比特币交易
- 3.4.1 交易简介
- 3.4.2 交易输出
- 3.4.3 交易输入
- 3.4.4 交易费
- 3.4.5 付款至公钥哈希(P2PKH)
- 3.4.6 多重签名与P2SH
- 3.5 比特币钱包
- 3.5.1 钱包简介
- 3.5.2 生成助记词
- 3.5.3 从助记词生成种子
- 3.5.4 从种子生成HD钱包
- 3.5.5 HD钱包密钥路径
- 3.6 比特币相关资源
- 第4章 以太坊
- 4.1 以太坊简介
- 4.1.1 什么是以太坊
- 4.1.2 以太坊虚拟机(EVM)
- 4.1.3 以太坊智能合约与高级语言
- 4.1.4 以太币单位
- 4.1.5 以太坊发行版本与提案
- 4.2 以太坊账户
- 4.2.1 外部账户
- 4.2.2 合约账户
- 4.2.3 外部账户与合约账户的异同
- 4.3 以太坊交易
- 4.3.1 gas、gasPrice与gasLimit
- 4.3.2 gasUsed与交易花费
- 4.3.3 什么是以太坊交易与消息
- 4.4 以太坊网络
- 4.4.1 以太坊网络简介
- 4.4.2 以太坊与Kademlia
- 4.4.3 以太坊客户端
- 4.5 挖矿
- 4.5.1 什么是挖矿
- 4.5.2 挖矿奖励
- 4.5.3 以太坊区块
- 4.6 GHOST协议
- 4.6.1 区块时间
- 4.6.2 区块分叉
- 4.6.3 普通分叉带来的问题
- 4.6.4 GHOST协议的具体内容
- 4.7 Ethash算法之DAG
- 4.7.1 什么是DAG
- 4.7.2 DAG生成过程
- 4.7.3 为什么要使用DAG
- 4.8 Ethash算法
- 4.8.1 Ethash算法简介
- 4.8.2 Ethash算法流程
- 4.9 本章小结
- 第2篇 开发工具
- 第5章 智能合约开发常用工具
- 5.1 Git简介
- 5.1.1 Git安装
- 5.1.2 Git常用命令
- 5.1.3 Git资源推荐
- 5.2 Node.js简介
- 5.2.1 什么是Node.js
- 5.2.2 Node.js安装
- 5.3 NPM简介
- 5.3.1 npm config命令
- 5.3.2 NPM与语义化版本
- 5.3.3 npm install命令
- 5.3.4 NPM镜像
- 5.3.5 NPM的其他常用命令
- 5.4 webpack简介
- 5.4.1 认识webpack
- 5.4.2 webpack首秀
- 5.4.3 webpack与webpack-dev-schmerver
- 5.4.4 webpack常用功能与配置
- 5.4.5 webpack总结
- 5.5 Postman简介
- 5.5.1 认识Postman
- 5.5.2 Postman的简单用法
- 5.5.3 Postman脚本
- 5.6 LevelDB简介
- 5.6.1 认识LevelDB
- 5.6.2 LevelDB文件
- 5.6.3 SST结构与数据查找
- 第6章 以太坊私链神器——Ganache
- 6.1 Ganache简介
- 6.1.1 什么是Ganache
- 6.1.2 ganache-cli命令安装
- 6.1.3 Ganache图形界面
- 6.2 Ganache常见命令参数
- 6.2.1 挖矿时间
- 6.2.2 主机端口与网络
- 6.2.3 gas相关参数
- 6.2.4 其他参数
- 6.3 Ganache账户
- 6.3.1 能多给我点钱吗
- 6.3.2 能多给我几个账户吗
- 6.3.3 助记词相关参数
- 6.3.4 指定账户
- 6.3.5 锁定账户与解锁
- 6.4 Ganache与JavaScript
- 6.4.1 在工程中引用Ganache的Provider
- 6.4.2 在工程中启动Ganache的Server
- 6.4.3 配置工程中依赖的Ganache
- 6.5 Ganache交易相关RPC方法
- 6.5.1 eth_sendTransaction方法
- 6.5.2 eth_getTransactionCount方法
- 6.5.3 eth_getTransactionReceipt方法
- 6.5.4 eth_getTransactionByHash方法
- 6.5.5 交易相关的其他方法
- 6.6 Ganache账户相关RPC方法
- 6.6.1 eth_accounts方法
- 6.6.2 eth_getBalance方法
- 6.6.3 eth_coinbase方法
- 6.7 Ganache区块相关RPC方法
- 6.7.1 eth_getBlockByHash方法
- 6.7.2 eth_getBlockByNumber方法
- 6.7.3 其他相关方法
- 6.8 Ganache日志相关RPC方法
- 6.8.1 eth_newFilter方法
- 6.8.2 eth_getFilterLogs方法
- 6.8.3 eth_getLogs方法
- 6.8.4 其他关联方法
- 6.9 Ganache的其他RPC方法
- 6.9.1 web3_clientVersion方法
- 6.9.2 net_version方法
- 6.9.3 eth_getCode方法
- 6.9.4 eth_sign方法
- 第7章 以太坊官方客户端——Geth
- 7.1 Geth简介
- 7.1.1 Geth是什么
- 7.1.2 Geth安装
- 7.1.3 Geth相关目录
- 7.1.4 Geth相关工具
- 7.2 Geth子命令
- 7.2.1 Geth子命令概述
- 7.2.2 Geth子命令之account
- 7.2.3 Geth子命令之console与attach
- 7.2.4 Geth子命令之copydb与removedb
- 7.3 Geth启动参数
- 7.3.1 Geth数据同步模式
- 7.3.2 Geth网络相关参数
- 7.3.3 Geth以太坊相关参数
- 7.3.4 Geth RPC相关参数
- 7.3.5 Geth挖矿相关参数
- 7.3.6 Geth ethash算法参数
- 7.3.7 Geth交易池配置
- 7.3.8 Geth日志参数
- 7.3.9 Geth的其他参数
- 7.4 Geth启动实例
- 7.4.1 Geth启动单个节点
- 7.4.2 Geth启动多节点组网
- 7.5 Geth控制台与管理接口
- 7.5.1 admin模块
- 7.5.2 debug模块
- 7.5.3 miner模块
- 7.5.4 personal模块
- 7.5.5 txpool模块
- 7.6 keystore文件
- 7.6.1 keystore文件简介
- 7.6.2 从密钥到密钥文件
- 7.6.3 从密钥到密钥文件流程验证
- 第8章 以太坊钱包与浏览器
- 8.1 MetaMask插件
- 8.1.1 MetaMask简介
- 8.1.2 MetaMask安装
- 8.1.3 第一次使用MetaMask
- 8.1.4 MetaMask的连接配置
- 8.1.5 MetaMask的其他配置
- 8.1.6 MetaMask账户管理
- 8.1.7 MetaMask交易
- 8.1.8 小结
- 8.2 Ethereum Wallet钱包
- 8.2.1 Ethereum Wallet简介
- 8.2.2 安装Ethereum Wallet与Mist
- 8.2.3 使用Ethereum Wallet
- 8.3 Mist与Ethereum Wallet
- 8.3.1 Ethereum Wallet与Mist的区别
- 8.3.2 Mist的配置与使用
- 8.3.3 小结
- 8.4 MyEtherWallet网页钱包
- 8.4.1 MyEtherWallet简介
- 8.4.2 MyEtherWallet合约交互
- 8.4.3 MyEtherWallet离线交易
- 8.4.4 MyEtherWallet的其他功能
- 第3篇 Solidity与智能合约开发
- 第9章 Solidity初遇
- 9.1 Solidity简介
- 9.1.1 什么是Solidity
- 9.1.2 智能合约示例
- 9.1.3 Solidity编译版本
- 9.2 Solidity编辑器
- 9.2.1 Sublime编辑器
- 9.2.2 Atom编辑器
- 9.2.3 IDEA编辑器
- 9.3 Remix编辑器
- 9.3.1 Remix简介
- 9.3.2 Remix文件管理
- 9.3.3 Remix编辑面板与控制台
- 9.3.4 Remix编译与运行面板
- 9.3.5 Remix基本配置面板
- 9.3.6 Remix分析配置面板
- 9.4 Solidity常见概念
- 9.4.1 状态变量
- 9.4.2 局部变量
- 9.4.3 Solidity函数
- 9.4.4 返回多值
- 9.4.5 构造函数
- 9.4.6 异常
- 9.4.7 Solidity注释与文档
- 9.5 Solidity运算符
- 9.5.1 Solidity运算符简介
- 9.5.2 Solidity运算符注意事项
- 9.6 Solidity控制结构
- 9.6.1 控制结构简介
- 9.6.2 判断语句
- 9.6.3 for循环
- 9.6.4 while与do…while循环
- 9.6.5 continue与break
- 9.6.6 三目运算符
- 9.7 可见性修饰符
- 9.7.1 public修饰符
- 9.7.2 internal修饰符
- 9.7.3 private修饰符
- 9.7.4 external修饰符
- 9.8 函数其他修饰符
- 9.8.1 constant修饰符
- 9.8.2 view修饰符
- 9.8.3 pure修饰符
- 第10章 Solidity数据类型
- 10.1 数据类型简介
- 10.1.1 值类型
- 10.1.2 引用类型
- 10.1.3 小结
- 10.2 Booleans类型
- 10.2.1 Booleans类型简介
- 10.2.2 Booleans类型支持的运算符
- 10.3 Integers类型
- 10.3.1 Integers类型简介
- 10.3.2 Integers类型支持的运算符
- 10.3.3 Integers整除问题
- 10.4 定点数类型
- 10.4.1 定点数类型简介
- 10.4.2 定点数类型支持的运算符
- 10.5 字面量
- 10.5.1 字符串字面量
- 10.5.2 十六进制字面量
- 10.5.3 有理数字面量
- 10.6 Enum类型
- 10.6.1 枚举类型简介
- 10.6.2 枚举类型实例
- 10.7 mapping类型
- 10.7.1 mapping类型简介
- 10.7.2 mapping类型实例
- 10.8 struct类型
- 第11章 Solidity数据类型进阶
- 11.1 Solidity固定大小字节数组
- 11.1.1 固定大小字节数组类型
- 11.1.2 固定大小字节数组支持的运算符
- 11.1.3 固定大小字节数组的成员
- 11.1.4 固定大小字节数组与字符串
- 11.1.5 固定大小字节数组之间的转换
- 11.1.6 小结
- 11.2 Solidity动态大小字节数组
- 11.2.1 动态大小字节数组简介
- 11.2.2 创建动态大小字节数组
- 11.2.3 动态大小字节数组成员
- 11.2.4 字节数组间的转换
- 11.2.5 小结
- 11.3 Solidity数组
- 11.3.1 固定长度数组
- 11.3.2 动态长度数组
- 11.3.3 二维数组
- 11.3.4 小结
- 11.4 以太坊地址类型
- 11.4.1 地址简介
- 11.4.2 transfer、send与balance
- 11.4.3 call、callcode与delegatecall
- 11.5 函数类型
- 11.5.1 函数类型简介
- 11.5.2 函数签名
- 11.5.3 函数类型实例
- 11.6 数据类型转换
- 11.6.1 隐式转换
- 11.6.2 显式转换
- 11.6.3 var关键字
- 11.7 delete运算符
- 11.7.1 delete与常见类型
- 11.7.2 delete与数组
- 11.7.3 delete与mapping
- 11.7.4 delete与struct
- 11.8 本章小结
- 第12章 Solidity开发智能合约
- 12.1 智能合约简介
- 12.1.1 智能合约的概念
- 12.1.2 EVM结构与数据
- 12.1.3 智能合约执行
- 12.2 事件与日志简介
- 12.2.1 事件简介
- 12.2.2 事件主题
- 12.2.3 事件与日志
- 12.3 Solidity中的单位后缀
- 12.3.1 以太币单位
- 12.3.2 时间单位
- 12.4 区块与交易属性
- 12.4.1 区块的相关属性
- 12.4.2 消息的相关属性
- 12.4.3 交易的相关属性
- 12.5 错误处理函数
- 12.5.1 assert函数
- 12.5.2 require函数
- 12.5.3 revert函数
- 12.6 数学与Hash函数
- 12.6.1 数学运算函数
- 12.6.2 Hash函数
- 12.6.3 ecrecover函数
- 12.7 ABI编码与编码函数
- 12.7.1 ABI编码简介
- 12.7.2 ABI编码数据类型
- 12.7.3 常见数据类型ABI编码规则
- 12.7.4 复杂类型ABI编码规则
- 12.7.5 ABI编码实例
- 12.8 特殊类型函数
- 12.8.1 回退函数
- 12.8.2 析构函数
- 12.8.3 函数重载
- 12.8.4 使用new创建合约函数调用
- 第13章 Solidity开发智能合约进阶
- 13.1 Solidity数据位置
- 13.1.1 什么是数据位置
- 13.1.2 memory简介
- 13.1.3 storage简介
- 13.1.4 calldata简介
- 13.1.5 小结
- 13.2 数据位置与赋值
- 13.2.1 状态变量赋值给局部storage变量
- 13.2.2 状态变量赋值给memory局部变量
- 13.2.3 局部memory变量赋值给状态变量
- 13.2.4 状态变量赋值状态变量
- 13.2.5 局部memory变量赋值给局部memory变量
- 13.2.6 局部storage变量赋值给局部storage变量
- 13.2.7 局部storage变量赋值给局部memory变量
- 13.2.8 局部storage变量赋值给状态变量
- 13.2.9 小结
- 13.3 函数修改器
- 13.3.1 函数修改器简单实例
- 13.3.2 函数修改器复杂实例
- 13.3.3 小结
- 13.4 合约继承
- 13.4.1 继承简介
- 13.4.2 super关键词
- 13.4.3 抽象合约
- 13.4.4 接口合约
- 13.5 Solidity库
- 13.5.1 Solidity库简介
- 13.5.2 Solidity库应用实例
- 13.5.3 Solidity导入源文件
- 13.5.4 using for语句
- 13.6 Solidity编译
- 13.6.1 solc简介
- 13.6.2 solc编译合约
- 13.6.3 solc导入与库
- 13.6.4 solc.js简介
- 13.6.5 使用solc.js在项目中编译单个合约
- 13.6.6 使用solc.js在项目中编译多个合约
- 13.7 Solidity编码风格
- 13.7.1 命名风格
- 13.7.2 控制结构
- 13.7.3 函数相关风格
- 13.7.4 其他部分
- 第14章 通过web3.js与
- 14.1 web3.js简介
- 14.1.1 web3.js概念
- 14.1.2 web3.js原理
- 14.1.3 web3.js模块
- 14.2 web3.js与以太坊节点
- 14.2.1 HTTP方式
- 14.2.2 IPC方式
- 14.2.3 WebSocket方式
- 14.3 web3.js工具的相关方法
- 14.3.1 以太币单位转换方法
- 14.3.2 十六进制、数字与字符串转换
- 14.3.3 填充字符与getStorageAt
- 14.4 web3.js账户的相关方法
- 14.4.1 获取账户与账户余额
- 14.4.2 创建账户
- 14.4.3 解锁账户
- 14.4.4 账户的其他相关方法
- 14.5 web3.js的ABI编码方法
- 14.5.1 函数签名与事件签名
- 14.5.2 函数单参数编码与解码
- 14.5.3 函数多参数编码与解码
- 14.5.4 编码函数调用
- 14.5.5 解码日志
- 14.6 web3.js合约的相关方法
- 14.6.1 创建与克隆合约
- 14.6.2 合约部署deploy
- 14.6.3 send函数与call函数
- 14.6.4 estimateGas函数与encodeABI函数
- 14.6.5 合约方法的调用
- 14.6.6 合约事件的处理
- 14.7 web3.js交易的相关方法
- 14.7.1 签名简介
- 14.7.2 签名与交易
- 14.7.3 发送交易
- 14.7.4 签名交易与发送签名交易
- 14.7.5 获取交易的相关数据
- 14.8 web3.js和IBAN的相关接口
- 14.8.1 IBAN简介
- 14.8.2 BBAN、IBAN与地址
- 14.8.3 IBAN的其他方法
- 14.9 web3.js的其他方法
- 14.9.1 订阅事件
- 14.9.2 网络及ENS的相关方法
- 14.9.3 与Swarm和Whisper交互的方法
- 14.10 与Ethereum相关的JavaScript库
- 14.10.1 BigNumber.js库
- 14.10.2 ethjs-abi库
- 14.10.3 其他Ethereum库
- 第4篇 项目案例实战
- 第15章 工程化项目开发利器——Truffle
- 15.1 Truffle简介
- 15.1.1 Truffle的主要功能
- 15.1.2 Truffle的安装及其相关命令
- 15.2 Truffle创建项目
- 15.2.1 init命令
- 15.2.2 unbox命令
- 15.3 通过Truffle编译项目
- 15.3.1 前置条件与编译
- 15.3.2 Truffle编译输出
- 15.3.3 Truffle编译依赖
- 15.4 Truffle配置文件
- 15.4.1 网络配置
- 15.4.2 输出目录配置
- 15.4.3 测试配置
- 15.4.4 编译配置
- 15.4.5 包管理相关配置
- 15.5 Truffle单元测试与部署
- 15.5.1 使用JavaScript测试
- 15.5.2 JavaScript测试交易
- 15.5.3 使用Solidity测试
- 15.5.4 合约部署
- 15.6 Truffle的其他命令
- 15.6.1 create命令
- 15.6.2 包管理相关命令
- 15.6.3 其他命令
- 第16章 项目流程与众筹实战案例
- 16.1 合约部分
- 16.1.1 项目简介
- 16.1.2 初始化与合约目录
- 16.1.3 部署与测试脚本目录
- 16.2 众筹合约
- 16.2.1 Owned合约
- 16.2.2 SafeMath合约
- 16.2.3 Crowd合约
- 16.3 合约的部署与使用
- 16.3.1 本地部署与测试环境搭建
- 16.3.2 本地部署与测试网络配置
- 16.3.3 本地部署
- 16.3.4 本地测试
- 16.3.5 Ropsten网络测试部署
- 16.4 项目的Web部分
- 16.4.1 初始化Web项目
- 16.4.2 webpack配置
- 16.4.3 package.json配置
- 16.4.4 运行Web项目
- 第17章 以太坊代币标准与ERC20代币案例
- 17.1 代币简介
- 17.1.1 ERC20简介
- 17.1.2 ERC223简介
- 17.1.3 ERC721简介
- 17.2 ERC20标准接口简介
- 17.2.1 基本信息
- 17.2.2 总额与余额
- 17.2.3 转账与授权
- 17.2.4 事件
- 17.3 ERC20代币实例
- 17.3.1 查看以太坊上已有的Token
- 17.3.2 创建Token
- 17.3.3 查看和转移Token
- 17.4 扩展ERC20标准代币
- 17.4.1 销毁代币
- 17.4.2 添加Token
- 17.4.3 冻结与解冻账户
- 17.4.4 买卖Token
- 17.4.5 小结
- 17.5 ERC20代币扩展实例
- 17.5.1 初始化项目
- 17.5.2 添加三方库合约
- 17.5.3 代币合约的逻辑实现
- 17.5.4 代币合约的部署
展开全部
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。