前 言
本书的目标是介绍区块链技术的理论和实践两方面的内容。自本书第1版出版以来,区块链技术又出现了很多改变和进步,因此也就有了更新本书的需要。
实施区块链技术可以带来诸多好处,这已引起学术界和行业研究人员的浓厚兴趣,他们正在持续不懈地研究该技术,并且涌现了许多相关的联盟、工作组、项目和专业机构,它们参与了该技术的开发和进一步发展的工作。
本书第2版将对去中心化、智能合约以及以太坊、比特币和Hyperledger Fabric等各种区块链平台进行深入介绍。阅读完本书之后,读者将能够对区块链技术的内部运作有深入的了解,并能够开发区块链应用程序。
本书涵盖与区块链技术相关的所有主题,包括密码学、加密货币、比特币、以太坊以及用于区块链开发的各种其他平台和工具。如果读者对计算机科学有基本的了解,并具有基本的编程经验,那么将从本书中充分受益。
如果读者没有任何编程经验,也不妨碍轻松阅读本书,因为本书在必要时会提供相关的背景资料。
本书读者
本书适用于希望深入了解区块链的任何人,区块链应用程序的开发人员可以将其用作参考书。本书既可以用作与区块链技术和加密货币相关课程的教科书,也可以用作与加密货币和区块链技术相关的各种考试和认证的学习资料。
内容介绍
本书共包含19章,具体内容如下。
第1章“区块链入门”。详细阐释了区块链技术所基于的分布式计算的基本概念,讨论了区块链的历史、定义、相关术语、通用元素和类型等,并介绍了作为区块链技术核心的各种共识机制。
第2章“去中心化”。阐述了去中心化的概念及其与区块链技术的关系,介绍了可用于去中心化过程或系统去中心化的各种方法或平台。
第3章“对称密码学”。介绍了对称密码学的理论基础,这对于理解如何提供各种安全服务(如机密性和完整性)是必不可少的。
第4章“公钥密码学”。通过实际示例介绍了诸如RSA算法和ECC算法、公钥和私钥、数字签名和哈希函数之类的概念,介绍了金融市场和交易基础知识,因为在金融领域存在许多有趣的区块链技术用例。
第5章“比特币详解”。从定义、交易执行、区块链结构和挖矿等多方面介绍了比特币,这是第一个区块链,也是目前市值最大和交易最活跃的区块链。此外,还详细介绍了与比特币加密货币有关的技术概念。
第6章“比特币网络和支付”。详细介绍了比特币网络、相关协议和各种比特币钱包。此外,还介绍了比特币改进提案、比特币交易和支付等。
第7章“比特币客户端和API”。介绍了可用于构建比特币应用程序的各种比特币客户端和编程API。
第8章“山寨币”。详细解释了山寨币的由来、工作量证明方案的替代方法、各种权益类型和难度目标重新调整算法等,并介绍了山寨币的开发和不同山寨币的示例。
第9章“智能合约”。对智能合约进行了深入的讨论,介绍了诸如智能合约的历史、智能合约的定义、李嘉图合约、Oracle,以及在区块链上部署智能合约等主题。
第10章“以太坊入门”。详细介绍了以太坊区块链的设计和架构,讨论了与以太坊区块链相关的各种技术概念,深入解释了该平台的基本原理、功能和组件。
第11章“深入了解以太坊”。阐述了更多与以太坊相关的内容,包括编程语言和操作码、区块和区块链、节点和矿工、钱包和客户端软件、API和工具、支持协议等。
第12章“以太坊开发环境”。讨论了与以太坊智能合约开发和编程有关的主题,包括建立一个私有网络和启动网络等。
第13章“开发工具和框架”。详细介绍了Solidity编程语言以及用于以太坊开发的各种相关工具和框架。
第14章“Web3详解”。介绍了使用以太坊区块链开发去中心化应用程序和智能合约,并对Web3 API进行了详细介绍,同时列举了多个实际示例。
第15章“超级账本”。讨论了来自Linux基金会的Hyperledger项目,包括Fabric、Sawtooth Lake和Corda等。
第16章“替代区块链”。介绍了各种替代区块链的解决方案和平台,提供了替代区块链和相关平台的技术细节和功能。
第17章“区块链—代币之外的应用”。对区块链技术在除加密货币以外的领域(包括物联网、政府治理、媒体和金融等)的应用进行了实用而详细的介绍。
第18章“可伸缩性和其他挑战”。讨论了区块链技术面临的挑战(主要包括可伸缩性、隐私保护和安全性),以及如何应对这些挑战。
第19章“当前发展和未来展望”。介绍了区块链技术的新兴趋势和挑战、区块链研究和项目、区块链开发工具等。此外,还介绍了对区块链技术未来发展的一些预测。
充分利用本书
? 本书中的所有示例均在Ubuntu 16.04.1 LTS(Xenial)和macOS 10.13.2版本上开发。因此,建议使用Ubuntu或任何其他类似UNIX的系统。当然,也可以使用任何其他操作系统(如Windows或Linux),只不过书中的示例(尤其是与安装相关的示例)就可能需要进行相应的更改。
? 本书使用OpenSSL 1.0.2g命令行工具开发了与加密相关的示例。
? 以太坊Solidity示例是使用Remix IDE开发的,其下载地址如下:
https://remix.ethereum.org
? 本书以太坊示例是使用以太坊拜占庭版本开发的,其下载地址如下:
https://www.ethereum.org/
? Vilros使用Raspberry Pi套件开发了与物联网相关的示例,但它也可以使用任何其他模型或工具套件。具体来说,Raspberry Pi 3 Model B 1.2版本可用于构建物联网的硬件示例。Node.js 8.9.3版本和npm 5.5.1版本已用于下载相关软件包并运行物联网示例的Node.js服务器。
? Truffle框架已用于智能合约部署的一些示例中,其下载地址如下:
http://truffleframework.com/
通过npm提供的任何最新版本都应该是合适的。
下载示例代码文件
读者可以从www.packtpub.com下载本书的示例代码文件。具体步骤如下:
(1)登录或注册www.packtpub.com。
(2)在Search(搜索)框中输入本书名称Mastering Blockchain的一部分(不区分大小写,并且不必输入完全),即可看到本书出现在推荐下拉菜单中,如图P-1所示。
图P-1
(3)单击选择Mastering Blockchain-Second Edition(本书英译名称),在其详细信息页面中单击Download code files(下载代码文件)按钮,如图P-2所示。需要说明的是,读者需要登录此网站才能看到该下载按钮(注册账号是免费的)。
下载文件后,请确保使用下列软件的最新版本解压或析取文件夹中的内容:
? WinRAR/7-Zip(Windows系统)。
? Zipeg/iZip/UnRarX(Mac系统)。
图P-2
? 7-Zip/PeaZip(Linux系统)。
本书的代码包也已经在GitHub上托管,对应网址如下:
https://github.com/PacktPublishing/Mastering-Blockchain-Second-Edition
在该页面上,单击Code(代码)按钮,然后选择Download ZIP即可下载本书代码包,如图P-3所示。
如果代码有更新,则会在现有GitHub存储库上更新。
图P-3
下载彩色图像
我们还提供了一个PDF文件,其中包含本书中使用的屏幕截图/图表的彩色图像,可以通过以下地址下载:
http://www.packtpub.com/sites/default/files/downloads/MasteringBlockchainSecondEdition_ ColorImages.pdf
本书约定
本书中使用了许多文本约定。
(1)CodeInText:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL和用户输入等。以下段落就是一个示例。
POST是HTTP支持的请求方法。有关POST的更多信息,请访问以下网址。
https://en.wikipedia.org/wiki/POST_(HTTP)
(2)有关代码块的设置如下所示:
pragma solidity ^0.4.0;
contract TestStruct {
struct Trade
{
uint tradeid;
uint quantity;
uint price;
string trader;
}
// 该结构可以按以下方式初始化和使用
Trade tStruct=Trade({tradeid:123,quantity:1,price:1,trader:"equinox"});
}
(3)当要强调代码块的特定部分时,相关行或项目以粗体显示:
pragma solidity ^0.4.0;
contract TestStruct {
struct Trade
{
uint tradeid;
uint quantity;
uint price;
string trader;
}
// 该结构可以按以下方式初始化和使用
Trade tStruct=Trade({tradeid:123,quantity:1,price:1,trader:"equinox"});
}
(4)任何命令行输入或输出都采用如下所示的粗体代码形式:
$ sudo apt-get install solc
(5)术语或重要单词采用中英文对照形式,在括号内保留其英文原文。示例如下:
该文件包含各种元素,最重要的是应用程序二进制接口(Application Binary Interface,ABI),可以使用geth来查询它。通过Solidity编译器可生成该文件,也可以直接从Remix IDE合约详细信息中复制它。
(6)对于界面词汇则保留其英文原文,在后面使用括号添加其中文翻译。示例如下:
请注意,在上面的屏幕截图中,有许多字段,例如From(付款人的地址)、To(收款人的地址)、BTC(比特币)、GBP(英镑)和Fee(费用)。这些字段的意思不言而喻,但值得一提的是,Fee是根据交易规模的大小来计算的,而Fee Rate(费率)则是一个取决于网络中交易的数量的值。
(7)本书还使用了以下两个图标。
表示警告或重要的注意事项。
表示提示或小技巧。