默克尔树,用于隐藏反派的状态领域



corda v3文档描述了交易撕裂和使用默克尔树在交易期间'隐藏'信息。具体来说,使用的示例是在验证交易期间对敏感数据隐藏敏感数据。

Corda框架是否使用Merkle树支持隐藏信息签署反派节点?或者,当完全签名的交易连接到反党节点时,状态信息的一个子集可以隐藏吗?当完全签名的事务分配给其他方时,"修订"级别可以随着反派节点而变化,或者状态必须相同?

在科达(Corda(中,交易是更新分类帐的建议。仅当以下情况下,只有:

才能提交交易建议。
  • 它不包含双重根本
  • 它在合同上是有效的
  • 它由所需的各方签署

简单的答案是,这取决于您的合同代码。您当然可以使用该框架来构建过滤交易,并将其发送给交易对手进行签名。但是,它们只有在合同上有效时才会签名。

我认为您会发现这条路线的问题,因为您本质上要求交易对手签署某些东西,而无需他们知道他们在签名,例如该交易可能包括一组隐藏的州转移其现金。

您可以查看其他加密层,并且只能与要查看敏感数据的对手共享密钥。

corda还支持使用流框架发送数据,因此您可以在交易之外分别发送敏感数据。

在您的最后一点上,一旦签署了交易,就不会在不使交易无效的情况下更改。

最后,查看Mike Hearn的这篇博客文章-https://www.corda.net/2017/06/corda-sgx-privacy-update/这解决了不使用过滤

的隐私问题所描述的隐私问题正如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)
    }
}

您仍然无法验证交易的智能合约,但是您至少可以确保您没有通过签署来消费任何自己的投入。

您可以以不同的方式使用此方法。例如,您可以检查仅附件是否已被拆除,附件可能包含不允许交易对手的秘密数据。

最新更新