首页>参考读物>计算机科学与技术>软件与程序设计

Solidity编程:构建以太坊和区块链智能合约的初学者指南
作者 : [印]瑞提什·莫迪(Ritesh Modi)著
译者 : 毛明旺 林海龙 陈冬林 译
丛书名 : 区块链技术丛书
出版日期 : 2018-12-21
ISBN : 978-7-111-61600-9
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 200
开本 : 16
原书名 : Solidity Programming Essentials
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书全面系统阐释如何构建以太坊的智能合约,首先介绍了区块链、以太坊和智能合约的核心概念,包括密码学、以太币、Gas、区块链和以太坊的架构、以太坊节点、以太坊账户、交易、区块、合约等,随后介绍了安装以太坊和Solidity的一系列工具和环境,最后介绍了智能合约的测试和调试工具。本书各个章节主题相对独立,读者可以根据自己的需要选择阅读。

图书特色

Solidity编程
构建以太坊和区块链智能合约的初学者指南
Solidity
Programming Essentials
[印] 瑞提什·莫迪(Ritesh Modi)◎著
毛明旺 林海龙 陈冬林 ◎译
前微软高级技术布道者撰写,Solidity初学者指南
既涵盖Solidity编程的核心概念,又详细讲解智能合约开发、部署、
调试的相关技术及工具,帮你从头开始构建以太坊和区块链智能合约

图书前言

我不太确定上次大量听说关于政府、组织、社区和个人的技术的讨论是什么时候。区块链是一种正在世界各地各种组织中进行详细讨论和辩论的技术。区块链不仅仅是一种有限影响我们生活的技术,而是对我们的生活产生了广泛的影响。不远的将来,区块链将会触及我们生活的方方面面——支付账单,与任何组织进行交易,获得工资,身份认证,教育结果,活动等。这只是开始,我们刚开始了解去中心化的含义及其影响。
我已经在区块链领域工作了很长一段时间,并且一直是加密货币投资者。我是一名技术专家,对比特币非常着迷,因为它架构奇特。我从未遇到过这样优越的思维过程和架构,它不仅解决了经济和社会问题,而且解决了一些技术上未解决的问题,如拜占庭式的一般问题和容错。它在很大程度上解决了分布式计算的问题。
以太坊以几乎相似的方式搭建,当第一次听到并经历智能合约时,我很敬畏。智能合约是在区块链上部署去中心化应用程序并通过自定义逻辑、策略和规则轻松扩展的最大创新之一。
在编写这本书时我心怀愉悦,并真诚地希望你也喜欢阅读和实施Solidity。 我介绍了很多我的Solidity经验,并尽我所能阐述清楚,希望这本书能让你成为更好的Solidity开发人员和优秀的程序员。
如果有哪些我可以做的,能够更好地改善你对这本书的体验,我洗耳恭听!
本书目的读者
为了更好地阅读本书的内容,需要计算和编程的基本概念和知识。如果你觉得自己没有这方面的知识,可以通过快速阅读针对初学者的编程书籍来满足基本要求。本书主要面向使用区块链为最终客户和雇主提供高级服务的区块链架构师、开发人员、顾问和IT工程师。如果你想在以太坊上编写智能合约解决方案,那么本书对你来说非常理想。如果你已经拥有一些JavaScript经验,那么可以帮助你加快学习速度。
本书主要内容
第1章介绍区块链的基本原理、术语和行话、优势、尝试解决的问题以及行业相关性。本章将详细解释重要的概念和架构,还将介绍以太坊特有的概念。在本章中,将讨论有关其外部拥有的账户、合约账户、gas和以太币等概念。以太坊主要基于密码学,你将了解用于创建交易和账户的散列、加解密算法。本章还将详细解释如何创建交易和账户,如何为每笔交易支付gas,消息调用和交易之间的差异,以及代码存储和状态管理细节。
第2章将指导你使用以太坊平台创建私有区块链。以太坊生态系统中的另一个重要工具是ganache-cli。本章还将介绍如何安装ganache-cli并使用它来部署Solidity合约,如何安装Solidity并使用它来编译Solidity合约。你还将安装Mist,这是一个钱包,可以与私有链进行交互。Mist用于创建新账户,部署并使用合约。本章也将介绍交易中的挖矿。Remix是创建Solidity合约的绝佳工具。
第3章开始Solidity之旅。在本章中,你将通过了解不同版本以及如何使用预编译指令来学习Solidity基础知识。本章的另一个重要方面是如何构建智能合约,将从使用重要结构(如状态变量、函数、常量函数、事件、修改器、fallback、枚举和结构体)方面深入讨论智能合约布局。本章讨论并实现任何编程语言中最重要的元素——数据类型和变量,既有简单数据类型也有复杂数据类型,既有值类型也有引用类型,既有存储类型也有内存类型,我们会使用示例说明所有这些变量类型。
第4章提供与区块和交易相关的全局函数和变量、与地址和合约相关的全局函数和变量的实现及使用细节。在一系列智能合约开发时,可以非常方便地使用这些内容。
第5章教你如何使用if ... else和switch语句编写具有条件逻辑的合约和函数。循环是任何语言的重要组成部分,Solidity提供了while和for循环用于遍历数组。本章给出了循环的示例和实现。必须根据一定的条件中断循环,并根据其他条件继续循环。
第6章是本书的核心章节。从这章开始,你将编写真正的智能合约。本章将会讨论如何编写智能合约,如何定义和实现合约,如何使用new关键字和已知地址等不同机制创建和部署合约。Solidity提供了丰富的面向对象机制,本章将深入研究面向对象的概念和实现,如继承、多继承、声明抽象类和接口,以及为抽象函数和接口提供实现方法。
第7章展示了如何实现接受输入和返回输出的基本函数,以及仅输出现有状态而不更改状态和修改器的函数。修改器有助于在Solidity中更好地组织代码,并有助于提高合约的安全性和重用合约中的代码。fallback函数是重要的结构,在函数调用与任何现有函数签名不匹配时执行。对于将以太币发送到合约的情况,实现fallback函数也很重要。为了便于理解,将使用示例讨论和实现修改器和fallback函数。
第8章从合约开发的角度来看是非常重要的。如果出现错误和异常,应将以太币返回给调用者。本章将使用较新的Solidity结构(如assert、require和revert)深入解释和实现异常处理,还将讨论hrow语句。事件和日志记录有助于理解合约和函数的执行,本章将展示和解释事件和日志的实现。
第9章涵盖了Truffle的基础知识,你将理解它的概念,创建一个项目并理解项目结构,修改它的配置,通过一个示例了解编写、测试、部署和迁移合约的整个生命周期。测试合约和编写合约一样重要。Truffle提供了测试框架,但还应该编写测试用例。本章将讨论单元测试的基础知识,使用Solidity编写单元测试,并对智能合约执行单元测试。通过创建交易并验证其结果来执行单元测试,本章将展示编写和执行单元测试的细节。
第10章将使用Remix和事件等多种工具展示如何解决和调试故障。 本章将介绍如何逐行执行代码,检查每行代码执行后的状态,并相应地更改合约代码。
阅读本书的前提条件
本书假定你具有编程的基本知识,理想情况下应具备任意脚本语言的背景。本书的大部分内容需要连接互联网和使用浏览器。有些部分需要一台机器来部署区块链特定的工具和实用程序,可以使用云端或本地部署的物理机器或虚拟机器。
下载示例代码
本书的示例代码可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。

上架指导

计算机\程序设计

封底文字

Solidity是一种面向合约的语言,其语法受到JavaScript的很大影响,旨在帮助用户编写可运行于以太坊虚拟机上的代码。本书将为你理解Solidity编程语言提供翔实参考,帮助你从头开始构建以太坊和区块链的智能合约。
本书首先简要介绍区块链、以太坊及其相关的重要概念或组件;随后介绍如何安装所有必要的工具来编写、测试和调试以太坊上的Solidity合约;之后探索Solidity源文件的布局及如何使用不同的数据类型,介绍构建智能合约时使用的运算符、控制结构和数据结构;最后通过Solidity介绍面向对象编程中的函数调用、返回类型、函数修改器。通过本书,你将了解Solidity编写合约的本质,掌握Solidity编程技能,能够在以太坊上编写、部署和测试智能合约。
通过阅读本书,你将:
●  学习Solidity和以太坊的基础知识和基本概念
●  深入探究Solidity语言及其独特性
●  详细了解如何使用Solidity编写智能合约
●  学习开发和部署智能合约的主要工具
●  使用异常处理和错误检查编写防御性代码
●  了解Truffle的基本知识和调试过程

作者简介

[印]瑞提什·莫迪(Ritesh Modi)著:瑞提什·莫迪(Ritesh Modi)是前微软高级技术布道者以及地区负责人。他具有丰富的以太坊和Solidity开发经验,是区块链及Solidity很多相关会议的演讲嘉宾。他是架构师、布道者、演讲者以及著名的领导者,在区块链、数据中心、Azure Bots、认知服务、DevOps、人工智能以及自动化领域都做出了贡献。他也是5本书的作者。

译者序

本书从各个方面介绍了如何构建以太坊的智能合约,书中首先介绍了区块链、以太坊和智能合约的核心概念,比如密码学、以太币、gas、区块链和以太坊的架构、以太坊节点、以太坊账户、交易、区块、合约等,随后介绍了安装以太坊和Solidity的一系列工具和环境。
本书各章的主题相对独立,方便时间有限的读者直接钻研感兴趣的章节。对于初学者,我们建议通读本书,在对以太坊、智能合约和Solidity有了一定了解以后,再对某些章节进行详细研究。
Solidity是以太坊官方推荐的智能合约高级编程语言,这门语言受到了C++、Python 和 JavaScript 语言的影响,设计的目的是使程序能在以太坊虚拟机(EVM)上运行。
本书一方面从概念上介绍了Solidity编程语言,比如从以太坊虚拟机、合约、Solidity语法和数据结构等方面进行了阐述,另一方面从编写智能合约的角度进行了阐述,比如创建合约、合约组合、封装、继承、多态、方法覆盖、抽象合约、接口、函数、修改器、fallback函数、异常、事件等诸多方面。最后,介绍了智能合约的测试和调试工具。
本书的几位译者完全是凭借着对区块链和以太坊的热爱以及在中文社区推广以太坊智能合约开发的一腔热情在业余时间完成了本书的翻译工作。由于自身知识和能力所限,翻译中出现不足甚至谬误在所难免,欢迎各位读者批评指正。
希望这本书能够帮助读者通过学习以太坊Solidity,学习智能合约开发,进入区块链的技术世界!

译者  
2018年10月

图书目录

译者序
前言
审校者简介
第1章 区块链、以太坊和智能合约 1
1.1 什么是区块链 2
1.2 为什么是区块链 3
1.3 加密技术 4
1.3.1 散列 5
1.3.2 数字签名 7
1.4 以太币 7
1.5 gas 8
1.6 区块链和以太坊架构 9
1.6.1 区块如何互相连接 10
1.6.2 交易和区块如何互相连接 11
1.7 以太坊节点 12
1.7.1 EVM 12
1.7.2 以太坊挖矿节点 13
1.7.3 如何挖矿 14
1.8 以太坊账户 15
1.8.1 外部账户 16
1.8.2 合约账户 16
1.9 交易 16
1.10 区块 20
1.11 端到端的交易 21
1.12 什么是合约 22
1.13 什么是智能合约 22
1.14 如何部署合约 27
1.15 本章小结 27
第2章 安装以太坊和Solidity 29
2.1 以太坊网络 29
2.1.1 主网 30
2.1.2 测试网络 30
2.1.3 私有网络 31
2.1.4 联盟网络 31
2.2 Geth 31
2.3 搭建一个私有网络 35
2.4 ganache-cli 40
2.5 Solidity编译器 43
2.6 web3 JavaScript库 43
2.7 Mist钱包 45
2.8 MetaMask 47
2.9 本章小结 51
第3章 Solidity介绍 53
3.1 以太坊虚拟机 53
3.2 Solidity和Solidity文件 54
3.2.1 预编译指令 55
3.2.2 注释 56
3.2.3 import语句 57
3.2.4 合约 58
3.3 合约的结构 59
3.3.1 状态变量 60
3.3.2 结构 62
3.3.3 修改器 63
3.3.4 事件 64
3.3.5 枚举 65
3.3.6 函数 66
3.4 Solidity中的数据类型 68
3.4.1 值类型 68
3.4.2 引用类型 69
3.5 存储和内存数据位置 71
3.5.1 规则1 71
3.5.2 规则2 71
3.5.3 规则3 72
3.5.4 规则4 72
3.5.5 规则5 72
3.5.6 规则6 74
3.5.7 规则7 75
3.5.8 规则8 76
3.6 字面量 77
3.7 整型 78
3.8 布尔型 79
3.9 字节数据类型 80
3.10 数组 82
3.10.1 固定数组 83
3.10.2 动态数组 83
3.10.3 特殊数组 84
3.10.4 数组属性 86
3.11 数组的结构 86
3.12 枚举 88
3.13 地址 89
3.14 映射 90
3.15 本章小结 94
第4章 全局变量和函数 97
4.1 var类型变量 97
4.2 变量声明提前 99
4.3 变量作用域 100
4.4 类型转换 101
4.4.1 隐式转换 102
4.4.2 显式转换 102
4.5 区块和交易全局变量 104
4.5.1 交易和消息全局变量 105
4.5.2 tx.origin 和msg.sender的区别 105
4.6 加密全局变量 106
4.7 地址全局变量 107
4.8 合约全局变量 107
4.9 本章小结 108
第5章 表达式和控制结构 109
5.1 Solidity表达式 109
5.2 if决策控制 111
5.3 while循环 113
5.4 for循环 114
5.5 do...while循环 115
5.6 break语句 116
5.7 continue语句 117
5.8 return语句 118
5.9 本章小结 119
第6章 编写智能合约 121
6.1 智能合约 121
6.2 编写一个简单的合约 122
6.3 创建合约 123
6.3.1 使用new关键字 123
6.3.2 使用合约地址 124
6.4 构造函数 125
6.5 合约组合 126
6.6 继承 127
6.6.1 单继承 127
6.6.2 多级继承 129
6.6.3 分层继承 130
6.6.4 多重继承 130
6.7 封装 132
6.8 多态性 132
6.8.1 函数多态性 133
6.8.2 合约多态性 133
6.9 方法覆盖 135
6.10 抽象合约 136
6.11 接口 137
6.12 本章小结 139
第7章 函数、修改器和fallback函数 141
7.1 函数输入和输出 141
7.2 修改器 143
7.3 view函数、constant函数和pure函数 146
7.4 地址相关函数 148
7.4.1 send方法 149
7.4.2 transfer方法 151
7.4.3 call方法 151
7.4.4 callcode方法 154
7.4.5 delegatecall方法 154
7.5 fallback函数 154
7.6 本章小结 157
第8章 异常、事件与日志 159
8.1 错误处理 160
8.1.1 require语句 160
8.1.2 assert语句 162
8.1.3 revert语句 163
8.2 事件与日志 163
8.3 本章小结 167
第9章 Truffle基础与单元测试 169
9.1 应用程序开发生命周期管理 169
9.2 Truffle 170
9.3 使用Truffle进行开发 171
9.4 使用Truffle进行测试 176
9.5 本章小结 178
第10章 合约调试 179
10.1 调试 179
10.1.1 Remix编辑器 180
10.1.2 使用事件 183
10.2 使用Block Explorer 183
10.3 本章小结 186

参考读物推荐
作者: 张文亮 编著
作者: 刘丽霞
作者: 李景峰 潘恒 杨丽娜 等编著
作者: 无为斋主 编著