Skip to content

Commit 13f9ec9

Browse files
committed
Additional validations+tests for MPTokenIssuanceCreate transaction
1 parent 42049ac commit 13f9ec9

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

packages/xrpl/src/models/transactions/MPTokenIssuanceCreate.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ValidationError } from '../../errors'
2-
import { isHex, INTEGER_SANITY_CHECK, isFlagEnabled } from '../utils'
2+
import { isHex, INTEGER_SANITY_CHECK, isFlagEnabled, hasFlag } from '../utils'
33

44
import {
55
BaseTransaction,
@@ -11,6 +11,7 @@ import {
1111
MAX_MPT_META_BYTE_LENGTH,
1212
MPT_META_WARNING_HEADER,
1313
validateMPTokenMetadata,
14+
isDomainID,
1415
} from './common'
1516
import type { TransactionMetadataBase } from './metadata'
1617

@@ -227,6 +228,7 @@ export interface MPTokenIssuanceCreate extends BaseTransaction {
227228

228229
Flags?: number | MPTokenIssuanceCreateFlagsInterface
229230
MutableFlags?: number
231+
DomainID?: string
230232
}
231233

232234
export interface MPTokenIssuanceCreateMetadata extends TransactionMetadataBase {
@@ -249,6 +251,20 @@ export function validateMPTokenIssuanceCreate(
249251
validateOptionalField(tx, 'TransferFee', isNumber)
250252
validateOptionalField(tx, 'AssetScale', isNumber)
251253
validateOptionalField(tx, 'MutableFlags', isNumber)
254+
validateOptionalField(tx, 'DomainID', isDomainID)
255+
256+
if (
257+
tx.DomainID != null &&
258+
!hasFlag(
259+
tx,
260+
MPTokenIssuanceCreateFlags.tfMPTRequireAuth,
261+
'tfMPTRequireAuth',
262+
)
263+
) {
264+
throw new ValidationError(
265+
'MPTokenIssuanceCreate: Cannot set DomainID unless tfMPTRequireAuth flag is set.',
266+
)
267+
}
252268

253269
if (
254270
tx.MutableFlags != null &&
@@ -275,7 +291,7 @@ export function validateMPTokenIssuanceCreate(
275291
throw new ValidationError('MPTokenIssuanceCreate: Invalid MaximumAmount')
276292
} else if (
277293
BigInt(tx.MaximumAmount) > BigInt(MAX_AMT) ||
278-
BigInt(tx.MaximumAmount) < BigInt(`0`)
294+
BigInt(tx.MaximumAmount) <= BigInt(`0`)
279295
) {
280296
throw new ValidationError(
281297
'MPTokenIssuanceCreate: MaximumAmount out of range',

packages/xrpl/src/models/transactions/common.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,8 @@ export function isDomainID(domainID: unknown): domainID is string {
774774
return (
775775
isString(domainID) &&
776776
domainID.length === _DOMAIN_ID_LENGTH &&
777-
isHex(domainID)
777+
isHex(domainID) &&
778+
domainID !== '0'.repeat(_DOMAIN_ID_LENGTH)
778779
)
779780
}
780781

packages/xrpl/test/models/MPTokenIssuanceCreate.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,50 @@ describe('MPTokenIssuanceCreate', function () {
158158

159159
assertInvalid(invalid, 'MPTokenIssuanceCreate: Invalid MutableFlags value')
160160
})
161+
162+
it(`throws with Zero MaximumAmount`, function () {
163+
const invalid = {
164+
TransactionType: 'MPTokenIssuanceCreate',
165+
Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm',
166+
MaximumAmount: '0',
167+
} as any
168+
169+
assertInvalid(invalid, 'MPTokenIssuanceCreate: MaximumAmount out of range')
170+
})
171+
172+
it(`throws with Zero DomainID`, function () {
173+
const invalid = {
174+
TransactionType: 'MPTokenIssuanceCreate',
175+
Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm',
176+
DomainID: '0'.repeat(64),
177+
} as any
178+
179+
assertInvalid(invalid, 'MPTokenIssuanceCreate: invalid field DomainID')
180+
})
181+
182+
it(`throws with DomainID and tfMPTRequireAuth flag not set`, function () {
183+
const invalid = {
184+
TransactionType: 'MPTokenIssuanceCreate',
185+
Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm',
186+
DomainID: '1'.repeat(64),
187+
Flags: 0,
188+
} as any
189+
190+
assertInvalid(
191+
invalid,
192+
'MPTokenIssuanceCreate: Cannot set DomainID unless tfMPTRequireAuth flag is set.',
193+
)
194+
})
195+
196+
it(`throws with invalid type of DomainID`, function () {
197+
const invalid = {
198+
TransactionType: 'MPTokenIssuanceCreate',
199+
Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm',
200+
DomainID: 1,
201+
} as any
202+
203+
assertInvalid(invalid, 'MPTokenIssuanceCreate: invalid field DomainID')
204+
})
161205
})
162206

163207
/**

0 commit comments

Comments
 (0)