通过节点资源管理器连接到 cordatestnet 的问题
Posted
技术标签:
【中文标题】通过节点资源管理器连接到 cordatestnet 的问题【英文标题】:Issue in connecting to cordatestnet via node explorer 【发布时间】:2019-04-25 17:32:13 【问题描述】:我通过以下链接在 azure 市场中使用 corda 开源 3.2:https://docs.corda.net/head/testnet-explorer-corda.html。我可以通过节点资源管理器连接到corda testnet并进行交易(使用文档中的corda-finance jar)。但我尝试将 cordapp-example jar 复制到天蓝色机器中的 /opt/corda/cordapps/ 文件夹,但无法连接到 corda 测试网(错误与财务 cordapp 有关)。那么,是不是无法使用我们定制的cordapp连接到corda testnet,还是我错过了任何需要遵循的步骤?
我收到以下错误:
net.corda.client.rpc.RPCException: net.corda.finance.flows.CashConfigDataFlow 在 net.corda.client.rpc.internal.RPCClientProxyHandler.invoke(RPCClientProxyHandler.kt:238) 在 com.sun.proxy.$Proxy27.startFlowDynamic(未知来源) net.corda.explorer.model.IssuerModel$cashAppConfiguration$1.invoke(IssuerModel.kt:27) 在 net.corda.explorer.model.IssuerModel$cashAppConfiguration$1.invoke(IssuerModel.kt:13) 在 net.corda.client.jfx.utils.ObservableUtilities$sam$Function$24de0b22.apply(ObservableUtilities.kt) 在 org.fxmisc.easybind.EasyBind$2.computeValue(EasyBind.java:70) 在 javafx.beans.binding.ObjectBinding.get(ObjectBinding.java:153) 在 javafx.beans.binding.ObjectExpression.getValue(ObjectExpression.java:50) 在 org.fxmisc.easybind.EasyBind$2.computeValue(EasyBind.java:70) 在 javafx.beans.binding.ObjectBinding.get(ObjectBinding.java:153) 在 javafx.beans.binding.ObjectExpression.getValue(ObjectExpression.java:50) 在 net.corda.client.jfx.utils.ChosenList.rechoose(ChosenList.kt:45) 在 net.corda.client.jfx.utils.ChosenList.access$rechoose(ChosenList.kt:23) 在 net.corda.client.jfx.utils.ChosenList$1.invalidated(ChosenList.kt:34) 在 com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137) 在 com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81) 在 javafx.beans.binding.ObjectBinding.invalidate(ObjectBinding.java:172) 在 com.sun.javafx.binding.BindingHelperObserver.invalidated(BindingHelperObserver.java:51) 在 com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349) 在 com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81) 在 javafx.beans.binding.ObjectBinding.invalidate(ObjectBinding.java:172) 在 com.sun.javafx.binding.BindingHelperObserver.invalidated(BindingHelperObserver.java:51) 在 com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:349) 在 com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81) 在 javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105) 在 javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112) 在 javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146) 在 net.corda.client.jfx.model.NodeMonitorModel.register(NodeMonitorModel.kt:113) 在 net.corda.explorer.views.LoginView.login(LoginView.kt:31) 在 net.corda.explorer.views.LoginView$login$$inlined$apply$lambda$1.call(LoginView.kt:42) 在 net.corda.explorer.views.LoginView$login$$inlined$apply$lambda$1.call(LoginView.kt:13) 在 javafx.scene.control.Dialog.impl_setResultAndClose(Dialog.java:1026) 在 javafx.scene.control.DialogPane.lambda$createButton$599(DialogPane.java:777) 在 com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 在 com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 在 com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 在 com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) 在 javafx.event.Event.fireEvent(Event.java:198) 在 javafx.scene.Node.fireEvent(Node.java:8413) 在 javafx.scene.control.Button.fire(Button.java:185) 在 com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) 在 com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) 在 com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) 在 com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 在 com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 在 com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 在 com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 在 com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 在 com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 在 com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 在 javafx.event.Event.fireEvent(Event.java:198) 在 javafx.scene.Scene$MouseHandler.process(Scene.java:3757) 在 javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 在 javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 在 javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 在 com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) 在 com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) 在 java.security.AccessController.doPrivileged(Native Method) 在 com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) 在 com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 在 com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) 在 com.sun.glass.ui.View.handleMouseEvent(View.java:555) 在 com.sun.glass.ui.View.notifyMouse(View.java:937) 在 com.sun.glass.ui.win.WinApplication.enterNestedEventLoopImpl(Native 方法)在 com.sun.glass.ui.win.WinApplication._enterNestedEventLoop(WinApplication.java:218) 在 com.sun.glass.ui.Application.enterNestedEventLoop(Application.java:511) 在 com.sun.glass.ui.EventLoop.enter(EventLoop.java:107) 在 com.sun.javafx.tk.quantum.QuantumToolkit.enterNestedEventLoop(QuantumToolkit.java:583) 在 javafx.stage.Stage.showAndWait(Stage.java:474) 在 javafx.scene.control.HeavyweightDialog.showAndWait(HeavyweightDialog.java:162) 在 javafx.scene.control.Dialog.showAndWait(Dialog.java:341) 在 net.corda.explorer.views.LoginView.login(LoginView.kt:71) 在 net.corda.explorer.Main.start(Main.kt:66) 在 com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 在 com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 在 com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 在 java.security.AccessController.doPrivileged(Native Method) 在 com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 在 com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 在 com.sun.glass.ui.win.WinApplication.runLoop(Native Method) 在 com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 在 java.lang.Thread.run(Unknown Source) 引起: java.lang.ClassNotFoundException: net.corda.finance.flows.CashConfigDataFlow
【问题讨论】:
嗨 Neenu,你能用你收到的错误更新你的问题吗?然后我就能确定您的问题。 当您添加cordapp-example
CorDapp 时,您是否将corda-finance
CorDapp 保留在/opt/corda/cordapps/
文件夹中?
我停止了corda服务并删除了corda-finance jar,之后我添加了cordapp-example jar并重新启动了corda服务。 11 月 23 日 05:06:52 cordaep3j java[10452]:加载 CorDapps:cordapp-example-0.1,corda-core-3.2-corda-RC02 11 月 23 日 05:06:52 cordaep3j java[10452]:“C8f598055-24bb”的节点-4011-9313-5895800b55f2" 启动并在 42.93 秒内注册
【参考方案1】:
您收到此错误是因为您的节点上不再安装 corda-finance
CorDapp。
添加cordapp-example
CorDapp 时,只需将corda-finance
CorDapp 保存在节点的cordapps
文件夹中即可。一个节点可以同时运行多个 CorDapp。
【讨论】:
刚才我试过了,我可以连接到testnet,但是支付等功能与cordapp-finance有关。我的疑问是,如果我们在 cordapps 文件夹中添加任何其他带有 cordapp-finance jar 的 jar 文件并连接到 testnet,为什么我们看不到其他 cordapp 功能(在本例中为 cordapp-example)? 您应该看到两者的流量。但是,如果您使用的是节点资源管理器,则仅设置为运行cordapp-finance
流。您需要创建自己的 UI/RPC 客户端来与节点交互并运行其他流程。以上是关于通过节点资源管理器连接到 cordatestnet 的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?