当前位置: 首页 > news >正文

区块链技术原理(11)-以太坊交易

文章目录

  • 什么是交易?
  • 交易类型
  • 交易生命周期
  • 关键概念:Gas 与交易费用
  • 交易状态与失败原因
  • 总结


什么是交易?

“交易(Transaction)” 是从一个账户向另一个账户发送的经过数字签名的指令 。例如,如果 Bob 发送 Alice 1 ETH,则 Bob 的帐户必须减少 1 ETH,而 Alice 的帐户必须增加 1 ETH。 交易会造成状态的改变(如转移以太币、调用智能合约、部署合约等)。

改变 EVM 状态的交易需要广播到整个网络。 任何节点都可以广播在以太坊虚拟机上执行交易的请求;此后,验证者将执行交易并将由此产生的状态变化传播到网络的其他部分。

交易需要付费并且必须包含在一个有效区块中。

所提交的交易包括下列信息:

字段作用
from发起账户地址(EOA,必须有私钥签名,合约账户无法主动发起交易)。
to接收账户地址:
若为 EOA 地址(如0x…),则为普通转账;
若为合约账户地址,则为调用该合约;
若为空(null),则为部署新智能合约(此时data字段为合约字节码)。
value转移的以太币数量(以 wei 为单位,1 ETH = 10¹⁸ wei),仅在转账或向合约支付 ETH 时有效。
gasLimit交易允许消耗的最大 Gas 量(防止交易因逻辑错误无限消耗资源),若实际消耗 Gas ≤ gasLimit,剩余 Gas 退还;若超过,则交易失败,已消耗 Gas 不退还。
maxFeePerGas(EIP-1559 后)用户愿意支付的最高 Gas 单价(以 gwei 为单位,1 gwei = 10⁹ wei),包含基础费(base fee)和优先级费(priority fee)。
maxPriorityFeePerGas(EIP-1559 后)用户额外支付给验证者的 “小费”,激励验证者优先打包交易。
nonce发起账户的交易计数器(从 0 开始),确保每笔交易唯一,防止 “重放攻击”(同一笔交易被重复提交)。
data附加数据(可选):
调用合约时,为函数名 + 参数的编码(如调用transfer(address,uint256)的编码);
部署合约时,为合约的字节码;普通转账时可留空。
signature发起账户的数字签名(由私钥生成),用于验证交易的合法性(确实由from地址的所有者发起)。

燃料是指验证者处理交易所需的计算。 用户必须为此计算支付费用。 gasLimit 和 maxPriorityFeePerGas 决定支付给验证者的最高交易费。

下面是一个模拟交易信息

{from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",gasLimit: "21000",maxFeePerGas: "300"maxPriorityFeePerGas: "10"nonce: "0",value: "10000000000",
}

交易类型

以太坊有几种不同类型的交易:

  • 常规交易:从一个帐户到另一个帐户的交易。
  • 合约部署交易:没有“to”地址的交易,数据字段用于合约代码。
  • 执行合约:与已部署的智能合约进行交互的交易。 在这种情况下,“to”地址是智能合约地址。

交易生命周期

交易提交后,就会发生以下情况:

  1. 用户发起与签名
    用户通过钱包(如 MetaMask)输入交易参数(to、value、gas等),钱包用用户私钥对交易进行签名(生成signature),确保交易不可篡改且确实由用户发起。
  2. 广播至网络
    签名后的交易被发送到以太坊 P2P 网络,由节点(全节点或轻节点)接收并转发,快速扩散至全网。
  3. 节点验证
    全节点收到交易后,验证其合法性:
    • 签名是否有效(from地址是否为私钥持有者);
    • nonce是否正确(与from账户的当前nonce一致);
    • from账户余额是否足够支付value + 预估Gas费;
    • 若调用合约,验证data字段的函数编码是否符合合约接口。
  4. 进入交易池(mempool)
    验证通过的交易被放入节点的 “交易池”,等待验证者(PoS)或矿工(PoW 时期)打包。交易池中的交易按 “Gas 价格” 排序,高 Gas 费的交易通常被优先处理。
  5. 打包进区块
    验证者从交易池中选择交易(优先高 Gas 费),打包进新生成的区块,并广播区块至全网。此时交易状态从 “pending(待处理)” 变为 “included(已打包)”。
  6. 全网确认
    其他节点验证区块合法性后,将其添加到区块链末尾。随着后续区块的生成(通常认为 6 个区块后),交易被 “最终确认”(不可篡改的概率极高),全局状态按交易指令更新(如余额变更、合约存储更新)。

关键概念:Gas 与交易费用

以太坊交易必须支付 “交易费用”(以 ETH 计价),费用高低由 Gas 决定,这是防止网络滥用的核心机制:

  • Gas:衡量交易计算复杂度的单位(如简单转账需 21,000 Gas,复杂合约调用可能需数百万 Gas)。
  • 实际费用:EIP-1559 后,费用 = 基础费(base fee) + 优先级费(priority fee),其中基础费会被销毁(减少 ETH 流通量),优先级费归验证者。
  • 费用计算:总费用 = Gas 消耗 ×(基础费 + 优先级费),若用户设置的maxFeePerGas ≥ 实际费用,则交易有效。

交易状态与失败原因

  • 常见状态:
    • pending:已广播但未被打包;
    • success:已打包并确认,状态更新成功;
    • failed:已打包但执行失败(如合约逻辑错误、Gas 不足)。
  • 失败原因:
    • Gas 不足(实际消耗 Gas > gasLimit);
    • 合约执行出错(如转账给不接收 ETH 的合约、条件判断不满足);
    • 签名无效或nonce错误。

注意:失败的交易仍会消耗 Gas(因验证者已执行计算),费用不会退还。

总结

以太坊交易是连接用户与网络的核心接口,不仅支持简单的价值转移,更通过data字段实现了与智能合约的复杂交互,支撑了 DeFi、NFT、DAO 等丰富生态。理解其结构、类型和生命周期,是使用以太坊和开发 DApp 的基础 —— 它既是 “数字现金” 的转移工具,也是 “去中心化应用” 的操作指令,体现了以太坊 “世界计算机” 的核心价值。

http://www.dtcms.com/a/333146.html

相关文章:

  • 数据结构:N个节点的二叉树有多少种(Number of Binary Trees Using N Nodes)
  • Nacos-5--Nacos2.x版本的通信原理
  • 什么是KVM切换器?详解KVM切换器
  • 电子电气架构 --- 线束设计一些事宜
  • 电子电气架构 --- 探索软件定义汽车(SDV)的技术革新
  • 硬件实现webrtc的编解码
  • 【DDIA】第三部分:衍生数据
  • 《Effective Java》第1条:用静态工厂方法代替构造器
  • 扩展卡尔曼滤波EKF、自适应扩展卡尔曼滤波AEKF、HIF/H∞、粒子滤波PF、卡尔曼粒子滤波EKPF在BJDST动态工况下的SOC估计效果
  • TDengine IDMP 高级功能(2. 事件模板)
  • Stability AI技术浅析(二):LDM
  • 【国内电子数据取证厂商龙信科技】如何识别与查杀木马程序
  • 音视频面试题集锦第 23 期
  • 应急救援智能接处警系统——科技赋能应急,筑牢安全防线
  • Day60--图论--94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网)
  • PaddleNLP进行Bart文本摘要训练
  • Linux系统——进程与线程
  • PyTorch 进行人脸训练和 Java 实现人脸识别的解决方案
  • 权重迁移笔记
  • Android RxJava 过滤与条件操作详解
  • CPU性能篇-系统的软中断CPU使用率升高如何处理-Day 06
  • Pytest项目_day16(yaml和parametrize结合)
  • 【R语言】更换电脑后,如何在新设备上快速下载原来设备的 R 包?
  • 神经网络、深度学习与自然语言处理
  • Linux程序内存布局分析
  • ROS2 setup.bash和setup.sh区别差异
  • 【JAVA】实现word添加标签实现系统自动填入字段
  • Python匿名函数的具体用法
  • 堕落之主 单机+联机 全DLC 送修改器(Lords of the Fallen)免安装中文版
  • 【机器人-基础知识】ROS常见功能架构