术语概念
账户(Account):Account是一个对象,它包含地址、余额、nonce,并且存储了状态和代码,而状态和代码接可以为空。Account可以是合约Account或者EOA(外部账户)。
地址(Address):地址代表的是一个合约或EOA,可以在区块链上接受或发送交易。地址是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个。
共识(Consensus):当许多节点,通常是全网大多数节点,都在本地验证的区块链上存有同样的区块时,我们说达成网络共识。
共识规则(Consensus rules):每个全功能节点为了与其他节点保持一致所要遵循的区块链验证规则。
君士坦丁堡分叉(Constantinople fork):这是大都会开发阶段两次分叉的第二次,原计划在2018年年中执行升级。该次升级主要计划将共识算法更换成工作量证明与权益证明混合的算法。
合约账户(Contract account):一个包含代码的账户,只要接受到来自其他账户EOA或合约的交易就会执行合约代码。
创建合约交易(Constract creation transation):一种为了注册一个合约并将其记录在以太坊区块链上的特殊交易,其中接收者的地址为零。
去中心化自治组织(DAO,Decentralized Autonomous Organization):去中心化组织是一类没有分层管理体系的公司或其他组织。The DAO同时也可以指代一份2016年4月30日发布的合约,其随后在2016年遭到攻击,并最终引起了在区块高度1192000发生的硬分叉。该分叉回退了被攻击的DAO合约,也导致以太坊与以太坊经典分裂成两个竞争系统。
DApp(Decentralized application):去中心化应用程序,DApp可以是一个智能合约或网页上的用户界面,也可以解释为是在开放的、去中心的、点对点的基础设施服务之上建立的网络应用程序。此外,去中心化应用还包含去中心化存储与通信协议和平台。
权证(Deed):不可替代代币NFT(non-fungible token)标准是由ERC721提议的。与ERC20代币不同,权证(deed,所有权证书)可以证明ERC721代币的所有权,且该所有权不可互换,但目前为止还未有任何司法管辖区承认其为合法文件。
难度(Difficulty):对全网来说,设置产生单位工作量证明需要消耗多少算力。
数字签名(Digital signature):数字签名算法使用户可以使用其私钥生成我们称之为文件“签名”的短数据串,并使任何拥有相应公钥、该文件签名与文档的人都可以验证:该文件确实由该特定私钥的所有者“签署”,且该文档在签署后未被更改。
ECDSA(Elliptic Curve Digital Signature Algorithm):椭圆曲线数字签名算法,是以太坊使用的密码学算法,用来保证账户资金只能被其所有者支配。
EIP(Ethereum Improvement Proposal):以太坊改进提案,用以描述对以太坊平台提出的改进建议的文件,以特定的格式向全体以太坊社区描述一个提议的新功能、新流程或新环境。
ENS(Ethereum Name Service):以太坊域名服务。
EOA(External Owned Account):外部账户,即以太坊网络中由人类用户创建或为人类用户使用的账户。
ERC(Ethereum Request for comments):以太坊请求评论,ERC是给部分尝试定义以太坊EIP具体使用的标准贴上的标签。
Ethash以太坊1.0版本中使用的工作量证明算法。
以太币(Ether):以太坊生态系统中使用的原生加密币,用来支付执行智能合约时产生的gas消耗,其货币符号为“Ξ,是希腊语中大写的Xi字母。”
事件(Event):事件使以太坊虚拟机中的日志记录工具可用,而日志记录工具可在DApp的用户界面中触发JavaScript回调,后者又能监听这些事件。
EVM(Ethereum virtual machine):以太坊虚拟机,是基于栈的虚拟机,用于执行字节码;在以太坊中,其执行模型指定了在给一系列字节码指令和小组环境数据的情况下如何改变系统状态。这是通过虚拟状态机的正式模型指定的。
回退函数(Fallback function):在缺失数据或无法匹配函数名称时的默认函数调用。
Faucet:免费提供测试网可用的测试以太币的服务。
finney:以太币的货币单位。
分叉(fork):在协议层面的一次改动,可能会产生一条竞争链,或造成在挖矿中对未来区块路径的暂时性分歧。
Ganacha:个人版以太坊区块链,用户可以在控制区块链操作的情况下用其进行代码测试、执行命令并检查状态。
gas:以太坊网络中为执行智能合约所消耗的虚拟燃油。以太坊虚拟机使用一种记账方式来衡量gas用量,以限制算力资源的消耗。
gas上限(gas limit):一个交易或一个区块允许消耗的最大gas量。
Gavin Wood:英国籍程序员,以太坊联合创始人,于2014年提出solidity这种面向合的编程语言。
创世块(Genesis Block):区块链上的第一个区块,用于初始化特定的区块链及其原生加密代币。
Geth (Go Ethereum):以太坊的go语言实现,是以太坊协议上最著名的实现。
硬分叉(Hard fork):是指区块链上产生的永久分歧,通常发生在拒绝升级的节点无法验证遵循新共识协议的已升级节点所创建的区块时。
哈希(Hash):由可变长度输入,通过哈希函数(散列函数)生成的固定长度的数字指纹。
HD钱包(HD wallet):分层确定性钱包,即使用分层确定性(HD)密钥创建与传输协议(BIP-32)的钱包。
HD钱包种子(HD wallet seed):用来生成HD钱包中主私钥与主链码的短种子值。
ICAP(Internet-exchange client address protocol):互换客户端地址协议,是一种与国际银行账号(IBAN)编码部分兼容的以太坊地址编码形式,为以太坊地址提供通用、经校验且可互操作的编码。ICAP引入一个新的IBAN伪国家代码XE,即eXtended ethereal, 类似其他非法司法管辖区货币的代码,如XBT\XRP\XCP。
冰河期:在以太坊区块链区块高度为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规范演化出来的。
密钥库文件(keystone file): 一个包含单个(随机生成)私钥的JSON编码文件,用密令加密以提高安全性。
LevelDB:一个轻量、开源的键值对存储库,它是单一用途的书库,可以绑定到许多平台。
库(Library):以太坊中的库是一类特殊的合约,它不可填值,无回退函数,也无数据存储。因此,库无法接受或持有以太币,也无法存储数据。以太坊上的库是其他合约可以为只读计算调用的先前部署的代码。
轻客户端(lightweight client):一类不在本地保存区块链副本,也无法验证区块和交易的以太坊客户端,具有钱包功能,也可以用其创建并广播交易。
默克尔派特里夏树(Merkle Patricia tree):以太坊协议中用于高效存储键值对的数据结构。
消息(Message):一个永不串行且只能在以太坊虚拟机内发送的内部交易。
消息调用(Message call):将消息从一个账户传递到另一个账户的行为。如果目标账户与以太坊虚拟机代码相关联,则将使用该对象的状态启动虚拟机并执行该消息的操作。
大都会阶段(Metropolis):以太坊开发的第三阶段,在2017年10月发布。
矿工(Miner):通过不断做哈希运算,找到新区块的有效工作量证明的网络节点。
Mist:Mist是以太坊基金会开发的首个支持以太坊的浏览器。它包含一个浏览器内置的钱包,这也是首个ERC20代币标准的实现(ERC20标准的作者Fabian Bogelsteller也是Mist的主要开发者)。Mist还是第一个引入camelCase校验和EIP-155提出的钱包。Mist浏览器运行全功能节点,提供支持基于Swarm协议的存储和ENS地址的完整的DApp浏览器。
以太坊网络节点(Network):是指以太坊网络节点,将交易与区块传播到每个以太坊节点的点对点网络。
不可替代代币(NFT):也叫所有权证书或权证,是由ERC721议案提出的代币标准。不可替代代币能够被追溯,也可以交易,每个代币是唯一且独一无二的,不像ERC20代币,每个NFT都是无法互换的。NFT能够代表数字或物理资产的所有权。
节点(Node):参与以点对点的以太坊网络的软件客户端。
nonce:在密码学中,nonce指的是一个在加密通信中只能使用一次的值。以太坊中由两类nonce:账户nonce和工作量证明nonce。账户nonce用于每个账户中的交易计数,防止重放攻击;工作量证明nonce用于满足工作量证明的随机值。
Ommer: 某一个父块的字块,且自身不是任何区块的父块。当一个矿工找到有效区块时,另一个矿工可能已经发布了一个竞争区块并将其添加上链。与比特币不同,以太坊中的孤块可以被更新的区块作为ommer打包,并获得部分区块奖励。
Parity:以太坊客户端软件中最著名的客户操作实现之一。
权益证明(PoS):权益证明是加密货币区块链协议试图达成分布式共识的一类方法。权益证明要求用户先证明自己对一定量加密资产的所有权,才可参与到验证交易的过程中。
工作量证明(PoW):工作量证明时一份需要巨大算力才能找到的数据。在以太坊网络中,矿工必须找到符合全网难度标准的Ethash算法的数字解决方案。
公钥(Public Key):通过私钥的单向函数派生的数字,可以公开共享,任何人都可以使用它来验证其对应私钥进行的数字签名。
收据(Reciept):收据是由以太坊客户端返回的数据,用来表示特定交易的结果,数据包含交易哈希、打包的区块高度、实际gas消耗量,如果该交易用来部署合约,则还会返回该合约地址。
可重入攻击(Re-entrancy attack):攻击者合约调用受害者合约函数,使得在执行过程中受害者合约会循环调用攻击者合约。这可能导致通过跳过受害者合约的余额更新或提款金额计算的部分来盗窃资金。
区块奖励(Reward):以太坊网络给予找到相应工作量证明的解的矿工,包含在每个新区块中用以太币计价的奖励。
RLP(Recursive Length Prefix):递归长度前缀是一种编码算法,用于编码任意嵌套结构的对象(数据结构),它是以太坊中数据序列化的主要方法。
中本聪(Satoshi Nakamoto):中本聪是设计比特币并创建比特币原始实现的个人或团队的名字。他们时第一个解决数字货币双重花费问题的人,他们的真实身份至今还是个谜。
密钥,也称为私钥(Secret Key):通过生成数字签名,使以太坊用户能够证明账户或合约的所有权的密码。
宁静阶段(Serenity):以太坊开发进程的第四阶段,也是终极阶段,还未公布计划的发布日期。
Serpent:直译为“大蛇”,是一种语法类似“Python”的过程化编程语言。
SHA(Secure Hash Algorithm):安全哈希算法,是由美国国家标准与技术研究院(NIST)发布的一系列加密哈希函数。
单例模式(Singleton):计算机编程术语,描述只能存在单个实例的对象。
智能合约(Smart Contract):在以太坊计算基础框架上执行的程序。
Solidity:一种语法类似JavaScript、C++或Java的程序化编程语言,是用于编写以太坊智能合约最流行也最常用的编程语言。由Gavin Wood博士发明。
Solidity内联汇编(Solidity inline assembly):Solidity中包含的内联汇编使用以太坊虚拟机汇编,可视其为以太坊虚拟机代码的人类可读形式的代码。内联汇编使得编写某些操作变得更加容易。
Spurious Dragon分叉:在区块高度为2675000时发生的以太坊网络硬分叉,解决了一些拒绝服务攻击变量,以及另一状态的清除。同时,还增加了对重放攻击的防御机制。
Swarm协议:一个去中心化(点对点)的存储网络,与Web3和Whisper协议共同使用来构建DApp。
Szabo:以太币的货币单位。10^12 szabo = 1 ether.
Tangerine Whistle分叉:在区块高度为2463000时发生的以太坊网络硬分叉,改变了某些输入/输出密集型操作的gas计算方法,并清理了因一次拒绝服务攻击造成的累积状态,这一攻击正是利用了某些操作的较低gas成本。
测试网(Testnet):测试网络的缩写,通常用来模拟以太坊主网的行为。
交易,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,作为“创建合约交易”的目标地址。