描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111624929
以太坊打开了通向去中心化计算的大门,这个平台使你能够运行去中心化的应用程序(DApps)和智能合约,这些应用程序没有中心故障点或控制点,与支付网络集成,并在开放的区块链上运行。通过这本实用指南,Andreas M. Antonopoulos 和 Gavin Wood 向读者提供了在以太坊和其他基于虚拟机的区块链上构建智能合约和 DApps 所需的一切信息。
本书既可以作为一本技术参考手册,也可供读者全面地了解以太坊。前两章主要是一个入门级的介绍,适合新手用户,这些章节中的示例可以由具有一定技术技能的读者完成。这两章将使你对以太坊基础知识有一个很好的掌握,并教会你使用以太坊的基本工具。第三章及以后的内容主要面向程序员,包括许多技术主题和编程示例。
前言1
术语速查11
第1章
什么是以太坊?23
以太坊与比特币的比较23
区块链的组件24
以太坊的诞生25
以太坊的四个开发阶段26
以太坊:一个通用目的的区块链27
以太坊的组件28
以太坊和图灵完备29
从通用目的的区块链到DApp31
互联网的第三次浪潮32
以太坊的开发文化32
为什么要学习以太坊?33
这本书将会教你什么内容?33
第2章
以太坊基本概念34
以太币的货币单位34
选择以太坊钱包35
控制和责任36
MetaMask入门37
世界计算机简介45
外部账户和合约账户46
一个简单的智能合约:Faucet46
编译Faucet合约49
在区块链上创建合约50
与合约进行交互52
总结57
第3章
以太坊客户端58
以太坊网络58
运行以太坊客户端62
以太坊区块链数据的首次同步67
远程调用以太坊客户端71
总结74
第4章
以太坊背后的密码学75
密钥和地址75
公钥密码学和加密货币76
私钥78
公钥79
密码学哈希函数85
以太坊地址87
总结92
第5章
钱包93
钱包技术概述93
钱包的最佳实践97
总结108
第6章
交易109
交易的结构109
交易的随机数110
交易的gas115
交易的接收方117
交易中的以太币和数据117
特殊交易:合约创建121
数字签名123
签名的前缀值(v)和公钥恢复129
离线签名130
交易的传播131
记录在区块链上132
多签名交易132
总结133
第7章
智能合约与Solidity134
什么是智能合约?134
智能合约的生命周期135
以太坊高级编程语言136
使用Solidity编写智能合约138
以太坊合约的应用程序二进制接口140
使用Solidity进行编程142
与gas有关的注意事项163
总结165
第8章
智能合约与Vyper166
合约的常见漏洞和Vyper166
与Solidity的比较167
装饰器171
函数和变量顺序172
编译173
在编译器层面防止溢出错误173
读取数据174
总结174
第9章
智能合约安全175
安全最佳实践175
安全风险和反模式176
重入176
算术溢出181
意外的以太币185
DELEGATECALL189
默认的可见性195
无序错觉197
外部合约引用199
短地址/参数攻击204
未检查的调用返回值206
竞争条件/预先交易208
拒绝服务211
区块时间戳操纵214
小心使用构造函数216
未初始化的存储指针217
浮点数和精度219
Tx.Origin验证222
合约程序库223
总结224
第10章
代币225
代币有哪些使用方式?225
代币和可替代性227
对手方风险227
代币和内在性227
使用代币:工具型代币还是权益型代币?228
以太坊的代币230
代币标准251
代币接口标准的扩展253
代币和ICO254
总结254
第11章
预言机255
为什么需要预言机?255
预言机的应用场景和示例256
预言机的设计模式257
数据认证259
计算性的预言机260
去中心化预言机262
Solidity中的预言机客户端接口262
总结266
第12章
去中心化应用267
什么是DApp?268
一个基本的DApp示例:拍卖DApp271
拍卖DApp的进一步去中心化276
使用Swarm进行数据存储277
以太坊名称服务280
从普通应用到去中心化应用291
总结292
第13章
以太坊虚拟机293
什么是EVM?293
图灵完备和gas308
gas308
总结311
第14章
共识312
基于工作量证明的共识机制313
基于权益证明的共识机制313
Ethash:以太坊的PoW算法314
Casper:以太坊的PoS算法315
共识的原则316
争议和竞争316
总结317
附录A 以太坊的分叉历史318
附录B 以太坊标准325
附录C EVM操作码和对应的gas开销332
附录D 开发工具、框架和类库339
附录E web3.js教程359
本书由Andreas M. Antonopoulos和Gavin Wood博士合著。一系列幸运的巧合将这两位作者聚集在一起,他们和数百名贡献者并肩写作,以最具开源精神和创造性的方式完成了本书。
Gavin一直希望写一本书,对以太坊黄皮书(他关于以太坊协议的技术描述)中的概念进行扩展和延伸,主要目的是向更广泛的读者介绍以太坊,这显然是充满了希腊字母和数学公式的黄皮书所无法完成的。
当Gavin与Andreas谈到写这本书的想法时,两人一拍即合,写书的计划按部就班地开始推进。Andreas是以太坊项目的早期参与者,他在这个领域也很有知名度。
当时,Andreas刚出版了他的著作《Mastering Bitcoin》译注1,那本书迅速成为比特币和加密货币的权威技术指南。之后,Andreas的读者就开始问他:“你什么时候写《Mastering Ethereum》呢?”Andreas已经在考虑他的下一个项目,并发现以太坊是一个引人注目的技术主题。
最终,2016年5月,Gavin和Andreas在同一个城市巧遇。他们聚在一起喝咖啡,谈及这本书的计划。由于Andreas和Gavin都是开源理念的忠实拥护者,他们都希望通过社区协作的方式来完成这本书,并最终在Creative Commons许可下发布。值得庆幸的是,出版商O扲eilly Media非常支持这个想法,本书这个项目正式启动。
如何使用本书
本书既可以作为一本技术参考手册,也可供读者全面地了解以太坊。前两章主要是入门级的介绍,适合新手阅读,有一定技术能力的读者可以尝试完成其中的示例。这两章将使你对以太坊基础知识有很好的掌握,并教会你使用以太坊的基本工具。第3章及以后的内容主要面向程序员,包括许多技术主题和编程示例。
作为以太坊的参考手册和入门级教材,本书不可避免地包含一些重复的内容。例如,在一些章节中我们介绍了gas,主要目的是配合那些章节的内容;类似gas这样重要的内容,会有单独的章节重点介绍。
目标读者
本书主要面向程序员。如果你可以使用编程语言,本书将教会你运行智能合约的区块链的工作原理、使用方法以及如何使用它们开发智能合约和去中心化应用程序。前几章也适合非开发人员深入了解以太坊。
本书使用的术语和约定
本书使用以下字体约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序代码,以及用于引用程序元素的段落,例如变量或函数名称、数据库、数据类型、环境变量、语句和关键字等。
等宽粗体(Constant width bold)
显示应由用户按字面输入的命令或其他文本。
等宽斜体(Constant width italic)
显示应使用用户提供的值或由上下文确定的值替换的文本。
此图标表示提示或建议。
此图标表示普通注释。
此图标表示警告或注意。
示例代码
示例代码采用Solidity、Vyper和JavaScript编写,并使用类Unix操作系统的命令行。所有代码都可以在GitHub存储库中找到。请阅读书籍代码,尝试代码示例,或通过GitHub提交更正:https://github.com/ethereumbook/ethereumbook。
所有代码片段都可以在大多数操作系统上进行复制,只需安装基本的编译器、解释器和相应语言的库。必要时,我们提供基本安装说明和关于输出的逐步说明。
一些代码片段和代码输出已重新格式化,以便进行印刷。在所有情况下,行都用反斜杠()字符分隔,然后是换行符。在录入这些代码时,请删除这两个字符并再次连接这些行,你应该看到与示例中显示的结果相同的结果。
所有代码片段都尽可能使用实际值和计算,以便读者可以从这些例子开始按顺序尝试,并在你编写的任何代码中获得相同的结果。例如,私钥和相应的公钥以及地址都是真实的。样本交易、合约、区块和区块链引用都已存在于实际的以太坊区块链中,并且是公共区块链的一部分,因此你可以查看它们。
示例代码的使用许可
这本书是为了帮助你完成工作。通常,如果本书提供了示例代码,你可以在程序和文档中使用它。除非复制了大部分代码,否则无须与我们联系以获得许可。例如,编写使用本书中几个代码块的程序不需要许可。出售或分发O扲eilly书籍中的示例CD-ROM需要获得许可。通过引用本书并引用示例代码来回答问题不需要许可。将本书中的大量示例代码合并到产品文档中需要获得许可。
我们不强制要求注明出处,但如果你能这样做,我们将对此表示感谢。注明出处应该包括书名、作者、出版商、ISBN和版权。例如“Mastering Ethereum by Andreas M. Antonopoulos and Dr. Gavin Wood
(O’Reilly). Copyright 2019 The Ethereum Book LLC and Gavin Wood,
978-1-491-97194-9”。
本书是根据Creative Commons Attribution-Noncommercial-No Derivative Works 4.0
International License(CC BY-NC-ND 4.0)提供的。
如果你认为自己对代码示例的使用超出了合理使用范围或上述许可范围,请随时通过[email protected]与我们联系。
对公司和产品的引用
所有对公司和产品的引用都是为了教育、演示和参考目的。这并不表示作者对所提及的任何公司或产品进行背书。我们尚未测试本书中显示的任何产品、项目或代码段的操作或安全性。使用它们需要你自担风险!
本书中的以太坊地址和交易
本书中使用的绝大部分以太坊地址、交易、密钥、QR码和区块链数据都是真实的。这意味着你可以浏览区块链,查看作为示例提供的交易,使用你自己的脚本或程序检索它们,等等。
但请注意,在本书中使用过的地址的私钥已被“烧毁”。这意味着如果你向这些地址中的任何一个转账,这笔钱将永远丢失或(更可能)被挪用,因为阅读本书的任何人都可以使用书中出现过的私钥来获取这些地址中的以太币。
不要向这本书中的任何地址发送以太币或代币。你的数字资产将被其他知道私钥的读者带走,或永远丢失。
O’Reilly Safari
Safari(以前称为Safari Books
Online)是一个会员制的培训和学习平台,适用于企业、政府、教育工作者和个人。
会员可以访问来自250多家出版商的数千本书籍、培训视频、学习路径、互动教程和策划播放列表,其中包括O’Reilly Media、Harvard Business Review、Prentice Hall
Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit
Press、Adobe、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett、Course Technology,等等。
欲了解更多信息,请访问http://oreilly.com/safari。
如何与我们联系
有关本书以及开放版权和翻译的信息,请访问https://ethereumbook.info/。
请向出版商提出有关本书的评论和问题:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
800-998-9938(美国或加拿大)
707-829-0515(国际或当地)
707-829-0104(传真)
请将有关本书的评论或技术问题发送至[email protected]。
有关我们的书籍、课程、会议和新闻的更多信息,请访问我们的网站https://www.oreilly.com。
在Facebook上找到我们:https://facebook.com/oreilly。
在Twitter上关注我们:https://twitter.com/oreillymedia。
在YouTube上观看我们:https://www.youtube.com/oreillymedia。
联系Andreas
读者可以在个人网站上联系Andreas M. Antonopoulos:https://antonopoulos.com。
在YouTube上订阅Andreas的频道:https://www.youtube.com/aantonop。
关注Andreas的Facebook页面:https://www.facebook.com/AndreasMAntonopoulos。
在Twitter上关注Andreas:https://twitter.com/aantonop。
在LinkedIn上与Andreas联系:https://linkedin.com/company/aantonop。
Andreas还要感谢所有通过每月捐款支持他的工作的顾客。你可以通过https://patreon.com/aantonop支持Andreas。
联系Gavin
读者可以在个人网站上联系Gavin Wood博士:http://gavwood.com/。
在Twitter上关注Gavin:https://twitter.com/gavofyork。
Gavin一般在Riot.im上的Polkadot
Watercooler聊天室:https://riot.im/app/#/room/ #polkadot- watercooler:matrix.org。
来自Andreas的致谢
我把自己对文字和书籍的热爱归功于母亲Theresa,她在一栋墙上堆满了书的房子里把我养大。尽管自称是一个对技术充满恐惧的人,但母亲还是在1982年给我买了第一台电脑。我父亲Menelaos是一位土木工程师,在80岁时出版了他的第一本书,他教会了我逻辑和分析思想以及对科学和工程的热爱。
谢谢大家在整个旅程中对我的支持。
来自Gavin的致谢
我9岁的时候,母亲从邻居那里为我买了第一台电脑,没有它,我的技术进步无疑会减少。我童年时对电充满了恐惧,必须感谢Trevor和我的祖父母,他们一次又一次地履行着“在我给电脑插上电源时保护我”的重任,没有他们,电脑就没用了。还必须感谢我一生中所遇到的几位恩师,从邻居Sean(他教会我第一个计算机程序)到Quinn先生(他是我的小学老师),Quinn先生允许我去编程而不用上历史课,再到我的中学老师Richard Furlong Brown,他给我机会做更多编程,而不是成天打橄榄球。
必须感谢我孩子的母亲Jutta,感谢她一直以来的支持,感谢我生命中的许多人,无论是新朋友还是老朋友,这些朋友使我保持着理智。最后,我要向Aeron Buchanan致以最诚挚的感谢,没有他,我生命中最近这五年不可能像今天这样精彩,如果没有他的时间、支持和指导,这本书就不会像现在这样完美。
贡献列表
许多贡献者在GitHub的早期发布草稿中提供了评论、更正和补充。
两位GitHub编辑为本书的GitHub Repo做出了贡献,他们自愿管理、审查、编辑、合并和批准Pull Request和问题:
GitHub编辑主管:Francisco Javier
Rojas Garcia(fjrojasgarcia)。
GitHub编辑助理:William Binns(wbnns)。
来自社区的贡献主要体现在DApp、ENS、EVM、分叉历史、gas、预言机、智能合约安全和Vyper等章节。由于时间和篇幅的限制,没有在第1版中包含的其他贡献可以在GitHub存储库的contrib文件夹中找到。整本书收到了数以千计来自GitHub的Pull Request,这些贡献提高了本书的质量、可读性和准确性。衷心感谢所有贡献者!
以下是按字母顺序排序的所有GitHub贡献者的列表,括号中是他们的GitHub ID:
Abhishek Shandilya (abhishandy)
Adam Zaremba (zaremba)
Adrian Li (adrianmcli)
Adrian Manning (agemanning)
Alejandro Santander (ajsantander)
Alejo Salles (fiiiu)
Alex Manuskin (amanusk)
Alex Van de Sande (alexvandesande)
Anthony Lusardi (pyskell)
Assaf Yossifoff (assafy)
Ben Kaufman (ben-kaufman)
Bok Khoo (bokkypoobah)
Brandon Arvanaghi (arvanaghi)
Brian Ethier (dbe)
Bryant Eisenbach (fubuloubu)
Chanan Sack (chanan-sack)
Chris Remus (chris-remus)
Christopher Gondek (christophergondek)
Cornell Blockchain (CornellBlockchain)
Alex Frolov (sashafrolov)
Brian Guo (BrianGuo)
Brian Leffew (bleffew99)
Giancarlo Pacenza (GPacenza)
Lucas Switzer (LucasSwitz)
Ohad Koronyo (ohadh123)
Richard Sun (richardsfc)
Cory Solovewicz (CorySolovewicz)
Dan Shields (NukeManDan)
Daniel Jiang (WizardOfAus)
Daniel McClure (danielmcclure)
Daniel Peterson (danrpts)
Denis Milicevic (D-Nice)
Dennis Zasnicoff (zasnicoff)
Diego H. Gurpegui (diegogurpegui)
Dimitris Tsapakidis (dimitris-t)
Enrico Cambiaso (auino)
Ersin Bayraktar (ersinbyrktr)
Flash Sheridan (FlashSheridan)
Franco Daniel Berdun (fMercury)
Harry Moreno (morenoh149)
Hon Lau (masterlook)
Hudson Jameson (Souptacular)
Iuri Matias (iurimatias)
Ivan Molto (ivanmolto)
Jacques Dafflon (jacquesd)
Jason Hill (denifednu)
Javier Rojas (fjrojasgarcia)
Jaycen Horton (jaycenhorton)
Joel Gugger (guggerjoel)
Jon Ramvi (ramvi)
Jonathan Velando (rigzba21)
Jules Lainé (fakje)
Karolin Siebert (karolinkas)
Kevin Carter (kcar1)
Krzysztof Nowak (krzysztof)
Lane Rettig (lrettig)
Leo Arias (elopio)
Liang Ma (liangma)
Luke Schoen (ltfschoen)
Marcelo Creimer (mcreimer)
Martin Berger (drmartinberger)
Masi Dawoud (mazewoods)
Matthew Sedaghatfar (sedaghatfar)
Michael Freeman (stefek99)
Miguel Baizan (mbaiigl)
Mike Pumphrey (bmmpxf)
Mobin Hosseini (iNDicat0r)
Nagesh Subrahmanyam (chainhead)
Nichanan Kesonpat (nichanank)
Nick Johnson (arachnid)
Omar Boukli-Hacene (oboukli)
Paulo Trezentos (paulotrezentos)
Pet3rpan (pet3r-pan)
Pierre-Jean Subervie (pjsub)
Pong Cheecharern (Pongch)
Qiao Wang (qiaowang26)
Raul Andres Garcia (manilabay)
Roger Hztz (zt2)
如果没有你们的帮助,本书不可能顺利完成。你们的贡献彰显了开源技术和开源文化的力量,再次说声谢谢!
资料来源
本书引用了各种公开和开放许可的来源:
https://github.com/ethereum/vyper/blob/master/README.md
(MIT许可)
https://vyper.readthedocs.io/en/latest/
(MIT许可)
https://solidity.readthedocs.io/en/v0.4.21/common-patterns.html
(MIT许可)
https://arxiv.org/pdf/1802.06038.pdf (Arvix Non-Exclusive-Distribution)
https://github.com/ethereum/solidity/blob/release/docs/contracts.rst#inheritance
(MIT许可)
https://github.com/trailofbits/evm-opcodes
(Apache 2.0许可)
https://github.com/ethereum/EIPs/
(Creative Commons CC0许可)
https://blog.sigmaprime.io/solidity-security.html
(Creative Commons CC BY 4.0许可)
评论
还没有评论。