Chia区块链现在变得很忙碌!但不用担心 – 网络将继续按设计运行。费用市场正在兴起,展示了 Chia 区块链采用、活动和使用的积极趋势。Chia网络非常强大——即使内存池已满,区块也会继续以相同的速率生成。如果您希望在网络繁忙时快速进行交易,则需要包含一笔费用,该费用将直接支付给创建包含您交易的区块的农民。
本文将分为四个部分:
-
Chia 的 Mempool – 对 mempool 的描述、它的作用以及它存在的原因 -
Chia 的费用 – 费用的描述、费用的运作方式以及费用存在的原因 -
最近的区块链活动 – 截至撰写本文时内存池的当前状态,以及这如何影响费用 - 常见问题和解决方案 – 导致交易处理速度变慢的主要问题以及如何解决这些问题
Chia 的内存池(Mempool)
这个话题非常有技术性,所以我们尽量长话短说:
-
内存池是一个队列,节点默认使用它来确定交易的优先级。 -
推荐采用的交易费用取决于内存池充满的程度。 - 交易费用给的越高,交易被包含在下一个区块中的可能性就越大。
网络上的每个节点都保有自己待处理交易的队列,称为内存池。当您提交新交易时,您的钱包会把它发送到全节点以将其包含在其内存池中。这些节点会将所有内存池内容广播给它们的每个对等节点,而每个对等点又将这些项目广播到它们的对等点,依此类推。因此,在您提交交易后的几秒钟内,它将广播到网络上的每个节点。
当节点生成一个区块的时候,内存池会向节点推荐要包含在这个区块中的交易列表。该列表并非 Chia 共识机制的一部分——每个节点都可以忽略它。然而,默认情况下,节点会在区块中打包处于列表前面的交易——那些将带来最高奖励的交易。区块链费用直接发送给创建该区块的农民,因此默认情况下,农民有动力首先打包价值最高的交易行为。
大多数耕种软件都使用标准的农民内存池默认大小。有几点需要注意:
-
在 2.1.3 及更早版本中,默认内存池大小为 50 个区块。 -
从版本 2.1.4 开始,默认内存池大小将为 10 个区块。我们选择新的大小的原因是为了让内存池在允许大多数交易打包进入“待处理”状态时,足够大;同时,在节点处理验证和优先级的逻辑之间时,足够小,以保持平衡。 -
内存池的大小基于完整区块,其最大 CLVM 成本为 110 亿。目前,区块大小受到限制器的限制,是其最大时的50%;当此限制器保持不变时,实际内存池大小是默认大小的两倍。
您可以在Chia的数据仪表板 dashboard.chia.net 上检查内存池的状态,并可以在 download.chia.net 下载2.1.4
Chia的费用(Fee)
每当您向内存池提交交易(例如,将 XCH 发送到另一个钱包或转移 NFT)时,您都可以选择包含一笔交易费用。推荐的费用高低取决于多种因素,例如交易的 CLVM 成本,以及当前内存池的充满情况。
CLVM成本
当硬币(Coin)被花费时,它的谜题(组成硬币的 CLVM 程序)就会运行,同时还会运行谜题的解决方案和可选的数字签名。谜题及其解决方案有多种大小,具体取决于其功能。标准交易(用户将 XCH 发送给另一个用户)是运行起来比较简单的谜题之一,而另一方面,NFT 谜题至少要大十倍。
我们通过 CLVM“成本”来衡量谜题的复杂性,该成本大致相当于运行该谜题所需的计算能力。像花费一枚硬币并创建一枚硬币的标准交易,其 CLVM 成本约为 600 万。标准交易也可能涉及多种代币,因此它们的 CLVM 成本可能会高得多。
有了上述限制器,一个块的最大 CLVM 成本为 55 亿。这意味着一个区块可以容纳差不多 1000 笔 CLVM 成本为 600 万的交易。
当对内存池的内容进行优先级排序时,节点将按每笔 CLVM 的成本来计算交易费用,而不仅仅计算其交易手续费。假设有两笔交易被添加到内存池中:
-
标准 XCH 支出 -
CLVM成本:600万 -
打包费用:3000万mojos(每笔CLVM费用5mojo)
-
-
NFT 转账 -
CLVM成本:6700万 - 打包费用:1亿mojos(每笔CLVM费用1.5mojo)
-
在这种情况下,XCH 支出的每笔费用为 5 mojos,因此它将优先于 NFT 转账,因为NFT转账的每笔费用为 1.5 mojos。NFT 转账的打包费用较高这一事实对于它在内存池中的优先顺序而言并不重要。
当放在更广泛的背景下时,这是有道理的。对于本例中,区块中打包一次 NFT 转账的成本,可以打包大约 11 次XCH支出(编者按:6700万/600万)。换句话说,一个完整的区块,最大 CLVM 成本为 55 亿,大概能进行 1000 次类似本例中的 XCH 支出,但它只能打包 82 次 NFT 转账。这就是为什么该软件按每笔成本费用而不是仅按交易手续费来优先处理交易。
内存池内容
影响推荐交易手续费的另一个主要因素是内存池当前的繁忙程度,用以下三种场景来说明。
场景 1:内存池不忙
-
进入内存池的最低费用:零 - 打包进下一个区块中的最低费用:零
当内存池的全部内容都能打包进一个区块时,内存池被认为“不忙”。在这种情况下,使用默认内存池逻辑的节点将在构建新块时包含每一个待处理的交易。他们这样做是因为没有动力去选择其中某些交易——他们无论如何都要打包所有交易。当内存池处于这种状态时,无论您是否包含费用,您的交易都有可能被打包到下一个交易区块中。
场景 2:内存池繁忙,但未满
-
进入内存池的最低费用:零 - 打包进下一个区块的最低费用:取决于内存池的内容
当内存池包含的交易数量超过单个区块所能容纳的数量时,该内存池被视为“繁忙”。当内存池处于这种状态时,节点需要考虑要打包的交易的优先顺序了。默认情况下,所使用的逻辑是将农民的利润最大化。如果您的交易没有包含交易手续费,它将被添加到队列的末尾。如果您加了 1 mojo 的费用,您的交易将优先于零费用的交易,依此类推。
场景 3:内存池已满
-
进入内存池的最低费用:每笔CLVM成本 5 个 mojo - 打包进下一个区块的最低费用:取决于内存池的内容
最后要考虑的情况是内存池已满。在这种状态下,如果不踢出另一笔交易,则无法将新交易添加到内存池中。默认情况下,如果新交易的每笔CLVM成本费用低于 5 mojo,节点将按照与交易手续费零费用相同的优先顺序,对其进行优先级处理。这样的交易甚至可能不会进入内存池。
满足每笔CLVN成本费用 5 mojo 门槛的交易将被优先考虑;一笔或多笔优先级最低的交易将被踢出内存池,以便为新交易腾出空间。
近期区块链活动
截至撰写本文时,内存池通常已满。这意味着适用场景 3。您的交易需要每笔成本费用至少支付 5 个 mojo 的费用才能进入内存池中。
因此,基本的 XCH 支出(CLVM 成本:600 万)将需要至少 3000 万 mojos 的费用。我们的文档列出了各种其他交易类型的 CLVM 成本。
确切的成本可能很难手动计算出来。但是,Chia标准钱包包含一个费用估算器,可以提供准确的费用。只需选择适当的费用即可优先处理您的交易,如上所示。
*请注意,2.1.4 版本的费用估算器存在错误。虽然它通常会提供准确的费用(如上图所示),但有时会低估费用。如果您想更加确定您的交易将得到快速处理,您可能需要为标准 XCH 支出输入 1 亿 mojos(截至撰写本文时为 0.4 美分)的用户自选费用,或者为更复杂的支出输入 10 亿 mojos,例如涉及offer、CAT 或 NFT 的内容。有关各种类型交易的确切费用建议,请参阅我们的文档。
常见问题及解决方案
问题:交易等待很长时间
如果您的交易处于“待处理”状态超过几分钟,则它已进入内存池,但尚未到达队列的前面。如上所述,处于这种状态的交易不能保证被打包进未来的区块中。例如,费用较高的交易可能会在您的交易之前不断进入队列。
解决方案:RBF(Replace By Fee)
如果您希望您的交易获得更高的优先级,一种选择是采取费用替换(RBF)。第一步是在您的钱包中选择“删除未确认的交易”。这仅适用于本地 – 您的钱包将不再保留用于交易的代币,但您的交易仍将滞留在整个网络的内存池中。
下一步是对您的待处理交易使用 RBF。为了应用 RBF,您必须按照以下规则提交新交易:
-
至少包括原始交易中的所有代币支出。 -
支付符合以下每个标准的费用: -
新的费用必须比原来的费用至少高出一千万mojo。 -
新的每笔成本费用必须高于原交易的费用。 -
新的每笔成本费用必须至少为 5 个mojo。
-
- 包括与原始交易相同的时间锁定(如果有)。
只要您遵循这些规则中的每一条,您的新交易就会在整个网络中取代您的原始交易。
注意:我们知道这是一项高级功能。我们计划在未来的版本中让 RBF 的使用变得更加容易。
问题:INVALID_FEE_TOO_CLOSE_TO_ZERO 或 INVALID_FEE_LOW_FEE
如果您在提交交易时收到这些错误中的任何一个,则说明所包含的费用不足以进入内存池中。
解决方案:等待或重新提交
默认情况下,您的钱包将在 30 分钟后重试交易。因此,如果您只是等待,它可能会成功。但是,这并不能保证(这取决于 30 分钟后内存池的状态)。您还可以重新提交交易,并为每笔成本交易支付至少 5 个 mojo 的费用,这将使其更有可能被添加到内存池中。
问题:MEMPOOL_CONFLICT 或 DOUBLE_SPEND
这些错误通常表明至少有一项 RBF 规则未得到遵循。最常见的原因是:原始交易中至少有一枚代币支出未包含在 RBF 尝试中。当发送的资金少于 70% 时,您的钱包很可能会选择至少一个与最初选择不同的代币。
解决方案:重做RBF
如果您看到这些错误之一,您可以尝试新的 RBF 支出。但是,如果您只是再次发送相同的金额,则可能会遇到相同的问题。想象一下把手伸进一个硬币罐并拿出一把硬币。如果您将硬币放回罐子中并取出一些新硬币,那么您的第一把硬币中的至少一枚可能会从您的第二把硬币中丢失。
确保此操作有效的一种方法是将您的全部余额发送给您自己,并减去适当的费用。这就像在第二次尝试时从罐子中取出所有硬币。在这种情况下,保证您选择了所有原始硬币。
将全部余额发送给自己后,您可以重做原始交易。请务必包含足够的费用。
原创文章,作者:admin,如若转载,请注明出处:https://news.chiahub.co/202401131638271479.html