精通以太坊:开发智能合约和去中心化应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-09 04:29:04

点击下载

作者:(希)安德烈亚斯·M.安东波罗斯

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通以太坊:开发智能合约和去中心化应用

精通以太坊:开发智能合约和去中心化应用试读:

前言

本书由Andreas M.Antonopoulos和Gavin Wood博士合著。一系列幸运的巧合将这两位作者聚集在一起,他们和数百名贡献者并肩写作,以最具开源精神和创造性的方式完成了本书。

Gavin一直希望写一本书,对以太坊黄皮书(他关于以太坊协议的技术描述)中的概念进行扩展和延伸,主要目的是向更广泛的读者介绍以太坊,这显然是充满了希腊字母和数学公式的黄皮书所无法完成的。

当Gavin与Andreas谈到写这本书的想法时,两人一拍即合,写书的计划按部就班地开始推进。Andreas是以太坊项目的早期参与者,他在这个领域也很有知名度。

当时,Andreas刚出版了他的著作《Mastering Bitcoin》,那本书迅速成为比特币和加密货币的权威技术指南。之后,Andreas的读者就开始问他:“你什么时候写《Mastering Ethereum》呢?”Andreas已经在考虑他的下一个项目,并发现以太坊是一个引人注目的技术主题。

最终,2016年5月,Gavin和Andreas在同一个城市巧遇。他们聚在一起喝咖啡,谈及这本书的计划。由于Andreas和Gavin都是开源理念的忠实拥护者,他们都希望通过社区协作的方式来完成这本书,并最终在Creative Commons许可下发布。值得庆幸的是,出版商O’Reilly 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’Reilly书籍中的示例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’ReillySafari(以前称为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 Häusermann(haurog)

·Solomon Victorino(bitsol)

·Steve Klise(sklise)

·Sylvain Tissier(SylTi)

·Taylor Masterson(tjmasterson)

·Tim Nugent(timnugent)

·Timothy McCallum(tpmccallum)

·Tomoya Ishizaki(zaq1tomo)

·Vignesh Karthikeyan(meshugah)

·Will Binns(wbnns)

·Xavier Lavayssière(xalava)

·Yash Bhutwala(yashbhutwala)

·Yeramin Santana(ysfdev)

·Zhen Wang(zmxv)

·ztz(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许可)术语速查

本术语表包含了许多在以太坊中使用的术语,本书中也不可避免地用到了许多。建议读者加上书签以便日后查阅。

账户(Account)

账户是一个对象,它包含地址、余额、nonce,并且存储了状态和代码(皆可为空)。账户可以是合约账户或者外部账户(EOA)。

地址(Address)

通常来说,地址代表的是一个合约或外部账户,可以在区块链上接收(即作为目标地址)或发送(即作为源地址)交易。更具体地说,地址是ECDSA公钥的Keccak哈希中最右的160位数。

断言(Assert)

Solidity语言中,assert(false)断言会编译成0xfe无效操作码,耗尽所有剩余gas并回退所有变更。当一次assert()断言失败时,意味着代码出现严重错误,你需要修改代码。可以使用assert()来检查代码,避免出现意外。

大端字节序(Big-endian)

代表从最高位字节开始的位置编号。与小端字节序(little-endian)相反,后者从最低位字节开始。

BIP(Bitcoin Improvement Proposals)

比特币改进提案,由比特币社区提交的一系列对比特币协议进行改进的提案。比如,BIP-21(比特币改进提案第21号)是建议比特币协议改进统一资源标识符(URI)的提案。

区块(Block)

一个关于其所包含交易的所需信息(区块头)的集合,以及称为ommer(叔块)的一组其他区块头。区块由以太坊网络中的矿工添加上链。

区块链(Blockchain)

以太坊网络中由工作量证明验证的区块序列,每个区块与其父块相连,可一直追溯到创世块。以太坊区块链与比特币的不同之处在于,前者没有区块大小限制,而使用gas上限来调整区块大小。

字节码(Bytecode)

为软件解释器或虚拟机的高效执行而设计的抽象指令集。与人类可读的源代码不同,字节码以数字格式表示。“拜占庭”分叉(Byzantium fork)

以太坊网络在“大都会”开发阶段两次分叉中的第一次,包含EIP-649(以太坊改进提案第649号):延迟“大都会”阶段的难度炸弹并降低区块奖励,使“冰河期”(见下文)推迟一年,区块奖励由5个以太币降至3个。

编译(Compiling)

将用高级编程语言(如Solidity)编写的代码转换成较低级语言(如以太坊虚拟机字节码)。

共识(Consensus)

当许多节点(通常是全网大多数节点)都在本地经验证的区块链上存有同样区块时,我们说网络达成共识。要与共识规则区别开来。

共识规则(Consensus rules)

每个全功能节点为了与其他节点保持一致所要遵循的区块验证规则。要与共识区别开来。“君士坦丁堡”分叉(Constantinople fork)

这是“大都会”开发阶段两次分叉中的第二次,原计划在2018年年中执行升级。该次升级主要计划将共识算法更换成工作量证明与权益证明混合的算法。

合约账户(Contract account)

一个包含代码的账户,只要接收到来自其他账户(外部账户或合约)的交易就会执行合约代码。

创建合约交易(Contract creation transaction)

一种为了注册一个合约并将其记录在以太坊区块链上的特殊交易,其中接收者地址“为零”。(参见“零地址”)

去中心化自治组织(DAO,Decentralized Autonomous Organization)

去中心化自治组织是一类没有分层管理体系的公司或其他组织。“The DAO”同时也可以指代一份2016年4月30日发布的合约,其随后在2016年6月遭到攻击,并最终引起了在区块高度1192000发生的硬分叉。该分叉回退了被攻击的DAO合约,也导致以太坊与以太坊经典分裂成两个竞争系统。

DApp(Decentralized application)

去中心化应用程序。狭义地说,DApp可以是一个智能合约或网页上的用户界面;广义地说,是在开放的、去中心化的、点对点的基础设施服务之上建立的网络应用程序。此外,许多去中心化应用程序还包含去中心化存储与(或)通信协议和平台。

权证(Deed)

不可替代代币(NFT)标准是由ERC721提议的。与ERC20代币不同,权证(所有权证书)可以证明ERC721代币的所有权,且该所有权不可互换,但目前为止还未有任何司法管辖区承认其为合法文件。(参见“不可替代代币”)

难度(Difficulty)

对全网来说,设置产生单位工作量证明需要消耗多少算力。

数字签名(Digital signature)

数字签名算法使用户可以使用其私钥生成我们称之为文件“签名”的短数据串,并使任何拥有相应公钥、该文件签名与文档的人都可以验证:该文件确实由该特定私钥的所有者“签署”,且该文档在签署后未被更改。

ECDSA(Elliptic Curve Digital Signature Algorithm)

椭圆曲线数字签名算法,是以太坊使用的密码学算法,用来保证账户资金只能被其所有者支配。

EIP(Ethereum Improvement Proposal)

以太坊改进提案,用以描述对以太坊平台提出的改进建议的文件,以特定的格式向全体以太坊社区描述一个提议的新功能、新流程或新环境。更多信息可以参看https://github.com/ethereum/EIPs。(参见“ERC”)

ENS(Ethereum Name Service)

以太坊域名服务。更多信息可参看https://github.com/ethereum/ens/。

熵(Entropy)

在密码学的语境中,熵意味着不可预测性,也就是随机性高低。当我们生成一个秘密信息(如私钥)时,算法通常需要依赖于一个熵非常大的信源来保证其输出的随机性。

EOA(External Owned Account)

外部账户,即以太坊网络中由人类用户创建或为人类用户使用的账户。

ERC(Ethereum Request for Comments)

以太坊请求评论。ERC是给部分尝试定义以太坊具体使用标准的EIP贴上的标签。

Ethash

以太坊1.0版本中使用的工作量证明算法。更多信息请参考https://github.com/ethereum/wiki/wiki/Ethash。

以太币(Ether)

以太坊生态系统中使用的原生加密货币,用来支付执行智能合约时产生的gas消耗,其货币符号为Ξ,是希腊语中大写的Xi字母。

事件(Event)

事件使以太坊虚拟机中的日志记录工具可用,而日志记录工具可在DApp的用户界面中触发JavaScript回调,后者又能监听这些事件。更多信息请参见http://solidity.readthedocs.io/en/develop/contracts.html#events。

EVM(Ethereum Virtual Machine)

以太坊虚拟机,是基于栈的虚拟机,用于执行字节码。在以太坊中,其执行模型指定了在给定一系列字节码指令和一小组环境数据的情况下如何改变系统状态。这是通过虚拟状态机的正式模型指定的。

EVM汇编语言(EVM assembly language)

人类可读的以太坊虚拟机字节码的一种形式。

回退函数(Fallback function)

在缺失数据或无法匹配函数名称时的默认函数调用。

Faucet

免费提供测试网可用的测试以太币的服务。

finney15

以太币的货币单位。10finney=1 ether。

分叉(Fork)

在协议层面的一次改动,可能会产生一条竞争链,或造成在挖矿中对未来区块路径的暂时性分歧。“前沿”版本(Frontier)

以太坊最初开发测试阶段的版本,在2015年7月上线,直到2016年3月。

Ganache

个人版以太坊区块链,用户可以在控制区块链操作的情况下用其进行代码测试、执行命令并检查状态。

gas

以太坊网络中为执行智能合约所消耗的虚拟“燃油”。以太坊虚拟机使用一种记账方法来衡量gas用量,以限制算力资源的消耗。(参见“图灵完备”)

gas上限(gas limit)

一个交易或一个区块允许消耗的最大gas量。

Gavin Wood

Gavin Wood是一名英国籍程序员,以太坊联合创始人,前首席技术官。2014年8月,他提出了Solidity这种面向合约的编程语言,用于编写智能合约。

创世块(Genesis block)

区块链上的第一个区块,用于初始化特定的区块链及其原生加密代币。

Geth(Go Ethereum)

以太坊的Go语言实现,是以太坊协议上最著名的实现。

硬分叉(Hard fork)

硬分叉也叫硬分叉改变,是区块链上产生的永久分歧,通常发生在拒绝升级的节点无法验证遵循新共识协议的已升级节点所创建的区块时。“硬分叉”不应与“分叉”“软分叉”“软件分叉”或“Git分叉”混淆。

哈希(Hash)

由可变长度输入,通过哈希函数(散列函数)生成的固定长度的数字指纹。

HD钱包(HD wallet)

分层确定性钱包,即使用分层确定性(HD)密钥创建与传输协议(BIP-32)的钱包。

HD钱包种子(HD wallet seed)

用来生成HD钱包中主私钥与主链码的短种子值。可以用助记词表示,以便人类复制、备份及恢复私钥。“家园”版本(Homestead)

以太坊的第二个开发阶段,在2016年3月区块高度为1150000时发布。

ICAP(Inter-exchange Client Address Protocol)

互换客户端地址协议,是一种与国际银行账号(IBAN)编码部分兼容的以太坊地址编码形式,为以太坊地址提供通用、经校验且可互操作的编码。ICAP引入一个新的IBAN伪国家代码XE,即“eXtended Ethereum”,类似其他非司法管辖区货币的代码(如XBT、XRP、XCP)。

冰河期(Ice Age)

在以太坊区块链区块高度为200000时通过硬分叉执行的指数难度增长(又称为难度炸弹),以激励向权益证明的转变。

IDE(Integrated Development Environment)

综合开发环境,是一个结合了代码编辑器、编译器、运行时与调试器的用户界面。

部署代码不可改变问题(Immutable deployed code problem)

只要一份合约(或库)的代码部署上链,就无法改变。正常的软件开发需要修复可能出现的漏洞并增加新功能,因此该不可改变性对智能合约开发而言是个挑战。

内部交易(也称为“消息”)(Internal transaction)

从一个合约账户发往另一个合约账户或外部账户的交易。

IPFS(InterPlanetary File System)

星际文件系统,是一个旨在创建开源且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等超媒体分发协议。

密钥导出函数(KDF,Key Derivation Function)

也称为密钥延伸算法,通过密钥库文件格式来防止暴力破解,防止攻击者预先计算派生密钥的字典或“彩虹表”,通过重复计算密令的哈希来实现。

Keccak-256

以太坊协议使用的加密哈希函数。Keccak-256是从SHA-3规范演化出来的。

密钥库文件(Keystore File)

一个包含单个(随机生成的)私钥的JSON编码文件,用密令加密以提高安全性。

LevelDB

一个轻量、开源的键值对存储库,它是单一用途的数据库,可以绑定到许多平台。

库(Library)

以太坊中的库是一类特殊的合约,它不可填值,无回退函数,也无数据存储。因此,库无法接收或持有以太币,也无法存储数据。以太坊上的库是其他合约可以为只读计算调用的先前部署的代码。

轻客户端(Lightweight client)

一类不在本地保存区块链副本,也无法验证区块和交易的以太坊客户端,具有钱包功能,也可以用其创建并广播交易。

默克尔帕特里夏树(Merkle Patricia tree)

以太坊协议中用于高效存储键值对的数据结构。

消息(Message)

一个永不串行且只能在以太坊虚拟机内发送的内部交易。

消息调用(Message call)

将消息从一个账户传递到另一个账户的行为。如果目标账户与以太坊虚拟机代码相关联,则将使用该对象的状态启动虚拟机并执行该消息的操作。

ME代币(METoken)

精通以太坊代币,即本书中用来演示的ERC20代币。“大都会”阶段(Metropolis)

以太坊开发的第三阶段,在2017年10月发布。

矿工(Miner)

通过不断做哈希运算,找到新区块的有效工作量证明的网络节点。

Mist

Mist是以太坊基金会开发的首个支持以太坊的浏览器。它包含一个浏览器内置的钱包,这也是首个ERC20代币标准的实现(ERC20标准的作者Fabian Vogelsteller同时也是Mist的主要开发者)。Mist还是第一个引入camelCase校验和(EIP-155提出,详见第4章)的钱包。Mist浏览器运行全功能节点,提供支持基于Swarm协议的存储和ENS地址的完整的DApp浏览器。

网络(Network)

以太坊网络,将交易与区块传播到每个以太坊节点(网络参与者)的点对点网络。

不可替代代币(NFT)

也叫“所有权证书”或“权证”,是由ERC721议案提出的代币标准。不可替代代币能够被追溯也可以交易,每个代币是唯一且独一无二的,不像ERC20代币,每个NFT都是无法互换的。NFT能够代表数字或物理资产的所有权。

节点(Node)

参与点对点网络的软件客户端。

nonce

在密码学中,nonce指的是一个在加密通信中只能使用一次的值。以太坊中有两类nonce:账户nonce,用于每个账户中的交易计数,防止重放攻击;工作量证明nonce,区块中用于满足工作量证明的随机值。

Ommer

某一个父块的子块,且自身不是任何区块的父块。当一个矿工找到有效区块时,另一个矿工可能已经发布了一个竞争区块并将其添加上链。与比特币不同,以太坊中的孤块可以被更新的区块作为ommer打包,并获得部分区块奖励。使用术语“ommer”是对同一个父块下不同子块的中性表达,但也有人称其为“叔块”(uncle)。

Parity

以太坊客户端软件中最著名的可互操作实现之一。

私钥(Private key)

参见“密钥”。

权益证明(PoS)

权益证明是加密货币区块链协议试图达成分布式共识的一类方法。权益证明要求用户先证明自己对一定量加密资产的所有权(即他们在网络中的“权益”),才可参与到验证交易的过程中。

工作量证明(PoW)

工作量证明是一份需要巨大算力才能找到的数据(即该“证明”)。在以太坊网络中,矿工必须找到符合全网难度标准的Ethash算法的数字解决方案。

公钥(Public key)

通过私钥的单向函数派生的数字,可以公开共享,任何人都可以使用它来验证用其对应私钥进行的数字签名。

收据(Receipt)

收据是由以太坊客户端返回的数据,用来表示特定交易的结果,数据包含交易哈希、打包的区块高度、实际gas消耗量,如果该交易用来部署合约,则还会返回该合约地址。

可重入攻击(Re-entrancy attack)

攻击者合约调用受害者合约函数,使得在调用执行过程中受害者合约会循环调用攻击者合约。这可能导致通过跳过受害者合约的余额更新或提款金额计算的部分来盗窃资金。

区块奖励(Reward)

以太坊网络给予找到相应工作量证明的解的矿工的,包含在每个新区块中用以太币计价的奖励。

RLP(Recursive Length Prefix)

递归长度前缀是一种编码算法,用于编码任意嵌套结构的对象(数据结构),它是以太坊中数据序列化的主要方法。

中本聪(Satoshi Nakamoto)

中本聪是设计比特币并创建比特币原始实现的个人或团队的名字。他(们)是第一个解决数字货币双重花费问题的人(团队),他们的真实身份至今还是个谜。

密钥(也称为私钥)(Secret key)

通过生成数字签名(参见“公钥”“地址”“ECDSA”),使以太坊用户能够证明账户或合约的所有权的密码。“宁静”阶段(Serenity)

以太坊开发进程的第四阶段,也是终极阶段,还未公布计划的发布日期。

Serpent

直译为“大蛇”,是一种语法类似Python(直译为“大蟒”)的过程化编程语言。

SHA(Secure Hash Algorithm)

安全哈希算法,是由美国国家标准与技术研究院(NIST)发布的一系列加密哈希函数。

单例模式(Singleton)

计算机编程术语,描述只能存在单个实例的对象。

智能合约(Smart Contract)

在以太坊计算基础框架上执行的程序。

Solidity

一种语法类似JavaScript、C++或Java的程序化(命令式)编程语言,是用于编写以太坊智能合约的最流行也最常用的编程语言。由Gavin Wood博士发明,他同时也是本书的作者之一。

Solidity内联汇编(Solidity inline assembly)

Solidity中包含的内联汇编使用以太坊虚拟机汇编,可视其为以太坊虚拟机代码的人类可读形式的代码。内联汇编使得编写某些操作变得更加容易。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载