Считается ли один и тот же исходный код (в CorDapps) в разное время разными версиями?
То, что было подчеркнуто в сегодняшней дискуссии. Один и тот же CorDapp (один и тот же исходный код без разницы) был развернут как в Стороне A, так и в B. Однако CorDapp в Стороне A был скомпилирован неделю назад. Когда сторона B пыталась создать транзакцию с A, она не работает, и вы получаете исключение как net.corda.core.contracts.TransactionverificationException$ContractCOnstraintRejection@: не удалось выполнить ограничения контракта для net-corda.training.contract.IOUContract, транзакция TX хэш Это достоверное наблюдение?
Журнал выводит следующее исключение, используя IOUContract в качестве примера:net.corda.core.contracts.TransactionVerificationException$ContractConstraintRejection: Contract constraints failed for net.corda.training.contract.IOUContract, transaction: D60DD71F9D50BA7A638455B676CD394601460D937544A5697643FDD952C9FCB4
at net.corda.core.transactions.LedgerTransaction.verifyConstraints(LedgerTransaction.kt:91) ~[corda-core-1.0.0.jar:?]
at net.corda.core.transactions.LedgerTransaction.verify(LedgerTransaction.kt:67) ~[corda-core-1.0.0.jar:?]
at net.corda.node.services.transactions.InMemoryTransactionVerifierService$verify$1.invoke(InMemoryTransactionVerifierService.kt:13) ~[corda-node-1.0.0.jar:?]
at net.corda.node.services.transactions.InMemoryTransactionVerifierService$verify$1.invoke(InMemoryTransactionVerifierService.kt:10) ~[corda-node-1.0.0.jar:?]
at net.corda.core.internal.concurrent.ValueOrException$DefaultImpls.capture(CordaFutureImpl.kt:104) ~[corda-core-1.0.0.jar:?]
at net.corda.core.internal.concurrent.OpenFuture$DefaultImpls.capture(CordaFutureImpl.kt) ~[corda-core-1.0.0.jar:?]
at net.corda.core.internal.concurrent.CordaFutureImpl.capture(CordaFutureImpl.kt:116) ~[corda-core-1.0.0.jar:?]
at net.corda.core.internal.concurrent.CordaFutureImplKt$fork$$inlined$also$lambda$1.run(CordaFutureImpl.kt:22) ~[corda-core-1.0.0.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_131]
at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_131]
2 ответа
Один отсутствующий вопрос:
Был ли один и тот же контейнер для аппликации раздач на обе машины? Под этим я не подразумеваю один и тот же исходный код, распространяемый и затем компилируемый независимо, я имею в виду одну компиляцию, а затем результат этого выполнялся на обоих узлах. Прежде чем Corda достигнет стабильности проводов, любые различия в среде компиляции (независимо от того, насколько они незначительны) могут привести к ошибкам, подобным той, с которой вы столкнулись.
Как утверждает Ричард, для данного набора исходных файлов CorDapp хэш сгенерированного JAR-файла CorDapp не является детерминированным.
Одна из ключевых причин заключается в том, что JAR все еще содержит временную метку. См. https://docs.corda.net/head/cordapp-build-systems.html.