手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

科普:以太坊交易的生命周期?

时间:2025-07-04 00:13:12来源:525游

ETH(Ethereum)以太坊钱包基本概念介绍:http://www.jb51.net/blockchain/801260.html

了解以太坊交易是如何生成并在网络中广播的

科普:以太坊交易的生命周期?

交易是以太坊区块链(或任何类似的区块链)的核心。在与以太坊区块链进行交互之时,你是在执行交易并更新其状态。你有没有想过要了解当你在以太坊执行交易之时到底发生了什么?让我们通过一则交易例子来解答这一问题。本文包括如下内容。

以太坊交易的端到端遍历,即从你的浏览器/控制台出发进入以太坊网络,然后再回到你的浏览器/控制

了解当你使用 Metamask 或 Myetherwallet 等插件,而非运行自己的节点之时,交易是如何进行的

如果你比较偏执多疑,不信任任何插件,想自己执行交易,该怎么做?

本文读者需要对以太坊及其组成部分,如账户、gas 和合约等具备基础性了解。关于这些概念的详细解释可以参见这篇文章(编者注:中译本见文末《以太坊中的账户、交易、Gas和区块Gas Limit》超链接)。如果你是一个不熟悉以太坊的开发者,这篇文章或许对你很有帮助。你也可以从这篇文章中学习如何构建简单的分布式应用。如果你已经有过执行交易的亲身经历,本文对你的意义会更大。例如,可以是将一些以太币发送给另一个人或合约的交易。再比如,还可以是在与分布式应用进行交互的情况下,如果你在这个网站上买了一些代币,这就是一笔交易。如果你为一位候选人投票,这也是一笔交易。

一. 以太坊交易的端到端综述

让我们以下列合约调用为例,并遍历该函数调用/交易是如何执行及永久存储在区块链上的整体流程。点击此处可了解整个合约。从较高层次来说,这是一个投票合约,其中你可以预置一些候选人在选举中进行角逐,任何人都能为他们投票。这些投票将会记录在区块链上。

Voting.deployed().then(function(instance) {
  instance.voteForCandidate('Nick', {gas: 140000, from: web3.eth.accounts[0]}).then(function(r) {
    console.log("Voted successfully!")
  })
})

科普:以太坊交易的生命周期?

假设你在自己的计算机上本地运行了一个以太坊客户端(Geth 或 Parity),你的计算机连接到了某个以太坊网络(测试网络或是主网),你有权访问该合约地址和 ABI,从而执行该交易。

如果你构建过分布式应用,应该对上述代码并不陌生。这是一个名为“Voting(投票)”的合约,已经部署在了区块链上。我们以该合约为例,执行一个叫作 voteForCandidate 的函数,输入候选人的姓名、该交易的gas上限和执行该交易的账户。从名称中可以看出,该函数能够用来为候选人投票,选票记录在区块链上。在下文,我们将尝试解构该调用,了解你在执行该 javascript 函数时会发生的一切。

1. 构建原始交易对象

如下图所示,voteForCandidate 函数调用首先被转化成了原始交易(rawTxn)。Web3js库被用来构建原始交易对象。

txnCount = web3.eth.getTransactionCount(web3.eth.accounts[0])
var rawTxn = {
    nonce: web3.toHex(txnCount),
    gasPrice: web3.toHex(100000000000),
    gasLimit: web3.toHex(140000),
    to: '0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b',
    value: web3.toHex(0),
    data: '0xc7ed014952616d6100000000000000000000000000000000000000000000000000000000'
};

让我们试着了解下该原始交易对象中的所有字段,以及它们是如何设置的。

nonce(随机数):每个以太坊账户都有一个叫做 nonce 的字段,来记录该账户已执行的交易总数。Nonce 的值随着每个新交易的执行不断增加,这能让网络了解执行交易需要遵循的顺序。Nonce 也被用来进行重放保护。

gasPrice(gas价格):即你愿为该交易支付的每单位 gas 的价格。如果你正在主网上执行交易,ETH Gas Station上正好有一个网站,你可以参照其建议为你的交易设定 gas 价格,以便交易在一定时间内成功执行。Gas 价格目前以 GWei 为单位,其范围是0.1->100+Gwei。下文会进一步介绍 gas 价格及其影响。

gasLimit(gas上限):即你愿为该交易支付的最高 gas 总额。该上限能确保在出现交易执行问题(比如陷入无限循环)之时,你的账户不会耗尽所有资金。一旦交易执行完毕,剩余所有 gas 会返还至你的账户。

to:即该函数调用被送往的地址。0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b 是我们的案例中投票合约的地址。

Value(值):即你打算发送的以太币总量。当我们执行voteForCandidate函数时,我们根本没有发送以太币,因此 value 为零。如果你要执行一个交易,向另一个人或合约发送以太币,你会需要设置 value 值。

data(数据):让我们来看看data字段是如何计算出来的。

你先从 voteForCandidate(bytes32 candidate)(32字节的候选人)的 ABI 中获取函数签名,并得出它的哈希值。

> web3.sha3('voteForCandidate(bytes32 candidate)')
'0xc7ed014922ff9493a686391b70ca0e8bb7e80f91c98a5cd3d285778ab2e245b3'

取该哈希值的前4个字节,即:0xcc9ab267。

然后将参数‘Nick’转化为32字节,得到52616d6100000000000000000000000000000000000000000000000000000000

将二者结合,得到数据有效载荷。

2.签署交易

如果你记得的话,你使用了web3.eth.accounts[0]来执行该交易。以太坊网络需要知道你确实是该账户的所有者,从而确保其他人不能以你的名义执行该交易。要向网络证明这点的方法是使用该账户的相应私钥签署交易。签署过后的交易如下图所示:

const privateKey = Buffer.from('e331b6d69882b4ab4ea581s88e0b6s4039a3de5967d88dfdcffdd2270c0fd109', 'hex')

const txn = new EthereumTx(rawTxn)
txn.sign(privateKey)
const serializedTxn = txn.serialize()

3. 交易经由本地验证

签署过后的交易会提交至你的本地以太坊节点。然后你的本地节点会验证已签名的交易,确保它真的是由这个账户地址签署过的。

4. 交易被广播至网络

已签署交易经由你的geth/parity节点广播至其对等节点,这些对等节点再将该交易广播给它们的对等节点,以此类推。一旦交易被广播至网络,你的本地节点也会输出该交易的id,你可以用它来追踪你的交易的状态。该交易id就是已签署交易对象的哈希值。

transactionId = sha3(serializedTxn)

科普:以太坊交易的生命周期?

如果你是在公共的以太坊网络上执行该交易的话,追踪你的交易状态的最佳方式是通过etherscan.io。如上图所示,你是否注意到了有几个节点被标记为 Etherscan 节点。Etherscan 的团队运行了几个节点,并将一个很棒的前端网络应用连接到了 Etherscan上。如果你的交易被他们的节点选中,你可以在他们的网站上查看自己的待定交易。

还要记住的一点是,并非所有节点都会接受你的交易。其中一些节点可能被设置成了只接受 gas 价格超过某一最低值的交易。如果你设置的 gas 价格低于该下限,则节点会忽略你的交易。

5. 矿工节点接受交易

正如图中所示,以太坊网络同时拥有矿工节点和非矿工节点。可能你也知道,矿工的职责是将你的交易包含到区块上。矿工是交易池的维护者,你的交易先是被添加进交易池,再由矿工进行开始评估。

科普:以太坊交易的生命周期?

从上图中你会注意到矿工将所有交易存储在根据 gas 价格分类的池中。gas 价格越高,该交易就越有可能被添加进下一个区块。这是矿工节点的常见设定(为得到更高的报酬进行优化)。不过,矿工可以将自己的节点设置成根据自己的喜好对交易进行分类(例如,他们为了帮助网络只挖掘gas价格低的交易)。

从上图中,你看出我们的 voteForCandidate 交易是如何沉入矿池底端的吗?一旦所有gas价格高的交易都被挖出来包含进区块之后,矿工将挖掘我们的交易。

还有要注意的一点是,矿池可以容纳的交易数是有限的。比如,一场众筹正在火热进行中或是一个非常流行的分布式应用(如加密猫)横空出世。人们提交了 gas 价格高的交易,希望矿工能最先选中他们的交易。如果 gas 价格高的交易填满了矿池,gas 价格低的交易就会被放弃。我们的候选人 Nick 在一段时间内就别想收到任何选票了。在这种情况下,我们甚至得重新广播我们的交易。

另一个能让你的交易在矿池里上升的技巧是重新提交你的交易,提高 gas 价格并维持 nonce 值不变。这样一来,当矿工接收到新交易时,gas 价格更高的新交易会覆盖之前的交易。如果改变了 nonce 值,重新提交的交易就会被认为是不同的交易(最后会为Nick举行两次投票)。这里推荐一篇很好的文章(编者注:中译本见文末《科普 | 释放阻塞的以太坊交易》超链接),作者Jim McDonald 对此做出了深入的解释。

6. 矿工节点找到一个有效区块并将它广播至网络

矿工最后选中了我们的交易,与其他交易一起包含进区块。矿工只能选择一定量的交易添加进区块,因为以太坊已经设置了单个区块 gas 上限,换言之,交易的所有 gas 上限总数不能超过区块 gas 上限。你可以在 ethstats.net 上查看当前 gas 上限。

一旦矿工选择将交易包含进区块,这些交易将被验证并包含进一个待处理区块,工作量证明开始。某个矿工节点(通过解决工作量证明难题)最终会找到一个有效的区块,并将这一区块添加到区块链上。就像经由你的本地节点广播的原始交易会被其他节点接收那样,矿工节点也会将这一有效区块广播给其他节点。

7. 本地节点接收/同步新区块

最终,你的本地节点将接收这个新区块,并同步区块链在本地的副本。一旦接收到这个新区块,本地节点就会执行区块里的所有交易。

如果你使用 truffle 执行你的交易, truffle 会不断测验区块链以求确认。一旦它发现交易被确认,就会执行 then() 区块中的代码,并打印(我们每个例子的)控制台日志函数。

二. 使用Metamask而非本地节点

科普:以太坊交易的生命周期?

如果你安装了 MetaMask 浏览器插件,你就能在你的浏览器中管理你的账户。密钥只会存储在你的浏览器上,因此你是唯一一个有权访问你的账户和私钥的人。当你在浏览器上执行交易之时,插件会将你的函数调用转化成原始交易,并用你的私钥签署交易。 Metamask 运行自己的节点,并且使用这些节点来广播你的交易(Metamask 使用的是Infura 运营的节点)。如此一来,你就没必要运行自己的以太坊节点了。

三. 线下签名

如果你不喜欢用插件,或者担心你的本地 geth 节点有可能受损(遭篡改),该怎么办呢?要解决这一问题有一个安全之策。

你是否注意到了,前两个步骤根本不需要联网。如果你想确保自己的交易绝对不会受到篡改,你可以使用一台没有联网的计算机将这一函数调用转换成原始交易,并使用你的私钥签署该交易。之后,你可以复制已签署交易串,并使用联网的计算机将其广播至网络。你可以使用 Etherscan 和 Infura 等服务将你已签署的交易广播至网络。

另一个安全之策是使用 Ledger 或 Trezor 等硬件钱包。这类钱包存储了你的私钥,而签署交易的密钥已经编程进了硬件本身。它们需要联网的原因只是为了发布你的已签署交易。

以上就是科普:以太坊交易的生命周期?的详细内容,更多关于以太坊的资料请关其它相关文章!


消逝的光芒进入变电站怎么爬(消逝的光芒进入变电站怎么过) 有什么mmorpg手游不花钱也能玩(不怎么花钱能玩的mmorpg手游) 宝可梦阿尔宙斯警卫组组长在哪里(宝可梦阿尔宙斯攻略) 剑与远征sp英雄怎么获得(剑与远征sp英雄进阶表格图) 分析买币和挖矿的优势劣势,我们该如何选择? 迷你世界香蕉树苗怎么获得(迷你世界香蕉树,用用什么种) 合成资产是什么意思?一文读懂DeFi合成资产 王者荣耀紫星币能赠送吗(王者荣耀紫星币能否赠送) 好玩的放置类手游推荐?Rollic放置竞速游戏攻略 梦幻西游法力陷阱有什么用(梦幻法力陷阱技能效果) 艾尔登法环是联机走剧情吗(steam艾尔登法环) BTC100是什么意思?BTC100交易平台介绍 VB GLOBAL怎么充值?VB交易所充值提现、充币提币全教程 第五人格 求生者技巧攻略(第五人格求生者技巧大全) CF天龙传奇70kg是枪还是皮肤(天龙传奇75) dnf徽章怎么快速获得(dnf徽章怎么快速获得方法) YAG是什么币种?YAG币官网总量和发行价介绍 冰原守卫者集结试炼怎么打(冰原守卫者火结晶) 什么手游能卖装备赚钱(哪款手游可以卖装备赚钱) 王者荣耀心愿点怎么提取出来(王者荣耀心愿点满了怎么提取心愿点) 莱特币钱包哪个可靠?盘点2021年实用的莱特币钱包 imToken钱包内如何买卖EOS的CPU、NET资源教程 币安怎么样?币安币发行价多少一个?币安BNB发行总量多少? 我的世界手机版按键消失了怎么办(我的世界手机版按键失灵) 泰拉瑞亚恶魔镰刀怎么获得(泰拉瑞亚恶魔镰刀怎么用) 三国志幻想大陆哪个神兵好(三国志幻想大陆哪个神兵厉害) 2022年最有潜力的加密货币有哪些?2022年最有潜力的区块链加密货币汇总 我的世界手机版漏斗怎么连接箱子(我的世界手游怎么让漏斗传进箱子) 如何获得比特币BTC?Bitcoin虚拟币交易所平台购买地址 FTX交易所平台币是什么?FTX交易所的FTT平台币怎么样? SumSwap是什么交易所?SumSwap交易所详细介绍 艾达币/ADA币2021年趋势怎么样?ADA币购买交易操作教程 USDC币兑换成法币?USDC怎么兑换人民币教程介绍 梦幻新诛仙坐骑多少级开启(梦幻新诛仙坐骑奇缘触发地点) Coinbase Wallet推出钱包的浏览器扩展程序 改善DeFi桌面操作体验 MXC交易所App官网版优势,抹茶交易所App官方下载最新入口 cf无尽挑战末日工厂用什么枪(cf无尽挑战末日工厂怎么打出高伤害) 蚂蚁庄园小鸡宝宝考考你描写春节的古诗 金铲铲之战精密德莱文怎么玩 精密德莱文玩法攻略 2022年有什么新出的网游游戏(2021年新网游推荐) 王者荣耀共享wifi有几台是什么意思(王者荣耀共享wifi有几台是什么意思呀) TRAC币总量多少?TRAC币发行总量和流通总量及项目介绍 全栈开发next.js 与strapi 视频课程内容总结2 和平精英活跃礼包怎么返点券(和平精英活跃礼包怎么返点券的) imtoken钱包被盗可以追回吗? 魔兽世界毛料哪里刷快(魔兽世界毛料在哪刷怀旧服) 问道手游单人玩什么职业好(问道手游适合平民长期玩的) 幻塔森林蜘蛛在哪(幻塔zhihu) 数字藏品怎么买卖?数字藏品买卖交易操作教程 宝可梦阿尔宙斯黑奇石在哪(宝可梦阿尔宙斯黑奇石哪里得) Hope Seed Wallet是什么钱包?Hope Seed钱包怎么样? 消逝的光芒2幸存者感知怎么按不出来(消逝的光芒幸存者技能怎么刷) 梦幻西游神秘委托信怎么获得(梦幻西游神秘委托能得到多少钱) 人气超变手游bt版有哪些(超变手游app) Newbit交易所合法吗安全吗?Newbit交易所官网最新消息 诛仙手游云梦川钓鱼隐藏任务攻略(诛仙云梦川钓鱼点在哪里) Uni币2025价格能到多少?Uni币未来升值潜力2025-2030价格预测 MEXC抹茶交易所官网最新版介绍?数字货币交易所MEXC交易所官网入口 问道法宝转世和不转世有什么区别(问道法宝转世中是什么意思) 区块链小白入门:7个步骤入门区块链 量子币多少钱一枚?QTUM量子币今日价格美元行情历史走势 WalletConnect是什么意思?一文读懂WalletConnect钱包 我的世界海豚怎么养(我的世界海豚怎么养不会搁浅) 王者荣耀语音被禁止怎么解除(王者荣耀语音被禁言怎么解除) 区块链技术和YTBCOIN未来发展趋势 宝可梦阿尔宙斯彗星碎片有什么用(宝可梦传说阿尔宙斯新宝可梦) Blur能涨到多少钱一枚?Blur币牛市价格预测 蜀门手游魔王带什么宝宝(蜀门手游魔宫怎么卡怪) 推荐6款百玩不厌的小型单机游戏(小型好玩的单机游戏) 原神被任务卡住无法联机怎么办(原神任务卡bug了怎么办) DNF圣域之痕一天能获得多少(圣域多久刷一次) 电脑哪个加速器好用而且免费?三款支持试用的加速器值得体验 币本位合约和USDT合约有什么区别 余额宝利息怎么算的?比银行利息越来越低怎么回事?(详解) CTO币怎么样?CTO币值得投资吗? 王者荣耀诸葛亮S26怎么出装(王者诸葛亮如何出装) 王者荣耀战力够了怎么没有称号(王者荣耀战力够了却没有称号) 英雄联盟锤石灯笼怎么点(英雄联盟锤石的灯笼) 和平精英房间卡只能玩一局吗(和平精英房间卡能玩几局) 有哪些武侠卡牌手机游戏好玩(好玩的武侠卡牌手游) 什么是元交易?智能合约开发实战:元交易(Metatransaction)系列一 OK交易所怎么样?OK交易所真的安全靠谱吗? 和平精英一周能有多少赛季积分(和平精英2021s1赛季周积分) 区块链ATOM币是什么币?ATOM币价格总量及前景介绍 AUS是什么交易所?澳交所全球全面介绍 双平台都可以玩的手游有哪些(双平台互通手游有哪些) 宝可梦传说阿尔宙斯魔尼尼怎么进化(阿尔宙斯和谱尼) gta5恐怖山羊人在哪里(gta5 恐怖) 对比分析:DOT币和FIL币哪个更值得投资? 梦幻西游神兜兜怎么获得(梦幻西游神兜兜怎么获得技能) 魔力宝贝手游:0氪玩家福音(魔力宝贝手游零氪玩法) 原神遗落之花的效果是什么(遗落之书怎么过) qq怎么清理缓存和垃圾清理,QQ浏览器缓存数据清理方法 Chia币挖矿电脑配置详情,Chia奇亚币硬盘挖矿电脑配置推荐 我的世界怎么删除模组(我的世界怎么删除模组电脑版) 区块高度高代表什么?区块高度的作用 金铲铲之战不能编辑阵容吗(金铲铲之战怎样自己编辑阵容) gbp是什么货币?GBP是什么意思? 王者荣耀人物太大怎么缩小(王者荣耀人物太大怎么变小) 显卡挖矿原理究竟是什么?为什么要用显卡挖矿?

热门文章

推荐专题

更多>>

游戏推荐

更多>>