首页>参考读物>公共基础课>心理生活

精通以太坊:开发智能合约和去中心化应用
作者 : [希]安德烈亚斯·M. 安东波罗斯(Andreas M. Antonopoulos) [英] 加文·伍德(Gavin Wood) 著
译者 : 喻勇 杨镇 阿剑 任露露 Elisa Jiang 译EthFans社区 审校
出版日期 : 2019-04-24
ISBN : 978-7-111-62492-9
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 380
开本 : 16
原书名 : Mastering Ethereum: Building Smart Contracts and DApps
原出版社: OReilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

以太坊打开了通向去中心化计算的大门,这个平台使你能够运行去中心化的应用程序(DApps)和智能合约,这些应用程序没有中心故障点或控制点,与支付网络集成,并在开放的区块链上运行。通过这本实用指南,Andreas M. Antonopoulos 和 Gavin Wood 向读者提供了在以太坊和其他基于虚拟机的区块链上构建智能合约和 DApps 所需的一切信息。
本书既可以作为一本技术参考手册,也可供读者全面地了解以太坊。前两章主要是一个入门级的介绍,适合新手用户,这些章节中的示例可以由具有一定技术技能的读者完成。这两章将使你对以太坊基础知识有一个很好的掌握,并教会你使用以太坊的基本工具。第三章及以后的内容主要面向程序员,包括许多技术主题和编程示例。

图书特色

图书前言

本书由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)提供的。
如果你认为自己对代码示例的使用超出了合理使用范围或上述许可范围,请随时通过permissions@oreilly.com与我们联系。
对公司和产品的引用
所有对公司和产品的引用都是为了教育、演示和参考目的。这并不表示作者对所提及的任何公司或产品进行背书。我们尚未测试本书中显示的任何产品、项目或代码段的操作或安全性。使用它们需要你自担风险!
本书中的以太坊地址和交易
本书中使用的绝大部分以太坊地址、交易、密钥、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(传真)
请将有关本书的评论或技术问题发送至bookquestions@oreilly.com。
有关我们的书籍、课程、会议和新闻的更多信息,请访问我们的网站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许可)

专家评论

“这是一本非常全面的指南,从区块链的基础知识,到最新的智能合约编程实践,而且两位作者都是区块链领域的知名布道师。”
—Manuel Araoz,Zeppelin CTO
“《Mastering Bitcoin》是一本经典的参考书,它使更多的普通人理解了比特币和区块链技术;本书实现了同样的目的,让以太坊和世界计算机的概念变得普及。”
—Lane Rettig,以太坊核心开发人员
“如果你尝试开发自己的DApp,本书绝对是最好的入门图书!如果你对去中心化网络以及如何构建去中心化的应用程序感兴趣,Andreas和Gavin的这本书为你提供了全面的指南。”
—Taylor Gerring,区块链研究所执行董事
“我有幸阅读了Andreas和Gavin的这本新书,不得不说,我对它的广度、深度和可读性感到惊讶。它囊括了一切:以太坊的精彩历史、椭圆曲线的数学解释、Solidity教程,以及关于代币和ICO的法律讨论。它有足够的深度,可以作为教学参考资料;同时也有很好的可读性,即使只有初步的数学知识,也能够轻松读懂。在阅读了关于密码学的几个章节后,我觉得我对许多底层密码学概念有了更为扎实的理解。无论你是研究人员、开发者、经理、律师、学生或任何对以太坊技术未来发展方向感兴趣的人,我都强烈建议你将这本书置于自己的书架上。”
—Alex van de Sande,以太坊基金会设计师
“本书将成为未来的必读书,因为以太坊将像TCP/IP一样无处不在。它将成为去中心化的基础设施,推动技术的发展和繁荣。”
—Hudson Jameson,以太坊基金会社区组织者
“无论你是想要初步了解,还是尝试深入学习,本书对于关注以太坊的人来说都是一本完美的书。Gavin熟悉以太坊内部的技术细节,Andreas善于化繁为简,这本书充分发扬了两方面的优势。我多么希望在刚开始接触以太坊时,就能够读到这本书。”
—Taylor Monahan,MyCrypto创始人兼首席执行官

封底文字

“我对本书的广度、深度和可读性感到惊讶,我要向你强烈推荐这本书。”
——Alex van de Sande,以太坊基金会设计师
“《Mastering Bitcoin》是一本经典的参考书,它使更多的普通人理解了比特币和区块链技术;本书实现了同样的目的,让以太坊和世界计算机的概念变得普及。”
——Lane Rettig,以太坊核心开发人员

以太坊打开了通向去中心化计算的大门,在这个平台上,你可以运行去中心化的应用程序(DApp)和智能合约。这些应用程序没有中心故障点或控制点,它们与支付网络集成,并在开放的区块链上运行。通过这本实用指南,你将了解在以太坊和其他基于虚拟机的区块链上构建智能合约和DApp所需的一切信息。

为什么IBM、微软、纳斯达克以及其他数百个组织都在尝试以太坊?这本必不可少的指南向你展示了成为这个不断发展和令人兴奋的新兴行业的创新者所需的技能:
·运行以太坊客户端,创建和传输交易,编写智能合约。
·了解公钥加密、哈希的基本要素和数字签名。
·了解“钱包”如何保存用来操纵以太币和智能合约的数字私钥。
·使用JavaScript库和远程过程调用接口,以编程方式与以太坊客户端交互。
·了解安全实践、设计模式和反模式,了解现实世界的例子。
·创建代表资产、股份、投票权或访问控制权的代币。
·使用多个P2P组件构建去中心化应用程序。

Andreas M. Antonopoulos是备受好评的畅销书作家、演讲家和教育家,也是世界上最重要的比特币和开放式区块链专家之一。Andreas善于化繁为简,让普通人理解深奥的技术话题。

Gavin Wood博士是以太坊的联合创始人和前首席技术官,也是Solidity面向合约编程语言的发明人。他还是Web3基金会的创始人兼总裁,也是Parity Technologies的创始人兼首席程序员。

译者序

以太坊和几乎所有数字货币,在过去两年中都经历了过山车一般的暴涨和暴跌。就像是20年前的互联网泡沫,任何技术的发展都要经历这样一个“吹尽黄沙始见金”的过程。
我在2018年冬天去捷克首都布拉格参加了第五届以太坊开发者大会。令人欣慰的是,在整个数字货币市场极为萧条的情况下,大会吸引了超过3000名来自世界各地的开发者和技术爱好者,以太坊在熊市中仍旧维持着顽强的生命力和极高的活跃度,参会的每一位开发者都对区块链技术在未来的广阔应用场景充满信心。在这些五彩缤纷的技术背后,体现的是极客对技术和改变世界的追求,对自由的渴望和向往。
本书的作者之一AA译注1是数字货币领域著名的布道师,作为承担过同样工作的人,我深知“布道”对于一项新技术的普及和推广的重要性。我本人对比特币和区块链的认知,绝大部分都来源于AA的那本《Mastering Bitcoin》。当得知AA要写一本关于以太坊的著作时,我立刻迸发了要翻译这本书的念头,但是我也深知,翻译是一项非常辛苦甚至还可能“吃力不讨好”的工作,尤其是我这样一个区块链初学者,一不小心就会搞砸一本好书。
幸运的是,在翻译的过程中,我得到了多位好友的帮助,他们帮我分担了部分翻译工作,并解答了我在技术上的一些疑惑。这本书的第1、2、3、5、6、7、10章由我翻译完成,第11、14章和附录A、B由阿剑翻译完成,第8、12章由任露露翻译完成,第9、13章的EVM部分由杨镇翻译完成,第4、13章的gas部分和术语速查由Elisa Jiang翻译完成,吕国宁在翻译过程中提供了技术指导。团队的全体成员共同完成了译稿的润色和校对工作,最后由我统稿。
在此,我向参与本书翻译和校对工作的几位好友表示诚挚的感谢。同时,我也要感谢机械工业出版社对我们的信任,以及在翻译和出版过程中给予的帮助。

喻勇
2019年2月28日

推荐序

推荐序一
区块链技术在最近几年时间里不但获得了大量的媒体关注,其本身的发展速度可能也超出了所有人的想象。人们使用区块链技术不仅仅是因为其技术发展带来的比较竞争优势,而是更多地考虑到这种技术对社区治理和经济生产带来的深刻变革。如果说能源和信息主导了前几次的工业革命,我相信区块链技术也会深深地改变我们生活的这个世界。
谈到区块链技术,一般人首先想到的就是比特币。但是不得不说,比特币无论是在创新的广度还是深度上都和以太坊有差距。从比特币时代开始,人们开始大量关注密码学的实用及落地问题,过去十年密码学的发展超过了以往任何时代,那种繁荣程度让人很难相信过去这只是一个只有少数科学家才关注的领域。椭圆曲线、哈希算法、零知识证明等诸多概念都在区块链的世界里得到了非常切实的实践,共识机制的探讨也如火如荼,与之前图灵奖获得者Lamport的寂寞形成了巨大的反差。但这可能只是一个开始,以太坊开启了区块链2.0的大门,为区块链提供了实用的计算模型,不但打开了人们对区块链应用的巨大想象空间,也在过去几年的实践当中极大地推动了很多计算机基础科学的进步。比如,智能合约的出现使得形式化验证技术大放异彩,虽然这项技术在理论上并不算新,但在智能合约广泛应用之前并没有什么像样的应用场景。它原本只有非常小规模的应用,在航天或者军工等尖端领域并不能形成广泛的通用技术。但由于智能合约本身传递的价值非常高,又执行在一个不那么可信的环境中,且执行过程是对所有参与者透明的,就使得原本在传统软件业中很微小的瑕疵都能产生灾难性的后果。正是这种严苛的应用场景推动了诸如形式化验证技术的蓬勃发展。再比如,与编程语言相关的虚拟机技术和编译技术,以前都是少数技术极客或者计算机科学家的事。智能合约运行在一个巨大的分布式计算机中,而以前的大部分编程语言也好,虚拟机设计也好,隐含的假设都是在单个计算机系统中运行。因此,出现大量为智能合约设计的新语言和新虚拟机就不足为奇了。我们要看到这种真实需求与理论实践的巨大差异,回想一下科学发展的历史,就会发现有很多类似情形,比如蒸汽机发明之后所带来的工业变革推动了控制理论的建立。也有很多原本在理论上可行的东西终于找到了现实中对应的模型,就好比非欧几何找到了相对论。不仅仅是类似于零知识证明这样的革命性技术在快速演化,对于技术极客来说,在这个领域中的创新所遇到的唯一限制就是自己的想象力。
我们还不能简单地把以太坊理解为技术的集合。毕竟它拥有全球最大的区块链技术社区,总共大约有35万开发者,而这一数字还在快速增长。以太坊社区处在区块链技术发展的核心位置,即使新技术不是来自这个社区的实践,也会和这个社区产生非常良性的互动。如果我们不能理解这一点,就不能把握区块链发展的方向。目前很多独立的项目,其核心成员都是在以太坊社区做过重要贡献的人。从另外一个角度来说,以太坊是区块链2.0,在区块链1.0—比特币的基础上已前进一步,我们有理由相信,未来的区块链3.0,也就是下一代的革命性技术是来自以太坊社区的。在区块链技术的整个发展过程中,我们看到了技术社区所展现出的巨大生命力,全世界的技术极客热情地投入到共同建设区块链技术的体系当中,而且获得了广泛的商业支持,形成了可持续发展的共赢模式。以太坊社区的开放和包容促进了这种欣欣向荣的局面进一步发展。区块链技术不是一门具体的技术,也不是几种技术简单地拼凑在一起形成的解决方案,而是一个体系非常庞大的技术群落,技术之间相互影响、相互促进。只有在非常强有力的社区的支持下才能形成完整的生态体系,以太坊的技术专业分工的多元社区是我们目前看到的这些技术产生的土壤,这样的土壤也会孕育出更多让人期待的技术创新。
最后,我要说人类对“Trustless”的力量一无所知。大航海时代,人类不仅仅拓展了自己的疆域,对这个世界的认知的改变才是更为重要的。如果我们没有意识到地球是圆的,那么就不会有环球航行,更不会有新的天文观测手段,不会有通过天文观测实现的光速测量方法,也不会有后来的人造卫星等。可能这一切最初的起点就是由于我们纠正了原来局限的认知。只要我们认识到地球是圆的就会有这么多改变,那么我们意识到区块链技术所带来的Trustless体系后,是不是会改变更多?推导出质能方程是一回事,造出核电厂是另一回事。让人改变认知是非常困难的,这也是区块链技术拓展边界的障碍,这个技术太颠覆人们的常识,至少在信任关系上,需要漫长的过程才能获得人类社会的广泛认可。Trustless的力量是无穷的,是我们追求的星辰大海。

程显峰
火币集团CTO




推荐序二
区块链充满魔力,它给我们所在的网络世界带来了非常特别的改变,其本质是—通过数学降低人类的信任成本。
我算是很早就用比特币进行交易的人,由于过去十多年都在安全/黑客领域,早期的比特币仅仅作为我用于特殊领域的交易媒介。对于当时的我来说,觉得这很方便,居然有一种支付方式是匿名的,是大家形成共识的。而这种支付方式并不存在中心化监管,是一种去中心化支付方式,底层是数学,是严谨的算法,在这些之上是独特的经济模型,激励着这个网络的发展。这种共识机制被命名为PoW(Proof of Work),通过消耗大量算力,促进了比特币的价值发展,保证了整个网络的安全稳定。
以太坊借鉴了PoW这种共识机制,并有自己在共识机制上的独特发展路线,其中很大的原因在于以太坊本身的定位—在其网络基础上可以快速构建应用,我们称之为去中心化应用(DApp)。DApp的核心是智能合约,而智能合约运行在一个叫作EVM的虚拟机上。可以看到一个分层架构世界的出现。随着这个世界的发展,许多安全问题也在陆续出现,由于我的身份,这是我深入这个世界的最直接驱动力。所幸的是,这些安全事件都未能摧毁以太坊,但却屡次让我们意识到安全是必选项、底线、基础设施。
这个世界的进化出自无数天才之手,站在我的角度来看,如果想做好安全,离不开对方方面面的深入了解。我很乐意看到优秀书籍的出现,包括我有幸作序的这本。希望更多技术人员能沉下心来,探索与创造属于这个世界的特别的东西。我也希望通过自己微薄的力量,给这个世界带来更多的安全感。

余弦
慢雾科技联合创始人

图书目录

前言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

教学资源推荐
作者: (美)克里斯托弗 彼得森(Christopher Peterson) 著
作者: (美)罗伯特S.费尔德曼(Robert S. Feldman)
作者: 菲利普·津巴多,(美)罗伯特·约翰逊(Robert L.Johnson) 薇薇安·麦卡恩(Vivian McCann)
作者: (美)斯潘塞 A.拉瑟斯(Spencer A. Rathus)著