Corda 我如何向合同中添加一个限制谁可以调用特定命令的要求?

Corda 我如何向合同中添加一个限制谁可以调用特定命令的要求?,corda,smartcontracts,Corda,Smartcontracts,在开发我的第一个corDapp时,我认为能够从合同级别引用事务的发起方(流启动方)可能会很有用。原因是,尽管我的合同可以由任何一方调用,但我不一定要允许任何一方调用每个命令 在我的州,我有一个你可以称之为管理员的列表。这些管理员应该是唯一能够在此列表中发出命令的管理员,如RemoveAdmin()或AddAdmin() 根据发起人的引用,我不能从合同级别拒绝该命令(我认为应该在该级别拒绝该命令,因为这只是另一个命令约束),而是必须在响应者流级别拒绝该命令 还有人认为tx.initiator字段对

在开发我的第一个corDapp时,我认为能够从合同级别引用事务的发起方(流启动方)可能会很有用。原因是,尽管我的合同可以由任何一方调用,但我不一定要允许任何一方调用每个命令

在我的州,我有一个你可以称之为管理员的列表。这些管理员应该是唯一能够在此列表中发出命令的管理员,如RemoveAdmin()或AddAdmin()

根据发起人的引用,我不能从合同级别拒绝该命令(我认为应该在该级别拒绝该命令,因为这只是另一个命令约束),而是必须在响应者流级别拒绝该命令


还有人认为tx.initiator字段对于我所描述的权限约束可能有用吗?如果没有,为什么在响应者流级别执行更好?

我认为概念上的问题是,在Corda中,事务可以协同构建-例如,如果双方交换资产,并且部分tx被传递,以便他们可以使用各自的输入填充它。因此,在概念上并不总是有提议者/发起人。所以这个概念在Corda的数据模型中并不存在

尽管如此,您可以采取三种方法:

  • 由于您不关心是谁提出了该事务,而是由管理员完成了该事务,因此您可以将未提出建议的管理员配置为仅在看到已由其他管理员签署的tx时才对其进行签名。因此,在实际投标人签字之前,任何非投标人都不会签字

  • 将事务的提议者/发起人作为状态对象的一部分,并检查该提议者/发起人是否在您的管理员列表中

  • 如果流的启动器不在管理列表中,则引发异常:

    //确保运行此流的一方已经是管理员
    if(AdminInputStateRef.state.data.participants中的Ouridenty!){
    抛出IllegalArgumentException(“此流的发起人必须是管理员。”)
    }