这个快速词汇表包含许多与以太坊相关的术语。这些术语在本书中都有使用,所以请将其加入书签以便快速参考。
账户
包含地址,余额和随机数,以及可选的存储和代码的对象。账户可以是合约账户和EOA(外部拥有账户)。
地址
一般来说,这代表一个EOA或合约,它可以在区块链上接收(目标地址)或发送(源地址)交易。更具体地说,它是ECDSA公钥的keccak散列的最右边的160位。
断言
在Solidity assert(false)中编译为0xfe
,这是一个无效的操作码,用尽所有剩余gas,并还原所有更改。当assert()语句失败时,应该发生一些非常错误和意外的事情,这时你需要修复代码。你应该使用断言来避免,让它永远不会发生。
Big-endian
位置数字表示,其中最重要的数字是第一位。little-endian相反,最低有效数字是第一位。
BIP
比特币改善建议。比特币社区成员提交的一组提案,旨在改进比特币。例如,BIP-21是改进比特币统一资源标识符(URI)方案的建议。
区块
区块是关于所包含的交易的所需信息(区块头)的集合,以及称为ommers的一组其他区块头。它被矿工添加到以太坊网络中。
Blockchain
由工作证明系统验证的一系列区块,每个区块都连接到它的前一个区块一直到创世区块。这与比特币协议不同,因为它没有区块大小限制;它改为使用不同的gas限制。
拜占庭分叉
拜占庭是大都会发展阶段的两大硬分叉之一。它包括EIP-649:大都会难度炸弹延迟和区块奖励减少,其中冰河时代(见下文)延迟1年,而区块奖励从5 eth减至3 eth。
编译
将用高级编程语言(例如Solidity)编写的代码转换为较低级别的语言(例如EVM字节码)
共识
当大量节点(通常是网络上的大多数节点)在其本地验证的最佳区块链中都具有相同的区块时达成共识。不要与共识规则混淆。
共识规则
整个节点遵循的区块验证规则与其他节点保持一致。不要与共识混淆。
Constantinople
大都会发展的第二部分计划在2018年中期。预计将包含切换到混合POW/POS共识算法,以及其他变更。
合约账户
包含代码的账户,每当它从另一个账户(EOA或合约)收到交易时执行。
合约创建交易
一个特殊的交易,以“零地址”作为接收者,用于注册合约必将其记录在以太坊区块链中。(请参阅“零地址”)
DAO
去中心化自治组织。没有等级管理的公司和其他组织。也可能是指2016年4月30日发布的命为“The DAO”的合约,该合约于2016年6月遭到黑客攻击,最终在第1192000个区块激发硬分叉(代号DAO),扭转了被盗用的DAO合约,并导致了以太坊和以太坊经典分为两个竞争系统。
DAPP
去中心化应用程序。至少,它是一个智能合约和一个web用户界面。更广泛地说,DAPP是一个基于开放式、去中心化、点对点基础架构服务的Web应用程序。另外,许多DAPP包含分布式存储/消息协议和平台。
Deed
ERC721提案中引入了不可替代的标记标准。与ERC20 token不同,deeds证明了所有权并且不可互换,虽然它们在任何管辖区都不被认可为合法文件,至少目前不是。
Difficulty
一个网络范围的设置,控制需要多少计算来产生工作证明。
数字签名
数字签名算法是一个过程,通过该过程,用户可以使用私钥生成称为文档的“签名”的短字符串数据,以便具有相应公钥、签名和文档的任何人都可以验证(1)该文件由该特定私钥的所有者“签名”
,以及(2)该文件在签名后未被更改。
ECDSA
椭圆曲线数字签名算法(ECDSA)是以太坊用来确保资金只能由合法所有者使用的加密算法。
EIP
以太坊改进建议描述了以太坊平台的建议标准。EIP是向以太坊社区提供信息的设计文档,描述了新功能或其过程或环境。有关更多信息,请参阅https://github.com/ethereum/EIPs(另请参阅下面的ERC定义)。
熵
在密码学的背景下,缺乏可预测性或随机性水平。在生成私密信息(如主私钥)时,算法通常依赖高熵源来确保输出不可预测。
ENS
以太坊名称服务。有关更多信息,请参阅https://github.com/ethereum/ens/。
EOA
外部账户。由以太坊网络的人类用户创建的账户。
ERC
以太坊征求意见。一些EIP被标记为ERC,表示试图定义以太坊使用的特定标准的提议。
Ethash
以太坊1.0的工作证明算法。有关更多信息,请参阅https://github.com/ethereum/wiki/wiki/Ethash。
Ether
Ether是以太坊生态系统使用的原生加密货币,它在执行智能合约时涵盖了gas成本。它的符号是Ξ,希腊大写的Xi字符。
事件
一个事件允许使用EVM日志记录工具,而后者又可以用来在DAPP的用户界面中调用JavaScript回调来监听这些事件。有关更多信息,请参阅http://solidity.readthedocs.io/en/develop/contracts.html#events。
EVM
以太坊虚拟机,一个执行字节码的基于堆栈的虚拟机。在Ethereum中,执行模型指定了如何在给定一系列字节码指令和少量环境数据的情况下改变系统状态。这是通过虚拟状态机的正式模型指定的。
EVM汇编语言
EVM字节码的可读形式。
回调函数
默认函数,在缺少数据或声明函数名称的情况下调用。
Faucet
对于想要在测试网上进行测试的开发者,免费测试以太网形式的奖励网站。
Frontier
Ethereum的初始测试开发阶段,持续时间为2015年7月至2016年3月。
Ganache
个人以太坊区块链,你可以使用它来运行测试,执行命令和检查状态,同时控制链的运行方式。
Gas
以太坊用于执行智能合约的虚拟燃料。以太坊虚拟机使用核算机制来衡量gas的消耗量并限制计算资源的消耗。参见图灵完备。gas是执行智能合约的每条指令产生的计算单位。gas与ether挂钩。gas类似于蜂窝网络上的通话时间。因此,以法定货币进行交易的价格是gas*(ETH/gas)*(fiat currency/ETH)
。
Gas Limit
在讨论区块时,他们也有一个叫做gas limit的区域。它定义了允许消耗整个区块组合中所有交易的最大gas量。
创世区块
区块链中的第一个区块,用于初始化特定网络及其加密货币。
Geth
Go Ethereum.用Go编写的以太坊协议最重要的实现之一。
硬分叉
硬分叉也称为硬分叉变化,是区块链中的一种永久性分歧,通常发生在非升级节点无法验证升级节点创建的遵循新共识规则的区块时。不要与分叉、软分叉、软件 fork或Git fork混淆。
Hash
由哈希函数生成的可变长度输入的固定长度指纹。
HD钱包
使用分层确定性(HD protocol)密钥创建和转账协议(BIP32)的钱包。
HD钱包种子
HD钱包种子或根种子是一种potentially-short
值,用作生成HD钱包的主私钥和主链代码的种子。钱包种子可以用助记词表示,这使得人们更容易复制、备份和恢复私钥。
Homestead
以太坊的第二个发展阶段于2016年3月在1,150,000区块启动。
Ice Age
以太坊硬分叉在200,000的区块引入指数难度增加(又名难度炸弹),激励过渡到股权证明。
IDE
集成用户界面,结合了代码编辑器,编译器,运行时和调试器。
不可变的部署代码问题
一旦合约(或库)代码被部署,它就变得不可变。能够修复可能的错误并添加新功能是软件开发周期的关键。这对智能合约的发展构成了挑战。
国际交易客户端地址协议(ICAP)
以太网地址编码,部分与国际银行帐号(IBAN)编码兼容,为以太坊地址提供通用、可校验和可互操作的编码。ICAP地址可以编码以太坊地址或通过以太坊名称注册表注册的常用名称。他们总是从XE开始。目的是引入一个新的IBAN国家代码:XE,以“扩展”X为前缀的以太坊E,用于非管辖区货币(例如XBT,XRP,XCP)
内部交易(也称为“message”)
从合约账户发送到另一个合约账户或EOA的交易。
Keccak256
以太坊中使用的密码哈希函数。Keccak256被标准化为SHA-3。
密钥衍生函数(KDF)
也称为密码扩展算法,它被keystore格式使用,以防止对密钥进行暴力破解、字典或彩虹表攻击。它重复哈希密码。
Keystore文件
包含单个(随机生成的)私钥的JSON编码文件,通过密码加密以提高安全性。
LevelDB
LevelDB是一个开源的磁盘键值存储。LevelDB是一个轻量级的专用库,用于与许多平台绑定持久性。
Library
以太坊的library是一种特殊类型的合约,没有应收账款功能,没有回调函数,也没有数据存储。因此,它不能接收或保存以太坊数据或存储数据。一个library用作之前部署的代码,其他合约可以调用只读计算。
轻量级客户端
一个轻量级客户端是一个以太坊客户端,它不存储区块链的本地副本,或者验证区块和交易。它提供钱包的功能,并可以创建和广播交易。
Message
内部交易永远不会被序列化,只会在EVM内发送。
Metropolis Stage(大都会阶段)
大都会是2017年10月推出的以太坊的第三个发展阶段。
METoken
《精通以太坊》token。本书中用于演示的ERC20标记。
矿工
一个网络节点,通过重复哈希计算来找到新区块的有效工作证明。
Mist
Mist是以太坊基金会创建的第一个以太坊启用的浏览器。它还包含一个基于浏览器的钱包,这是ERC20 token标准的首次实施(Fabian Vogelsteller,ERC20的作者也是Mist的主要开发人员)。Mist也是第一个引入camelCase校验和(EIP-155,参见eip-155)的钱包。Mist运行一个完整的节点,并提供完整的DApp浏览器,支持基于Swarm的存储和ENS地址。
网络
将交易和数据块传播到每个以太坊节点(网络参与者)的P2P网络。
节点
参与P2P网络的软件客户端。
Nonce
在密码学中,术语nonce用于指代只能使用一次的值。以太坊使用两种类型的随机数。
- 账户随机数 - 这仅仅是账户的交易计数。
- 工作随机数证明 - 用于获得工作证明的区块中的随机值(取决于当时的难度)。
Ommer
父区块的子区块,其本身不是父区块。当矿工发现有效区块时,另一个矿工可能已经发布了一个竞争性区块,并将其添加到区块链的顶端。与比特币不同的是,以太坊中的孤立区块可以被新区块包含为ommer并获得部分区块奖励。术语“ommer”是父节点的同胞的首选性别中性术语,但也被称为“uncle”。
Paralysis Problem
加密货币密钥管理的一种常见的强大方法是multisig,更普遍地被称为密钥共享。但是,如果其中一个共享密钥丢失会发生什么?结果将是所有资金的完全损失。这不是唯一有问题的方案。密钥股份持有人也可能对资金的使用方式有不同的看法,也无法达成协议。我们使用术语Paralysis Problem来表示任何这些尴尬的情况。
Paralysis Proof System
Paralysis Proof有助于解决加密货币中普遍存在的密钥管理问题。见Paralysis Problem。
Paralysis Proof System在用户没有协调一致的情况下,可以容忍系统瘫痪。
使用智能合约,以太坊可以相对容易地实现Paralysis Proof System。
Parity
以太坊客户端软件最突出的互操作实现之一。
Proof-of-Stake (PoS)
股权证明是加密货币区块链协议,旨在实现分布式共识的一种方法。股权证明要求用户证明一定数量的加密货币(网络中的“股份”)的所有权,以便能够参与交易验证。
Proof-of-Work (PoW)
一份需要大量计算才能找到的数据(证明)。在以太坊,矿工必须找到符合网络难度目标的Ethash算法的数字解决方案。
Receipt
以太坊客户端返回的数据,表示特定交易的结果,包括交易的哈希,其区块编号,使用的gas量以及在部署智能合约的情况下合约的地址。
Reentrancy Attack
当攻击者合约调用Victim合约函数时,可以复制这种攻击,让我们称它为victim.withdraw(),在原始调用合约函数完成之前,它再次调用victim.withdraw()方法继续递归地调用自己。这个递归调用可以通过Attacker合约的回调函数实现。攻击者必须执行的唯一技巧是在用完gas之前中断递归调用,并避免被盗的ether被还原。
Require
在solidity中,require(false)被编译为REVERT操作码0xfd。REVERT指令提供了一种停止执行和恢复状态转换的方式,不需要消耗所有提供的气体并且能够返回原因。应使用require函数来确保满足有效条件(如输入或合约状态变量),或者验证调用外部合约的返回值。在拜占庭网络升级之前,有两种实际的方式可以恢复交易:耗尽气体或执行无效指令。这两个选项都消耗了所有剩余的气体。在Byzantium网络升级之前的黄皮书中查找此操作码时,你无法找到它,并且因为该操作码没有规范,所以当EVM执行它时,它会抛出无效的操作码错误。
Revert
当需要处理与require()相同类型的情况但更复杂的逻辑时,请使用revert()。例如,如果你的代码有一些嵌套的if/else逻辑流,你会发现使用revert()而不是require()是有意义的。
Reward
包含在每个新区块中的金额(Ether(ETH))作为网络对找到工作证明解决方案的矿工的奖励。
Recursive Length Prefix (RLP)
RLP是一种编码标准,由Ethereum开发人员设计,用于对具有任意复杂性和长度的对象(数据结构)进行编码和序列化。
Satoshi Nakamoto
Satoshi Nakamoto是设计比特币的人使用的名字,并创建了原始参考实现Bitcoin Core。作为实现的一部分,他们还设计了第一个区块链数据库。在这个过程中,他们率先解决了数字货币的双重支付问题。他们的真实身份仍然未知。
Vitalik Buterin
Vitalik Buterin是俄罗斯和加拿大的程序员和作家,主要以Ethereum的联合创始人和比特币杂志的联合创始人著称。
Gavin Wood
Gavin Wood是英国程序员,是以太坊的联合创始人兼前CTO。2014年8月,他提出了Solidity,一种用于编写智能合约的编程语言。
Secret key(又名私钥)
通过生成数字签名(请参阅公共密钥,地址,ECDSA),允许以太坊用户证明帐户或合约的所有权的秘密号码。
SHA
安全哈希算法或SHA是美国国家标准与技术研究院(NIST)发布的一系列加密哈希函数。
SELFDESTRUCT 操作码
只要整个网络存在,智能合约就会存在并可执行。如果它们被编程为自毁或使用委托调用或调用代码执行该操作,它们将从区块链中消失。一旦执行自毁操作,存储在合约地址处的剩余Ether将被发送到另一个地址,并将存储和代码从状态中移除。尽管这是预期的行为,但自毁合约的修剪可能会或可能不会被以太坊客户实施。SELFDESTRUCT之前称为SUICIDE,在EIP6中,SUICIDE更名为SELFDESTRUCT。
Serenity
以太坊的第四个也是最后一个发展阶段。Serenity尚未有计划的发布日期。
Serpent
一种程序(命令式)编程语言,其语法类似于Python。也可用于编写功能(声明式)代码,尽管它并非完全没有副作用。少量使用。首先由Vitalik Buterin创建。
智能合约
在以太坊的计算基础设施上执行的程序。
Solidity
一种程序(命令式)编程语言,其语法类似于JavaScript,C++或Java。以太坊智能合约中最受欢迎和最常用的语言。首先由Gavin Wood(本书的合著者)创建。
Solidity inline assembly
内联汇编包含使用EVM汇编的Solidity中的代码,可以将其视为EVM代码的人类可读形式。内联汇编试图解决编写手写汇编时遇到的固有难题和其他问题。
Spurious Dragon
在#2,675,00区块硬分叉来解决更多的拒绝服务攻击媒介,以及另一种状态清除。此外,还有重播攻击保护机制。
Swarm
去中心化(P2P)存储网络。它与Web3和Whisper一起用于构建DApps。
Tangerine Whistle
在#2,463,00块的硬分叉改变某些IO运算的gas计算,并从拒绝服务攻击中清除累积状态,该攻击利用了这些操作的低gas成本。
Testnet
一个测试网络(简称testnet)用于模拟以太坊主网的行为。
Transaction
致力于以太坊区块链的数据由原始帐户签名,并针对特定地址。交易包含元数据,例如交易的gas限额。
Truffle
其中一个最常用的以太坊开发框架。它由多个NodeJS软件包组成,可以使用节点软件包管理器(NPM)进行安装。
图灵完备
在可计算性理论中,如果数据操作规则系统(如计算机的指令集,程序设计语言或元胞自动机)可用于模拟任何图灵机,则它被称为图灵完备或计算通用的。这个概念是以英国数学家和计算机科学家阿兰图灵命名的。
Vyper
一种高级编程语言,类似于使用Python语法的Serpent。旨在接近纯功能语言。首先由Vitalik Buterin创建。
钱包
拥有所有密钥的软件。用作访问和控制你的以太坊账户并与智能合约交互的界面。请注意,密钥不需要存储在你的钱包中,并且可以从离线存储(例如USB闪存驱动器或纸张)中检索,以提高安全性。尽管有这个名字,但钱包永远不会储存真正的coins或tokens。
Web3
Web的第三个版本。Web3首先由Gavin Wood提出,代表了Web应用程序的一个新愿景和焦点:从集中拥有和管理的应用程序到基于去中心化协议的应用程序。
Wei
ether的最小面额。 wei = 1 ether
Whisper
去中心化(P2P)通信服务。它与Web3和Swarm一起用于构建DApps。
Zero address
一个特殊的以太坊地址,全部20字节为零,在“合约创建交易”中被指定为目标地址。