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

当前位置:首页 > 币圈百科 > 2022科普:以太坊交易的生命周期-

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

2022-09-23币圈百科362

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

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

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

交易是以太坊区块链(。当与以太坊区块链交互时,您正在执行交易并更新其状态。你有没有想过当你在以太坊执行交易时会发生什么?我们通过一个交易实例来回答这个问题。本文包括以下内容。

以太坊交易的端到端遍历,即从您的浏览器/控制台开始,进入以太坊网络,然后返回您的浏览器/控制

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

如果您是偏执狂,不要相信任何插件,想要自己执行交易,本文的

读者需要对以太坊及其组件有基本的了解,如帐户、气体和合同。这些概念的详细解释可以在本文中找到(编者注:中文翻译见文末超链接《以太坊中的账户、交易、Gas和区块Gas Limit》)。如果你是一个不熟悉以太坊的开发者,这篇文章可能对你很有帮助。您还可以从本文中了解如何构建一个简单的分布式应用程序。如果你已经有了执行交易的亲身经历,这篇文章对你的意义会更大。例如,它可以是向另一个人或合同发送一些以太币的交易。例如,您还可以与分布式应用程序进行交互。如果你在这个网站上购买一些代币,这就是一次交易。如果你投票给一个候选人,这也是一笔交易。

一、以太坊交易的端到端概述

我们以下面的合约调用为例,走一遍这个函数调用/交易是如何执行并永久存储在区块链上的整个过程。点击此处了解整个合同。在高层次上,这是一个投票合同,在这个合同中,你可以预设一些候选人参加选举,任何人都可以投票给他们。这些投票将被记录在区块链上。

Voting.deployed()。然后(function(instance){ instance . voteforcandidate(' Nick ',{gas: 140000,from: web3.eth.accounts[0]})。then(function(r) { console.log('投票成功!')}})

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

假设你在电脑本地运行了一个以太坊客户端(Geth或者奇偶校验),你的电脑连接了一个以太坊网络(测试网或者主网),你可以访问合约地址和ABI来执行交易。

如果您构建过分布式应用程序,那么您应该熟悉上面的代码。这是一个名为“投票”的合同,已经在区块链部署。我们以这个合同为例,执行一个名为voteForCandidate的函数,输入候选人姓名,本次交易的燃气上限,以及本次交易执行的账户。从名字上可以看出,这个功能可以用来给候选人投票,投票记录在区块链上。在下文中,我们将尝试解构该调用,并理解当您执行javascript函数时将会发生的一切。

1。构建原始事务对象

如下图所示,voteForCandidate函数调用首先转换为原始事务(rawTxn)。Web3js库用于构建原始事务对象。

txn count=web 3 . eth . gettransactioncount(web 3 . eth . accounts[0])var raw txn={ nonce:web 3 . to hex(txn count),gas price:web 3 . to hex(10000000000),gasLimit: web3.toHex(140000),to:'0x 633296 ba ebc 20 f 33 AC 2 E1 C1 b 105d 7 CD 1 f 6a 0718 b ',value: web3.toHex(0),data

我们来试着了解一下原始事务对象中的所有字段,以及它们是如何设置的。

nonce(随机数):每个以太坊帐户都有一个名为nonce的字段,用于记录该帐户执行的交易总数。Nonce的值随着每个新事务的执行而增加,这可以让网络知道事务需要被执行的顺序。Nonce也用于回放保护。

气价:你愿意为此交易支付的每单位气价。 如果你正在主网上执行交易,恰好ETH加油站上有一个网站。你可以参考它的建议,为你的交易设定气价,使交易在一定时间内成功执行。气价目前以GWei为单位,其区间为0.1-100 Gwei。天然气价格及其影响将在下面进一步描述。

gasLimit(气上限):即你愿意为这次交易支付的最大气总量。这个上限可以保证你的账户在出现交易执行问题(比如陷入死循环)的时候不会没钱。交易完成后,所有剩余的汽油将返还到您的账户。

to:即这个函数调用发送到的地址。0x 33296 bebc 20 f 33 AC 21 C1 b 105d 7 CD 1 f 6 a 0718 b在我们的例子中是投票契约的地址。

值:即你打算发送的以太币总额。当我们执行voteForCandidate函数时,我们根本不发送以太坊,所以值为零。如果你想执行一个交易,把以太坊发给另一个人或者合同,你就需要设置值。

data(数据):我们来看看数据字段是怎么计算的。

您首先从VoteForCandidate(bytes 3 candidate)(32字节候选)的ABI获得函数签名,并获得它的哈希值。

web 3 . sha3(' VoteForCandidate(byte s32 candidate)')' 0 xc 7 ed 014922 ff 9493 a 686391 b 70 ca 0 e 8 b 70 f 91 c 98 a5 CD 3d 285778 ab 245 b 3 '

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

然后将参数' nick '转换成32个字节得到52616d 6100000000000000000000000

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

2。签署交易

如果您还记得,您使用web3.eth.accounts[0]来执行交易。以太坊网需要知道你确实是账户的主人,这样才能保证别人不能以你的名义执行交易。向网络证明这一点的方法是用账户对应的私钥对交易进行签名。签名后的事务如下图所示:

const private key=buffer . from(' E331B 6d 69882 B4 A4EA 581 s88e 0 b 6s 4039 a3 DE 5967d 88 dfdc FFDD 2270 c 0FD 109 ',Hex ')const txn=New ether eum TXX(raw txn)txn。Sign(私钥)constserialized txn=txn。已序列化()3。交易将在本地验证

签名后提交到您的本地以太坊节点。然后,您的本地节点将验证已签名的交易,并确保它确实是由该帐户地址签名的。

4。事务被广播到网络

签名的事务通过您的geth/parity节点被广播到它的对等节点,然后该节点将事务广播到它们的对等节点,依此类推。一旦事务被广播到网络,您的本地节点也将输出事务的id,您可以用它来跟踪您的事务的状态。事务id是已签名事务对象的哈希值。

Transaction ID=SHA3(序列化TXN)

科普:以太坊交易的生命周期?如果你是在公共以太坊网络上执行这个交易,跟踪你的交易状态的最好方法就是通过etherscan.io如上图,你有没有注意到有几个节点被标记为etherscan节点?Etherscan的团队运行几个节点,并将一个很棒的前端网络应用程序连接到Etherscan。如果您的交易被他们的节点选中,您可以在他们的网站上查看您自己的未决交易。

另外要记住的是,不是所有的节点都会接受你的交易。这些节点中的一些可以被设置为仅接受天然气价格高于某个最小值的交易。如果你设置的气价低于下限,节点会忽略你的交易。

5。矿工节点接受交易

如图所示,以太坊网络既有矿工节点,也有非矿工节点。你可能知道,矿工的职责是把你的交易包括在内。矿商是交易池的维护者。你的交易首先被添加到交易池,然后矿工开始评估它们。

科普:以太坊交易的生命周期?从上图中你会注意到,矿工们把所有的交易都存储在根据气价分类的池中。气价越高,越有可能将交易加入下一个区块。这是矿工节点的常见设置(针对更高的报酬进行了优化)。 但是矿工可以根据自己的喜好设置自己的节点对交易进行分类(比如只挖掘气价低的交易来帮助网络)。

从上图可以看出我们的voteForCandidate交易是如何沉入矿池底部的吗?一旦所有天然气价格高的交易都被挖掘出来并包含在区块中,矿商就会挖掘我们的交易。

需要注意的另一点是,矿池可以容纳的事务数量是有限的。比如一个众筹活动如火如荼或者一个非常流行的分布式应用(比如加密猫)诞生。人们提交了天然气价格高的交易,希望矿工将是第一个选择他们的交易。如果气价高的交易填满了矿池,气价低的交易就会被放弃。我们的候选人尼克暂时得不到任何选票。在这种情况下,我们甚至不得不重播我们的交易。

另一个可以让你的交易在矿池中上升的技巧是重新提交你的交易,提高汽油价格并保持nonce值不变。这样,当矿工接收到新的交易时,具有更高气价的新交易将覆盖先前的交易。如果nonce值被更改,重新提交的事务将被视为不同的事务(最后,将为Nick保留两票)。这里推荐一篇好文章(编者注:中文翻译见文末超链接《科普 | 释放阻塞的以太坊交易》),作者Jim McDonald做了深入讲解。

6。Miner节点找到一个有效的块,并将其广播到网络2022蓑衣网小编

Miner最终选择了我们的事务,并将其与其他事务一起包含在该块中。矿工只能选择一定的交易量来加块,因为以太坊设置了单块气上限。换句话说,交易的所有气体上限的总数不能超过整体气体上限。你可以看看ethstats.net目前的汽油上限。

一旦矿工选择将事务包括在块中,这些事务将被验证并包括在待定块中,并且工作量认证将开始。挖掘器节点(通过解决工作负载证明问题)将最终找到一个有效块,并将该块添加到区块链。正如通过您的本地节点广播的原始事务将被其他节点接收一样,矿工节点也将向其他节点广播这个有效块。

7。本地节点接收/同步新数据块

。最终,您的本地节点将接收这个新数据块,并同步区块链的本地副本。一旦接收到这个新块,本地节点将执行该块中的所有事务。

如果您使用truffle执行您的交易,truffle将不断测试区块链进行确认。一旦发现事务被确认,它将执行then()块中的代码,并打印控制台日志函数(我们的每个示例)。

二。使用元掩码而不是本地节点

如果您安装了元掩码浏览器插件,您可以在浏览器中管理您的帐户。该密钥将只存储在您的浏览器中,因此您是唯一有权访问您的帐户和私钥的人。当您在浏览器上执行事务时,插件会将您的函数调用转换为原始事务,并用您的私钥对事务进行签名。Metamask运行自己的节点,并使用它们来广播您的事务(Metamask使用由Infura操作的节点)。这样就不用自己跑以太坊节点了。科普:以太坊交易的生命周期?三。离线签名

如果你不喜欢使用插件,或者担心你的本地geth节点可能被破坏(篡改),你该怎么办?有一个安全的方法可以解决这个问题。

有没有发现,前两步根本不需要人脉。如果想保证自己的交易永远不被篡改,可以使用没有联网的电脑,将这个函数调用转换成原交易,用自己的私钥对交易进行签名。之后,您可以复制签名的事务字符串,并使用联网的计算机将其广播到网络。您可以使用诸如Etherscan和Infura之类的服务向网络广播您的签名交易。

另一个安全策略是使用硬件钱包,如Ledger或Trezor。 这种钱包存储了你的私钥,签署交易的密钥已经被编程到硬件本身中。他们需要联网的唯一原因是发布你签署的交易。

以上是科普的生命周期:以太坊交易?更多关于以太坊的信息,请关注coir.com的其他相关文章!

2022科普:以太坊交易的生命周期- | 分享给朋友: