Blockchain 使用corda中的帐户编写流
我正在使用Corda的帐户。在我的代码中,新帐户正在成功创建,但在做这两件事时,我面临着困难。 1.)如何检查帐户是否实际创建并存在于节点中,意味着我们是否可以检查Corda中所有帐户的列表 2.)如何为帐户编写响应程序流,表示我的事务流工作不正常。如果我们现在开始使用accounts库,响应程序流经典代码中是否有任何更改 我的代码如下:Blockchain 使用corda中的帐户编写流,blockchain,corda,Blockchain,Corda,我正在使用Corda的帐户。在我的代码中,新帐户正在成功创建,但在做这两件事时,我面临着困难。 1.)如何检查帐户是否实际创建并存在于节点中,意味着我们是否可以检查Corda中所有帐户的列表 2.)如何为帐户编写响应程序流,表示我的事务流工作不正常。如果我们现在开始使用accounts库,响应程序流经典代码中是否有任何更改 我的代码如下: @InitiatedBy(Proposal.class) public static class ProposalAcceptance extends Flo
@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工程师如何进行测试是一个很好的方法
- 例如,您可以找到
flow的测试场景CreateAccount
- 为了获得帐户,图书馆提供了一项非常有用的服务
,使用不同的方法获得帐户(通过KeyManagementBackedAccountService
、name
或UUID
);看一看PublicKey
- 现在,关于请求帐户签名,需要了解的一件事是,不是帐户签署了交易,而是节点托管了代表帐户签署的帐户
- 假设有3个节点(A、B和C);A启动一个流并请求10个帐户的签名(5个托管在B上,5个托管在C上)
- 在对初始事务进行签名后,它将创建
s以收集签名FlowSession
- 由于是
节点代表帐户签名,因此在我们的示例中,您只需要2个主机
s;一个是节点B(因此它代表其托管的5个帐户签名),另一个是节点C(用于其他5个帐户)的会话FlowSession
- 在响应程序流中,节点B和C将接收由发起程序签名的事务
- 开箱即用,当一个节点收到一个事务时,它会查看所有必需的签名,如果它拥有私钥,则会查看每个必需的签名;它将提供该签名
- 也就是说,节点B何时将接收事务;它将看到10个必需的签名,因为它拥有5个帐户(这意味着它拥有这5个帐户的私钥),所以它将自动提供5个签名
- 要检查帐户是否已创建,您需要编写流测试;了解R3工程师如何进行测试是一个很好的方法
- 例如,您可以找到
flow的测试场景CreateAccount
- 为了获得帐户,图书馆提供了一项非常有用的服务
,使用不同的方法获得帐户(通过KeyManagementBackedAccountService
、name
或UUID
);看一看PublicKey
- 现在,关于请求帐户签名,需要了解的一件事是,不是帐户签署了交易,而是节点托管了代表帐户签署的帐户
- 假设有3个节点(A、B和C);A启动一个流并请求10个帐户的签名(5个托管在B上,5个托管在C上)
- 签名后,将创建初始事务<