corda - Corda4 上的 Corda Settler
问题描述
我将 Corda-Settler 升级到 Corda 4 版本,并添加了波纹库ripple-core 和ripple-bouncycastle,以使其独立于本地安装。部署节点时,出现以下错误:
[ERROR] 2019-02-12T11:02:31,343Z [main] internal.Node.installCordaServices - Corda service com.r3.corda.finance.obligation.oracle.services.XrpOracleService failed to instantiate. Reason was: No configuration setting found for key 'nodes' [errorCode=n3sk62, moreInformationAt=https://errors.corda.net/OS/4.0-RC03/n3sk62]
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'nodes'
at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:152) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:170) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:184) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:189) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.getList(SimpleConfig.java:258) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.getHomogeneousUnwrappedList(SimpleConfig.java:329) ~[corda.jar:?]
at com.typesafe.config.impl.SimpleConfig.getStringList(SimpleConfig.java:387) ~[corda.jar:?]
at com.r3.corda.finance.obligation.oracle.services.XrpOracleService$nodes$2.invoke(XrpOracleService.kt:22) ~[?:?]
at com.r3.corda.finance.obligation.oracle.services.XrpOracleService$nodes$2.invoke(XrpOracleService.kt:19) ~[?:?]
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) ~[kotlin-stdlib-1.2.71.jar:1.2.71-release-64 (1.2.71)]
at com.r3.corda.finance.obligation.oracle.services.XrpOracleService.getNodes(XrpOracleService.kt) ~[?:?]
at com.r3.corda.finance.obligation.oracle.services.XrpOracleService.<init>(XrpOracleService.kt:24) ~[?:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_191]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_191]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_191]
at net.corda.node.internal.AbstractNode.installCordaService(AbstractNode.kt:649) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.AbstractNode.installCordaServices(AbstractNode.kt:579) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.AbstractNode.access$installCordaServices(AbstractNode.kt:118) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.AbstractNode$start$7.invoke(AbstractNode.kt:380) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.AbstractNode$start$7.invoke(AbstractNode.kt:118) ~[corda-node-4.0-RC03.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:227) ~[corda-node-api-4.0-RC03.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:212) ~[corda-node-api-4.0-RC03.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:190) ~[corda-node-api-4.0-RC03.jar:?]
at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:196) ~[corda-node-api-4.0-RC03.jar:?]
at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:369) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.Node.start(Node.kt:419) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartup.startNode(NodeStartup.kt:180) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartupCli$runProgram$2.run(NodeStartup.kt:109) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartup$initialiseAndRun$5.invoke(NodeStartup.kt:161) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartup$initialiseAndRun$5.invoke(NodeStartup.kt:116) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartupLogging$DefaultImpls.attempt(NodeStartup.kt:445) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartup.attempt(NodeStartup.kt:116) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartup.initialiseAndRun(NodeStartup.kt:159) ~[corda-node-4.0-RC03.jar:?]
at net.corda.node.internal.NodeStartupCli.runProgram(NodeStartup.kt:107) ~[corda-node-4.0-RC03.jar:?]
at net.corda.cliutils.CordaCliWrapper.call(CordaCliWrapper.kt:184) ~[corda-tools-cliutils-4.0-RC03.jar:?]
at net.corda.cliutils.CordaCliWrapper.call(CordaCliWrapper.kt:152) ~[corda-tools-cliutils-4.0-RC03.jar:?]
at picocli.CommandLine.execute(CommandLine.java:1056) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine.access$900(CommandLine.java:142) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1246) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$RunLast.handle(CommandLine.java:1214) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine$AbstractParseResultHandler.handleParseResult(CommandLine.java:1122) ~[picocli-3.8.0.jar:3.8.0]
at picocli.CommandLine.parseWithHandlers(CommandLine.java:1405) ~[picocli-3.8.0.jar:3.8.0]
at net.corda.cliutils.CordaCliWrapperKt.start(CordaCliWrapper.kt:72) ~[corda-tools-cliutils-4.0-RC03.jar:?]
at net.corda.node.Corda.main(Corda.kt:13) ~[corda-node-4.0-RC03.jar:?]
[INFO ] 2019-02-12T11:02:31,343Z [main] internal.Node.installCordaService - Installed com.r3.corda.finance.ripple.services.XRPService Corda service
[INFO ] 2019-02-12T11:02:31,390Z [main] vault.NodeVaultService.oldStatesPresent - Checking for states in vault from a previous version
[INFO ] 2019-02-12T11:02:31,406Z [main] vault.NodeVaultService.oldStatesPresent - Finished checking for old states. Old states present: false
[INFO ] 2019-02-12T11:02:34,076Z [main] statemachine.SingleThreadedStateMachineManager.invoke - Node ready, info: NodeInfo(addresses=[localhost:10011], legalIdentitiesAndCerts=[O=Oracle, L=New York, C=US], platformVersion=4, serial=1549969092158)
[INFO ] 2019-02-12T11:02:34,716Z [main] BasicInfo.printBasicNodeInfo - Loaded 6 CorDapp(s) : Combined CorDapp: Contract CorDapp: Corda Finance Demo version 1 by vendor R3 with licence Open Source (Apache 2), Workflow CorDapp: Corda Finance Demo version 1 by vendor R3 with licence Open Source (Apache 2), Combined CorDapp: Contract CorDapp: my contract name version 1 by vendor my company with licence my licence, Workflow CorDapp: my workflow name version 1 by vendor my company with licence my licence, Combined CorDapp: Contract CorDapp: my contract name version 1 by vendor my company with licence my licence, Workflow CorDapp: my workflow name version 1 by vendor my company with licence my licence, CorDapp cordapp-contracts-states-0.1 version Unknown by Unknown with licence Unknown, CorDapp oracle-0.1 version Unknown by Unknown with licence Unknown, CorDapp ripple-0.1 version Unknown by Unknown with licence Unknown
[WARN ] 2019-02-12T11:02:34,716Z [main] internal.Node.logLoadedCorDapps - Found 3 CorDapp(s) with unknown information. They will be unable to run on Corda in the future.
[INFO ] 2019-02-12T11:02:34,747Z [Node thread-1] internal.Node.registerJmxReporter - Registering JMX reporter:
[INFO ] 2019-02-12T11:02:34,763Z [Node thread-1] internal.Node.registerJolokiaReporter - Registering Jolokia JMX reporter:
[INFO ] 2019-02-12T11:02:34,794Z [main] BasicInfo.printBasicNodeInfo - Node for "Oracle" started up and registered in 151.81 sec
[INFO ] 2019-02-12T11:02:34,794Z [main] rpc.RPCServer.start - Starting RPC server with configuration RPCServerConfiguration(rpcThreadPoolSize=4, reapInterval=PT1S, deduplicationCacheExpiry=PT24H)
我既没有触及 oracle 的构建文件,也没有触及相应的类或 xrp.conf。我很感激任何帮助!提前谢谢了!
解决方案
这是我的解决方案:在com.r3.corda.finance.obligation.oracle.services.XrpOracleService
代码的小改动是必要的,ClassLoader 的添加起到了神奇的作用
private val nodes by lazy { ConfigFactory.parseResources(javaClass.getClassLoader(), configFileName).getStringList("nodes").mapNotNull(::URI) }
+ //private val nodes by lazy { ConfigFactory.parseResources(configFileName).getStringList("nodes").mapNotNull(::URI) }
推荐阅读
- python - 丢失对列表的更新,在 for 循环中,在循环之外
- ssl - 在入口 nginx 中启用 tls 时没有“Access-Control-Allow-Origin”
- android - ExoPlayer - 如何获取默认布局的源代码?
- visual-studio-code - 在 VSCode 中为文件添加标签
- vba - 我已经读过使用工作表的代码名称是引用它的最佳方式。但是代码名称不是像全局变量一样,因此使用起来也有风险吗?
- java - Spring Boot 中是否有最佳实践来记录使用 @ConfigurationProperties 注释的属性 bean?
- android - 汽车转向/漂移检测算法
- c# - 如何使用 .Net TPL DataFlow 或响应式扩展同时处理发布到 RabbitMQ 的动态消息?
- node.js - 默恩斯塔克。如何在 React 上创建评论后立即重新加载评论
- python - 从网页中提取数据