我想使用linearStates实现以下场景。
CoreBanking系统----- Corda(甲方)--- CordaNode(乙方)---- ERP系统Corebanking系统生成一个事务ID,并且需要为将来的合同端到端保留此事务ID。我想将此事务id用于linearstateID。
查询1:如何从外部标识符确定性地构建lineraId。这样我以后可以用它来查询valut
查询2:如何在下面给出的方案中从客户端提取此内容
updates.toBlocking().subscribe { update ->
update.produced.forEach {
logState(it)
}
查询3:一旦创建状态,应用程序如何知道并检索状态的linearid。
请您指出一个使用externalId作为线性stateID的示例,并使用此externalId在流中执行操作。
答案 0 :(得分:1)
<强>查询1:强> linearId的类型为UniqueIdentifier。如果你看一下UniqueIdentifier类,你会看到它可以通过将外部Id传递给构造函数来绑定到任何现有的外部Id。
平等和比较仅基于唯一的Id,但您可以在查询文件库时简单地引用linearId中的externalId,即linearState.linearId.externalId
<强> QUERY2 强> 看看Vault API文档,它们非常全面。
<强> QUERY3 强> linearState通常被定义为&#34;一种通过取代自身而发展的状态,所有这些都共享公共的linearId。&#34; 鉴于此,它不是关于Corda如何知道并检索状态的linearId,而是更像是 - 给定一个特定的状态,我可以使用linearId来查找状态的先前版本。
根据您的具体情况,由于您提供外部ID,您的其他应用程序将能够确定哪个ID以及哪个状态映射到特定的ID。帐户/贸易。
我们还没有使用外部ID的示例CorDapp,但我们会考虑创建一个。
欢迎您在我们周三的live streams
期间进一步讨论这个问题其他强>
创建启动器流时,可以为其提供属性,例如:
对象InvoiceFlow {
@InitiatingFlow @StartableByRPC class Initiator(val externalId: String) : FlowLogic<SignedTransaction>() {
鉴于您的流程现已通过externalId,您可以查询保险库以检索相关状态,如下所示:
val invoiceState = serviceHub.vaultService.unconsumedStates()。singleOrNull { it.state.data.linearId.externalId == externalId}
或
val invoiceState = serviceHub.vaultService.queryBy()。states.singleOrNull {it。 state.data.linearId.externalId == externalId}
然后您可以像这样调用此流程:
services.startFlow(InvoiceFlow.Initiator(外部编号 ))