- 区块链教程
- 区块链 - 首页
- 区块链基础
- 区块链 - 简介
- 区块链的历史
- 区块链 - 技术
- 区块链与密码学
- 区块链超越加密货币
- 区块链 - 高级概念
- 区块链 - 去中心化
- 区块链 - 去中心化应用 (DApp)
- 区块链 - 去中心化金融 (DeFi)
- 区块链 - 未来展望
- 区块链中的智能合约
- 区块链 - 里卡迪安合约
- 区块链 - 预言机
- 区块链 - 去中心化自治组织 (DAO)
- 比特币
- 比特币 - 无形的黄金
- 比特币是如何运作的?
- 比特币 - 网络
- 比特币 - 钱包
- 比特币 - 创新
- 以太坊
- 以太坊替代加密货币
- 以太坊生态系统
- 以太坊虚拟机 (EVM)
- 高级以太坊
- 以太坊钱包
- 以太坊矿工节点
- 其他
- 区块链 - 双重支付
- 公钥密码学
- 区块链 - 哈希
- 比特币 - 挖矿
- 区块链 - 区块链式连接
- 区块链 - 工作量证明 (PoW)
- 区块链 - 网络与挖矿
- 区块链 - 矿工激励机制
- 区块链 - 梅克尔树
- 区块链 - 支付验证
- 区块链 - 解决冲突
- 区块链 - 隐私
- 比特币 - 缓解攻击
- 区块链 - 总结
- 区块链资源
- 区块链 - 快速指南
- 区块链 - 资源
- 区块链 - 讨论
区块链 - 以太坊生态系统
以太坊区块链的生态系统包含多个不可或缺的组成部分。其基础是以太坊区块链,它运行在一个去中心化的点对点网络上。
此外,还存在一个以太坊客户端,通常是Geth,它在节点上运行并建立与以太坊点对点网络的连接,方便下载和本地存储区块链。
此客户端提供一系列功能,包括挖矿和账户管理。本地区块链副本与网络持续同步。另一个重要的元素是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 的地址在部署时生成,此地址用于识别其在区块链上的位置。
以太坊生态系统的交易
在以太坊生态系统中,交易被定义为一个数据包,它使用私钥进行数字签名,包含特定的指令,这些指令在执行时会导致消息调用或合约的建立。
根据交易的结果,可以将交易分为两种不同的类型:
消息调用交易
这些交易促进不同合约账户 (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 并包含消息调用的输入数据。此字段也是无限大小的,并且结构为字节数组。
以太坊生态系统中的消息
根据黄皮书,消息是指两个账户之间交换的数据和值。消息本质上是一个数据包,既携带信息也携带值,具体来说是涉及的以太币金额。这些消息可以通过充当自主实体的智能合约传输,也可以由外部参与者(称为外部拥有账户 (EOA))通过数字签名的交易发起。
合约能够向其他合约发送消息。需要注意的是,消息仅存在于执行环境中,不会被存储。虽然消息与交易有相似之处,但关键的区别在于它们的来源:消息由合约生成,而交易则源自以太坊生态系统中的外部实体 (EOA)。
消息的组成部分
消息由几个关键元素组成:
- 发送消息的个人或实体
- 接收消息的个人或实体
- 要连同消息一起转移到合约地址的 Wei 数量
- 一个可选的数据字段,用作合约的输入
- 可能使用的最大 gas 限额(**startgas**)
当 EVM 中运行的合约执行 **CALL 或 DELEGATECALL** 操作码时,就会创建消息。
以太坊代币(ETH/ETC)
以太坊拥有自己的原生加密货币,称为 **以太币 (ETH)**。在本教程前面讨论过的 **去中心化自治组织 (DAO)** 黑客事件之后,启动了一个硬分叉来解决这种情况。
因此,现在有两个不同的以太坊区块链:一个被称为 **以太坊经典**,由货币 ETC 表示,而硬分叉版本为 ETH,它继续随着持续的开发工作而发展。
**以太坊经典 (ETC)** 已经培养了自己的支持者社区,他们积极参与其开发,将其维持为以太坊原始的、未分叉的版本。
**以太币** 由矿工作为奖励生成,作为他们通过交易和区块验证来保障网络的计算工作的回报。在以太坊区块链中,以太币充当在 **以太坊虚拟机 (EVM)** 上执行合约的媒介。
此外,以太币还用于购买 gas,gas 充当在以太坊区块链上进行计算的必要燃料。下表给出了不同单位的名称及其值 -