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检测为更改。
感动 | 同情 | 无聊 | 愤怒 | 搞笑 | 难过 | 高兴 | 路过 |
相关文章
-
没有相关内容