Skip to content

Commit

Permalink
Add delivered amount to GetAccountTransactionHistory responses
Browse files Browse the repository at this point in the history
  • Loading branch information
cjcobb23 committed May 2, 2020
1 parent 2bf3b19 commit b0addb9
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 25 deletions.
20 changes: 11 additions & 9 deletions src/ripple/rpc/handlers/AccountTx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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(
context,
txn->getSTransaction(),
*txnMeta,
txn->getLedger());
if (amount)
if (auto amt = getDeliveredAmount(
context,
txn->getSTransaction(),
*txnMeta,
txn->getLedger()))
{
txnMeta->setDeliveredAmount(*amount);
RPC::convert(
*txnProto->mutable_meta()
->mutable_delivered_amount(),
*amt);
}
}
RPC::convert(*txnProto->mutable_meta(), txnMeta);
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/ripple/rpc/impl/GRPCHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
94 changes: 78 additions & 16 deletions src/test/rpc/Tx_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down Expand Up @@ -674,22 +693,65 @@ class Tx_test : public beast::unit_test::suite
cmpPaymentTx(result.second.transaction(), tx);
}

if (ledger && !b)
{
auto rawMeta = ledger->txRead(id).second;
if (rawMeta)
{
auto txMeta = std::make_shared<TxMeta>(
id, ledger->seq(), *rawMeta);

cmpMeta(result.second.meta(), txMeta);
cmpDeliveredAmount(
result.second.meta(),
result.second.transaction(),
txMeta,
tx);
}
}
if (!ledger || b)
continue;

auto rawMeta = ledger->txRead(id).second;
if (!rawMeta)
continue;

auto txMeta =
std::make_shared<TxMeta>(id, ledger->seq(), *rawMeta);

cmpMeta(result.second.meta(), txMeta);
cmpDeliveredAmount(
result.second.meta(),
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++;
}
Expand Down

0 comments on commit b0addb9

Please sign in to comment.