corda - 在 Corda 中,不是参与者的节点如何将状态存储在其保险库中?
问题描述
在 Corda 中,节点仅存储它们是其中之一的participants
状态(除非状态是OwnableState
,在这种情况下,它们仅在它们是 时才存储它owner
)。
如何覆盖此行为并让节点存储他们不是参与者的状态?
解决方案
participants
节点可以选择记录它们收到的交易中的每个状态,而不是选择只记录它们是其中之一的状态。我在下面写了一个例子。您还可以在此处查看实现此模式的 Observable States CorDapp 。
发送交易
首先,拥有包含相关状态的交易的节点需要将交易发送给想要记录它但不是的交易对手participants
。下面是我们如何定义 aBrodcastTransactionFlow
来做到这一点:
@InitiatingFlow
class BroadcastTransaction(
val stx: SignedTransaction,
val counterparty: Party) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val session = initiateFlow(counterparty)
subFlow(SendTransactionFlow(session, stx))
}
}
接收交易并存储所有状态
交易对手必须注册一个记录交易中所有状态的响应流。下面是我们如何定义 aRecordTransactionAsObserver
来做到这一点:
@InitiatedBy(BroadcastTransaction::class)
class RecordTransactionAsObserver(val otherSession: FlowSession) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val flow = ReceiveTransactionFlow(
otherSideSession = otherSession,
checkSufficientSignatures = true,
// We are recording all the states,
// and not just the ones where we are participants.
statesToRecord = StatesToRecord.ALL_VISIBLE
)
subFlow(flow)
}
}
推荐阅读
- node.js - 对于产生节点子进程的 Electron 应用程序,子进程没有获得全磁盘访问权限
- python - 如何通过提供值作为条件来获取字典键
- javascript - Javascript:搜索对象数组并从对象中获取链接值
- python - Pyspark:依靠 pyspark.sql.dataframe.DataFrame 需要很长时间
- reactjs - 无法在 React 中缩放 SVG
- npm - PyCharm node.js 服务器在使用 nvm 时使用特定的 npm 版本
- java - 是否可以一次将多个文件上传到 Firebase 存储
- c - 如何在 C 中增加数组中的元素(整数)?
- javascript - 本地存储问题 > 我似乎无法完成这项工作
- javascript - 保留不同 html 页面之间的按钮完成的颜色更改