gpt4 book ai didi

corda - 如何限制一组节点启动流

转载 作者:行者123 更新时间:2023-12-02 08:07:43 25 4
gpt4 key购买 nike

如果我有两种参与方,例如:BankA、BankB、InsuranceA、InsuranceB。我可以限制交易仅由保险方发起吗?

所以我不希望 BankA 能够启动特定流程。

最佳答案

有多种方法可以让您阻止节点启动某些流:

  • 您只能在保险公司节点上安装定义保险公司特定流程的 CorDapp,而不能在银行节点上安装

    • 您甚至可以只向保险公司节点提供包含保险公司流量的 CorDapp JAR
  • 正如 Kid101 所说,您可以限制节点的 RPC 权限,仅允许保险公司节点的 RPC 用户启动相关流程。例如:

    rpcUsers=[
    {
    username=exampleUser
    password=examplePass
    permissions=[
    "StartFlow.net.corda.flows.ExampleFlow1",
    "StartFlow.net.corda.flows.ExampleFlow2"
    ]
    }
    ...
    ]

这两种方法依赖于节点之间的信任。没有什么可以阻止银行节点之一获取包含保险公司流程的 CorDapp 并授予自己启动它的 RPC 权限。

如果节点不信任(您应该假设它们处于 DLT 世界中),您应该采取以下方法之一:

  • 您可以在响应程序流程中执行检查。例如,如果您有流对 IssueInsurancePolicyFlow/IssueInsurancePolicyFlowResponder,则可以在 IssueInsurancePolicyFlowResponder 中添加检查,以确保 IssueInsurancePolicyFlowResponder 的发起者>IssueInsurancePolicyFlow 是一个保险公司节点。

    伪代码:

    if (counterpartySession.counterparty !in insurerNodeList) {
    throw IllegalStateException("Flow must be run by an insurer node.")
    }

    在这里,由您决定如何检索有效保险公司节点列表。例如,它可以从响应者节点的数据库中读取。

    请注意,此方法仅在启动者(除了公证人)之外还有必需的签名者时才有效。否则,无法强制不诚实的银行节点向诚实的交易对手发送消息以调用响应者流程(以及包含的检查)。

    另请注意,此检查应放置在响应程序流中,因为发起程序无法修改在响应程序端运行的代码。如果支票被放置在发起者流中,银行节点可以创建自己的发起流并保留此支票

  • 您可以在契约(Contract)本身内执行检查。例如:

    override fun verify(tx: LedgerTransaction) {
    ...

    val dealStateOutput = tx.outputsOfType<DealState>().single()
    if (dealStateOutput.insurer !in approvedInsurers)
    throw IllegalArgumentException("Unapproved insurer.")

    ...
    }

    这种方法的困难在于将批准的保险公司名单纳入契约(Contract)。您可以对其进行硬编码,但它可能会随着时间的推移而发生变化,迫使您升级合约。一种替代方案是包含一个预言机签名的命令,指示给定的保险公司已获得批准,并检查该保险公司与输出状态上的保险公司是否匹配。

关于corda - 如何限制一组节点启动流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com