Corda-在合约jar上启用签名会导致部署节点任务失败



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

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"]]]
}
}

对于将来的引用,这些错误与正在使用的 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可能不是此工具的前进道路,但..在这种情况下有效

享受。 快乐编码。

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

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

尝试清除 Gradle 缓存。

尝试将项目重新复制到其他目录,并使用 IntelliJ 打开项目。 (请记住,打开和导入项目不是一回事(。

确保您的部署节点任务在此计算机上的其他项目或其他项目中正常工作。

谢谢,祝你好运。

最新更新