From ec72f9ac8e179db27238ff885ab4d382a91b0db5 Mon Sep 17 00:00:00 2001 From: Caleb Kniffen Date: Wed, 4 Oct 2023 16:37:56 -0500 Subject: [PATCH] fix: allow flag maps when submitting NFToken txs (#2490) You can now `NFTokenMint` and `NFTokenCreateOffer` transactions with `Flags` set to a map like other transactions with flags do. ex. `{ tfSellNFToken: true }` --- packages/xrpl/HISTORY.md | 3 ++ packages/xrpl/src/models/utils/flags.ts | 46 ++++++++----------- .../test/models/NFTokenCreateOffer.test.ts | 4 +- packages/xrpl/test/models/NFTokenMint.test.ts | 4 +- 4 files changed, 27 insertions(+), 30 deletions(-) diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index 247a7501..502a7cbe 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -4,6 +4,9 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr ## Unreleased +### Fixed +- Allow flag maps when submitting `NFTokenMint` and `NFTokenCreateOffer` transactions like others with flags + ## 2.12.0 (2023-09-27) ### Added * Added `ports` field to `ServerInfoResponse` diff --git a/packages/xrpl/src/models/utils/flags.ts b/packages/xrpl/src/models/utils/flags.ts index 11d81efc..15f1cbb2 100644 --- a/packages/xrpl/src/models/utils/flags.ts +++ b/packages/xrpl/src/models/utils/flags.ts @@ -10,6 +10,8 @@ import { AccountSetTfFlags } from '../transactions/accountSet' import { AMMDepositFlags } from '../transactions/AMMDeposit' import { AMMWithdrawFlags } from '../transactions/AMMWithdraw' import { GlobalFlags } from '../transactions/common' +import { NFTokenCreateOfferFlags } from '../transactions/NFTokenCreateOffer' +import { NFTokenMintFlags } from '../transactions/NFTokenMint' import { OfferCreateFlags } from '../transactions/offerCreate' import { PaymentFlags } from '../transactions/payment' import { PaymentChannelClaimFlags } from '../transactions/paymentChannelClaim' @@ -43,6 +45,19 @@ export function parseAccountRootFlags( return flagsInterface } +const txToFlag = { + AccountSet: AccountSetTfFlags, + AMMDeposit: AMMDepositFlags, + AMMWithdraw: AMMWithdrawFlags, + NFTokenCreateOffer: NFTokenCreateOfferFlags, + NFTokenMint: NFTokenMintFlags, + OfferCreate: OfferCreateFlags, + PaymentChannelClaim: PaymentChannelClaimFlags, + Payment: PaymentFlags, + TrustSet: TrustSetFlags, + XChainModifyBridge: XChainModifyBridgeFlags, +} + /** * Sets a transaction's flags to its numeric representation. * @@ -57,34 +72,9 @@ export function setTransactionFlagsToNumber(tx: Transaction): void { return } - switch (tx.TransactionType) { - case 'AccountSet': - tx.Flags = convertFlagsToNumber(tx.Flags, AccountSetTfFlags) - return - case 'AMMDeposit': - tx.Flags = convertFlagsToNumber(tx.Flags, AMMDepositFlags) - return - case 'AMMWithdraw': - tx.Flags = convertFlagsToNumber(tx.Flags, AMMWithdrawFlags) - return - case 'OfferCreate': - tx.Flags = convertFlagsToNumber(tx.Flags, OfferCreateFlags) - return - case 'PaymentChannelClaim': - tx.Flags = convertFlagsToNumber(tx.Flags, PaymentChannelClaimFlags) - return - case 'Payment': - tx.Flags = convertFlagsToNumber(tx.Flags, PaymentFlags) - return - case 'TrustSet': - tx.Flags = convertFlagsToNumber(tx.Flags, TrustSetFlags) - return - case 'XChainModifyBridge': - tx.Flags = convertFlagsToNumber(tx.Flags, XChainModifyBridgeFlags) - return - default: - tx.Flags = 0 - } + tx.Flags = txToFlag[tx.TransactionType] + ? convertFlagsToNumber(tx.Flags, txToFlag[tx.TransactionType]) + : 0 } // eslint-disable-next-line @typescript-eslint/no-explicit-any -- added ValidationError check for flagEnum diff --git a/packages/xrpl/test/models/NFTokenCreateOffer.test.ts b/packages/xrpl/test/models/NFTokenCreateOffer.test.ts index b874f2b1..485c6956 100644 --- a/packages/xrpl/test/models/NFTokenCreateOffer.test.ts +++ b/packages/xrpl/test/models/NFTokenCreateOffer.test.ts @@ -32,7 +32,9 @@ describe('NFTokenCreateOffer', function () { TransactionType: 'NFTokenCreateOffer', NFTokenID: NFTOKEN_ID, Amount: '1', - Flags: NFTokenCreateOfferFlags.tfSellNFToken, + Flags: { + tfSellNFToken: true, + }, Expiration: 1000, Destination: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', diff --git a/packages/xrpl/test/models/NFTokenMint.test.ts b/packages/xrpl/test/models/NFTokenMint.test.ts index 53b12de1..82dbd001 100644 --- a/packages/xrpl/test/models/NFTokenMint.test.ts +++ b/packages/xrpl/test/models/NFTokenMint.test.ts @@ -19,7 +19,9 @@ describe('NFTokenMint', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', Fee: '5000000', Sequence: 2470665, - Flags: NFTokenMintFlags.tfTransferable, + Flags: { + tfTransferable: true, + }, NFTokenTaxon: 0, Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', TransferFee: 1,