由于Corda中的非验证公证人未对事务执行输入/输出状态验证,因此公证服务如何知道允许事务发起者使用特定输入状态?
例如,在这个简单的现金例子中:
State0{} -issueCashTX-> State1{owner:issuer, amount: 1000}
-transferTX-> State2{owner:issuer, amount: 500}
State3{owner:CompanyA, amount: 500}
智能合约规则验证transfer
交易仅在交易发起人拥有输入状态并且输出金额总和等于输入金额总和时才有效。
[问] :非验证公证人如何知道消费State1
是正常的,因为它不知道验证规则?
答案 0 :(得分:3)
除了MohamedLEGH回答GitHub(https://github.com/corda/corda/issues/2971)讨论中的一些其他信息:
欺诈参与者可以创建任意交易并让其由非验证公证人签名,但是,公证人将存储交易创建者的身份。由于所有身份都是已知的,因此可以实施制裁。此外,还有一种机制可以提高计划并恢复此类交易。 (见https://github.com/corda/corda/blob/master/node/src/main/kotlin/net/corda/node/services/transactions/NonValidatingNotaryFlow.kt#L18)
答案 1 :(得分:1)
他不知道State1没问题,但他知道输入是否已经在另一个交易中使用过。发送给公证人的交易已经由所有同行签署,因此交易必须是有效的,或者这意味着交易中的所有同行都在互相作弊。