用户指南:交易和失败的交易
加密货币和 web3 的新手?
前往 MetaMask Learn 获得专为 web3 新手设计的直接学习体验。 该功能完全免费,支持多种语言,并包含模拟等多种实用工具,协助您顺利启用 MetaMask。
本文包含交易相关资源的解释和链接,以及交易失败的原因,此外还包含常见交易失败场景的链接,以及修复方法如下:
Anatomy of a blockchain transaction
谈到公共区块链网络上的“交易”,通常是指两个地址之间的交互;换句话说,就是代币(无论是否同质化),或是从一个地址“发送”到另一个地址的其他加密资产。 还有一些交易称为“内部交易”,是指智能合约之间的交互,基本上不在本文讨论范围之内。
想了解更多信息?
有关区块链网络及其一般工作原理的更多信息,请查看此处的介绍文章。如果您遇到不熟悉的词汇,可随时查询词汇表。
为了清楚起见,实际并未发生所谓的 发送。 诸如以太坊之类支持智能合约的区块链网络有许多不同的组件或功能。 包括我们所说的"计算机":即以太坊虚拟机(EVM),能够运行程序(“智能合约”)。 The backbone of the system, however, is a distributed ledger: imagine a spreadsheet that contains, on one side, every single Ethereum account address, and each address has a column for each type of crypto-asset that it holds.
举例说明。 假设 Guillaume 想给 Dolores 发送一笔交易。 Guillaume 的账户里有 1.36 个 ETH,他打算给 Dolores 发送 0.5 个 ETH。 即使在熊市中,对 Dolores 来说也是美好的一天。
Guillaume opens up his MetaMask, enters Dolores' address, configures the gas parameters that he's comfortable with paying, and hits'send'.
此时,交易进入本地临时持有状态,称为 本地内存池。 然后交易将由网络中最近的节点“拾取”;根据 Guillaume 的燃料设置,他的交易将得到优先处理(Guillaume 愿意为每单位燃料支付的费用越多,交易处理速度就越快),并传播到网络中的其他节点。 节点将验证 Guillaume 是否有 ETH 可供支出,然后实际执行“交易”:修改账本;从 Guillaume 的余额中扣除 0.5 ETH,并存入 Dolores 的账户。
“正所谓覆水难收”:ETH 本身并非在网络中移动;这不是从 Guillaume 的电脑发送电子邮件到 Dolores 的 MetaMask 收件箱或诸如此类。 Guillaume 向网络发送了一个请求,在 MetaMask 中经私钥验证,从其账户扣款并存入 Dolores 的账户,在验证过程编程到网络协议后,交易完成。
这就是交易的全部内容:即向 Ledger 提出请求,将某物从某个地址重新分配到另一个地址。
When things go wrong
出错的原因有很多。 通常,错误源于“软件的本质”:MetaMask 发生了故障,或者您试图使用的网络存在配置错误;出现连接错误。
一个常见的问题是,用户为了降低交易费用,设置了非常低的燃料限额,并且网络条件非常拥挤,以至于区块中没有空间容纳此种“廉价”交易,有时会持续很长一段时间:最终,交易“丧失时效”,用户不得不取消。
如果您已发送交易但尚未最终完成,则在 MetaMask 中显示为“待处理”。
If you sent a transaction, and it failed, the most likely cause is a lack of gas: you "ran out of gas", in other words, the transaction had a cost in gas that, when multiplied by the gas price, resulted in a total amount of the network's native currency that was greater than what you had in your account.
Info
有关燃料计算的更多信息,请在此处查阅我们的燃料指南。
发生这种情况的原因有很多,但重点在于您要执行的交易是什么。 在网络流量高峰期铸造 NFT 可能会消耗大量燃料; 如果您正在尝试一项新交易或实验交易,那么可以在测试网上尝试,之后再支付实际在线网络费用。
Fixing the problem
Key Factor #1: local or broadcast to network
在诊断交易问题时,尤其是待处理交易,您需要查看该交易是否仍在本地内存池中,还是已进入网络,因某种原因而停滞不动。 If it is just in your local mempool, the solution could be as simple as locking, and unlocking, your MetaMask (make sure you know your password and have your Secret Recovery Phrase backed up before you do). 如果交易进入了网络,解决方案或会较为复杂。
有关解决这些问题的更多信息,请参阅以下链接。
Key Factor #2: Nonce
这个词可能有几种不同的含义。 它是英文“仅用一次的数字”的缩写,在本文中,大致表示从发送地址做出第一笔交易开始的“交易编号”。 You can get yourself into real trouble if, for example, you're firing two different transactions from different instances of MetaMask with the same account address at the same time. 根据随机数,您的地址交易按顺序递增。但是,正如随机数能够导致交易停滞一样,随机数也是解除交易停滞状态的关键。
有关这项技术的更多信息,请参见此处。
Next steps
如果您有失败或待处理的交易,请咨询以下资源获取帮助。
How to send tokens from your MetaMask account
FAQs
问:我钱包中的一个账户有待处理或排队中的交易。 是否可以从同一钱包内的其他账户开始另一笔交易?
答:是的,可以。 随机数按账户计算,而非按钱包计算。