CORDA:对涉及事务的所有各方调用自定义查询

时间:2017-10-28 05:43:11

标签: java sql database corda

我对Corda有多个问题:

  1. 我们可以预先定义h2配置以选择build.gradle文件吗?
  2. 我的corda网络中有一个交易,我希望根据custom fields验证某些内容,根据需要对所有3方sender触发的查询进行验证,receivernotary如何获取所有3个节点的会话?我可以使用sender
  3. 拉出getServiceHub().jdbcSession()的会话
  4. 查询自定义字段公证人的最佳建议方式是什么?如果是,那么可以使用创建子流程来完成吗?
  5. 我们有验证和非验证公证人,我们在哪里使用公证人实际验证?我们在哪里写验证码?
  6. 如何在intellij中为corda的java api启用autosuggest?

1 个答案:

答案 0 :(得分:2)

  1. 您可以在h2Port中设置deployNodes选项:

    node {
        name "O=PartyA,L=London,C=GB"
        advertisedServices = []
        p2pPort 10005
        rpcPort 10006
        webPort 10007
        h2Port 10008
        cordapps = ["net.corda:corda-finance:$corda_release_version"]
        rpcUsers = [[ user: "user1", "password": "test", "permissions": []]]
    }
    

    这是您需要的配置吗?

  2. 每个节点的数据库都是设计私有的,不能从另一个节点查询。相反,您需要作为流的一部分与其他节点进行通信,以使它们在其结束时启动响应流,以便查询自己的数据库并将结果发回。类似的东西:

    public class CollectDBDataFlow {
    @InitiatingFlow
    @StartableByRPC
    public static class Initiator extends FlowLogic<List<Object>> {
        Party counterparty;
    
        public Initiator(Party counterparty) {
            this.counterparty = counterparty;
        }
    
        @Suspendable
        @Override public List<Object> call() {
            // TODO: Implement queryMyDatabase to perform querying.
            Object myDBData = queryMyDatabase();
    
            FlowSession counterpartySession = initiateFlow(counterparty);
            Object theirDBData = counterpartySession.receive(Object.class);
    
            return ImmutableList.of(myDBData, theirDBData);
        }
    }
    
    @InitiatedBy(Initiator.class)
    public static class Responder extends FlowLogic<Void> {
        private FlowSession counterpartySession;
    
        public Responder(FlowSession counterpartySession) {
            this.counterpartySession = counterpartySession;
        }
    
        @Suspendable
        @Override
        public Void call() {
            // TODO: Implement queryMyDatabase to perform querying.
            Object myDBData = queryMyDatabase();
    
            counterpartySession.send(myDBData);
    
            return null;
        }
    }
    }
    
  3. 公证人的角色不是要查询数据,而是要防止双倍花费。你可以使用上面(2)中描述的方法在技术上做到这一点,但是不建议这样做。你想要实现什么目标?

  4. 验证逻辑写入平台。请参阅https://github.com/corda/corda/blob/release-V1/node/src/main/kotlin/net/corda/node/services/transactions/ValidatingNotaryFlow.kt

  5. 自动完成应该会自动显示,就像任何其他库一样。