在Hyperledger Composer中设计模型文件

时间:2018-07-10 19:53:47

标签: blockchain hyperledger hyperledger-composer

考虑银行场景,参与者是客户,交易是转账,可以是

  

由accountId {
标识的资产帐户       o字符串accountId
      ->客户所有者
      o双重余额
      }
      交易AccountTransfer {
      ->帐户来自
      ->帐户
       o双倍金额
     }

但是,如果持有帐户的参与者类型不同,该怎么办。就像一个只能转让(发送者),而另一个只能转让(接收者)?如何解决此问题,因为帐户不能拥有两种类型的所有者。

可以这样吗?

  

由accountId {
标识的资产帐户       o字符串accountId       o双重余额
      }
      sid标识的参与者发件人{
      ->帐户帐户       o字符串sId
      }
      参与者标识为rid {
      ->帐户帐户
      o字符串rId
      }
      交易发送{
      ->发件人发件人
      ->接收器接收器
      }

像上面那样设计模型是否合适?

1 个答案:

答案 0 :(得分:1)

是的,它应该可以工作。

为确保只有发件人可以执行转移,您可以在事务处理器中实现逻辑,如果正在调用事务的参与者不是“发件人”,则会产生异常。

模型

asset account identified by accountId{
    o String accountId
    o Double balance
}

Participant sender identified by sid{
    --> Account account
    o String sId
}

Participant receiver identified by rid{
    --> Account account
    o String rId
}

Transaction send {
    -->Sender sender
    -->Receiver receiver
}

TP

async function send(tx) {  
    if (currentParticipant.getFullyQualifiedType() !== 'org.example.sender') {
      // Throw an error as the current participant is not a sender.
      throw new Error('Current participant is not a sender');
    }

    //Other business logics
}

否则,您可以在访问控制文件中实施一条规则,该规则仅在调用交易的人是发件人的情况下才允许转帐

rule AllowSenderToTransferMoney {
    description: "Sender can transfer money"
    participant(m): "org.example.sender"
    operation: ALL
    resource(v): "org.example.account"
    transaction(tx): "org.example.send"
    action: ALLOW
}