проблема при обновлении состояния корды - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь обновить состояние Corda во время выполнения. Я следовал за явным хранилищем апплетов-аппликаций в образце Gordub Corda.Создан отдельный подпроект для старого контрактного состояния и нового контрактного состояния для генерации отдельных банок.Но при этом сталкиваются с небольшими трудностями.

Как рассчитать sha256 старой банки состояния контракта, которая потребуется в переменной "legacyContractConstraint" нового контракта?(Я попытался вычислить хэш из-за пределов кода и поместил этот хэш в переменную "legacyContractConstraint". Для этого я строю подпроекты один за другим. Так что сначала он создаст старый jar контракта, а затем я вычисляю хэш старого контракта-стать вне кода и поместить этот хеш в переменную "legacyContractConstraint".)

Ошибка ниже: [ОШИБКА] 2019-06-11T11: 13: 43,632Z [Node thread-1] proxies.ExceptionSerialisingRpcOpsProxy.log- Ошибка во время вызова RPC [errorCode = y0q4pg, moreInformationAt = https://errors.corda.net/OS/4.0/y0q4pg] {actor_id = user1, actor_owning_identity = OU = HSSOPS, O = HSS-Custody, L = Лондон, C = GB, actor_store_id = NODE_CONFIG, идентификатор волокна= 10000005, идентификатор потока = 8d51b505-575d-400d-b9da-2307ee3ce065, invocation_id = 396859d3-311b-4f1c-9d83-9e8af58c9f3b, invocation_timestamp = 2019-06-11T11: 13: 43.58215, origin = c7, сеанс = user1, c7, пользователь 7d700-479f-a183-f5d9e634da1d, session_timestamp = 2019-06-11T11: 13: 39.567Z, идентификатор потока = 207}

java.lang.IllegalArgumentException: Unsupported input contract constraint SignatureAttachmentConstraint(key=EC Public Key [4b:44:7c:7b:1b:38:a6:93:bd:9a:c4:1d:8b:46:b4:6b:77:ba:f8:0e]
        X: 38d226dcd0fa574316da478aa75225e6ce18f65cbd96e60bf3c8251b1965417
        Y: 56e5dcf7ccab21b712601ed0278501f2f33d0b5fdaa4c09e62639464e4910871
)
at net.corda.core.transactions.ContractUpgradeWireTransaction$Companion.calculateUpgradedState$core(ContractUpgradeTransactions.kt:55) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.ContractUpgradeLedgerTransaction.<init>(ContractUpgradeTransactions.kt:333) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.ContractUpgradeLedgerTransaction.<init>(ContractUpgradeTransactions.kt:236) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.ContractUpgradeLedgerTransaction$Companion.create$core(ContractUpgradeTransactions.kt:270) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.ContractUpgradeWireTransaction.resolve(ContractUpgradeTransactions.kt:117) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.SignedTransaction.resolveContractUpgradeTransaction(SignedTransaction.kt:306) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.SignedTransaction.verifyContractUpgradeTransaction(SignedTransaction.kt:214) ~[corda-core-4.0.jar:?]
at net.corda.core.transactions.SignedTransaction.verify(SignedTransaction.kt:182) ~[corda-core-4.0.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.call(AbstractStateReplacementFlow.kt:65) ~[corda-core-4.0.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.call(AbstractStateReplacementFlow.kt:50) ~[corda-core-4.0.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:228) ~[corda-node-4.0.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:45) ~[corda-node-4.0.jar:?]
at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_171]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_171]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_171]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_171]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_171]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_171]
at net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:63) ~[corda-node-4.0.jar:?]

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Глядя на явные-обновления-аппликации, он проходит через этот процесс:

  1. Подключение к узлам PartyA и PartyB через RPC
  2. Выдать состояние со старым контрактом
  3. Обновите штат, чтобы использовать новый контракт
  4. Подождите десять секунд, пока обновление контракта распространится
  5. Зарегистрируйте состояние, чтобы показать, что его контракт был обновлен

Глядя на полученное вами сообщение об ошибке, оно перестает работать по адресу:

Unsupported input contract constraint SignatureAttachmentConstraint(key=EC Public Key [4b:44:7c:7b:1b:38:a6:93:bd:9a:c4:1d:8b:46:b4:6b:77:ba:f8:0e]

Эта функция проверяет, есть ли у транзакции действующие лица, подписавшие открытый ключ:

https://docs.corda.net/head/api/javadoc/net/corda/core/contracts/SignatureAttachmentConstraint.html

То, что я предполагаю, может означать, что один из узлов, которые подписали одну из транзакций, которые воспроизводятся / переиздаются, больше не доступен в сети, и, следовательно, его открытый ключ больше не действителен.

0 голосов
/ 27 июня 2019

Ссылка на эту ссылку

https://github.com/corda/corda/blob/master/docs/source/upgrading-cordapps.rst#performing-explicit-contract-and-state-upgrades

Состояния, созданные или перенесенные в ограничение подписи, не могут быть явно обновлены с помощью транзакции обновления контракта. Эта функция может быть добавлена ​​в будущей версии.

Это означает, что SignatureConstraint не поддерживает явное обновление, верно?

...