以太坊基础 - Hackquest平台Web3课程笔记(3)
-
直达 Hackquest 链接:以太坊基础
- 概述
- 以太坊是一个由世界各地的计算机组成的网络,遵循一套称为以太坊协议的规则。以太坊网络提供了一个基础,任何人都可以在上面构建和使用社区、应用程序、组织和数字资产
- 实际上,以太坊被视作一个“状态机”,通过智能合约的代码更新其状态。执行这些智能合约代码,需要消耗以太币(ether),而这个过程是通过一种名为“权益证明”(Proof of Stake,PoS)的共识机制进行验证并在整个网络中广播同步的
- 以太坊架构
- 账户模型
- 外部拥有账户(Externally Owned Accounts, EOAs)
- 控制方式:任何拥有私钥的人控制。
- 功能:用户可以通过创建和签署交易来发送消息,进行 ETH 转移或与智能合约互动。
- 地址:20 字节,由其公钥派生而来。
- 特点:EOAs直接由用户控制,安全性依赖于私钥的保管。这类账户是以太坊网络中与人类用户直接相关的账户类型,允许用户参与以太坊网络的经济活动和应用生态系统。
- 合约账户(Contract Accounts)
- 控制方式:智能合约代码控制。
- 功能:当合约账户接收到消息时,其内部代码会自动执行,允许账户根据逻辑读写内部存储、发送其他消息或创建新合约。
- 地址:20 字节,由合约创建时的交易数据派生而来。
- 特点:合约账户的行为完全由其内部代码决定,实现了代码的自动执行和自治操作,但只能通过外部账户发起消息调用来执行代码
- 账户字段
- Nonce:用于记录外部账户发起的交易数量或合约账户创建的合约数量
- Balance:账户拥有的以太币数量,以Wei为单位(1 ETH = 1e+18 Wei)
- CodeHash:合约账户的 EVM 代码的哈希值。对于合约账户,CodeHash代表可执行的智能合约代码,该代码在账户接收到消息调用时执行
- StorageRoot:也称为存储哈希,是 Merkle Patricia Trie 根节点的256位哈希,编码了账户的存储内容。这个 Trie 树以键值对形式存储账户的数据,对于新账户,默认为空
- 状态与数据存储
- 以太坊是一个巨大的、全球分布式的“状态机”。
- 在每个区块头中只保留其三棵核心 Merkle Patricia Trie(MPT) 树——世界状态树、交易树和回执树的根哈希值,而将这些树的详细结构和数据存储在各个节点的数据库中
-
世界状态树
- 世界状态树存储了以太坊网络中所有账户的信息,包括账户的余额、nonce、合约代码和合约存储等信息,它是以太坊网络状态的全面记录,任何账户状态的变化都会反映在这棵树的更新中。
-
交易树
- 交易树记录了某个区块中所有交易的信息。每笔交易都通过其哈希值在树中找到对应的位置,它保证了区块中交易数据的完整性和可验证性,使得任何人都能高效地验证交易数据的正确性。
-
回执树
- 回执树存储了每笔交易执行后的回执信息,包括交易的执行结果、消耗的Gas和日志事件等,它为交易执行的结果提供了透明度,允许任何人验证交易的执行情况和智能合约的事件日志。
- 交易
- 交易是以太坊网络中执行操作的基本单位,由外部账户发起,带有密码学签名的指令
- 交易包含的字段
- from - 发送者的地址,该地址将签署交易。 这将是一个外部帐户,因为合约帐户不能发送交易。
- recipient – 接收地址(如果是外部帐户,交易将传输值。 如果是合约帐户,交易将执行合约代码)
- signature – 发送者的标识符。 当发送者的私钥签署交易并确保发送者已授权此交易时,生成此签名。
- nonce - 一个有序递增的计数器,表示来自帐户的交易数量
- value – 发送者向接收者转移的以太币数量(面值为 WEI,1 个以太币 = 1e+18wei)
- input data – 可包括任意数据的可选字段
- gasLimit – 交易可以消耗的最大数量的燃料单位。 以太坊虚拟机指定每个计算步骤所需的燃料单位
- maxPriorityFeePerGas - 作为小费提供给验证者的已消耗燃料的最高价格
- maxFeePerGas - 愿意为交易支付的每单位燃料的最高费用(包括 baseFeePerGas 和 maxPriorityFeePerGas)
- 交易的类型
- 常规交易:从一个帐户到另一个帐户的交易。
- 合约部署交易:没有
to地址的交易,数据字段用于合约代码。
- 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,
to地址是智能合约地址。
- 交易的生命周期
-
创建和签名
- 交易由用户创建并使用私钥签名,以证明交易的发起者拥有执行交易的权限。
-
广播
- 签名的交易被广播到以太坊网络。一旦交易进入网络,它会被传播到网络中的多个节点。这样,交易就开始在网络中传播,最终到达矿工节点,进入待处理的交易池。
-
打包和验证
- 矿工会从交易池中选择要包含在下一个区块中的交易。通常,矿工会选择具有较高燃料费用(gas)的交易,因为他们可以通过处理这些交易来获取更高的奖励。矿工选择后,验证其有效性,然后将其打包进新的区块中。
-
执行
- 一旦交易被打包进区块并被网络确认,交易将被执行。这可能包括转移以太币、执行智能合约代码等操作。
-
最终确认
- 随着更多区块被挖掘并附加到区块链上,交易获得更多确认,其被逆转的可能性越来越小,最终成为不可更改的一部分。
- Gas
- 交易执行需要消耗 Gas,作为支付给矿工的手续费。Gas 的消耗量取决于交易的复杂度
- Ether
- 产生方式
- 初始分配(众筹):在以太坊网络启动之初,通过2014年的众筹(ICO)进行了初始的 Ether 分配。投资者用比特币(BTC)购买了 Ether,这些 Ether 在以太坊网络启动时被创建并分配给了参与众筹的投资者。
- 区块奖励(在PoW机制下):在以太坊采用工作量证明机制时,矿工通过解决复杂数学难题来验证交易并创建新区块,作为回报获得新产生的 Ether。这个过程不仅确保了网络的去中心化和安全性,也是新 Ether 进入流通的主要途径。
- 质押奖励(在PoS机制下):随着以太坊升级到2.0版本并转向权益证明机制,Ether 的产生方式也随之改变。在 PoS 机制中,持币者通过锁定一定数量的 Ether 作为质押,获得成为网络验证者的资格。验证者负责验证交易和提议新区块,作为回报获得新产生的 Ether。这种方式减少了对大量计算资源的需求,降低了网络的能源消耗。
- 交易费用和燃烧:除了通过区块奖励产生外,Ether 还通过交易费用在用户之间流通。在 EIP-1559 提案实施后,网络开始燃烧部分交易费用中的基础费用,减少了 Ether 的总供应量,这一机制有助于控制通胀并可能对 Ether 的价值产生积极影响
- 智能合约和EVM
- 智能合约是运行在以太坊链上,是位于以太坊区块链上一个特定地址的自动执行、控制或文档化法律或逻辑行为的代码(函数)和数据(状态)
- 在以太坊上,智能合约是以 Ethereum Virtual Machine (EVM) 字节码的形式存储的
- EVM 是以太坊的运行环境,是一个基于堆栈的虚拟机,它是分布式的,运行在以太坊网络中的每个节点上,确保了网络中任何节点都能独立验证智能合约的执行结果
- 这意味着,一旦智能合约被部署到区块链上,它就可以在全球任何地方的以太坊网络中无需任何第三方的介入下运行。
- 智能合约在部署到以太坊时,都会被编译成 EVM 可执行的字节码
- 当智能合约被触发时(例如,通过用户发送的交易或其他合约的调用),EVM 会加载合约的字节码并解释执行这些字节码,执行过程中,EVM 会按照字节码指令进行操作,包括但不限于计算、存储访问、和其他合约的交互等
- 智能合约的执行可能会改变以太坊的全局状态,如账户余额、合约存储的数据等
- 智能合约的运行基于以下几个步骤:
- 编写和编译:开发者使用 Solidity 或其他支持的语言编写智能合约代码,然后将其编译成 EVM 字节码。
- 部署:编译后的字节码通过一个以太坊交易被发送到网络,并存储在区块链上的特定地址处。
- 执行:当用户或另一个合约调用智能合约时,EVM 会加载并执行存储在该地址的字节码。
- 状态变更:智能合约的执行可能会改变以太坊的全局状态,例如更新账户余额或修改合约存储的数据。
- Gas消耗:智能合约的执行需要消耗 Gas,Gas 费用由发起交易的用户支付,用以激励网络中的节点执行和验证交易
- 共识机制
- 对于以太坊区块链来说,达成共识的过程是标准化的,达成共识意味着全网络中至少 66% 的节点就网络的全局状态达成一致
- 交易在广播到网络后需要经过矿工打包和验证,在这一过程中,选择哪些节点作为矿工或验证者,是由以太坊的共识机制决定的
- 共识机制的核心作用是确保所有参与节点对区块链的当前状态和历史记录达成一致,即便面对网络中的不诚实节点或潜在的攻击
- 工作量证明(PoW)
- 在最初,以太坊采用和比特币类的工作量证明(PoW)机制,矿工通过解决复杂数学难题来竞争记账权,即谁先找到难题的解(最大算力的计算机),谁就有权将待处理的交易打包进新的区块,并将该区块添加到区块链上。这个过程需要大量的计算资源,因此被称为“挖矿”。成功的矿工会获得新产生的以太币作为奖励,以及处理交易所收取的手续费。
- 权益证明(PoS)
- 随着2022年“The Merge”升级的实施,以太坊正式转向了权益证明(PoS)机制。与 PoW 不同,PoS 不依赖于计算资源的消耗(“挖矿”)来竞争记账权,而是基于节点所持有的货币数量和持币时间等因素来选择验证者。
- 权益证明是一种证明验证者已经将有价值物品质押到网络上的方法。如果验证者有失信行为,这些物品可能会被销毁。 在以太坊的权益证明机制下,验证者明确地通过以太币将资产质押到以太坊上的智能合约中。 之后,验证者负责检查在网络上传播的新区块是否有效,偶尔自己也创建和传播新区块。 当他们试图欺骗网络(例如,在应该发送一个区块时提出多个区块,或者发送冲突的认证)时,他们质押的部分或全部以太币可能会被销毁。
- 在 PoS 机制下,持有更多货币的节点更有可能被选为验证者,这些验证者负责验证交易和创建新区块。如果一个时隙中产生了多个可能的区块,或者节点在不同时间收到了区块,以太坊采用的分叉选择算法会选择那个使得链具有最大认证权重的区块。认证权重是由为该区块提供认证的验证者数量决定的,并且会根据验证者质押的以太币余额进行调整,从而确保了网络的安全性和数据一致性。