区块链 - 以太坊生态系统



以太坊区块链的生态系统包含多个不可或缺的组成部分。其基础是以太坊区块链,它运行在一个去中心化的点对点网络上。

此外,还存在一个以太坊客户端,通常是Geth,它在节点上运行并建立与以太坊点对点网络的连接,方便下载和本地存储区块链。

The Ethereum Ecosystem Working

此客户端提供一系列功能,包括挖矿和账户管理。本地区块链副本与网络持续同步。另一个重要的元素是web3.js库,它允许通过远程过程调用 (RPC)接口与Geth客户端进行交互。

以太坊生态系统的组成部分

以太坊生态系统的组成部分如下:

  • 密钥和地址
  • 账户
  • 交易
  • 消息
  • 以太币/代币
  • EVM

本章将涵盖前几个主题,下一章将详细介绍EVM(以太坊虚拟机)

密钥和地址

在以太坊区块链中,密钥和地址用于表示所有权并促进以太币的转账。这些密钥由一对组成,包括一个私钥和一个公钥。

私钥是随机生成的,并保持机密,而公钥则派生自私钥。地址是20字节的代码,由公钥生成,用于识别账户。

如何生成密钥和地址?

生成密钥和派生地址的过程如下所示:

  • 首先,根据椭圆曲线 secp256k1的规范,随机选择一个私钥(一个256位的正整数)。
  • 然后,通过使用椭圆曲线数字签名算法 (ECDSA)恢复函数从私钥派生公钥。
  • 最后,从公钥生成地址,具体来说是从公钥的Keccak 哈希的最后160位生成。

以太坊生态系统的账户

账户是以太坊区块链的基本组成部分。它们由私钥和公钥对组成。用户利用账户通过交易与区块链进行交互。

在通过节点将交易提交到网络之前,它会由相应的账户进行数字签名。作为交易驱动的状态机,以太坊的状态是通过账户之间的交互和交易的执行来建立或修改的。

以太坊生态系统状态转换

以太坊网络中的每个账户都拥有一个状态,当这些状态聚合在一起时,反映了网络的整体状况。以太坊网络的状态在添加每个新区块时都会刷新。

在这些账户之间和账户上执行的操作表示状态转换。此转换由以太坊状态转换函数促成,其工作原理如下:

  • 通过检查语法、签名真实性和nonce来确认交易的有效性。
  • 确定交易费用,并通过签名识别发送方地址。
  • 此外,验证发送方账户余额并相应调整,同时递增nonce。
  • 必须提供足够的ETH来支付交易成本,这些成本按字节计算,并且随着交易大小的增加而成比例增加。此步骤涉及价值的实际转移,从发送方账户转移到接收方账户。
  • 如果指定的接收方账户尚不存在,则会自动创建它。
  • 在交易由于余额不足或gas不足而失败的情况下,所有状态修改都会回滚,除了费用支付,费用支付会分配给矿工。
  • 最终,任何剩余的费用将作为找零返还给发送方,费用将相应地分配给矿工。
  • 在此阶段,函数生成结果状态,该状态也会记录在区块链上。

账户类型

以太坊生态系统中有两类账户:

  • 外部拥有账户 (EOA)
  • 合约账户 (CA)

外部拥有账户的功能类似于比特币账户,由私钥控制。相比之下,合约账户的特点是除了私钥之外,还与可执行代码相关联。

以下部分给出了两种账户的关键特征和属性:

EOA

外部拥有账户的关键特征如下:

  • 它们拥有一个状态。
  • 它们与人类用户相关联,因此被称为用户账户。
  • EOA 维护以太币余额。
  • 它们能够发送交易。
  • 它们不包含任何关联代码。
  • 通过私钥进行控制。
  • EOA 无法发起调用消息。
  • 账户具有键值存储。
  • EOA 能够发起交易消息。

CA

合约账户的关键特征如下:

  • 它们拥有一个状态。
  • 它们本身不与区块链上的任何用户或实体相关联。
  • CA 维护以太币余额。
  • 它们包含存储在内存或区块链上的关联代码。它们可以访问存储。
  • 它们可以被触发以响应其他合约的交易或消息来执行代码。
  • CA 可以保留其永久状态,并且可以调用其他合约。
  • CA 无法发起交易消息。
  • CA 可以发起调用消息。
  • CA 具有键值存储。
  • CA 的地址在部署时生成,此地址用于识别其在区块链上的位置。

以太坊生态系统的交易

在以太坊生态系统中,交易被定义为一个数据包,它使用私钥进行数字签名,包含特定的指令,这些指令在执行时会导致消息调用或合约的建立。

Ethereum Ecosystem Transactions

根据交易的结果,可以将交易分为两种不同的类型:

消息调用交易

这些交易促进不同合约账户 (CA) 之间消息的传输,而无需创建新账户。

合约创建交易

这些交易导致新的合约账户的形成。此类交易的成功执行会导致创建与特定代码关联的账户。

交易中的关键术语

两种交易都包含几个标准字段,详细如下:

Nonce

Nonce 是一个顺序号,发送方发起每次交易时都会增加 1。它必须与发送的交易总数相对应,并用作交易的唯一标识符。

Gas 价格

Gas 价格字段指示执行交易所需的Wei数量。此费用按每单位gas计费,适用于交易执行过程中产生的所有计算费用。

Gas 限额

Gas 限额字段指定可用于执行交易的gas最大数量。

To

To 字段表示交易接收方的地址,表示为 20 字节的值。

Value

Value 字段指示要转账给接收方的Wei总额。在合约账户 (CA) 的上下文中,这反映了合约将维持的余额。

签名

签名包含三个组成部分:V、R 和 S。这些值表示数字签名 (R、S) 和有助于恢复公钥 (V) 的其他信息。

Init

Init 字段仅用于旨在创建合约的交易,特别是合约创建交易。它表示一个无限长度的字节数组,定义在账户初始化过程中要使用的EVM 代码

Data

在消息调用交易的情况下,Data 字段替换 Init 并包含消息调用的输入数据。此字段也是无限大小的,并且结构为字节数组。

Key Terms in Transactions

以太坊生态系统中的消息

根据黄皮书,消息是指两个账户之间交换的数据和值。消息本质上是一个数据包,既携带信息也携带值,具体来说是涉及的以太币金额。这些消息可以通过充当自主实体的智能合约传输,也可以由外部参与者(称为外部拥有账户 (EOA))通过数字签名的交易发起。

合约能够向其他合约发送消息。需要注意的是,消息仅存在于执行环境中,不会被存储。虽然消息与交易有相似之处,但关键的区别在于它们的来源:消息由合约生成,而交易则源自以太坊生态系统中的外部实体 (EOA)。

消息的组成部分

消息由几个关键元素组成:

  • 发送消息的个人或实体

  • 接收消息的个人或实体
  • 要连同消息一起转移到合约地址的 Wei 数量
  • 一个可选的数据字段,用作合约的输入
  • 可能使用的最大 gas 限额(**startgas**)

当 EVM 中运行的合约执行 **CALL 或 DELEGATECALL** 操作码时,就会创建消息。

以太坊代币(ETH/ETC)

以太坊拥有自己的原生加密货币,称为 **以太币 (ETH)**。在本教程前面讨论过的 **去中心化自治组织 (DAO)** 黑客事件之后,启动了一个硬分叉来解决这种情况。

因此,现在有两个不同的以太坊区块链:一个被称为 **以太坊经典**,由货币 ETC 表示,而硬分叉版本为 ETH,它继续随着持续的开发工作而发展。

**以太坊经典 (ETC)** 已经培养了自己的支持者社区,他们积极参与其开发,将其维持为以太坊原始的、未分叉的版本。

**以太币** 由矿工作为奖励生成,作为他们通过交易和区块验证来保障网络的计算工作的回报。在以太坊区块链中,以太币充当在 **以太坊虚拟机 (EVM)** 上执行合约的媒介。

此外,以太币还用于购买 gas,gas 充当在以太坊区块链上进行计算的必要燃料。下表给出了不同单位的名称及其值 -

Different Units and Their Values
广告