Corda 升级状态时出现问题

Corda 升级状态时出现问题,corda,Corda,我试图在运行时升级corda state。我在corda示例github中遵循了显式cordapp升级存储库。为旧合同状态和新合同状态创建单独的子项目,以生成单独的JAR。但在这样做的过程中几乎没有面临什么挑战 如何计算新合同的“legacyContractConstraint”变量中需要的旧合同状态jar的sha256? (我试图从代码外部计算哈希值,并将该哈希值放入“legacyContractConstraint”变量中。为此,我逐个构建子项目。这样,它将首先创建旧合同jar,然后在代码外

我试图在运行时升级corda state。我在corda示例github中遵循了显式cordapp升级存储库。为旧合同状态和新合同状态创建单独的子项目,以生成单独的JAR。但在这样做的过程中几乎没有面临什么挑战

如何计算新合同的“legacyContractConstraint”变量中需要的旧合同状态jar的sha256? (我试图从代码外部计算哈希值,并将该哈希值放入“legacyContractConstraint”变量中。为此,我逐个构建子项目。这样,它将首先创建旧合同jar,然后在代码外部计算旧合同状态的哈希值,并将该哈希值放入“legacyContractConstraint”变量中。)

获取以下错误: [ERROR]2019-06-11T11:13:43632Z[Node thread-1]proxies.ExceptionSerialisingRpcOpsProxy.log-RPC调用期间出错[errorCode=y0q4pg,moreInformationAt={actor_id=user1,actor_-owning_-identity=OU=hsops,O=HSS保管,L=London,C=GB,actor_-store_-id=NODE_-CONFIG,fiber-id=10000005,flow-id=8d51b505-575d-400d-b9da-2307ee3ce065,invocation_-id=396859d3-311b-4f1c-9d83-9e8af58c9f3b,invocation_-timestamp=2019-06-11T11:13:43.582Z,origin=user1,session=54U-C715-A17D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D-D7D7D-Dtamp=2019-06-11T11:13:39.567Z,螺纹id=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:?]
java.lang.IllegalArgumentException:不支持的输入协定约束SignatureAttachmentConstraint(key=EC公钥[4b:44:7c:7b:1b:38:a6:93:bd:9a:c4:1d:8b:46:b4:6b:77:ba:f8:0e]
X:38d226dcd0fa574316da478aa75225e6ce18f65cbd96e60bf3c8251b1965417
Y:56e5dcf7ccab21b712601ed0278501f2f33d0b5fdaa4c09e62639464e4910871
)
在net.corda.core.transactions.ContractUpgradeWireTransaction$Companion.calculateUpgradedState$core(ContractUpgradeTransactions.kt:55)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.ContractUpgradeLedgerTransaction.(ContractUpgradeTransactions.kt:333)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.ContractUpgradeLedgerTransaction.(ContractUpgradeTransactions.kt:236)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.ContractUpgradeLedgerTransaction$Companion.create$core(ContractUpgradeTransactions.kt:270)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.ContractUpgradeWireTransaction.resolve(ContractUpgradeTransactions.kt:117)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.SignedTransaction.resolveContractUpgradeTransaction(SignedTransaction.kt:306)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.SignedTransaction.verifyContractUpgradeTransaction(SignedTransaction.kt:214)~[corda-core-4.0.jar:?]
在net.corda.core.transactions.SignedTransaction.verify(SignedTransaction.kt:182)~[corda-core-4.0.jar:?]
在net.corda.core.flows.AbstractStateReplacementFlow$indicator.call(AbstractStateReplacementFlow.kt:65)~[corda-core-4.0.jar:?]
在net.corda.core.flows.AbstractStateReplacementFlow$indicator.call(AbstractStateReplacementFlow.kt:50)~[corda-core-4.0.jar:?]
在net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:228)~[corda-node-4.0.jar:?]
在net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:45)~[corda-node-4.0.jar:?]
在co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092)~[quasar-core-0.7.10-jdk8.jar:0.7.10]
在co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788)~[quasar-core-0.7.10-jdk8.jar:0.7.10]
在co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100)~[quasar-core-0.7.10-jdk8.jar:0.7.10]
在co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91)~[quasar-core-0.7.10-jdk8.jar:0.7.10]
在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)~[?:1.8.0_171]
在java.util.concurrent.FutureTask.run(FutureTask.java:266)~[?:1.8.0_171]
在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)~[?:1.8.0_171]
在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)~[?:1.8.0_171]
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)~[?:1.8.0_171]
在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)~[?:1.8.0_171]
在net.corda.node.utilities.AffinityExecutor$serviceffinityExecutor$1$thread$1.run(AffinityExecutor.kt:63)~[corda-node-4.0.jar:?]

查看显式cordapp升级,它会经历以下过程:

  • 通过RPC连接到PartyA和PartyB的节点
  • 以旧合同向州政府发出通知
  • 升级状态以使用新合同
  • 等待10秒钟,以传播契约升级
  • 记录状态以显示其合同已升级
  • 查看您收到的错误消息,它在以下位置失败:

    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]
    
    该函数验证事务是否具有有效的公钥签名者:

    我猜这可能意味着签署了正在重播/重新发布的事务之一的节点在网络上不再可用,因此其公钥不再有效。

    请参阅此链接

    无法使用合同升级事务显式升级创建或迁移到签名约束的状态。此功能可能会在将来的版本中添加


    这是否意味着SignatureConstraint不支持显式升级,对吗?

    是的,这是正确的,签名约束不支持显式合同升级,实际上不需要执行这种繁琐的显式升级过程

    在使用SignatureConstraint时,您必须用新的合同jar替换旧jar。只要新jar使用与旧jar相同的密钥进行签名,升级就可以工作