考虑银行场景,参与者是客户,交易是转账,可以是
由accountId {
标识的资产帐户 o字符串accountId
->客户所有者
o双重余额
}
交易AccountTransfer {
->帐户来自
->帐户
o双倍金额
}
但是,如果持有帐户的参与者类型不同,该怎么办。就像一个只能转让(发送者),而另一个只能转让(接收者)?如何解决此问题,因为帐户不能拥有两种类型的所有者。
可以这样吗?
由accountId {
标识的资产帐户 o字符串accountId o双重余额
}
sid标识的参与者发件人{
->帐户帐户 o字符串sId
}
参与者标识为rid {
->帐户帐户
o字符串rId
}
交易发送{
->发件人发件人
->接收器接收器
}
像上面那样设计模型是否合适?
答案 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
}