Corda 现金流入测试的Vault查询不工作
在流测试中发出一些现金-流返回事务,输出显示正确的现金状态。但是,当我在vault中查询现金状态时,不会返回任何内容。我错过什么了吗 IssueTokensFlowCorda 现金流入测试的Vault查询不工作,corda,Corda,在流测试中发出一些现金-流返回事务,输出显示正确的现金状态。但是,当我在vault中查询现金状态时,不会返回任何内容。我错过什么了吗 IssueTokensFlow @StartableByRPC public class IssueTokensFlow extends FlowLogic<SignedTransaction> { private static Double amount; public IssueTokensFlow(double amount) {
@StartableByRPC
public class IssueTokensFlow extends FlowLogic<SignedTransaction> {
private static Double amount;
public IssueTokensFlow(double amount) {
this.amount = amount;
}
@Suspendable
@Override
public SignedTransaction call() throws FlowException {
// We retrieve the notary identity from the network map.
final Party notary = getServiceHub().getNetworkMapCache().getNotaryIdentities().get(0);
// Issue cash tokens equal to transfer amount
AbstractCashFlow.Result cashIssueResult = subFlow(new CashIssueFlow(
Currencies.DOLLARS(amount), OpaqueBytes.of(Byte.parseByte("1")), notary)
);
return cashIssueResult.getStx();
} }
@StartableByRPC
公共类IssueTokensFlow扩展了FlowLogic{
私人静态双倍金额;
公开发行资金流动(双倍金额){
这个。金额=金额;
}
@暂停
@凌驾
public SignedTransaction调用()引发流异常{
//我们从网络地图中检索公证人身份。
最终参与方公证人=getServiceHub().getNetworkMapCache().getNotaryIdentities().get(0);
//发行等于转账金额的现金代币
AbstractCashFlow.Result cashIssueResult=子流(新的CashIssueFlow(
货币.美元(金额),OpaqueBytes.of(Byte.parseByte(“1”)),公证人)
);
返回cashfissueresult.getStx();
} }
发布肯流测试
@Test
public void testIssueCash() throws Exception {
IssueTokensFlow flow =
new IssueTokensFlow(100.00);
SignedTransaction transaction = a.startFlow(flow).get();
network.waitQuiescent();
Cash.State state = (Cash.State) transaction.getTx().getOutputStates().get(0);
assertEquals(state.getOwner(), chooseIdentity(a.getInfo()));
assertEquals(state.getAmount().getQuantity(), Currencies.DOLLARS(100.00).getQuantity());
// Above assertions pass
QueryCriteria.VaultQueryCriteria criteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL);
Vault.Page<ContractState> results = a.getServices().getVaultService().queryBy(Cash.State.class, criteria);
assertTrue(results.getStates().size() > 0);
// ^ This assertion fails
}
@测试
public void testIssueCash()引发异常{
IssueTokens流量=
新发行的Etokensflow(100.00);
SignedTransaction事务=a.startFlow(flow).get();
network.waitquisite();
Cash.State State=(Cash.State)transaction.getTx().getOutputStates().get(0);
assertEquals(state.getOwner(),chooseIdentity(a.getInfo());
资产质量(state.getAmount().getQuantity(),Currencies.DOLLARS(100.00).getQuantity());
//上述断言是正确的
QueryCriteria.VaultQueryCriteria条件=新建QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL);
Vault.Page results=a.getServices().getVaultService().queryBy(Cash.State.class,条件);
assertTrue(results.getStates().size()>0);
//^此断言失败
}
在Corda 3中,当您作为测试的一部分查询节点的数据库时(例如,从节点的vault中提取信息),必须将查询封装在数据库事务中,如下所示:
node.transaction(tx -> {
// Perform query here.
}
因此,您的测试将成为:
@Test
public void testIssueCash() throws Exception {
IssueTokensFlow2 flow = new IssueTokensFlow2(100.00);
SignedTransaction transaction = a.startFlow(flow).get();
network.waitQuiescent();
Cash.State state = (Cash.State) transaction.getTx().getOutputStates().get(0);
assertEquals(state.getOwner(), chooseIdentity(a.getInfo()));
assertEquals(state.getAmount().getQuantity(), Currencies.DOLLARS(100.00).getQuantity());
// Above assertions pass
QueryCriteria.VaultQueryCriteria criteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL);
a.transaction(() -> {
Vault.Page<ContractState> results = a.getServices().getVaultService().queryBy(Cash.State.class, criteria);
assertTrue(results.getStates().size() > 0);
// ^ This assertion doesn't fail :)
return null;
});
}
@测试
public void testIssueCash()引发异常{
IssueTokensFlow2流量=新的IssueTokensFlow2(100.00);
SignedTransaction事务=a.startFlow(flow).get();
network.waitquisite();
Cash.State State=(Cash.State)transaction.getTx().getOutputStates().get(0);
assertEquals(state.getOwner(),chooseIdentity(a.getInfo());
资产质量(state.getAmount().getQuantity(),Currencies.DOLLARS(100.00).getQuantity());
//上述断言是正确的
QueryCriteria.VaultQueryCriteria条件=新建QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL);
a、 交易(()->{
Vault.Page results=a.getServices().getVaultService().queryBy(Cash.State.class,条件);
assertTrue(results.getStates().size()>0);
//^此断言未失败:)
返回null;
});
}