Corda-在合约jar上启用签名会导致deployNodes任务失败

时间:2019-09-20 09:52:43

标签: corda

我已使用以下代码段启用了合同签署模块:

signing {
    enabled true
    options {
        keystore signingKey.keystore
        alias signingKey.alias
        storepass signingKey.storepass
        keypass signingKey.keypass
        storetype signingKey.storetype
    }
}

当我使用jar任务建立合同时,此方法非常有效,但是当我运行deployNodes任务时,出现以下有线异常:

Execution failed for task ':deployNodes'.
> Corda X.500 names must include an O attribute
   > Corda X.500 names must include an O attribute

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':deployNodes'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.InvalidUserCodeException: Corda X.500 names must include an O attribute
        at net.corda.plugins.Baseform.bootstrapNetwork(Baseform.kt:235)
        at net.corda.plugins.Cordform.build(Cordform.kt:68)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        ... 31 more
Caused by: java.lang.IllegalArgumentException: Corda X.500 names must include an O attribute
        at net.corda.core.identity.CordaX500Name$Companion.build(CordaX500Name.kt:88)
        at net.corda.core.identity.Party.<init>(Party.kt:33)
        at net.corda.core.internal.JarSignatureCollector.toPartiesOrderedByName(JarSignatureCollector.kt:80)
        at net.corda.core.internal.JarSignatureCollector.collectSigningParties(JarSignatureCollector.kt:35)
        at net.corda.nodeapi.internal.network.NetworkBootstrapper.isSigned(NetworkBootstrapper.kt:461)
        at net.corda.nodeapi.internal.network.NetworkBootstrapper.bootstrap(NetworkBootstrapper.kt:250)
        at net.corda.nodeapi.internal.network.NetworkBootstrapper.bootstrap$default(NetworkBootstrapper.kt:218)
        at net.corda.nodeapi.internal.network.NetworkBootstrapper.bootstrapCordform(NetworkBootstrapper.kt:198)
        at net.corda.plugins.Baseform.bootstrapNetwork(Baseform.kt:233)
        ... 46 more

我猜我的deployNodes任务中没有什么有趣的,但是无论如何,这是:

task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
    nodeDefaults {
        projectCordapp {
            deploy = false
        }
        cordapp project(':tcw-contracts-states')
        cordapp project(':tcw-cordapp')
    }
    node {
        name "O=Notary, L=London, C=GB"
        notary = [validating: false]
        p2pPort 10002
        rpcSettings {
            address("localhost:10003")
            adminAddress("localhost:10043")
        }
    }
    node {
        name "O=PartyA, L=London, C=GB"
        p2pPort 10005
        rpcSettings {
            address("localhost:10006")
            adminAddress("localhost:10046")
        }
        cordapp (project(':tcw_corda_webserver')) {
            config "braidPort=8080"
        }
        extraConfig = [
                'h2Settings.address': 'localhost:10036',
                'dataSourceProperties.dataSource.user': 'asd',
                'dataSourceProperties.dataSource.password': '123'
        ]

        rpcUsers = [[ user: "user1", "password": "test", "permissions": ["ALL"]]]
    }
    node {
        name "O=PartyB, L=New York, C=US"
        p2pPort 10008
        rpcSettings {
            address("localhost:10009")
            adminAddress("localhost:10049")
        }
        cordapp (project(':tcw_corda_webserver')) {
            config "braidPort=8081"
        }
        extraConfig = [
                'h2Settings.address': 'localhost:10039',
                'dataSourceProperties.dataSource.user': 'asd',
                'dataSourceProperties.dataSource.password': '123'
        ]

        rpcUsers = [[user: "user1", "password": "test", "permissions": ["ALL"]]]
    }
}

2 个答案:

答案 0 :(得分:1)

供以后参考,这些错误与正在使用的 JDK 相关:

使用工具安装 JDK 8.x 有效 您可以通过安装来做到这一点:

sdk install java 8.0.292-open

之前

(base) ➜  cordapp-example git:(master) ./gradlew deployNodes
> Task :contracts:jar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':contracts:jar'.
> Exception while signing contracts-1.0.jar, ensure the 'cordapp.signing.options' entry contains correct keyStore configuration, or disable signing by 'cordapp.signing.enabled false'. Run with --info or --debug option and search for 'ant:signjar' in log output. 

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.4/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 1s
4 actionable tasks: 2 executed, 2 up-to-date
(base) ➜  cordapp-example git:(master) 

之后

(base) ➜  cordapp-example git:(master) sdk install java 8.0.292-open

Downloading: java 8.0.292-open

In progress...

################################################################################################################################################################################################################### 100.0%################################################################################################################################################################################################################### 100.0%

Repackaging Java 8.0.292-open...

Done repackaging...

Installing: java 8.0.292-open
Done installing!


Setting java 8.0.292-open as default.
(base) ➜  cordapp-example git:(master) ./gradlew deployNodes         
Starting a Gradle Daemon, 1 busy and 2 stopped Daemons could not be reused, use --status for details

> Task :jar
Cordapp metadata not defined for this gradle build file. See https://docs.corda.net/head/cordapp-build-systems.html#separation-of-cordapp-contracts-flows-and-services

> Task :deployNodes
Running Cordform task
Deleting /home/shellcheff/Development/dust/DustR3/samples-kotlin/Basic/cordapp-example/build/nodes
Bootstrapping local test network in /home/shellcheff/Development/dust/DustR3/samples-kotlin/Basic/cordapp-example/build/nodes
Generating node directory for Notary
Generating node directory for PartyA
Generating node directory for PartyB
Waiting for all nodes to generate their node-info files...
Distributing all node-info files to all nodes
Loading existing network parameters... none found
Gathering notary identities
Generating contract implementations whitelist
New NetworkParameters {
      minimumPlatformVersion=8
      notaries=[NotaryInfo(identity=O=Notary, L=London, C=GB, validating=false)]
      maxMessageSize=10485760
      maxTransactionSize=524288000
      whitelistedContractImplementations {
        
      }
      eventHorizon=PT720H
      packageOwnership {
        
      }
      modifiedTime=2021-05-20T07:51:20.057Z
      epoch=1
  }
Bootstrapping complete!
Run database schema migration scripts
Run database schema migration scripts
Run database schema migration scripts

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.4/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1m 8s
14 actionable tasks: 13 executed, 1 up-to-date

严格的规则和 SDK 可能不是这个工具的前进方向,但..在这种情况下有效

享受。 快乐编码。

答案 1 :(得分:0)

类似于Sneha,我尝试在示例cordapp上启用密钥签名,并且能够在本地多次运行它而没有任何问题。

在这里看不到您的代码是我的建议。

尝试清除gradle缓存。

尝试将项目重新复制到另一个目录,并使用intellij打开项目。 (记住打开和导入项目不是同一件事)。

确保您的deployNodes任务对于此计算机上的其他项目或其他项目正确运行。

谢谢,祝你好运。