Ethereum以太坊(ETH)的技术实现

Ethereum以太坊(ETH)的技术实现

以太坊(ETH)的技术实现:以太坊(Ethereum)是一款能够在区块链上实现智能合约、开源的底层系统,其技术实现主要依赖于分布式网络结构、区块链技术、智能合约以及共识算法。

基础数据结构

区块链本质是一条连接区块的链,用于区分链的关键就是链配置,这也是一条区块链在创世中所必不可少的一部分。对于以太坊,链配置用于区分以太坊中不同链,同时标识出其中的一些重要升级协议以及标志事件。例如 DAOForkBlock 标志了以太坊经历 DAO 攻击的硬分叉高度,以及 ConstantinopleBlock 标识了君士坦丁堡升级的区块高度。对于包含众多改进提案的较大升级,会设置特别的字段以标识对应的区块高度,此外以太坊包含各种测试网络以及主网络,通过 ChainID 独一无二地标识了对应的网络生态。

创世区块作为整个区块链的第零个区块,其他区块直接或间接引用到创世区块。 因此节点启动之初必须载入正确的创世区块信息,且不得任意修改。创世区块的配置信息包含了前述的链配置,同时还附加了例如相关挖矿奖励、时间戳、难度和 gas 设限等字段,需要注意以太坊的共识机制已经从工作量证明的挖矿机制转为权益证明。

以太坊账户分为外部账户和合约账户,其中外部账户由私钥唯一控制,而合约账户无私钥控制,只能通过外部账户调用合约执行合约代码来操作。他们都包含一个唯一地址。以太坊世界态是一个以太坊账户树,每个都账户对应一个叶子结点,其中存储了该账户的状态(各种账户信息及代码信息)。

交易:以太坊作为一种去中心化平台,其本质是为了交易和合约,以太坊的区块就是打包的交易,以及附加一些其他相关信息,具体区块分为两部分,即区块头和区块体,其中区块头数据蕴含了将所有区块连接为链的证据,我们可以理解为前区块哈希,以及证明整个以太坊世界状态的状态根,交易根,回执(receipt)根,和其他若干标识难度,计数 nonce 等额外数据。而区块体存储了交易列表和叔块头的列表(由于以太坊已经转为权益证明,因此叔块引用不复存在)。

交易回执提供了交易执行后的结果和额外信息,这些是不能仅仅通过查看交易本身来直接获得的。具体来讲,其中包含的信息可以分为:共识内容,交易信息和区块信息,包含了交易处理是否成功以及交易日志和 gas 等消耗的信息。通过分析回执中的信息来调试智能合约代码和优化 gas 消耗。并提供了一种确证,表明交易已经被网络处理,并且可以查看交易的结果和影响。

在以太坊中,gas 费用可以简单的理解为手续费,当你发送 Token、执行合约、转移以太币或者在此区块上所出的各种操作,这些交易中的操作都需要 gas 费,以太坊计算机在处理这笔交易时需要进行计算消耗网络资源,这样你必须支付 gas 费才能让计算机为你工作。最终燃料费作为手续费支付给矿工,其具体费用的计算公式可理解为 Fee = Gas Used * Gas Price,也就是实际消耗乘以消耗单价,其中单价由交易的发起者自行设置,其多少往往决定了交易上链的快慢。如果设置过低有可能交易不会被执行,同时还需要设置费用的 gas limit 消耗上限,避免出现合约中的错误引起不可预计的 gas 消耗的情况。

交易池

在以太坊中,存在大量的交易,相比于中心化系统,去中心化系统的每秒处理交易数显然黯然神伤。由于大量的交易进入结点,结点需要维护一个交易池以正确的管理这些交易。交易的广播是通过p2p进行的,具体来讲一个节点会将可执行交易广播到其邻结点中,继而邻结点又会将该交易广播到该节点的邻节点中,通过这样的形式,一笔交易可以在 6 秒内扩散至整个以太坊网络。

在交易池中的交易分为可执行交易和非可执行交易,可执行交易具有更高的优先级会被执行并打包的区块中,而所有刚进入交易池的交易都是非可执行交易,之后才会变为可执行。可执行交易和非可执行交易分别记录在 pending 容器中和 queue 容器中。

此外交易池还会维护一个 local 交易列表,local 交易具备多种优势,其优先级更高,不受交易量限制的影响,且在重启结点时可以立刻重新加载到交易池中。而 local 交易的本地持久化存储就是通过 journal 来实现的(重启节点时的重新加载),其目的就是为了不丢失未完成的本地交易,并会定期更新。

交易在入队列之前会检验交易合法性,具体包括各种类型的检查,例如:防 DOS 攻击、防负数交易、交易 gas 上限等等。交易池简单组成可以分为:queue+pending(两个组成 all 交易),在完成合法性检测之后会进行后续的检查,包括检查交易队列是否达到上限,之后判断 remote 交易(remote 交易就是非 local 交易)是否是交易池中最低的,替换交易池中最低价格交易。对于可执行交易的替换,默认只有上调 10% 手续费的交易才允许替换掉已在等待执行的交易,替换后存储为非可执行交易。此外在交易池的维护过程中还会删除无效和超上限交易,并对满足条件的交易进行替换。

共识机制

以太坊前期的共识理论还是基于难度值哈希计算的方法,也就是说,需要计算区块的哈希值,以满足目标难度值的条件,该区块才合法。由于以太坊现在的共识算法已经从 POW 转为 POS,因此对于挖矿相关的理论不再赘述。在这里简述 POS 算法。以太坊于 2022 年 9 月完成了信标链的合并实现了 POS 算法,具体来讲,基于 POS 的以太坊,其每个区块的出块时间稳定在 12 s,用户质押自己的以太币以获得成为验证者的权利,之后对参与质押的用户随机进行选择得到一批验证者,并在每一轮周期包含 32 个插槽的每一个插槽中会进行验证者的选拔,选出其一验证者作为提议者,该提议者实现出块,而对应该插槽的其余验证者作为委员会,以验证提议者区块的合法性,同时对上一轮周期中的区块合法性做出判决。POS 算法显著稳定并提高了区块的出块速度,同时极大地避免了计算资源的浪费。

签名算法

以太坊沿袭了比特币的签名算法标准,同样采用 secp 256 k 1 曲线,其具体的签名算法采用了 ECDSA,也就是说计算的签名是根据原始消息的哈希计算得来的,整个签名的组成简单来看就是 R+S+V。每次计算都会对应地引入随机数,其中 R+S 就是 ECDSA 的原始输出。而末尾字段 V 称之为恢复字段,表示从内容和签名中成功恢复出公钥时需要查找的次数,因为根据 R 值在椭圆曲线中查找符合要求的坐标点可能有多个。

整个过程可以简单梳理为:交易数据与签名器相关信息经 RLP 编码后哈希,与私钥通过 ECDSA 签名就可以获得最终签名,而 ECDSA 中所使用的曲线就是 secp 256 k 1 椭圆曲线。最后将签名数据与交易数据组合,就可以获得一笔已经签名的交易数据并广播出去。

以太坊的数据结构不仅仅依赖于传统的区块链技术,还引入了默克尔帕特里夏树,也称为默克尔压缩前缀树,用于高效地存储和验证大量数据。MPT 结合了默克尔树的加密哈希功能和帕特里夏树的键路径压缩特性,提供了一种既保障数据完整性又支持快速查找的解决方案。

MPT

在以太坊中,MPT 用于存储所有状态和交易数据,确保任何数据的变更都会反映在树的根哈希上。这意味着,通过验证根哈希,就可以证明数据的完整性和准确性,无需检查整个数据库。MPT 由四种类型的节点组成:叶子节点、扩展节点、分支节点和空节点,这些节点共同构成了一棵能够适应动态数据变化的树。每次数据更新时,MPT 通过节点的添加、删除或修改来反映这些变更,同时更新树的根哈希值。由于每个节点都通过哈希函数加密,任何对数据的微小改动都会导致根哈希的巨大变化,从而保证了数据的安全性和一致性。此外,MPT 的设计支持“轻客户端”验证,允许节点仅通过存储树的根哈希和必要的路径节点,就能验证特定信息的存在或状态,极大地减少了数据存储和处理的需求。

通过 MPT,以太坊不仅实现了数据的高效管理和快速访问,还确保了网络的安全性和去中心化特性,支撑起整个以太坊网络的运行和发展。

状态机

以太坊的核心架构融合了状态机的概念,其中,以太坊虚拟机 EVM 是执行所有智能合约代码的运行时环境,而以太坊本身可视为一个全球共享的、状态转换系统。每个区块的执行都可以被看作是一个状态转换过程,从一个全球共享状态转移到另一个状态。这种设计不仅确保了以太坊网络的一致性和去中心化特性,还使得智能合约的执行结果可预测且不可篡改。

在以太坊中,状态指的是所有账户的当前信息,包括每个账户的余额、存储数据以及智能合约的代码。每当发生交易时,EVM 根据交易内容计算并转换状态,这一过程通过 MPT 来高效、安全地记录。每个状态转换不仅改变了账户数据,也导致了 MPT 的更新,反映在树的根哈希值的变化上。

EVM 和 MPT 之间的关系至关重要,因为 MPT 为以太坊的状态转换提供了数据完整性的保证。当 EVM 执行交易,更改账户状态时,相关的 MPT 节点被更新以反映这些变更。由于 MPT 的每个节点都是通过哈希链接的,任何对状态的修改都会引起根哈希的变化,这个新的根哈希随后被包含在新的区块中,确保了整个以太坊状态的一致性和安全性。下面我们介绍一下 EVM 虚拟机。

EVM

EVM 虚拟机是整个以太坊构建智能合约执行状态转换的根本,正是得益于 EVM,以太坊才能在真正意义上被想象成一个世界计算机。EVM 虚拟机是图灵完备的,这也就意味着以太坊上的智能合约能够执行任意复杂逻辑计算,而 gas 机制的引入又成功防止合约中无限循环的情况,确保网络的稳定性和安全性。从更加深入一些的技术层面讲,EVM 是一个基于堆栈的虚拟机,使用以太坊专用的字节码执行智能合约。开发者通常使用高级语言,如 Solidity,来编写智能合约,然后将其编译成 EVM 可以理解的字节码,供 EVM 进行执行调用。EVM 是以太坊区块链创新能力的关键,它不仅支撑着智能合约的运行,也为去中心化应用的开发提供了坚实的基础。通过 EVM,以太坊正塑造着一个去中心化、安全且开放的数字未来。

为您推荐