以太坊介绍
以太坊是一个由世界各地的计算机组成的网络,遵循一套称为以太坊协议的规则。以太坊网络提供了一个基础,任何人都可以在上面构建和使用社区、应用程序、组织和数字资产。
以太坊的核心理念:一个开放源代码、去中心化的区块链平台,使开发者能够创建和部署智能合约及去中心化应用(DApps)。
区别于比特币的仅限于处理简单交易的功能,以太坊通过引入智能合约:一种能够自动执行、控制或记录其条款的代码。
以太坊还构建了一个包含去中心化金融(DeFi)、非同质化代币(NFT)和去中心化自治组织(DAO)等在内的广泛应用和服务的生态系统。以太坊网络通过以太币(ETH)支付交易费用(称为 Gas),激励网络参与者共同维护和运行这个平台。
实际上,以太坊被视作一个 状态机,通过智能合约的代码更新其状态。执行这些智能合约代码,需要消耗以太币(ether),而这个过程是通过一种名为 权益证明(Proof of Stake, PoS)的共识机制进行验证并在整个网络中广播同步的。
特殊词汇
- 状态
- 智能合约
- 代币
- 共识机制
账户模型
以太坊中,账户是连接用户与以太坊网络及其广泛功能的桥梁,不仅可以代表用户的数字身份和资产,还能执行智能合约。
在以太坊中,主要有两种类型的账户:
- 外部拥有账户(Externally Owned Accounts, EOAs)
- 合约账户(Contract Accounts) 这两种账户共同构成了以太坊的经济和应用生态系统。
外部拥有账户(EOAs)
- 控制方式:任何拥有私钥的人控制。
- 功能:用户可以通过创建和签署交易来发送消息,进行 ETH 转移或与智能合约互动。
- 地址:20 字节,由其公钥派生而来。
- 特点:EOAs 直接由用户控制,安全性依赖于私钥的保管。这类账户是以太坊网络中与人类用户直接相关的账户类型,允许用户参与以太坊网络的经济活动和应用生态系统。
合约账户
- 控制方式:智能合约代码控制。
- 功能:当合约账户接收到消息时,其内部代码会自动执行,允许账户根据逻辑读写内部存储、发送其他消息或创建新合约。
- 地址:20 字节,由合约创建时的交易数据派生而来。
- 特点:合约账户的行为完全由其内部代码决定,实现了代码的自动执行和自治操作,但只能通过外部账户发起消息调用来执行代码。
账户字段
- Nonce:用于记录外部账户发起的交易数量或合约账户创建的合约数量。 外部账户的 nonce 从0开始计数,合约账户的 nonce 从1开始。
- Balance:账户拥有的以太币数量,以Wei为单位(1 ETH = 1e+18 Wei)。
- CodeHash:合约账户的 EVM 代码的哈希值。对于合约账户,CodeHash代表可执行的智能合约代码,该代码在账户接收到消息调用时执行。对于外部账户,此字段为空字符串的哈希。
- StorageRoot:也称为存储哈希,是 Merkle Patricia Trie 根节点的256位哈希,编码了账户的存储内容。这个 Trie 树以键值对形式存储账户的数据,对于新账户,默认为空。
状态与数据存储
以太坊是一个巨大的、全球分布式的“状态机”。这里,“状态"指的是在任何给定时刻,整个以太坊网络的具体信息快照。每当发生一个交易(无论是资金的转移、智能合约的执行还是数据的存储),以太坊的状态都会改变。
那么这些状态信息以及交易数据存储具体是怎么存储的呢?
虽然区块链实际上是一个去中心化的账本,但由于数据的存储需要成本,所以并不是所有的数据都适合上链。在以太坊中这一点尤为重要,因为以太坊不仅处理简单的资金转移,还支持复杂的智能合约和去中心化应用(DApps)。
为了有效降低存储成本并提高数据处理效率,以太坊采取了一种精巧的设计策略:在每个区块头中只保留其三棵核心 Merkle Patricia Trie(MPT)树。世界状态树、交易树和回执树的根哈希值,而将这些树的详细结构和数据存储在各个节点的数据库中。 这种方法显著减轻了区块链本身的存储压力,同时保持了网络的完整性和安全性。

世界状态树
世界状态树存储了以太坊网络中所有账户的信息,包括账户的余额、nonce、合约代码和合约存储等信息,它是以太坊网络状态的全面记录,任何账户状态的变化都会反映在这棵树的更新中。
交易树
交易树记录了某个区块中所有交易的信息。每笔交易都通过其哈希值在树中找到对应的位置,它保证了区块中交易数据的完整性和可验证性,使得任何人都能高效地验证交易数据的正确性。
回执树
回执树存储了每笔交易执行后的回执信息,包括交易的执行结果、消耗的Gas和日志事件等,它为交易执行的结果提供了透明度,允许任何人验证交易的执行情况和智能合约的事件日志。
通过仅在区块头中存储根哈希值,以太坊能够确保数据的完整性和不可篡改性,因为任何对数据的微小更改都会导致根哈希值的变化,从而被网络检测到。而在节点本地存储完整树的数据,则允许各节点独立地验证和更新状态,进一步加强了网络的去中心化特性。
交易
状态变化的关键:交易。
在以太坊网络中,几乎每一刻都在发生交易,这些交易不仅包括资金的转移,还涉及智能合约的执行和数据的存储。那么,什么是交易,以及一笔交易的从发起到上链的生命周期是怎样的呢?
什么是交易?
交易是以太坊网络中执行操作的基本单位,由外部账户发起,带有密码学签名的指令。
以太坊上的交易包含了一系列字段
from: 发送者的地址,该地址将签署交易。这将是一个外部帐户,因为合约帐户不能发送交易。recipient: 接收地址(如果是外部帐户,交易将传输值。如果是合约帐户,交易将执行合约代码)signature: 发送者的标识符。 当发送者的私钥签署交易并确保发送者已授权此交易时,生成此签名。nonce: 一个有序递增的计数器,表示来自帐户的交易数量.value: – 发送者向接收者转移的以太币数量(面值为 WEI,1 个以太币 = 1e+18wei)input data: 可包括任意数据的可选字段.gasLimit: 交易可以消耗的最大数量的燃料单位。 以太坊虚拟机指定每个计算步骤所需的燃料单位maxPriorityFeePerGas: 作为小费提供给验证者的已消耗燃料的最高价格.maxFeePerGas: 愿意为交易支付的每单位燃料的最高费用(包括 baseFeePerGas 和 maxPriorityFeePerGas)
以太坊有几种不同类型的交易
- 常规交易:从一个帐户到另一个帐户的交易。
- 合约部署交易:没有
to地址的交易,数据字段用于合约代码。 - 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,
to地址是智能合约地址。
交易的生命周期
1、创建和签名:交易由用户创建并使用私钥签名,以证明交易的发起者拥有执行交易的权限。
2、广播:签名的交易被广播到以太坊网络。一旦交易进入网络,它会被传播到网络中的多个节点。这样,交易就开始在网络中传播,最终到达矿工节点,进入待处理的交易池。
3、打包和验证: 矿工会从交易池中选择要包含在下一个区块中的交易。通常,矿工会选择具有较高燃料费用(gas)的交易,因为他们可以通过处理这些交易来获取更高的奖励。矿工选择后,验证其有效性,然后将其打包进新的区块中。
4、执行:一旦交易被打包进区块并被网络确认,交易将被执行。这可能包括转移以太币、执行智能合约代码等操作。
5、最终确认:随着更多区块被挖掘并附加到区块链上,交易获得更多确认,其被逆转的可能性越来越小,最终成为不可更改的一部分。
燃料(Gas)
交易执行需要消耗 Gas,作为支付给矿工的手续费。Gas 的消耗量取决于交易的复杂度,简单的转账交易消耗较少的 Gas,而复杂的合约交互消耗更多的 Gas。用户通过设置 Gas Limit 和 Gas Price 来控制交易费用。
以太币(Ether)
以太坊是区块链,以太币是以太坊的原生资产,以 Wei 作为最小单位,其中 1 Ether 等于 10^18 Wei。它在以太坊生态系统中扮演着至关重要的角色,用于支付交易费用、执行智能合约,以及在过去的工作量证明(PoW)机制下作为矿工的激励机制。随着以太坊转向权益证明(PoS)机制,Ether 同样用于激励验证者(Validators)。
产生方式
1、初始分配(众筹):在以太坊网络启动之初,通过2014年的众筹(ICO)进行了初始的 Ether 分配。投资者用比特币(BTC)购买了 Ether,这些 Ether 在以太坊网络启动时被创建并分配给了参与众筹的投资者。
2、区块奖励(在PoW机制下):在以太坊采用工作量证明机制时,矿工通过解决复杂数学难题来验证交易并创建新区块,作为回报获得新产生的 Ether。这个过程不仅确保了网络的去中心化和安全性,也是新 Ether 进入流通的主要途径。
3、质押奖励(在PoS机制下):随着以太坊升级到2.0版本并转向权益证明机制,Ether 的产生方式也随之改变。在 PoS 机制中,持币者通过锁定一定数量的 Ether 作为质押,获得成为网络验证者的资格。验证者负责验证交易和提议新区块,作为回报获得新产生的 Ether。这种方式减少了对大量计算资源的需求,降低了网络的能源消耗。
4、交易费用和燃烧:除了通过区块奖励产生外,Ether 还通过交易费用在用户之间流通。在 EIP-1559 提案实施后,网络开始燃烧部分交易费用中的基础费用,减少了 Ether 的总供应量,这一机制有助于控制通胀并可能对 Ether 的价值产生积极影响。
智能合约与EVM
什么是智能合约?它运行在以太坊链上,是位于以太坊区块链上一个特定地址的自动执行、控制或文档化法律或逻辑行为的代码和数据。