Blockchain 使用corda中的帐户编写流

Blockchain 使用corda中的帐户编写流,blockchain,corda,Blockchain,Corda,我正在使用Corda的帐户。在我的代码中,新帐户正在成功创建,但在做这两件事时,我面临着困难。 1.)如何检查帐户是否实际创建并存在于节点中,意味着我们是否可以检查Corda中所有帐户的列表 2.)如何为帐户编写响应程序流,表示我的事务流工作不正常。如果我们现在开始使用accounts库,响应程序流经典代码中是否有任何更改 我的代码如下: @InitiatedBy(Proposal.class) public static class ProposalAcceptance extends Flo

我正在使用Corda的帐户。在我的代码中,新帐户正在成功创建,但在做这两件事时,我面临着困难。 1.)如何检查帐户是否实际创建并存在于节点中,意味着我们是否可以检查Corda中所有帐户的列表

2.)如何为帐户编写响应程序流,表示我的事务流工作不正常。如果我们现在开始使用accounts库,响应程序流经典代码中是否有任何更改

我的代码如下:

@InitiatedBy(Proposal.class)
public static class ProposalAcceptance extends FlowLogic<Void> {

    //private variable
    private FlowSession counterpartySession;

    //Constructor
    public ProposalAcceptance(FlowSession counterpartySession) {
        this.counterpartySession = counterpartySession;
    }

    @Suspendable
    @Override
    public Void call() throws FlowException {
        SignedTransaction signedTransaction = subFlow(new SignTransactionFlow(counterpartySession) {
            @Suspendable
            @Override
            protected void checkTransaction(SignedTransaction stx) throws FlowException {
                /*
                 * SignTransactionFlow will automatically verify the transaction and its signatures before signing it.
                 * However, just because a transaction is contractually valid doesn’t mean we necessarily want to sign.
                 * What if we don’t want to deal with the counterparty in question, or the value is too high,
                 * or we’re not happy with the transaction’s structure? checkTransaction
                 * allows us to define these additional checks. If any of these conditions are not met,
                 * we will not sign the transaction - even if the transaction and its signatures are contractually valid.
                 * ----------
                 * For this hello-world cordapp, we will not implement any aditional checks.
                 * */
            }
        });
        //Stored the transaction into data base.
        subFlow(new ReceiveFinalityFlow(counterpartySession));
        return null;
    }
}
@initialedby(Proposal.class)
公共静态类ProposalAcceptance扩展了FlowLogic{
//私有变量
私人FlowSession交易对手;
//建造师
公众提案接受(FlowSession反对党会议){
this.counterpartySession=counterpartySession;
}
@暂停
@凌驾
public Void call()引发流异常{
SignedTransaction SignedTransaction=子流(新SignTransactionFlow(交易对手会话)){
@暂停
@凌驾
受保护的无效检查事务(SignedTransaction stx)引发FlowException{
/*
*SignTransactionFlow将在签名之前自动验证事务及其签名。
*然而,仅仅因为交易在合同上是有效的,并不意味着我们一定要签署。
*如果我们不想与有问题的交易对手打交道,或者价值太高,
*或者我们对交易的结构不满意?checkTransaction
*允许我们定义这些附加检查。如果不满足其中任何条件,
*我们不会签署交易-即使交易及其签名在合同上有效。
* ----------
*对于此hello world cordapp,我们将不实施任何传统检查。
* */
}
});
//将事务存储到数据库中。
子流(新接收金融流(交易对手));
返回null;
}
}
  • 帐户内部只是类型为
    AccountInfo
    的corda状态,因此您可以查询vault以列出节点知道使用的所有帐户:

    运行vaultQuery contractStateType:com.r3.corda.lib.accounts.contracts.states.AccountInfo

  • 响应程序流中没有任何特定的更改,请确保您在启动器流中使用了正确的会话。请在此处查看示例存储库中提供的几个示例:

  • 帐户内部只是类型为
    AccountInfo
    的corda状态,因此您可以查询vault以列出节点知道使用的所有帐户:

    运行vaultQuery contractStateType:com.r3.corda.lib.accounts.contracts.states.AccountInfo

  • 响应程序流中没有任何特定的更改,请确保您在启动器流中使用了正确的会话。请在此处查看示例存储库中提供的几个示例:

    • 要检查帐户是否已创建,您需要编写流测试;了解R3工程师如何进行测试是一个很好的方法
    • 例如,您可以找到
      CreateAccount
      flow的测试场景
    • 为了获得帐户,图书馆提供了一项非常有用的服务
      KeyManagementBackedAccountService
      ,使用不同的方法获得帐户(通过
      name
      UUID
      PublicKey
      );看一看
    • 现在,关于请求帐户签名,需要了解的一件事是,不是帐户签署了交易,而是节点托管了代表帐户签署的帐户
    • 假设有3个节点(A、B和C);A启动一个流并请求10个帐户的签名(5个托管在B上,5个托管在C上)
    • 在对初始事务进行签名后,它将创建
      FlowSession
      s以收集签名
    • 由于是
      主机
      节点代表帐户签名,因此在我们的示例中,您只需要2个
      FlowSession
      s;一个是节点B(因此它代表其托管的5个帐户签名),另一个是节点C(用于其他5个帐户)的会话
    • 在响应程序流中,节点B和C将接收由发起程序签名的事务
    • 开箱即用,当一个节点收到一个事务时,它会查看所有必需的签名,如果它拥有私钥,则会查看每个必需的签名;它将提供该签名
    • 也就是说,节点B何时将接收事务;它将看到10个必需的签名,因为它拥有5个帐户(这意味着它拥有这5个帐户的私钥),所以它将自动提供5个签名
        • 要检查帐户是否已创建,您需要编写流测试;了解R3工程师如何进行测试是一个很好的方法
        • 例如,您可以找到
          CreateAccount
          flow的测试场景
        • 为了获得帐户,图书馆提供了一项非常有用的服务
          KeyManagementBackedAccountService
          ,使用不同的方法获得帐户(通过
          name
          UUID
          PublicKey
          );看一看
        • 现在,关于请求帐户签名,需要了解的一件事是,不是帐户签署了交易,而是节点托管了代表帐户签署的帐户
        • 假设有3个节点(A、B和C);A启动一个流并请求10个帐户的签名(5个托管在B上,5个托管在C上)
        • 签名后,将创建初始事务<