为了便于让无状态节点参与验证,目前的最新研究方向是「区块见证」将可能成为「区块标头 Block Header」的一部分,随着新挖出的区块一并广播给全网节点,让无状态节点不用再发起额外的「区块见证请求」即能进行验证区块的动作。 透过这样的方式,无状态节点即能参与以太坊网络中新区块的验证。 碍于篇幅,我们在这篇文章只会做概念性的阐述,具体的实作细节先不展开细说,想更进一步了解的朋友可以参考我上方附上的链接以及以太坊博客中的其它相关文章。 (2) EVM 改动 状态值的更改和运算都是在 EVM 中进行,同理,区块见证也必须经由全节点的 EVM 透过运算来生成。EVM 的改动目标与成本和激励机制息息相关,主要包含耗费 Gas 的估算以及如何降低对节点间广播延迟的影响。 区块见证 Gas 计算(Witness Gas Accounting) 由于区块见证必须由全节点花费额外的计算资源来运算生成,因此会产生相应的 Gas 成本,而这个成本目前比较可行的方式是由交易的发起者来进行负担。至于如何让交易发起者在发送交易时即能准确估算额外的 Gas,以设定精确的 Gas Limit,目前仍在研究中,尚未产生明确的定案。 另外,考虑到在同个区块中可能有一个状态值被不止一笔交易进行更改,因而产生重复支付 Gas 的情形,这部分可能会成为矿工额外的奖励费用。 智能合约程式码分块(Code Merkleization) 区块见证的目的是为了让无状态节点能够进行新区块的验证,其中必定包含了智能合约相关的运算。然而,无状态节点没有储存包含智能合约程式码在内的状态,所以当无状态节点要进行一笔智能合约交易的状态运算时,便需要一并拥有包含智能合约程式码的在内区块见证。 这时会有另外一个问题,智能合约洋洋洒洒的程式码中可能只有其中的一小片段是与该交易运算相关联的,因此「程式码分块」的概念被提出。 「程式码分块」是一种拆分智能合约位元组码(Bytecode)的方式,将智能合约中与涉及交易相关的程式码拆出,作为区块见证中的一部分,一并提供给无状态节点让其做运算验证之用。 其目的便是避免调用到不必要的程式码,免于生成庞大的区块链见证导致运算时间的增加及节点间传递沟通的延迟。 (3) 资料结构转换为二进位制(Binary) 根据以太坊研究员 Igor Mandrigen 进行的实验(Binary Tries Experiment),若将以太坊资料结构从目前的十六进位制(Hex)更改为二进位制(Binary),每个区块的区块见证大小将能从 800~3,400 kB缩小至 300~1,400 kB,如此将大幅减低区块见证在网络中传播的延迟时间,让区块见证机制能够运行得更加理想。 然而从 Hex 转换为 Binary 具体的实作方式以及过度策略目前仍未有完全的定论,有兴趣的朋友可以持续关注 Ethereum Foundation 释出的相关消息。 (责任编辑:admin) |