首页 > 解决方案 > Corda公证防止双花,如何检查?

问题描述

我需要检查公证人如何防止 Obligation Cordapp 中的双重支出。我在 localhost 端口启动了 Web 服务器 UI 并执行了多个事务,当我检查公证人的日志时,我发现了这一点:

[警告] 2020-06-24T08:29:33,484Z [公证请求队列处理器] transactions.PersistentUniquenessProvider。- 无法公证:一个或多个输入状态或引用状态已在其他交易中用作输入状态。Conflicting state count: 1, consumption details: 7CF1BCA8EDF25F0602BBEDF8AD41FD60336F65EAC09C5326478A4CB7CD620579(0) -> StateConsumptionDetails(hashOfTransactionId=46552C5CE153712B65585A75C4D165CD4A05304564C8797ACEF317DCD925B72E, type=INPUT_STATE). 要查明此节点是否已生成任何冲突事务,您可以使用 hashLookup Corda shell 命令。[errorCode=1g4005y, moreInformationAt=https://errors.corda.net/OS/4.5-RC02/1g4005y] net.corda.core.internal.notary.NotaryInternalException:无法公证:一个或多个输入状态或引用状态已被用作其他事务中的输入状态。Conflicting state count: 1, consumption details: 7CF1BCA8EDF25F0602BBEDF8AD41FD60336F65EAC09C5326478A4CB7CD620579(0) -> StateConsumptionDetails(hashOfTransactionId=46552C5CE153712B65585A75C4D165CD4A05304564C8797ACEF317DCD925B72E, type=INPUT_STATE). 要查明此节点是否已生成任何冲突事务,您可以使用 hashLookup Corda shell 命令。

我对无效的 txId 执行了 hashLookup 并发现了这个:

hashLookup 46552C5CE153712B65585A75C4D165CD4A05304564C8797ACEF317DCD925B72E 找到一个匹配的交易,ID为:A86E3ECE4EC12A487E413E2BDAB9D88BFEBCB418FA0224189DE0C72BBBD34B12

我相信这就是公证人阻止双花的方式。但是我无法重新创建该测试。有人可以告诉我什么可能的输入交易导致了这个错误。我的意思是什么测试用例可以导致这种被公证人停止的双重支出测试?

标签: cordanotary

解决方案


公证人是一种网络服务,它通过证明对于给定交易,它尚未签署其他消耗任何提议交易的输入状态的交易来提供唯一性共识。

换句话说,公证人将跟踪交易中使用的所有输入状态(仅存储其哈希值,而不是真实状态),因此当有人试图使用这些已经花费的输入时,公证人将拒绝交易.

因此,防止双花。


推荐阅读