Add delivered amount to GetAccountTransactionHistory responses

This commit is contained in:
CJ Cobb
2020-05-01 20:25:54 -07:00
committed by manojsdoshi
parent 8f984042f4
commit 16f79d160a
3 changed files with 91 additions and 24 deletions

View File

@@ -373,19 +373,21 @@ populateProtoResponse(
closeTime->time_since_epoch().count());
if (txnMeta)
{
if (!txnMeta->hasDeliveredAmount())
RPC::convert(*txnProto->mutable_meta(), txnMeta);
if (!txnProto->meta().has_delivered_amount())
{
std::optional<STAmount> amount = getDeliveredAmount(
if (auto amt = getDeliveredAmount(
context,
txn->getSTransaction(),
*txnMeta,
txn->getLedger());
if (amount)
txn->getLedger()))
{
txnMeta->setDeliveredAmount(*amount);
RPC::convert(
*txnProto->mutable_meta()
->mutable_delivered_amount(),
*amt);
}
}
RPC::convert(*txnProto->mutable_meta(), txnMeta);
}
}
}

View File

@@ -1567,6 +1567,9 @@ convert(org::xrpl::rpc::v1::Meta& to, std::shared_ptr<TxMeta> const& from)
to.mutable_transaction_result()->set_result(
transToken(from->getResultTER()));
if (from->hasDeliveredAmount())
convert(*to.mutable_delivered_amount(), from->getDeliveredAmount());
STArray& nodes = from->getNodes();
for (auto it = nodes.begin(); it != nodes.end(); ++it)
{

View File

@@ -505,6 +505,25 @@ class Tx_test : public beast::unit_test::suite
}
};
class GrpcAccountTxClient : public GRPCTestClientBase
{
public:
org::xrpl::rpc::v1::GetAccountTransactionHistoryRequest request;
org::xrpl::rpc::v1::GetAccountTransactionHistoryResponse reply;
explicit GrpcAccountTxClient(std::string const& port)
: GRPCTestClientBase(port)
{
}
void
AccountTx()
{
status =
stub_->GetAccountTransactionHistory(&context, request, &reply);
}
};
void
testTxGrpc()
{
@@ -674,13 +693,15 @@ class Tx_test : public beast::unit_test::suite
cmpPaymentTx(result.second.transaction(), tx);
}
if (ledger && !b)
{
if (!ledger || b)
continue;
auto rawMeta = ledger->txRead(id).second;
if (rawMeta)
{
auto txMeta = std::make_shared<TxMeta>(
id, ledger->seq(), *rawMeta);
if (!rawMeta)
continue;
auto txMeta =
std::make_shared<TxMeta>(id, ledger->seq(), *rawMeta);
cmpMeta(result.second.meta(), txMeta);
cmpDeliveredAmount(
@@ -688,8 +709,49 @@ class Tx_test : public beast::unit_test::suite
result.second.transaction(),
txMeta,
tx);
auto grpcAccountTx = [&grpcPort](
uint256 const& id,
bool binary,
AccountID const& account)
-> std::
pair<bool, org::xrpl::rpc::v1::GetTransactionResponse> {
GrpcAccountTxClient client(grpcPort);
client.request.set_binary(binary);
client.request.mutable_account()->set_address(
toBase58(account));
client.AccountTx();
org::xrpl::rpc::v1::GetTransactionResponse res;
for (auto const& tx : client.reply.transactions())
{
if (uint256::fromVoid(tx.hash().data()) == id)
{
return {client.status.ok(), tx};
}
}
return {false, res};
};
// Compare result to result from account_tx
auto mentioned = tx->getMentionedAccounts();
if (!BEAST_EXPECT(mentioned.size()))
continue;
auto account = *mentioned.begin();
auto const accountTxResult = grpcAccountTx(id, b, account);
if (!BEAST_EXPECT(accountTxResult.first))
continue;
cmpPaymentTx(accountTxResult.second.transaction(), tx);
cmpMeta(accountTxResult.second.meta(), txMeta);
cmpDeliveredAmount(
accountTxResult.second.meta(),
accountTxResult.second.transaction(),
txMeta,
tx);
}
index++;
}