Eth1.x 术语表
即以太坊协议所定义的 Header
对象。(译者注:区块头包含一个区块的元信息)
一个区块由两部分数据组成:
就是一个区块中的事务和叔块信息的集合。
即以太坊协议所定义的 Transaction
对象。(译者注:事务可视为触发以太坊协议状态变更的操作的基本单元)
事务的构建
创建一条完全签名的事务的过程:
nonce
(流水号)。eth_estimateGas
方法来确定该事务需要使用的 gas
消耗量。即被该区块视作叔块的区块的区块头。(译者注:对于任一区块来说,叔块指的是那些上溯 7 代及以内、并非其祖先区块的有效区块;一个区块可标记两个叔块;标记叔块可使区块挖出者获得额外的 “侄块奖励”,也会使叔块挖出者获得奖励,奖励大小随叔块与侄块之间的代际距离递减;叔块内的所有事务视作没有上链,除非另一些区块中包含了这些事务,否则都回到待打包事务的内存池中)
所有历史区块的区块头的集合
所有由事务和叔块信息所组成的历史区块的集合
由历史事务所产生的所有收据的集合
所有账户及 contract storage(合约存储项)的集合
账户
由 Header.state_root
所代表的主状态树的一部分
balance/nonce/state_root/code_hash
合约存储项
每个账户的 Account.state_root
标识的单个存储值
0 - 2^^256-1
范围内的整数作为键 (该整数也被当作存储槽的序号)Contract Code(合约代码)
合约代码仅使用 Account.code_hash
来指代;并非状态的显式部分。
所有历史状态的集合。详见 Archive Node(归档节点)
指作为 近期 状态根一部分的状态。
维护这一数据需要某种形式的垃圾回收技术,以清除不再是近期状态一部分的状态对象
指的是很长一段时间没有被触及(访问 及 修改)的状态对象
Naive Database Layout
该数据库实现将所有的状态对象都存储为单个的树节点,通过节点哈希值来访问
Flat Database Layout
将所有的状态对象都存储为树的路径,某种程度上有点类似于 键值对 存储
即以一种可验证的形式存储的状态数据
一种类型的见证数据,提供了执行区块所需的所有状态数据
一种类型的见证数据,提供了一笔事务的 EVM 执行所需的所有状态数据
指一个满足了下列要求的节点:
ETH
DevP2P 协议(译者注:该协议用于在以太坊网络的对等节点之间传输数据,如区块、事务、状态数据等;以太坊交易的广播就是靠这个协议实现的)其他特点与全节点都一样,但归档节点会存储全部归档状态。一般都需要执行 Full Sync(全量同步)。
连接到 LES
DevP2P 协议的客户端,意图是跟上区块链并暴露 JSON-RPC API。
此类客户端依赖于链接到至少一个 LES Server(LES 服务器)来满足对数据的需求。
一个仍在计划中的客户端类型,如果能够实现区块见证数据的话,就可使之成真。
(TODO:还需增加对其他功能所需技术的描述)
Ultra Light Node(极轻节点)
增加这个术语只是为了区分当前类型的轻节点和一种新类型的轻节点 —— Piper
一种仅暴露 JSO-RPC API 的节点。
ETH
DevP2P 协议DevP2P 网络中所用的点对点协议,是所有主网客户端的基石
作为这个点对点网络中的一部分,一个节点需要:
LES
DevP2P 协议作为轻客户端基础的 DevP2P 网络所用的点对点协议
LES 服务器
参与 LES 网络、向 LES 客户端提供数据的节点。
在这个网络中成为一个服务器需要:
LES 客户端
参与 LES 网络、向 LES 服务器请求数据的节点。
事务广播
ETH
DevP2P Protocol 或者 LES
DevP2P Protocol区块广播
Header.transactions_root
和 Header.uncles_root
来验证(译者注:即依据本地已有的区块头数据来验证相应区块体的完整性)Header.receipts_root
来验证验证事务需要:
ecrecover
操作来确定发送者(译者注:即从签名数据中恢复出发送者的地址)余额 > 该交易指定的 gas price * gas limit
)
区块验证包含下述事项中的所有内容:
Header.state_root
的正确性
把区块号映射为该高度的主链区块的哈希值
把事务的哈希值映射成该事务所在主链区块的哈希值,以及该事务在该块内的索引值。
Header.transactions_root
生成的默克尔证据来证明一类能让我们高效证明某个区块头来自主链的机制。基于 https://ethresear.ch/t/double-batched-merkle-log-accumulator/571
区块头同步
即一个节点追赶区块链的顶端时所用的进程。基于不同的安全等级,有几种同步方法“
当前,只有掌握了全体区块头,才能够任意地验证其他历史数据。区块头累加器可以改善这个状态,使得一个客户端可以把检查点设在区块链顶端,而仍然能够验证历史数据。
区块同步
客户端用来 pull(拉取)历史事务和叔块信息的进程。
Header.transactions_root
和 Header.uncles_root
来检查收据同步
不执行 Full Sync(完全同步)的客户端往往需要通过 ETH DevP2p 协议来取得历史收据
Header.receipts_root
和来检查节点获得近期状态完整副本的机制。
Full Sync(完全同步)
下载所有历史区块并按顺序执行这些区块。
快速同步
下载全部历史区块,以及近期状态数据的副本
Snap Sync(快照同步)
下载全部历史区块以及近期状态数据的副本
Stateless Sync(无状态同步)
这个术语并不常用,其定义也可能随时调整
不像其它状态同步方法,这一方法最终无法使节点获得近期状态数据的完整副本。就其自身而言,其用法是免去维护状态数据本地副本之需、仍能验证区块;或者,它可以与其他同步方法结合,从而能即时验证区块,然后慢慢在本地构建出可访问的完整状态数据。
Beam Sync(光子同步)
光子同步本质上就是一种无状态同步,但不要求网络提供区块见证数据。相反,客户端是按需从网络中请求所需的状态
即从网络中检索任意状态元素的能力。
GetNodeData
ETH
DevP2P 协议会暴露信息对 GetNodeData/NodeData
,允许检索任意状态。此消息格式可能会被弃用。
基于 DHT 的状态网络
一种设想:我们可以让状态分散在网络中的所有节点中,并使这些数据能够按需被发现及检索到。
要求节点能够:
在某些形式的 EVM 执行过程中会触及的账户和合约存储位置的列表
Static State Access(静态访问模式,SSA)
EVM 执行在某些时候会具备的一种属性:调用者可以准确地预知该次执行会触及哪些状态
Dynamic State Access(动态访问模式,DSA)
EVM 执行在某些时候会具备的一种属性:调用者无法准确地预知到底会触及哪些状态
一种加密的存储格式,用于存储私钥
解密一般来说依赖于一些密码学元件,如: keccak
、 scrypt
、 pbkdf2
和 ECC/BLS12-381
eth_protocolVersion
eth_syncing
eth_coinbase
eth_mining
eth_hashrate
eth_gasPrice
取出一个合适的 gas price 值是一个与需求高度相关的操作,没有哪种策略适合所有的应用场景。
eth_accounts
eth_blockNumber
并不能完全确定,该节点是能提供该区块号处的 事务/收据/状态 数据,还是仅仅接受了该区块号是最新高度。
eth_getBalance
eth_getStorageAt
eth_getTransactionCount
eth_getBlockTransactionCountByHash
eth_getBlockTransactionCountByNumber
eth_getUncleCountByBlockHash
eth_getUncleCountByBlockNumber
eth_getCode
eth_sign
eth_signTransaction
eth_sendTransaction
eth_sendRawTransaction
eth_call
eth_estimateGas
eth_getBlockByHash
eth_getBlockByNumber
对这个操作的调用可以直接映射成对
eth_getBlockByHash
的等价调用,只要能访问主链区块索引
eth_getTransactionByHash
对这个操作的调用可以直接映射成对
eth_getTransactionByBlockHashAndIndex
的等价调用,只要能访问主链事务索引
eth_getTransactionByBlockHashAndIndex
eth_getTransactionByBlockNumberAndIndex
对这个操作的调用可以直接映射成对
eth_getTransactionByBlockHashAndIndex
的等价调用,只要能访问主链区块索引
eth_getTransactionReceipt
eth_getUncleByBlockHashAndIndex
eth_getUncleByBlockNumberAndIndex
对这个操作的调用可以直接映射成对
eth_getUncleByBlockHashAndIndex
的等价调用,只要能访问主链区块索引
(译者注:以下操作码暂未给出解释)
eth_newFilter
eth_uninstallFilter
eth_getFilterChanges
eth_getFilterLogs
eth_getLogs
原文链接: https://github.com/ethereum/stateless-ethereum-specs/wiki/Glossary 作者: Piper Merriam 翻译: 阿剑
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!