Corda-无法处理包含大量状态的事务
我们遇到了一个问题,即在收集签名和事务完成过程中,net.corda.nodeapi.internal.artemissutils将抛出一个错误: 消息超过maxMessageSize网络参数,当一个事务中的状态数较大时,maxMessageSize:[10485760] 我知道这是ArtemisMQ端的逻辑/健壮检查,因为1消息包含的字节越多,在网络传输过程中失败的机会就越多。 本主题的问题和细节更多地涉及:Corda-无法处理包含大量状态的事务,corda,Corda,我们遇到了一个问题,即在收集签名和事务完成过程中,net.corda.nodeapi.internal.artemissutils将抛出一个错误: 消息超过maxMessageSize网络参数,当一个事务中的状态数较大时,maxMessageSize:[10485760] 我知道这是ArtemisMQ端的逻辑/健壮检查,因为1消息包含的字节越多,在网络传输过程中失败的机会就越多。 本主题的问题和细节更多地涉及: 是否有人可以提供以下信息,说明在这方面的最佳方式/实践是什么 Corda API可
- 是否有人可以提供以下信息,说明在这方面的最佳方式/实践是什么 Corda API可以处理大量状态和 还有事务流吗
- 我们能不能把各州都派进来 子流,但仅在父流中完成它们
- 有没有办法在一个事务中通过 部分(块)或作为流,以防止超出限制,但 还有事务流吗
data class PaymentState(
val paymentItems: List<PaymentItem>,
override val linearId: UniqueIdentifier = UniqueIdentifier()
) : LinearState, QueryableState { ... }
data class PaymentItem(
val id: UUID = UUID.randomUUID(),
val obligationId: UUID,
val amount: Amount
) // not a state just a child
data class ObligationState(
val amount: Amount, // initial obligation amount
val availableAmount, // initially = amount, and will be reduced when be payed/settled
override val linearId: UniqueIdentifier = UniqueIdentifier()
) : LinearState, QueryableState { ... }
数据类PaymentState(
val付款项目:列表,
重写val linearId:UniqueIdentifier=UniqueIdentifier()
):LinearState,QueryableState{…}
数据类付款项目(
val id:UUID=UUID.randomUUID(),
val obligationId:UUID,
val金额:金额
)//不是一个州,只是一个孩子
数据类倾斜状态(
val金额:金额,//初始债务金额
val availableAmount,//初始=金额,付款/结算时会减少
重写val linearId:UniqueIdentifier=UniqueIdentifier()
):LinearState,QueryableState{…}
user1在一个月内创建1000个义务(不是一个操作)
user2支付1000笔债务,并希望在一次交易中完成
一个corda事务可以这样描述:
- 输入状态和参考-1000义务状态和参考(上一版本)
- 输出状态-1000个有更新货币的义务状态(必须更新的状态),1个支付状态(必须创建的状态)
data class PaymentState(
override val linearId: UniqueIdentifier = UniqueIdentifier(),
val version: Int
// no more contains items
) : LinearState, QueryableState { ... }
data class PaymentItemGroup(
val paymentStateId: UUID, // check always the head state
val paymentItems: List<PaymentItem>,
override val linearId: UniqueIdentifier = UniqueIdentifier()
) : LinearState, QueryableState { ... }
数据类PaymentState(
重写val linearId:UniqueIdentifier=UniqueIdentifier(),
val版本:Int
//不再包含任何项目
):LinearState,QueryableState{…}
数据类PaymentItemGroup(
val paymentStateId:UUID,//始终检查头状态
val付款项目:列表,
重写val linearId:UniqueIdentifier=UniqueIdentifier()
):LinearState,QueryableState{…}
我附上了描述子流顺序处理和并行处理的模式,以加速共享过程。
但是,我们仍然存在一种情况,即其中一笔交易将失败,并且只有部分实际付款反映为已支付/已结算债务。
谢谢
Alex添加Corda邮件列表中的答案: 如果您是网络的所有者,可能可以提高maxMessageSize和maxTransactionSize网络参数: maxMessageSize:通过网络发送的单个邮件允许的最大字节大小。请注意,附件是一种特殊情况,对于流式传输可能会被分段,但是,单个事务或流消息可能不会大于此值 maxTransactionSize:事务允许的最大字节大小。这是事务对象及其附件的大小
不管怎样,在这场大交易中,所有这些国家和义务都来自同一方吗?如果没有,您可能会泄露一些机密信息,因为为了验证交易,接收合作伙伴必须检查数千个州的解除依赖链。您好,Ashutosh,谢谢您的回答。这封信是在corda论坛上回复我的,答案是所有国家都有相同的政党。我的问题与网络配置无关,但与corda api有关:如何处理块中的状态,并且在发生错误时仍然能够回滚它们。