diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 26625c74..0ded2760 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -124,3 +124,10 @@ export interface NFTOffer { destination?: string expiration?: number } + +export interface Bridge { + src_chain_door: string + src_chain_issue: 'XRP' | IssuedCurrency + dst_chain_door: string + dst_chain_issue: 'XRP' | IssuedCurrency +} diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts new file mode 100644 index 00000000..b64322f7 --- /dev/null +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -0,0 +1,46 @@ +import { ValidationError } from '../../errors' +import { Amount, Bridge } from '../common' + +import { BaseTransaction, validateBaseTransaction } from './common' + +/** + * + * @category Transaction Models + */ +export interface XChainClaim extends BaseTransaction { + TransactionType: 'XChainClaim' + + Bridge: Bridge + + XChainClaimID: number | string + + Destination: string + + Amount: Amount +} + +/** + * Verify the form and type of a XChainClaim at runtime. + * + * @param tx - A XChainClaim Transaction. + * @throws When the XChainClaim is malformed. + */ +export function validateXChainClaim(tx: Record): void { + validateBaseTransaction(tx) + + if (tx.Bridge == null) { + throw new ValidationError('XChainClaim: missing field Bridge') + } + + if (tx.XChainClaimID == null) { + throw new ValidationError('XChainClaim: missing field XChainClaimID') + } + + if (tx.Destination == null) { + throw new ValidationError('XChainClaim: missing field Destination') + } + + if (tx.Amount == null) { + throw new ValidationError('XChainClaim: missing field Amount') + } +} diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index 49944424..526046c7 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -45,3 +45,4 @@ export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' +export { XChainClaim } from './XChainClaim' diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index e5a26b8f..94e48a94 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -50,6 +50,7 @@ import { SetRegularKey, validateSetRegularKey } from './setRegularKey' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' +import { XChainClaim, validateXChainClaim } from './XChainClaim' /** * @category Transaction Models @@ -79,6 +80,7 @@ export type Transaction = | SignerListSet | TicketCreate | TrustSet + | XChainClaim /** * @category Transaction Models @@ -203,6 +205,10 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break + case 'XChainClaim': + validateXChainClaim(tx) + break + default: throw new ValidationError( `Invalid field TransactionType: ${tx.TransactionType}`,