有关构建CordApps应用程序的设计问题

时间:2017-11-10 12:35:09

标签: corda

我是Corda的新手,让我的头脑绕过它。所以我所理解的只有重要的数据才能进入区块链。例如交换要共享的实物合同。我只应该创建合同的状态。因为这很重要,应该是不可改变的。

// From the example on CORDA site
flowProgressHandle<SignedTransaction> flowHandle = rpcOps
                    .startTrackedFlowDynamic(TestFlow.Initiator.class, iouValue, otherParty);
 //so this is  how flow would begin I'll pass the value of the otherParty and and I'll get my node information in the TestFlow.Initiator class something like this
IOUState iouState = new IOUState(iouValue, getServiceHub().getMyInfo().getLegalIdentities().get(0), otherParty);

现在 getServiceHub()。getMyInfo()。getLegalIdentities()。get(0) - &gt;这给了我自己的节点作为派对,因为IOUstate构造函数接纳了贷方和所有者。

如何获取有关所有者的更多信息?就像他的职业或爱好在哪里可以存储它来获得它?在CORDA示例中,我看到他们在这里提供了名称,将兴趣爱好和职业放在这里是没有意义的。如何解决这个问题。我想发送和接收Singed

node {
        name "O=PartyA,L=London,C=GB"
        advertisedServices = []
        p2pPort 10005
        rpcPort 10006
        webPort 10007
        cordapps = ["net.corda:corda-finance:$corda_release_version"]
    }

现在另一个问题是如何显式初始化CordaRPCOps rpcOps ???因为似乎需要开始做事。

现在,如果我想获得以下所有的合同到partyA对STATE进行查询,以便从H2 DB获得结果?我是否也不能将各方存储在与您正在共享的合同的STATE的一对多关系的区块链中?我该怎么做?

2 个答案:

答案 0 :(得分:0)

那里有几个问题......但我会回答“如何明确初始化CordaRPCOps rpcOps?” - 答案是你不能(你不应该)明确地创建一个这样的实例。如果您通过RPC接口连接到正在运行的corda节点,或者您处于Corda“Flow”状态,您将获得一个。

我猜你想要连接到一个节点并以这种方式获取一个实例 - 这是我在https://github.com/ragmondo/cordaftp/blob/3d1fd9f636d85803206cae18b522b0c4884d2453/src/main/kotlin/net/corda/cordaftp/Sender.kt#L21中的表现方式

import net.corda.client.rpc.CordaRPCClient
import net.corda.core.messaging.CordaRPCOps
import net.corda.core.utilities.NetworkHostAndPort


fun loginToCordaNode(args: Array<String>): CordaRPCOps {
    val nodeAddress = NetworkHostAndPort.parse(args[0])
    val client = CordaRPCClient(nodeAddress)
    return client.start("user1", "test").proxy
}

显然可以适当地更改user1test,但正如您所看到的,这会返回CordaRPCOps

类型的对象

答案 1 :(得分:0)

由于^ rich已经回答了有关初始化RPC操作的问题,因此我将回答另一部分。

我们最终使用了NODE_PROPERTIES表来存储与该节点有关的信息。我们在corda 3.1中做到了这一点,在最新版本的Corda中,也许还有更好的方法,对此我不太确定。

NODE_PROPERTIES表中,可以存储任何键值对,只要它们不与用于内部目的的键冲突即可。我们调整了jenkins作业,现在它将在节点分类帐上执行sql脚本,并使用完成引导后所需的适当值更新NODE_PROPERTIES。然后,您可以使用jdbc轻松读取该表,甚至可以根据需要进行更新。

另一种方法是,创建corda-service,并在其构造函数中执行您要更新的sql或使用对您而言合理的信息创建任何表。将其作为单独的cordapp并部署在任何节点上。您可以将sql脚本提取出来并放在云中的某个位置,然后根据某个键下载它,该键可能是您的节点名称,这样每个节点将使用它自己的预定义脚本。