【问题标题】:CORDA: Invoke custom query on all parties involved in transactionCORDA:对参与交易的所有各方调用自定义查询
【发布时间】:2018-04-09 17:52:28
【问题描述】:

我有多个关于 Corda 的问题:

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

【问题讨论】:

    标签: java sql database corda


    【解决方案1】:
    1. 您可以在deployNodes中设置h2Port选项:

      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. 自动完成应该会自动出现,就像任何其他库一样。

    【讨论】:

    • 我们也可以定义数据库的用户名和密码吗??
    • 在主要问题中又增加了一个问题
    • 谢谢,已回答。我不相信您可以通过 deployNodes 定义数据库的用户名和密码 - 您必须在节点的 node.conf 文件中定义它。
    • 自动完成不适用于 java 中的示例项目。它适用于 kotlin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多