Corda Merkle树用于向对手隐藏州域?
Corda v3文档描述了如何在事务期间使用Merkle树来“隐藏”信息。具体来说,使用的示例是在Oracle验证事务期间对其隐藏敏感数据Corda Merkle树用于向对手隐藏州域?,corda,merkle-tree,Corda,Merkle Tree,Corda v3文档描述了如何在事务期间使用Merkle树来“隐藏”信息。具体来说,使用的示例是在Oracle验证事务期间对其隐藏敏感数据 Corda框架是否支持使用Merkle树对签名的对方节点隐藏信息?或者,当完全签名的事务连接到对方节点时,是否可以隐藏状态信息的子集?“编校”的级别是否会因交易对手节点的不同而不同,或者当完全签署的交易分发给其他方时,状态是否必须相同?在Corda中,交易是更新分类账的建议。 只有在以下情况下,才会提交交易建议书: 它不包含双倍支出 它在合同上是有效的 由
Corda框架是否支持使用Merkle树对签名的对方节点隐藏信息?或者,当完全签名的事务连接到对方节点时,是否可以隐藏状态信息的子集?“编校”的级别是否会因交易对手节点的不同而不同,或者当完全签署的交易分发给其他方时,状态是否必须相同?在Corda中,交易是更新分类账的建议。 只有在以下情况下,才会提交交易建议书:
- 它不包含双倍支出
- 它在合同上是有效的
- 由所需各方签署
这解决了在不使用过滤的情况下所描述的隐私问题,正如Cais所说,使用撕毁对交易对手隐藏部分交易的局限性在于,交易对手可能不愿意签署交易,因为他们无法准确地知道他们签署的是什么。如果其中一个被撕掉的投入物是属于他们的现金并被转移给其他人怎么办 但是,对于任何已删除的事务,您至少能够检查某个组的所有组件(输入、输出、命令、附件……)是否已删除。例如,您可以使用它来检查在签名之前是否没有从事务中删除任何输入:
@InitiatingFlow
@StartableByRPC
class Initiator(val counterparty: Party) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val notary = serviceHub.networkMapCache.notaryIdentities[0]
val txBuilder = TransactionBuilder(notary)
.addOutputState(TemplateState(), TemplateContract.ID)
.addCommand(TemplateContract.Commands.Action(), ourIdentity.owningKey)
val partlySignedTx = serviceHub.signInitialTransaction(txBuilder)
// We filter out the outputs, which are of type `TransactionState<ContractState>`.
val filteredTx = partlySignedTx.buildFilteredTransaction(Predicate {
when (it) {
is TransactionState<ContractState> -> false
else -> true
}
})
val session = initiateFlow(counterparty)
val signature = session.sendAndReceive<TransactionSignature>(filteredTx).unwrap { it }
val fullySignedTx = partlySignedTx.withAdditionalSignature(signature)
subFlow(FinalityFlow(fullySignedTx))
}
}
@InitiatedBy(Initiator::class)
class Responder(val session: FlowSession) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val filteredTx = session.receive<FilteredTransaction>().unwrap { it }
// We check that all inputs are visible before accidentally signing something away.
filteredTx.checkAllComponentsVisible(ComponentGroupEnum.INPUTS_GROUP)
val signature = serviceHub.createSignature(filteredTx)
session.send(signature)
}
}
@InitiatingFlow
@星表
类发起人(val对方:参与方):FlowLogic(){
@暂停
覆盖有趣的调用(){
val notary=serviceHub.networkMapCache.NotaryIdentity[0]
val txBuilder=TransactionBuilder(公证人)
.addOutputState(TemplateState(),TemplateContract.ID)
.addCommand(TemplateContract.Commands.Action(),ourIdentity.owningKey)
val partlySignedTx=serviceHub.signInitialTransaction(txBuilder)
//我们过滤掉“TransactionState”类型的输出。
val filteredTx=partlySignedTx.buildFilteredTransaction(谓词{
什么时候{
是TransactionState->false吗
否则->正确
}
})
val会话=发起流量(交易对手)
val signature=session.sendandereceive(filteredTx).unwrap{it}
val fullySignedTx=partlySignedTx.带有附加签名(签名)
子流(最终流(fullySignedTx))
}
}
@发起人(发起人::类)
类响应程序(val会话:FlowSession):FlowLogic(){
@暂停
覆盖有趣的调用(){
val filteredTx=session.receive().unwrap{it}
//我们检查所有输入是否可见,然后才意外地签名。
filteredTx.checkAllComponentsVisible(ComponentGroupEnum.INPUTS\u组)
val signature=serviceHub.createSignature(filteredTx)
会话发送(签名)
}
}
您仍然无法验证交易的智能合约,但至少可以确保您没有通过签名使用任何自己的输入
您可以以不同的方式使用此方法。例如,您可以检查是否仅删除了附件,其中附件可能包含不允许对方查看的机密数据