区块链 - 以太坊生态系统

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

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

以太坊生态系统工作

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

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

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

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

本章将介绍前面的主题,而下一章将重点介绍 EVM(以太坊虚拟机)

密钥和地址

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

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

如何生成密钥和地址?

生成密钥和派生地址的过程概述如下 −

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

以太坊生态系统的账户

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

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

以太坊生态系统的状态转换

以太坊网络中的每个账户都拥有一个状态,当汇总时,该状态反映了网络的整体状况。以太坊网络的状态会随着每个新块的添加而刷新。

这些账户之间和在这些账户上执行的操作表示状态转换。这种转换由以太坊状态转换函数促成,其运作方式如下 −

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

账户类型

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

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

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

以下部分给出了这两种账户的主要特征和属性 −

EOA

外部拥有账户的主要特征如下 −

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

CA

合约账户的主要特征如下 −

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

以太坊生态系统的交易

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

以太坊生态系统交易

根据交易结果,交易可分为两种不同类型 −

消息调用交易

这些交易有助于在无需创建新账户的情况下在不同的合约账户 (CA) 之间传输消息。

合约创建交易

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

交易中的关键术语

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

Nonce

Nonce 是一个连续的数字,发送方发起的每笔交易都会增加 1。它必须与发送的交易总数相对应,并作为交易的唯一标识符。

Gas 价格

Gas 价格字段表示执行交易所需的 Wei 数量。此费用按每单位 gas 计算,用于支付交易执行期间产生的所有计算费用。

Gas 限制

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

收件人

收件人字段表示交易收件人的地址,以 20 字节值表示。

值字段表示要转移给收件人的 Wei 总量。在合约账户(CA)的上下文中,这反映了合约将维持的余额。

签名

签名由三个部分组成:V、R 和 S。这些值代表数字签名(R、S)和有助于恢复公钥(V)的附加信息。

Init

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

数据

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

交易中的关键术语

以太坊生态系统的消息

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

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

消息的组成部分

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

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

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

以太坊代币(ETH/ETC)

以太坊有自己的原生加密货币,称为以太币 (ETH)。在本教程前面讨论的去中心化自治组织 (DAO)黑客攻击之后,发起了硬分叉来解决这一问题。

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

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

以太币由矿工生成,作为他们通过交易和区块验证保护网络安全的计算工作的奖励。在以太坊区块链中,以太币是执行以太坊虚拟机 (EVM)合约的媒介。

此外,以太币还用于购买 gas,gas 是以太坊区块链上进行计算的必要燃料。下表列出了不同单位的面额及其价值 −

不同单位及其价值