精通以太坊
Q7nl1s admin

前言

关于我开始读AA的《精通以太坊》并打算写下这篇笔记的原因是很简单的。我恰好在合适的时间接触到了有关Rust及区块链的项目,并且为此开始做准备工作,那么《精通以太坊》就非常有必要去阅读了。本笔记不会作为商业用途,仅供个人参考。

开始之前先介绍一下O’Reilly Media,它作为世界上在Unix ,X,Internet和其他开发系统图书领域具有领导地位的出版公司,一直都是前沿发展的见证者和推动者。《精通以太坊》也是由此公司译成。

在过去的很多年里,甚至到了现在都有一种思想不停的蔓延在普通人和大众技术人员认知里——谈到区块链技术,第一就时间想到比特币。但不得不说比特币和以太坊相比,无论是在创新的广度还是深度上都有差距。前者开启了密码学实际应用的时代——椭圆曲线、哈希算法、零知识证明等诸多概念都在区块链的世界里得到了非常切实的实践。但这可能只是一个开始,以太坊开启了区块链2.0的大门,为区块链提供了实用的计算模型,也推动了很多计算机基础科学的进步。比如,只能合约的出现使得形式化验证技术大放异彩。智能合约运行在一个巨大的分布式计算机中,又执行在一个不那么可靠的环境中,并且执行的过程是对所有的参与者透明的。而以前的大部分编程语言也好,虚拟机也好,隐含的假设都是在单个计算机相同中运行。

正如译者所言人类对“Trustless”的力量一无所知。那么什么是“Trsutless”,很多人将区块链描述为“Trsutless(无信任)”系统,但这是令人捆牢且不准确的。或许,更准确地描述区块链的方式并不是“Trutless”,而是建立在分布式的信任基础上:相信系统中的每一个人。具体请看:当说区块链“Trsutless”时,是什么意思? - 腾讯云开发者社区-腾讯云 (tencent.com)这篇文章。我会将这篇文章涉及的几个术语加入到术语速查中。

如大航海时代的启示,环球航行、天文观测、人造卫星…这一切的改变最初的起点就是由于我们纠正了原来局限的认知,开始意识到——地球是圆的。让人改变认知是非常困年度,这也是区块链技术拓展边界的障碍,这个技术太颠覆入门的常识,至少子啊信任关系上,需要漫长的过程才能获得人类社会的广泛认可。如火币集团CTO所言——Trustless的力量是无穷的,是我们追求的星辰大海。

区块链充满魔力,它给我们所在的网络世界带来了非常特别的改变,其本质是——通过数学降低人类的信任成本。

从早期的比特币交易开始,它的支付方式就是匿名的。这种支付方式不存在中心化监管,是一种去中心化支付方式,底层是数学,是严谨的算法,在这些之上是独特的经济学模型。这种共识机制被称为PoW(Proof of Work),通过消耗大量算力,促进了比特币的价值发展,保证了整个网络的安全稳定。

以太坊借鉴了PoW这种共识机制,在自己的 共识机制上有了独特的创新,很大一部分原因是以太坊本身的定位——在其网络基础上可以快速构建应用,我们称之为去中心化应用(DApp)。DApp的核心是智能合约,而智能合约运行在一个叫做EVM的虚拟机上,由此可以看到一个分层架构世界的出现。

术语速查

关于我在笔记中也加上术语速查的原因是,方便我在博客上复习时,如果忘记了某些术语,也可以借助博客的功能实时查询,不用再翻开书或者是Google。

我将术语速查分为两部分,一部分为书外的,一部分为书内的。

书外术语

本节来自区块链知识科普-FancyPig’s blog (iculture.cc)

区块链

狭义:区块链是一种按照时间顺序将若干数据区块相连的链式、无中心、不可篡改、不可伪造、集体维护、全程留下痕迹、交易可以追溯并以密码学方式保存的不可篡改和不可伪造的分布式账本。(数据库)

广义:区块链技术是利用块链式数据结构验证与存储数据,利用分布式节点共识算法生成和更新数据,利用密码学的方式保存数据传输和访问的安全、利用自动化脚本代码组成的智能合约,编程和操作数据的权限分布式架构与计算范式。

分布式

指在一个对等的(P2P)网络中,每个节点通过平等的相互传递信息来通信和协调行动。

账本

一个非关系类型数据库,即NoSQL数据库。

智能合约

在以太坊计算基础框架上执行的程序。一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易不可逆转。


先介绍前言中提到的当说区块链“Trsutless”时,是什么意思? - 腾讯云开发者社区-腾讯云 (tencent.com)这篇中的部分术语。

Trsutless

区块链建立在分布式的信任基础上:相信系统中的每一个人。

去信任化的交易系统

点对点进行交易,两个彼此有交易意愿的人,可以面对面一手交钱一手交货。没有第三方进行参与。但这只有在两个人距离很近的时候可以实现,为了实现大规模的经济交易,必须要让交易者无视物理距离与世界上任何一个人交易。这就需要一个完全可信的中间人,在区块链中这个中间人是底层的区块链系统。这个系统既能支持转账又能确保交易的真实性和货币的有效性。

公钥密码学(非对称加密技术)

1.一组对任何人可见的公钥

2.一组仅有持有者知道的私钥

私钥为用户发送的每一笔交易生成一个“数字签名”。签名保证了交易的可靠性,因为:

1.证实交易确实是这个用户发起的

2.防止交易发布后被任何人修改

无论以何种方式改变交易信息,都会导致验证失败。

机器共识

区块链有一个共享账本,为我们提供绝对真实的共享状态。它用数学、经济学和比一轮,来激励系统中所有参与方达成“共识”,或就这个账本的某个状态达成协议。

在比特币中,比特币协议有一个叫做“工作量证明”的共识算法来讲系统聚拢在一起。为了确定两个消费者之间的交易,该算法要求一组节点(矿工)通过解决复杂的算法问题来竞争以验证交易。换句话说,比特币以“经济激励”的方式促使矿工购买并使用算力来解决复杂问题。经济激励措施包括:

1.矿工能够获得用户为交易执行而支付的交易费用。

2.矿工成功解决算法问题后,可以获得新发行的比特币。

因为这些激励政策措施,矿工们持续不断地观察网络,以便他们可以手机一组新的交易并生成一个新的“区块”。然后,他们用他们的算例解决复杂的算法问题,来“证明”他们趋势做了工作。

第一个解决出算法问谜题的矿工把工作量证明和新区块(以及其中所有交易)添加到区块链上,并广播告诉全网络。然后,网络中的所有人会同步最新的区块链,因为它是所有人都相信的“事实”。

foreword_0

因为矿工运用算例同时竞争,有时会有几个块同时出现。这就造成了多链“分叉”:
foreword_1

当这样的分叉出现时,网络中最“权威”的链条时“最长”的那条——大部分矿工信任并且继续为其工作的链条。

以这种方式添加到区块链上的每个新块都为系统增加了更多的安全性,因为一个想要通过创造新区块来改写一部分历史的攻击者将需要持续不断地比网络中的其它所有人都更快地解决谜题。

具体的说是只要不能掌控全部数据节点的51%,就无法肆意操控修改网络数据,这使区块链本身变得相对安全,避免了主观人为的数据变更。

很明显掌控区块链51%的节点数据时不可能的,也几无肯对这些块内的数据进行逆向工程或者修改。这就是为什么用户会信任这个系统的原因。

因此,狭义的来说当我们在区块链上和别人交易时,我们是将我们的信任“瞄定”在那些运用他们的算例来工作以确保北邮双重花费问题的矿工上。

51%算力攻击

可以理解为控制了比特币全网51%的算力,就拥有修改区块交易记录的能力。

社会共识

即使机器共识完美无缺,我们也永远无法保证为了维持网络中的信任,在其他方面也能100%的达成共识。比,当底层网络需要更新、提高、修复时,我们需要某种方式来相信网络及其所有成员都能够恰当地处理这些变化。在这种情况下需要多方只简单共同努力,或者称之为“社会共识”(比如治理)。

在治理时必须要给出最好的解决方案来协调各方之间(用户、开发者、矿工等)的利益。如果在最佳发展路径上存在争议(如有争议的分叉),那么社区需要就下一步做什么形成共识,如果协议无法达成一致,网络分叉,入门就必须选择一边,不再是每个人都相信一个共享的事实,用户会失去对系统的信任,因为他们无法合理确定哪条链是“有效的”链。

区块链治理是一个棘手的问题,在中心化控制和分布式控制之间找到平衡对于维护人们对系统的信任至关重要。

状态机( Finite State Machine,缩写 FSM)

状态机的关键在于转移,会把转移的状态表示出来。而状态机一般以状态图的形式呈现。状态机编程有点像系统编程,在windows编程中,一个窗口有多种状态,简单一点就是两个状态:选中和非选中。当鼠标点击窗口内部(事件发生,或者理解成一个触发器trigger)时,窗口的状态改变,由非选中变成了选中,而可视化窗口看到的就是灰色的菜单栏变亮。这就是一个简单的状态机。我们放开想象,切换一下视角,加色我们成了windows这个庞大系统中的一个小进程,系统中还有千百个进程处于不同的状态,或终止,或挂起,或正在运行。再切换一下视角,称为庞大互联网中的一个小主机,想象一下蜘蛛网的样子,每台主机的状态也有不同,或关机,或传输数据,或被攻击,每台主机都有不同的状态。

再以典型的米利型有限状态机(Mealy machine)为例,就是基于它当前的装药和输入输出有限状态自动机,属于有限状态变换器。这意味着它的状态图将为每个转移包括输入和输出二者。

1
2
次态 = f(现态,输入)
输出 = f(现态,输入)

如下就是github贪吃蛇的状态机

foreworrd_3

在区块链中将各个节点视为状态机,整个网络是在不断动态变化的,提高状态机可以把握整个网络的状态。

切换到区块链内部视角,我们来理理状态机在区块链中的应用。区块链除了各个区块外,本质上还是离不开网络。可以将区块生产节点理解为生态系统中的生产者,其他节点基于区块完成交易,验证,广播等各个工作,可以理解为消费者。每个节点都有不同的状态,通过状态机我们能描述清楚区块链的网络节点部分。

  • 智能合约接受外部输入,内部执行代码(执行动作,进行状态转换),最终达到一个新的状态

参考

区块链与状态机 - 爱码网 (likecs.com)

书内术语

账户(Account)

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

nonce

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

简介:nonce值的存在主要是因为它是基于account的,不同于基于utxo的比特币。nonce值主要用来防止重放攻击。

  1. 外部账户每发送一笔交易nonce加一。
  2. 合约账户每创建一个合约nonce加一。而合约调用其他合约属于内部调用,因此nonce值不变。

nonce使用的几条规则:

  1. 当nonce太小(小于之前已经有交易使用的nonce值),交易会被直接拒绝。
  2. 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因;
  3. 当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。
  4. 当交易处于queue中时停止geth客户端,那么交易queue中的交易会被清除掉。

摘自:关于以太坊账户(外部账户&合约账户)的nonce值_jason_cuijiahui的博客-CSDN博客

地址(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(叔块)的一组其他区块头。区块由以太坊网络中的矿工添加上链。

孤块(orphan block)

在比特币协议中,最长的链被认为是绝对正确的。如果一个块不是最长练的一部分,那么它被称为是“孤块”。一个孤立的块是一个块,它也是合法的,但是发现的稍晚,或者是网络传输稍慢,而没能成为最长链的一部分。在比特币中,孤块没有意义,随后将被抛弃,发现这个孤块也拿不到采矿相关的奖励。

叔块(ommer / uncle block)

在以太坊中,孤块被称为叔块,他们可以为主链的安全做出贡献。

叔块的概念只存在于ETH(以太坊)中,因为比特币十分钟一个区块,以太坊15.3秒一个区块。因为以太坊出块的时间短,会造成很多孤块。也就是叔块,根据最长链原则,很多孤块不会被确认,造成矿工积极性下降,为了提高矿工积极性和共识的一致性,会对叔块也进行奖励。

GHOST协议支付报酬给叔块,这激励了矿工在新发现的块中去引用叔块,引用叔块使主链更重。

foreword_2

2022_7_20补充

对于高度3来说,绿色区块是它的父区块。如果它把黄色区块收留了,此时的黄色区块才会变成叔块,否则黄色区块被当作孤儿区块丢弃。收留了区块还会有额外的奖励,收留叔块也被称为包含叔块。当然在实际区块链网络中,叔块也仅仅只是被包含而已,数块中的交易会重新回归交易池,等待重新打包。还要注意的是一个区块最多包含2个叔块。

截至2022年9月17日,以太坊的叔块率在9.7%左右。

最长的链和最重的链

在比特币中,最长的链是主链。在以太坊中,最重的链是主链。

空块

“空块”这个词算是约定俗成,实际上新块奖励也是一笔交易,并不是严格的“空”。 即使到了2140年新块奖励为0,每个区块应该也会有一笔金额为0的交易。

空块的出现可能是ETH的出块时间太短导致的,预计随着使用的人数增多,空块会消失。

以上五则摘自:

以太坊中的叔块(uncle block)_沧桑之前丶青春之后的博客-CSDN博客_eth 叔块

什么是叔块 - 简书 (jianshu.com)

以太坊(EthereumETH)的奖励机制详解_玩币族 (blockvalue.com)

区块链(Blockchain)

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

Gas

Gas是基本的工作量成本单位,用于计量在以太坊区块链上执行操作所需的计算、存储资源和带宽,其目的是限制执行交易所需的工作量。

2022_7_20补充

Gas的诞生与以太坊虚拟机(Ethereum Virtual Machine),简称EVM密切相关,开发者可以在其上开发各种应用。它用来运行一些以太坊指令,由于它功能十分强大,号称“图灵完备”(“图灵完备”的虚拟机可以实现循环语句),有了循环就会有死循环的风险,电脑死循环了大不了死机重启,但是以太坊是去中心化的,EVM要是死机了,是无法重启的。

为了解决这个办法,前人做了很多研究,最终推出了图灵停机问题(The Halting Problem)——证明不村子啊一种能够检测程序是否会死循环的方法。

既然不能检测,就要找到一种方法来阻止死循环的产生。在加油站加油的空闲,以太坊开发者们陷入了沉思,自言自语道:为什么汽车不会一直暴走停不下来?“因为会没油!”加油的师傅边拔出加油枪边说。这故事纯属虚构。

所以要解决这个问题,只需要让EVM上的创新的每条指令都要消耗一点“资源”,“资源”用光了,无论创新执行完没有,都会被强行终止,这样无论是不是死循环都没有关系了。这个执行程序时要消耗的资源就被称为汽油(Gas),每一条指令都要消耗不同数量的汽油。

举个例子:

指令 含义 消耗
?ADD 加法操作 3Gas
?MUL 乘法操作 5Gas
?SUB 减法操作 3Gas
?DIV 除法操作 5Gas
?HASH 计算哈希值 30Gas

如上表所示,越复杂的运算,需要消耗的Gas越多,只要给程序加上一个Gas上限,就可以防止程序出现死循环而不会停止的情况了。同时以太坊还给每个区块包含的程序消耗的总Gas设定了上限,以免因为区块中包含的程序过多而影响一些性能比较弱的节点。每个区块呢个消耗的Gas上限也是可以调整的,由矿工们投票决定。

在以太坊中也需要用以太币购买Gas。每个程序都会各处他们愿意用多少以太币购买1单位的Gas,这杯称为汽油价格(Gas Price)。其计算公式如下:
$$
Gas花费

消耗的Gas数量
*
Gas的价格
$$
字节码(Bytecode)

为软件解释器或虚拟机的高效执行而涉及到抽象指令集。与人类可读的源代码不同,字节码以数字格式表示。

“拜占庭”分叉(Byzantium fork)

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

难度炸弹(Difficulty bomb)

指的是随着挖矿难度增加,在以太坊块链上挖一个新区块所需的时间会随之增加

共识(Consensus)

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

共识规则(Consensus rules)

每个全功能节点为了与其他节点保持一致索要遵循的区块验证规则。要与共识区别开来。

“君士坦丁堡”分叉(Constantinople fork)

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

合约账户(Contract account)

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

创建合约交易(Contract creation transaction)

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

零地址(Zero address)

一个特殊的以太坊地址,地址的所有字节都为0,作为“创建洱海月交易”的目标地址。

去中心化自治组织(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)

以太坊改进提案,用以描述对以太坊平台提出的改进建议的文件,以特定的格式向全体以太坊社区描述一个提议的新功能、新流程或新环境。更多错参见ERC

熵(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的用户界面中出发JavaAcript回调,后者又能监听这些事件。更多参见http://solidity.readthedocs.io/en/develop/contracts.html#events

EVM(Ethereum Virtual Machine)

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

EVM汇编语言(EVM assembly language)

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

回退函数(Fallback function)

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

Faucet

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

finney

以太币的货币单位。(10的15次方)

分叉(Fork)

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

“前沿”版本(Frontier)

以太坊最初开发测试阶段的版本,子啊2015年7月上线,知道2016年3月。

Ganache

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

gas上限(gas limit)

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

Gavin Wood

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

创世块(Genesis block)

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

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为国家代码CE,即“eXtended Ethereum ”,类似其它非司法管辖区货币的代码(如XBT、XRP、XCP)。

冰河期(Ice Age)

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

IDE(Integrated Development Environment)

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

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

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

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

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

IPFS(Inter Planetary File System)

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

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

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

Keccak-256

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

密钥库文件(Key store 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)

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

Parity

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

收据(Receipt)

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

可重入攻击(Re-entrancy attack)

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

RLP(Recursive Length Prefix)

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

中本聪(Satoshi Nakamoto)

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

“宁静”阶段(Serenity)

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

Serpent

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

SHA(Secure Hash Algorithm)

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

单列模式(Singleton)

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

Solidity

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

Solidity内联汇编(Solidity inline assembly)

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

Spurious Dragon分叉

在区块高度为2675000时发生的以太坊网络硬分叉,解决了一些拒绝服务攻击变量,以及零一状态的清除(参见“Tangerine Whistle分叉”)。同时开增加了对重放攻击的防御机制。

Swarm协议

一个去中心化(点对点)的存储网络,与Web3和Whisper协议共同使用来构建DApp。

szabo

以太币的货币单位。10^12 szabo=1 ether。

Tangerine Whistle分叉

子啊区块高度为2363000时发生的以太坊网络硬分叉,改变了某些输入/输出密集型操作的gas计算方法,并清理了因一次拒绝式服务攻击造成的累积状态,这一攻击重视利用了某些操作的较低gas成本。

测试网(Testnet)

测试网络(test network)的缩写,通常用来模拟以太坊主网的行为。

交易(Transaction)

有一个原始账户部署并以一个特定地址为目标的提交到以太坊区块链上的数据。该交易包含交易gas上限等元数据。

Truffle

最常用的以太坊开发框架之一。

图灵完备(Turing complete)

在可计算性理论里,如果一系列操作数据的规则(如指令集、编程语言、细胞自动机)可以用来模拟单带图灵机,那么它是图灵完备的。这个名字来源于英国数学家和计算机科学家艾伦·图灵。

Vitalik Buterin

一名俄裔加拿大籍程序员、作家,因联合创建以太坊和《比特币杂志》而为世人所认识。

Vyper

一种高级编程语言,与Serpent相似,使用类似Python的语法,目的是创造一个更接近纯函数式的编程语言。由Vitalik Buterin发明。

钱包(Wallet)

用于保存用户密钥的软件,可以用来访问并管理你的以太坊账户并与智能合约交互。密钥不一定要存储在钱包中,为了提高安全性,可以离线存储(如卸载一张记忆卡或者纸上)。尽管称其为“钱包”,但它并不存储代币本身。

web3

万维网的第三个版本。由Gavin Wood博士首次提议,代表了对网络应用的新愿景与新焦点:从中心化所有并管理的应用转移到在去中心化协议上构建的应用。

wei

以太币最小货币单位。10^18 wei = 1 ether。

Whisper协议

去中心化(P2P)的消息传输服务。与Web3和Swarm协议共同使用来构建DApp。

零地址(Zero address)

一个特殊的以太坊地址,地址的所有字节都为0,作为“创建合约交易”的目标地址。

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View