以太坊智能合约开发实战

以太坊智能合约开发实战

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

资深区块链开发工者力作,通俗易懂地讲述以太坊开发。

内容简介

本书从区块链的概念、原理、核心技术和应用四个方面,系统地介绍了以太坊区块链开发的相关知识。其中,重点介绍了以太坊的相关概念和原理、以太坊客户端Geth、以太坊常用智能合约开发工具、Solidity语言和智能合约开发等内容,并实现了众筹合约和代币合约两个项目实战案例,可以让读者对智能合约开发的整体流程有一个全面的了解。

另外,书中结合示例对Web3.js的相关知识也做了详细介绍,以帮助读者更好地理解和利用以太坊的相关数据。

本书内容丰富,讲解通俗易懂,案例典型,实用性强,特别适合区块链技术爱好者和智能合约开发的相关从业人员阅读,也适合区块链底层研究人员阅读。

此外,本书还适合作为区块链培训机构作为相关课程的培训教材使用。

作者简介

作者唐盛彬,就职于国内领先的手机游戏平台当乐网(d.cn),主要负责当乐游戏中心App平台的SDK及区块链游戏众筹平台DOGI.IO的智能合约开发工作。熟悉以太坊,对以太坊底层原理和相关协议有较为深入的研究;熟悉以太坊智能合约开发的核心技术与常用工具,如Solidity语言、web3.js、Truffle和Geth等;对使用Solidity语言进行以太坊智能合约开发有丰富的实战经验,特别是在众筹和代币开发等相关领域。

章节目录

版权信息

前言

第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 代币合约的部署

以太坊智能合约开发实战是2019年由机械工业出版社华章分社出版,作者唐盛彬。

得书感谢您对《以太坊智能合约开发实战》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
民间金融合约的信息机制:来自改革后温台地区民间金融市场的证据 电子书
本书试图通过对个人间直接借贷、合会和民营存款类金融机构三类民间金融合约不同信息机制的分析来理解这三类民间金融合约的替代与并存现象。作者用信息汇聚机制解释为什么有人通过合会合约而不是多个个人间直接借贷合约向多人借钱;用信息隐瞒机制解释为什么合会特别是标会有时候会发生大规模倒会的现象;用政府信用信号发送机制解释改革后温台地区民营存款类金融机构的兴衰成败。
培训与开发 电子书
本书介绍了培训与开发的基本概念和原理、培训与开发中的学习原理,培训的需求评价、培训规划、培训课程设计、培训的方式方法、新员工导向培训、培训评估和管理、人力资源开发理论与方法、职业管理、职业生涯管理等内容。
智能会计核算 电子书
《智能会计核算》教材分四个部分,第一部分智能会计核算概述,分为智能会计核算的发展、智能会计核算的特征、智能会计核算运用的信息技术、智能会计核算系统的框架等章节。第二部分智能会计核算应用,包括智能会计核算系统整体介绍、账套初始设置、智能票据识别与内控、智能凭证生成与内控、机器学习模型训练、智能账簿生成与对账、智能财务报表等七个章节。第三部分智能成本核算应用,包括智能成本核算原理、智能生成成本计算表等
智能金融应用教程 电子书
本书是为了适应人工智能、大数据、云计算和区块链在金融科技领域的应用而编写的智能金融应用教材。针对目前国内财经类专业尚未专门开设人工智能、大数据和云计算等课程,学生对人工智能、大数据和云计算领域的基本知识缺乏了解的现状,本书前3章首先简单介绍了人工智能、大数据和云计算的基本常识。然后在此基础上展开对智能金融应用主要场景的阐述。主要包括以下内容:智能投顾、智能研报、智能量化投资、智慧银行和智能保险。其
房地产开发企业会计与纳税实务:零基础、全流程、重实战 电子书
本书共分为9章,讲解了房地产会计相关的方方面面,包括房地产会计的基础知识、企业在设立阶段、获取土地阶段、开发建设阶段、转让及销售阶段的会计处理和纳税方法。另外还讲解了投资性房产、企业所得税和利润结转及分配的相关概念和操作方法。讲解了财务会计报告的编制方法。通过阅读本书了解房地产行业的财务和税务特点,为会计专业学生、会计学的学习者提供一个更感性的认识。