从Corda文档中,它说我们可以在Vault Extension中使用自定义架构.
但是,Vault Extension没有太多清晰度,它应该能够创建/管理与节点库数据库相关的自定义数据库架构.
我们是否要在Corda的功能发布中发布API
在闭环网络中,当各方转移资产时,与之关联的交易也将被共享。因此,另一方将了解我过去与该资产进行的交易的所有信息,尤其是在现金或证券的情况下。这实际上是一个隐私问题。同样,由于它是一个专用网络,几年后,网络中的每个人都可以基于彼此的交互来了解其他所有节点的过去交易(如果不是全部,则是大多数)。
该问题的处理方式或解决方法?您如何将隐私的这一方面与其他平台进行比较?
我们如何在corda中实现可调度状态?在我的情况下,我需要发布月度声明,那么可以使用schedulablestate吗?
Corda 对共识的介绍说"公证人提供了唯一性共识".
我们是否说过没有公证人说A有可能说服B将事务提交到涉及状态X作为输入的分类账,同时或稍后说服C提交涉及X 的不同事务分类帐?
在这种情况下,A的分类帐将与C(或B或两者的分类帐)不一致,具体取决于它选择提交的事务(如果有的话),并且A会创建一个现在不一致的情况,并且永远不会在A之间变得一致,B和C.
据推测,Corda框架试图尽可能地防止这种事情,所有这些都是关于诚实的吗?也就是说,我们正在讨论A完全颠覆自己的基础设施的情况,即不按预期使用Corda,并且在其发送给其他各方的所有消息中?
更新:这个问题最初被问到,因为我错误地认为公证人是Corda系统的可选元素.它们不是,但它们的参与对于特定交易可能是可选的,例如那些不涉及输入状态的交易(因此其本质上没有双重支出问题).
@joel在他的回答中明确指出的重要一点是,即使所有各方都相互信任,即双重花费问题也可能是一个问题,即预期不会出现恶意行为.
一旦Corda中的一方确定已达成交易的有效性共识,它就可以立即将交易提交给其自己的分类账,即它不会首先尝试与其他方达成某种额外的BFT风格共识,他们可以并且将会肯定会将交易提交给各自的分类账.
所以在上面的场景中,A可以诚实地/错误地向B和C提出两个不同的交易.B和C都会在各自的交易中达成有效共识并将它们提交给他们自己的分类账,而A只会面临双重支出问题.之后它尝试将两笔交易中的第二笔交易提交给自己的分类账.
公证人避免了这种情况(无论是否是恶意的结果).
第一次使用Kotlin源运行corDapp(corDapp-example)时,IntelliJ会引发此错误-“模块'cordapp-example中找不到错误类'com.example.NodeDriverKt'”。我在项目结构中寻找了此类,可以看到名为NodeDriver.kt的文件,其中包含函数“ main”,但看不到任何类声明。任何消除此错误的解决方案将不胜感激。IntelliJ
我从https://github.com/corda/cordapp-template-java下载cordapp模板(Java)。
每次我更改gradlew deplyNodes项目时都会失败,并显示以下错误。但是,重新启动系统后,它会自动解决。
有什么我想念的吗?
> Configure project :
Gradle now uses separate output directories for each JVM language, but this build assumes a single directory for all classes from a source set. This behaviour has been deprecated and is scheduled to be removed in Gradle 5.0
at build_d668pifueefmtb65xfqnh374z$_run_closure5.doCall(C:\Users\amit.pamecha\Documents\workspace\abcdwork\capital-coin\cordapp-template-java\build.gradle:83)
The setTestClassesDir(File) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use the setTestClassesDirs(FileCollection) method instead.
at build_d668pifueefmtb65xfqnh374z$_run_closure5.doCall(C:\Users\amit.pamecha\Documents\workspace\abcdwork\capital-coin\cordapp-template-java\build.gradle:83)
> Task :deployNodes
Bootstrapping local network in …
Run Code Online (Sandbox Code Playgroud) java.lang.IllegalStateException: Was not expecting to find existing database transaction on current strand when setting database: Thread[Test worker,5,main], net.corda.nodeapi.internal.persistence.DatabaseTransaction@3e9f2c2e
at net.corda.nodeapi.internal.persistence.CordaPersistence.<init>(CordaPersistence.kt:79)
at net.corda.node.internal.AbstractNodeKt.configureDatabase(AbstractNode.kt:900)
at net.corda.node.internal.AbstractNode.initialiseDatabasePersistence(AbstractNode.kt:668)
at net.corda.testing.node.internal.InternalMockNetwork$MockNode.initialiseDatabasePersistence(InternalMockNetwork.kt:315)
at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:208)
at net.corda.testing.node.internal.InternalMockNetwork$MockNode.start(InternalMockNetwork.kt:245)
at net.corda.testing.node.internal.InternalMockNetwork.createNodeImpl(InternalMockNetwork.kt:377)
at net.corda.testing.node.internal.InternalMockNetwork.createNode(InternalMockNetwork.kt:363)
at net.corda.testing.node.internal.InternalMockNetwork.createNode(InternalMockNetwork.kt:358)
at net.corda.testing.node.internal.InternalMockNetwork.createNotaries$node_driver(InternalMockNetwork.kt:211)
at net.corda.testing.node.internal.InternalMockNetwork.<init>(InternalMockNetwork.kt:194)
at net.corda.testing.node.internal.InternalMockNetwork.<init>(InternalMockNetwork.kt:100)
at net.corda.testing.node.MockNetwork.<init>(MockNetwork.kt:217)
at net.corda.testing.node.MockNetwork.<init>(MockNetwork.kt:211)
at com.synechron.cordapp.flows.FlowUnitTests.setup(FlowUnitTests.kt:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at …
Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习Corda。我不清楚帐本,保管库和存储服务之间的区别。我的询问是关于我经历的以下文档:
Corda技术论文(https://docs.corda.net/_static/corda-technical-whitepaper.pdf):它指出“保管库包含从分类帐中提取的,被认为与节点所有者相关的数据,并以以下形式存储:可以很容易地查询和使用。它还包含签署金库中使用状态的交易所需的私钥材料。”
Corda docs(https://docs.corda.net/key-concepts-node.html):它提到了具有两部分的持久层-库和存储服务。
查询
谁能帮我清楚地说明Corda中使用的数据库体系结构(我无法清楚地了解https://docs.corda.net/vault.html上的图)?在此图中的任何地方都看不到“存储服务”。
对比比特币和Corda,时间锁定和哈希锁定的概念可以在Corda中实现吗?
多重签名、时间锁定和哈希锁定合约的解释如下(构建块 #3、#4 和 #5): https: //bitcoinmagazine.com/articles/understand-the-lightning-network-part-building-a-双向支付通道-1464710791/
我在Corda中遇到了序列化问题。我的新代码路径不包含尚未序列化/反序列化的新类,但是会发生以下异常而爆炸。请注意,它在堆栈跟踪中不包含特定于CorDapp的类,这使得很难找出问题所在。
是否有任何关于如何开始调查此类异常的根本原因的提示/技巧?
谢谢 :-)
com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException
Serialization trace:
dataObject (co.paralleluniverse.fibers.Stack)
stack (net.corda.node.services.statemachine.FlowStateMachineImpl)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.read(CompatibleFieldSerializer.java:147)
at com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:782)
at co.paralleluniverse.io.serialization.kryo.ReplaceableObjectKryo.readObjectOrNull(ReplaceableObjectKryo.java:107)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:132)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:540)
at co.paralleluniverse.fibers.Fiber$FiberSerializer.read(Fiber.java:2137)
at co.paralleluniverse.fibers.Fiber$FiberSerializer.read(Fiber.java:2067)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
at co.paralleluniverse.io.serialization.kryo.ReplaceableObjectKryo.readClassAndObject(ReplaceableObjectKryo.java:112)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:97)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1$1.invoke(KryoSerializationScheme.kt:37)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.withContext(KryoSerializationScheme.kt:80)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.access$withContext(KryoSerializationScheme.kt:37)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme$deserialize$$inlined$use$lambda$1.execute(KryoSerializationScheme.kt:95)
at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.run(KryoPoolQueueImpl.java:61)
at net.corda.nodeapi.internal.serialization.kryo.AbstractKryoSerializationScheme.deserialize(KryoSerializationScheme.kt:94)
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:111)
at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66)
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:111)
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:86)
at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:80)
at net.corda.nodeapi.internal.serialization.SerializationFactoryImpl.deserialize(SerializationScheme.kt:111)
at net.corda.node.services.statemachine.StateMachineManagerImpl.deserializeFiber(StateMachineManagerImpl.kt:715)
at net.corda.node.services.statemachine.StateMachineManagerImpl.access$deserializeFiber(StateMachineManagerImpl.kt:63)
at net.corda.node.services.statemachine.StateMachineManagerImpl$updateCheckpoint$2.run(StateMachineManagerImpl.kt:551)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractCollection.add(AbstractCollection.java:262)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40)
at …
Run Code Online (Sandbox Code Playgroud)