
本书系统介绍以太坊智能合约的开发,对智能合约相关知识进行全面梳理,尤其是对智能合约开发语言Solidity进行了详细解读,智能合约的开发者可以从书中获得一些启发和指导。本书可以作为一本案头手册,方便开发者在开发智能合约时随时查阅。
前言 一、本书特色 从2017年开始,我在博客《深入浅出区块链》中发表了30多篇关于区块链的入门文章,广受大家的好评,也因此收到了电子工业出版社编辑的邀请,希望我写一本关于区块链开发的书籍。我对市面上的书籍做了调查,发现介绍比特币和以太坊入门知识的书比较多,但如果想系统全面地学习智能合约开发,却并没有更好的资源。于是,在跟出版社编辑商议后,我决定写一本全面系统介绍智能合约开发的书,本书由此诞生。 本书并没有对比特币或区块链的基础概念进行过多的介绍,因为市面上已经有很多这方面的文章了,大家也可以参考我的博文《区块链技术学习指引》(https://learnblockchain.cn/2018/01/11/guide/)。本书系统介绍以太坊智能合约的开发,并尽量覆盖智能合约的方方面面,尤其是对智能合约开发语言Solidity进行了详细解读。因此本书可以作为一本案头手册,方便开发者在开发智能合约时随时查阅。 本书涉及的Solidity内容是以官方文档0.4.24版本(https://solidity. readthedocs.io/en/v0.4.24/)为标准的,同时加入了很多我自己的理解以及大量的实例。 另外,本书有时将智能合约简称为“合约”。 二、读者对象 本书适合那些对区块链有过基本了解,并想进一步学习智能合约或者去中心化应用的开发人员阅读。 本书的读者最好应了解一门语言。例如了解C、JavaScript、Python语言会对学习Solidity有帮助,因为Solidity中的很多思想都参考了这些语言。 本书主要适合以下人员阅读: ? 区块链应用开发者; ? 区块链技术的从业者; ? 对区块链技术感兴趣的人员。 三、本书内容 第1章初探以太坊智能合约,初步认识以太坊、智能合约、Solidity,以及如何使用Solidity编写一个简单的智能合约。 第2章介绍以太坊核心概念,例如交易、区块、费用gas、以太坊虚拟机、以太坊账户等概念。 第3章介绍一个使用Solidity编写的智能合约的组成部分。 第4章介绍Solidity的类型系统,详细介绍Solidity的各种类型,例如整型、布尔类型、地址类型、函数类型、数组类型及结构体类型等。 第5章介绍Solidity中的单位,包括货币单位和时间单位,通过代码讲解单位如何换算。 第6章介绍Solidity 的全局变量及函数,它们其实就是Solidity语言提供的API,例如获取区块和交易的属性、有关数学及加密功能的函数等。 第7章介绍Solidity中的表达式、控制结构、变量作用范围、错误处理等。 第8章介绍合约,包括如何创建合约、合约函数的可见性、合约函数修饰符等。 第9章介绍合约编译、部署、交互、调试,包括对编译器的选择、不同工具的合约部署方法。 第10章介绍合约ABI的作用,以及如何生成ABI。 第11章介绍编写合约的最佳实践,一是从编码规范来考量;二是从安全性来考量。 第12章介绍一些合约案例,如最常见的ERC20标准代币合约,介绍如何实现代币增发、资产冻结,以及如何实现一个众筹(ICO)合约,并详细介绍ERC721合约的实现方法。 第13章介绍去中心化应用的开发,重点介绍如何使用web3以合约进行交互,以及Truffle框架的使用。
第1章 初探以太坊智能合约 以太坊诞生 智能合约 Solidity语言 一个货币合约的例子 本章小结 第2章 以太坊核心概念 区块链基础概念 共识协议:工作量证明(PoW) 以太坊虚拟机(EVM) 账户 以太坊钱包 交易 消息调用 费用(gas) 以太坊网络 存储、内存和栈 指令集 委托调用和库 日志 自毁 以太坊路线图 本章小结 第3章 Solidity合约内容 Solidity文件结构 合约结构 本章小结 第4章 Solidity数据类型 类型概述及分类 布尔类型(Boolean) 整型(Integer) 定长浮点型(Fixed Point Number) 定长字节数组(Fixed-size Byte Array) 有理数和整型常量(Rational and Integer Literal) 字符串常量(String Literal) 十六进制常量(Hexadecimal Literal) 枚举(Enum) 函数类型(Function Type) 地址类型(Address) 地址常量(Address Literal) 数据位置(Data Location) 数组(Array) 数组成员 字符串string及字节数组bytes 结构体(Struct) 映射(Mapping) 类型转换 var类型推导 运算符 本章小结 第5章 Solidity中的单位 货币单位(Ether Unit) 时间单位(Time Unit) 本章小结 第6章 Solidity全局变量及函数 区块和交易的属性 地址相关属性和函数 合约相关属性和函数 本章小结 第7章 Solidity表达式及控制结构 函数参数 控制结构 函数调用表达式 赋值表达式 变量声明与作用范围 错误处理 本章小结 第8章 合约 合约概述 创建合约 可见性 访问函数(Getter Function) 函数修改器(Function Modifier) 状态常量 视图函数(View Function) 纯函数(Pure Function) 回退函数(Fallback Function) 函数重载(Function Overloading) 事件 继承 构造函数(Constructor) 抽象合约(Abstract Contract) 接口(Interface) 库 Using for 指令 本章小结 第9章 合约编译、部署、交互、调试 Solidity编译器 合约编译 合约部署及调用 使用geth 使用Remix + MetaMask 合约调试 本章小结 第10章 应用程序二进制接口(ABI) 简单理解ABI ABI手册 本章小结 第11章 智能合约最佳实践 编码规范 代码格式 函数编写规范 安全性考虑 一些安全陷阱 编写合约的安全建议 本章小结 第12章 合约案例 代币 高级功能代币 众筹(ICO)合约 众筹智能合约代码 非同质化代币ERC721 本章小结 第13章 去中心化应用开发 JSON RPC Web3.js 在geth中使用Web3.js 在应用中使用Web3.js 去中心化应用案例 搭建测试环境 创建智能合约 合约加入事件 使用Web3监听事件、刷新UI Truffle框架 安装Truffle Truffle使用案例 在浏览器中运行 本章小结
熊丽兵,北航硕士毕业,先后进入创新工场,猎豹移动从事移动开发。 现为区块链技术从业者, 目前在做区块链底层协议研究 。CSDN博客专家,拥有全网访问量一二的区块链技术博客《深入浅出区块链》,对底层公链技术、区块链技术落地都有深入的研究。