我可以使用验证注释(例如Spring、JPA或自定义注释)来验证Corda合同中的逻辑吗?

我可以使用验证注释(例如Spring、JPA或自定义注释)来验证Corda合同中的逻辑吗?,corda,Corda,我想在我的状态中添加验证注释,以避免在验证Corda事务时使用样板文件。例如,我可能希望使用一个注释来注释我的状态,该注释可防止以负值创建状态: class MyState(@Min(0) val amount: Int): ContractState { override val participants = listOf<AbstractParty>() } class MyState(@Min(0)val amount:Int):ContractState{ 覆盖va

我想在我的状态中添加验证注释,以避免在验证Corda事务时使用样板文件。例如,我可能希望使用一个注释来注释我的状态,该注释可防止以负值创建状态:

class MyState(@Min(0) val amount: Int): ContractState {
    override val participants = listOf<AbstractParty>()
}
class MyState(@Min(0)val amount:Int):ContractState{
覆盖val参与者=listOf()
}
然后,我想在契约验证期间检查这些注释,如果违反任何注释,则抛出异常


Corda是否支持在合同验证中使用现有的验证注释库?我可以提供自己的自定义验证注释吗?

注释方法将使代码更加清晰,尤其是在数据模型非常复杂的情况下

现在你有两个选择来做这件事

  • 将验证程序引擎作为正常依赖项嵌入到cordapp中,在这种情况下,您向您的成员提供实现,他们必须信任您

  • 单个成员可以将其选择的验证器引擎作为普通附件附加到事务,这将使验证器类在契约验证期间在类路径上可用。在这种情况下,交易的每个交易对手负责检查附件散列是否列在他们之前审计过的验证器白名单中

  • 然而,我们想提醒您一些相关风险,如下所列

  • 决定论。将来,Corda将在确定性JVM(DJVM)中运行契约,任何非确定性代码都将无法执行。一些可用的JSR303验证器实现可能依赖于非确定性代码。需要强调的是,一旦DJVM全面实施,现在有效的合同将来可能会停止有效。R3打算提供一个Gradle插件,它将在构建期间验证代码的确定性,这将帮助开发人员从他们的合同中消除所有非确定性库

  • 一些JSR303实现,比如Hibernate的实现,非常繁重(大约120k行代码)。将来,契约类将由事务范围的类加载器加载,也就是说,类将从头开始重新加载,以验证每个事务。由于hibernate验证器需要大约20-30秒进行自我初始化,因此它将成为性能瓶颈。可能需要重新使用Hibernate的验证器逻辑编写JSR的自定义实现,但去掉与合同上下文无关的更高级的特性

  • >P>作为一般性建议,我们鼓励您考虑将一些重举移到流,因为它们没有任何DJVM相关限制。

  • 如果使用注释,Corda仍然需要一些JSR303注释未提供的验证形式,例如事务级验证,如匹配签名人与参与者等。因此,仍需编写一些合同代码

  • 您必须为您的成员提供审核和验证所选验证实现的机制。因为这将成为他们签署的合同的一部分。如果将来发现验证器有故障,那么围绕这种情况进行讨论是值得的


  • 我们非常喜欢使用JSR303注释进行数据模型验证的想法,我们将帮助您完成实现过程,因此如果您遇到任何问题,请告诉我们

    注释方法将使代码更加清晰,尤其是在数据模型非常复杂的情况下

    现在你有两个选择来做这件事

  • 将验证程序引擎作为正常依赖项嵌入到cordapp中,在这种情况下,您向您的成员提供实现,他们必须信任您

  • 单个成员可以将其选择的验证器引擎作为普通附件附加到事务,这将使验证器类在契约验证期间在类路径上可用。在这种情况下,交易的每个交易对手负责检查附件散列是否列在他们之前审计过的验证器白名单中

  • 然而,我们想提醒您一些相关风险,如下所列

  • 决定论。将来,Corda将在确定性JVM(DJVM)中运行契约,任何非确定性代码都将无法执行。一些可用的JSR303验证器实现可能依赖于非确定性代码。需要强调的是,一旦DJVM全面实施,现在有效的合同将来可能会停止有效。R3打算提供一个Gradle插件,它将在构建期间验证代码的确定性,这将帮助开发人员从他们的合同中消除所有非确定性库

  • 一些JSR303实现,比如Hibernate的实现,非常繁重(大约120k行代码)。将来,契约类将由事务范围的类加载器加载,也就是说,类将从头开始重新加载,以验证每个事务。由于hibernate验证器需要大约20-30秒进行自我初始化,因此它将成为性能瓶颈。可能需要重新使用Hibernate的验证器逻辑编写JSR的自定义实现,但去掉与合同上下文无关的更高级的特性

  • >P>作为一般性建议,我们鼓励您考虑将一些重举移到流,因为它们没有任何DJVM相关限制。

  • 如果使用注释,Corda仍然需要一些形式的验证,而这些验证不是prov