交易 — ETH.BUILD
使用 ETH.BUILD 教育工具演示以太坊交易的工作原理。了解如何在以太坊网络上构建、签名和发送交易。
Date published: 2021年1月14日
由奥斯汀·格里菲斯制作的教程,演示了如何使用 ETH.BUILD 可视化编程工具了解以太坊交易的工作原理——涵盖交易结构、Gas 价格、签名、广播和交易池。
本文字稿是奥斯汀·格里菲斯发布的原视频文字稿 (opens in a new tab)的无障碍副本。为了提高可读性,已进行了轻微编辑。
交易费用与矿工激励 (0:00)
今天在 ETH.BUILD 上,我们将讨论交易。到目前为止,我们已经了解了这些交易是如何被打包进区块,并被矿工挖掘到链上的。我们想讨论的是,除了区块奖励之外,是什么激励矿工从交易池中取出我们的交易,将其放入区块并挖掘到链上,而不是选择池中的其他人。交易池中可能有成千上万的人都在竞价,而这种竞价就是通过这笔费用进行的。
我可以在我的交易中设置一笔费用,声明“我是 Alice,我要发送 5 个代币给 Bob,为了防止重放攻击,我的随机数是 1。”此外,无论谁挖掘这笔交易,都可以将这笔费用据为己有。基本上,Alice 在发送 5 个代币给 Bob 的同时,也向矿工支付了 5 分钱,以便将其放入链上。
以太坊交易剖析 (1:10)
以太坊上的交易是什么样的?我们不再使用“Bob”和“Alice”——我们将使用地址。价值将以 Wei 为单位,而不是以太币 (ETH)。费用也将以 Wei 为单位。
让我们深入了解一下这笔交易。我有一个导入了助记词的账户,并且已连接到以太坊主网 (Mainnet)。我还运行了一个模块来从 CoinMarketCap 获取价格数据,所以我可以看到零点一几个以太币大约折合 23 美元。
设置交易 (2:25)
我要做的是创建一笔交易,并激励矿工将其提取并放到链上。我有两个角色——Alice 和 Bob。Alice 将使用她的私钥向 Bob 发送一些价值。这里没有“发送方 (from)”地址字段,因为——请记住——我们正在使用我们的密钥对进行签名和恢复。交易被打包、签名,然后通过网络发送。没有人可以篡改它,而在另一端,有人可以恢复它并发现确实是我们签名的。“发送方”地址是推导出来的。
Gas 价格策略 (4:20)
默认情况下,Gas 价格设置为大约 4.1 Gwei——即 41 亿 Wei。但我们希望采取更具策略性的做法,看看目前链上正在发生什么。我们可以看到上一个区块有 78 笔交易,Gas 价格从大约 5 降至某个最小值。基本上,我们需要高于 5 才能被挖掘到该区块中。因此,让我们将 Gas 价格设置为 5.001——稍微高一点点。
转换为 Wei (5:20)
我们需要进行到 Wei 的转换。在以太坊上,你主要处理两种面额:以太币 (ETH),这是人们通常谈论的面额;然后是 Wei,它就像是以太币的一个极小部分。Gwei——我们用于 Gas 价格的单位——介于两者之间。这样做的原因类似于为什么我们平时不会用几分之几便士来谈论价格。
Alice 有 0.18 个以太币,我们将向 Bob 发送 0.05 个以太币。我们输入的 Gas 价格为 5 Gwei。
签名与广播 (7:02)
当 Alice 选择对交易进行签名时,它会作为一笔已签名的交易发出,可以在网络中传输。没有人可以篡改它——在另一端,有人可以推导出是 Alice 签名的,并且它包含了关于我们想要发送给谁以及支付给矿工的 Gas 的所有信息。
我们获取那笔已签名的交易,并将其插入区块链模块的发送函数中。当我点击发送时,它会给我们一个哈希——交易哈希。基本上,我把它发送到了分布式网络,他们给了我一个交易哈希作为回应。它在网络上发布,然后进入这个交易池——人们都在竞价以使他们的交易通过。
检查区块 (8:41)
我们可以向区块链查询我们的交易。果然,它已经被挖掘了。我们可以查看该区块,按 Gas 价格排序,然后找到我们自己。那是我们的交易,Gas 价格为 5.001——Alice 发送给 Bob,没有额外数据。我们在那里,大约在倒数第四或第五个位置。
随交易发送数据 (9:54)
我们能够发送价值并竞价以使我们的交易在链上得到确认。但让我们再看一件事——数据字段。我们可以随交易一起发送内容。它将采用十六进制格式。Alice 将再向 Bob 发送 6 美元,我们将附加一条消息:“hey Bob”。我们可以看到“hey Bob”被转换成了十六进制。
我们对该交易进行签名,将其发送给矿工,它进入网络,然后我们得到一个返回的哈希。我们观察它被挖掘的过程,它确实被挖掘了。当我们检查那个区块时,我们可以看到我们的交易附带了数据。
交易池与提高 Gas (12:43)
作为最后一个演示,我将一笔 Gas 价格非常低的交易放入池中——大约 1.001 Gwei。它停留在那里未被挖掘,因为我们给矿工的激励不够。我们可以看到该交易在交易池中处于待处理状态。池中有 100 到 300 笔交易,但最新被挖掘的区块显示最小 Gas 价格约为 5。
因此我们需要重新提交这笔交易——让我们将其提高到 10。这远远超过了所需的数值,但我们将使用相同的随机数和更高的 Gas 价格重新提交同一笔交易。网络会认为“同一个人,同一笔交易,愿意支付更多”。它被提取并挖掘到下一个区块中。
总结 (14:52)
我们发送了一笔交易,支付了一些 Gas 来激励矿工将其放入区块链中。我们还随交易一起发送了数据——既然我们有了这些调用数据,我们现在可以做各种非常酷的事情,稍后我们将深入探讨智能合约和许多有趣的内容。