您现在的位置:kastop>> Kas信息 Kaspa网络>>正文内容

Generator创建事务集问题

目前Generator允许创建单个事务集。在中,您要求它创建一个事务,它会返回一组网络事务。

当这种情况发生时,UTXO不会从UtxoContext中删除。只有当事务被节点发送并接受时,它们才会被删除。

如果你得到一笔交易,毫无疑问,这很简单。当您得到多个时,那么在最后一个之前的所有事务(也称为“最终”)都是“批处理”事务。批处理事务(也称为“复合”)是一种特殊事务,它有一个输出——您的更改地址。当创建一个事务数组时,它们有点像菊花链——next tx使用上一个的输出。

为了获得最佳性能,您需要迭代生成器,并为每个tx生成签名并发送此tx。它实际上并不是一个数组,而是逐步返回事务,直到生成最终的tx。

如果发生故障1)您可以暂停并重试2)放弃整个tx集

如果您放弃tx集,所有成功的事务都将简单地将(复合)UTXO转发到您的更改地址。因此,您的资金将保持不变(减去成功交易所消耗的网络费用),只是您的UTXO集合会发生变化。

例如,如果你有200个1个KAS的UTXO,并尝试发送199个KAS,每个tx使用80个UTXO限制(这取决于质量,更像标准tx的每个tx 83个UTXOs),所以留下1个KAS作为费用,它将创建3个事务:A)80个UTXOs B)80个UT C)来自A的UTXOs+来自B的UTXOs+来自原始集合的剩余39个UT。

在这个例子中,A和B可以并行处理,因为它们不相互依赖。如果在C之前发生故障,您的UTxO集将发生更改。如果您放弃并从头开始重新创建所有内容,那么您将拥有41个UTXO(1+1+39)。所以现在,如果您重新创建,您将只有1个事务。

如果您想使用Generator创建多个事务(多个事务集),而不提交它们,目前是不可能的。

例如,如果你有1个100 KAS的UTXO,并且你想发送2个每个50的事务,你不能这样做,因为你只有一个输入…

如果你真的想这样做,你可以做一个事务,它有两个输出到不同的地址(50个用于a,50个用于B)。但这将是一个单独的tx。否则你必须发送50,取零钱,然后发送零钱。

默认情况下,Generator将UtxoContext作为UTXO条目的源。UtxoContext监视UTXO事件,并在发布事务时更新其UTXO集)。

Generator还可以接受UTXO条目的常规数组。(其也可以从UtxoContext获得),但是由于上述对分裂的需要,UTXO的手动管理可能是复杂的。


示例:

let generator = new Generator({

                entries: context,

                outputs: [{ address: destAddress, amount: kasAmount }],

                priorityFee: 1000,

                changeAddress: sourceAddress,

            });


            let pending;

            while (pending = await generator.next()) {

                globalSenderCheck = true

                await pending.sign([privateKey]);

                txid = await pending.submit(rpc);

                //    console.log("txid:", txid);

                start = new Date()

            }


(PendingTransaction.submit()用于处理更改检测。如果您处理一个挂起的事务,然后执行rpc.submitTransaction(tx);它不会被视为内部,也不会将返回的UTXO检测为更改。


感动 同情 无聊 愤怒 搞笑 难过 高兴 路过
【字体: 】【收藏】【打印文章】 【 打赏 】 【查看评论

相关文章

    没有相关内容