Corda在验证过程中从哪里加载附件文件?

问题描述 投票:0回答:1

当收集一个新提议的交易的签名时,Corda抛出了一个 "附件文件"。OverlappingAttachmentsException 的原因是命名空间冲突。该错误信息似乎是正确的,因为有两个附件包含了合同的相同命名空间。node_attachments 表。

net.corda.core.contracts.TransactionVerificationException$OverlappingAttachmentsException:
Multiple attachments define a file at com/foo/company/<state>/api/v2/orderdetails.class., transaction: 1C1985615C0B53F228B22B2C4F05CE039CC6C577A87E3B2FC9AA2CB00ED5FC43
        at net.corda.core.serialization.internal.AttachmentsClassLoader.checkAttachments(AttachmentsClassLoader.kt:272) ~[corda-core-4.3.jar:?]
        at net.corda.core.serialization.internal.AttachmentsClassLoader.<init>(AttachmentsClassLoader.kt:132) ~[corda-core-4.3.jar:?]
        at net.corda.core.serialization.internal.AttachmentsClassLoaderBuilder$withAttachmentsClassloaderContext$serializationContext$1.apply(AttachmentsClassLoader.kt:325) ~[corda-core-4.3.jar:?]
        at net.corda.core.serialization.internal.AttachmentsClassLoaderBuilder$withAttachmentsClassloaderContext$serializationContext$1.apply(AttachmentsClassLoader.kt:298) ~[corda-core-4.3.jar:?]
        at java.util.HashMap.computeIfAbsent(HashMap.java:1127) ~[?:1.8.0_212]
        at java.util.Collections$SynchronizedMap.computeIfAbsent(Collections.java:2672) ~[?:1.8.0_212]
        at net.corda.core.serialization.internal.AttachmentsClassLoaderBuilder.withAttachmentsClassloaderContext(AttachmentsClassLoader.kt:323) ~[corda-core-4.3.jar:?]
        at net.corda.core.serialization.internal.AttachmentsClassLoaderBuilder.withAttachmentsClassloaderContext$default(AttachmentsClassLoader.kt:319) ~[corda-core-4.3.jar:?]
        at net.corda.core.transactions.LedgerTransaction.internalPrepareVerify$core(LedgerTransaction.kt:146) ~[corda-core-4.3.jar:?]
        at net.corda.core.transactions.LedgerTransaction.verify(LedgerTransaction.kt:136) ~[corda-core-4.3.jar:?]
        at net.corda.core.flows.CollectSignaturesFlow.call(CollectSignaturesFlow.kt:103) ~[corda-core-4.3.jar:?]
        at net.corda.core.flows.CollectSignaturesFlow.call(CollectSignaturesFlow.kt:67) ~[corda-core-4.3.jar:?]

Corda在验证时从哪里加载附件文件?我的印象是 Corda 只会从部署在节点的 cordapps 中加载合同进行验证。cordapps 文件夹,而不要试图使用保存在 node_attachments 表。

如果Corda确实从节点库中加载了合同,那么是否只要部署了一个新的合同cordapp,它就应该有一个唯一的包名空间?

作为参考,这个错误发生在测试 cordapp 升级到 Corda 4.3 时。

corda
1个回答
0
投票

这原来是由Corda 3.3的合同哈希约束和Corda 4.3的新合同签名约束之间的冲突引起的。为了防止这个错误,必须在节点上禁用哈希约束。

根据文档,节点必须用这个JVM选项启动。-Dnet.corda.node.disableHashConstraints="true"

https:/docs.corda.netdocscorda-os4.3api-contract-constraints.html#hash-constrained-states-in-private-networks。

来自升级指南。"升级CorDapps以使用Corda 4签名约束,并消耗旧约束类型发布的账本上的现有状态(例如Corda 3. x发布的哈希或CZ白名单约束的状态)。"

https:/docs.corda.netdocscorda-os4.3app-upgrade-notes.html#step-9-learn-about-signature-constraints-and-jar-signing。

© www.soinside.com 2019 - 2024. All rights reserved.