Introduce MPT support (XLS-33d): (#5143)

Amendment:
- MPTokensV1

New Transactions:
- MPTokenIssuanceCreate
- MPTokenIssuanceDestroy
- MPTokenIssuanceSet
- MPTokenAuthorize

Modified Transactions:
- Payment
- Clawback

New Objects:
- MPTokenIssuance
- MPToken

API updates:
- ledger_entry
- account_objects
- ledger_data

Other:
- Add += and -= operators to ValueProxy

Read full spec: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens

---------
Co-authored-by: Shawn Xie <shawnxie920@gmail.com>
Co-authored-by: Howard Hinnant <howard.hinnant@gmail.com>
Co-authored-by: Ed Hennis <ed@ripple.com>
Co-authored-by: John Freeman <jfreeman08@gmail.com>
This commit is contained in:
Gregory Tsipenyuk
2024-10-29 15:19:28 -04:00
committed by GitHub
parent 63209c2646
commit 23c37fa506
92 changed files with 7115 additions and 1088 deletions

View File

@@ -394,6 +394,7 @@ public:
auto const& sf1Outer = sfSequence;
auto const& sf2Outer = sfExpiration;
auto const& sf3Outer = sfQualityIn;
auto const& sf4Outer = sfAmount;
auto const& sf4 = sfSignature;
auto const& sf5 = sfPublicKey;
@@ -425,6 +426,7 @@ public:
{sf1Outer, soeREQUIRED},
{sf2Outer, soeOPTIONAL},
{sf3Outer, soeDEFAULT},
{sf4Outer, soeOPTIONAL},
{sf4, soeOPTIONAL},
{sf5, soeDEFAULT},
};
@@ -492,6 +494,16 @@ public:
BEAST_EXPECT(st[sf1Outer] == 4);
BEAST_EXPECT(st[sf2Outer] == 4);
BEAST_EXPECT(st[sf2Outer] == st[sf1Outer]);
st[sf1Outer] += 1;
BEAST_EXPECT(st[sf1Outer] == 5);
st[sf4Outer] = STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{1});
st[sf4Outer] += STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{2});
st[sf1Outer] -= 1;
BEAST_EXPECT(st[sf1Outer] == 4);
st[sf4Outer] -= STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{1});
}
// Write templated object
@@ -540,6 +552,16 @@ public:
BEAST_EXPECT(st[sf3Outer] == 0);
BEAST_EXPECT(*st[~sf3Outer] == 0);
BEAST_EXPECT(!!st[~sf3Outer]);
st[sf1Outer] += 1;
BEAST_EXPECT(st[sf1Outer] == 1);
st[sf4Outer] = STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{1});
st[sf4Outer] += STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{2});
st[sf1Outer] -= 1;
BEAST_EXPECT(st[sf1Outer] == 0);
st[sf4Outer] -= STAmount{1};
BEAST_EXPECT(st[sf4Outer] == STAmount{1});
}
// coercion operator to std::optional