APIv2(DeliverMax): add alias for Amount in Payment transactions (#4733)

Using the "Amount" field in Payment transactions can cause incorrect
interpretation. There continue to be problems from the use of this
field. "Amount" is rarely the correct field to use; instead,
"delivered_amount" (or "DeliveredAmount") should be used.

Rename the "Amount" field to "DeliverMax", a less misleading name. With
api_version: 2, remove the "Amount" field from Payment transactions.

- Input: "DeliverMax" in `tx_json` is an alias for "Amount"
  - sign
  - submit (in sign-and-submit mode)
  - submit_multisigned
  - sign_for
- Output: Add "DeliverMax" where transactions are provided by the API
  - ledger
  - tx
  - tx_history
  - account_tx
  - transaction_entry
  - subscribe (transactions stream)
- Output: Remove "Amount" from API version 2

Fix #3484

Fix #3902
This commit is contained in:
Bronek Kozicki
2023-10-23 19:26:16 +01:00
committed by GitHub
parent 5026cbdaf3
commit 397268394b
28 changed files with 1014 additions and 83 deletions

View File

@@ -1035,6 +1035,26 @@ static constexpr TxnTestData txnTestArray[] = {
"Missing field 'tx_json.Destination'.",
"Missing field 'tx_json.Destination'."}}},
{"Missing 'Destination' in sign_for, use DeliverMax",
__LINE__,
R"({
"command": "doesnt_matter",
"account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"secret": "masterpassphrase",
"tx_json": {
"Account": "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"DeliverMax": "1000000000",
"Fee": 50,
"Sequence": 0,
"SigningPubKey": "",
"TransactionType": "Payment"
}
})",
{{"Missing field 'tx_json.Destination'.",
"Missing field 'tx_json.Destination'.",
"Missing field 'tx_json.Destination'.",
"Missing field 'tx_json.Destination'."}}},
{"Missing 'Fee' in sign_for.",
__LINE__,
R"({
@@ -1692,6 +1712,34 @@ static constexpr TxnTestData txnTestArray[] = {
"Missing field 'account'.",
"Invalid field 'tx_json.Amount'."}}},
{"Invalid DeliverMax in submit_multisigned Payment.",
__LINE__,
R"({
"command": "submit_multisigned",
"tx_json": {
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"DeliverMax": "NotANumber",
"Destination": "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"Fee": 50,
"Sequence": 0,
"Signers": [
{
"Signer": {
"Account": "rPcNzota6B8YBokhYtcTNqQVCngtbnWfux",
"TxnSignature": "3045022100F9ED357606932697A4FAB2BE7F222C21DD93CA4CFDD90357AADD07465E8457D6022038173193E3DFFFB5D78DD738CC0905395F885DA65B98FDB9793901FE3FD26ECE",
"SigningPubKey": "02FE36A690D6973D55F88553F5D2C4202DE75F2CF8A6D0E17C70AC223F044501F8"
}
}
],
"SigningPubKey": "",
"TransactionType": "Payment"
}
})",
{{"Missing field 'secret'.",
"Missing field 'secret'.",
"Missing field 'account'.",
"Invalid field 'tx_json.Amount'."}}},
{"No build_path in submit_multisigned.",
__LINE__,
R"({
@@ -1905,6 +1953,72 @@ static constexpr TxnTestData txnTestArray[] = {
"A Signer may not be the transaction's Account "
"(rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh)."}}},
{"Empty Signers array in submit_multisigned, use DeliverMax",
__LINE__,
R"({
"command": "submit_multisigned",
"tx_json": {
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"DeliverMax": "10000000",
"Destination": "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"Fee": 50,
"Sequence": 0,
"Signers": [
],
"SigningPubKey": "",
"TransactionType": "Payment"
}
})",
{{"Missing field 'secret'.",
"Missing field 'secret'.",
"Missing field 'account'.",
"tx_json.Signers array may not be empty."}}},
{"Empty Signers array in submit_multisigned, use DeliverMax and Amount",
__LINE__,
R"({
"command": "submit_multisigned",
"tx_json": {
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"Amount": "10000000",
"DeliverMax": "10000000",
"Destination": "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"Fee": 50,
"Sequence": 0,
"Signers": [
],
"SigningPubKey": "",
"TransactionType": "Payment"
}
})",
{{"Missing field 'secret'.",
"Missing field 'secret'.",
"Missing field 'account'.",
"tx_json.Signers array may not be empty."}}},
{"Payment cannot specify different DeliverMax and Amount.",
__LINE__,
R"({
"command": "doesnt_matter",
"account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"secret": "masterpassphrase",
"debug_signing": 0,
"tx_json": {
"Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"Amount": "1000000000",
"DeliverMax": "1000000020",
"Destination": "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"Fee": 50,
"Sequence": 0,
"SigningPubKey": "",
"TransactionType": "Payment"
}
})",
{{"Cannot specify differing 'Amount' and 'DeliverMax'",
"Cannot specify differing 'Amount' and 'DeliverMax'",
"Cannot specify differing 'Amount' and 'DeliverMax'",
"Cannot specify differing 'Amount' and 'DeliverMax'"}}},
};
class JSONRPC_test : public beast::unit_test::suite