xrpl 2.9.1 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/build/xrpl-latest-min.js +1 -1
  2. package/build/xrpl-latest-min.js.map +1 -1
  3. package/build/xrpl-latest.js +2680 -481
  4. package/build/xrpl-latest.js.map +1 -1
  5. package/dist/npm/Wallet/walletFromSecretNumbers.d.ts +7 -0
  6. package/dist/npm/Wallet/walletFromSecretNumbers.d.ts.map +1 -0
  7. package/dist/npm/Wallet/walletFromSecretNumbers.js +27 -0
  8. package/dist/npm/Wallet/walletFromSecretNumbers.js.map +1 -0
  9. package/dist/npm/client/index.d.ts +2 -1
  10. package/dist/npm/client/index.d.ts.map +1 -1
  11. package/dist/npm/client/index.js.map +1 -1
  12. package/dist/npm/index.d.ts +1 -0
  13. package/dist/npm/index.d.ts.map +1 -1
  14. package/dist/npm/index.js +3 -1
  15. package/dist/npm/index.js.map +1 -1
  16. package/dist/npm/models/common/index.d.ts +5 -0
  17. package/dist/npm/models/common/index.d.ts.map +1 -1
  18. package/dist/npm/models/ledger/AMM.d.ts +27 -0
  19. package/dist/npm/models/ledger/AMM.d.ts.map +1 -0
  20. package/dist/npm/models/ledger/AMM.js +3 -0
  21. package/dist/npm/models/ledger/AMM.js.map +1 -0
  22. package/dist/npm/models/ledger/AccountRoot.d.ts +5 -1
  23. package/dist/npm/models/ledger/AccountRoot.d.ts.map +1 -1
  24. package/dist/npm/models/ledger/AccountRoot.js +2 -0
  25. package/dist/npm/models/ledger/AccountRoot.js.map +1 -1
  26. package/dist/npm/models/ledger/LedgerEntry.d.ts +2 -1
  27. package/dist/npm/models/ledger/LedgerEntry.d.ts.map +1 -1
  28. package/dist/npm/models/methods/accountInfo.d.ts +1 -0
  29. package/dist/npm/models/methods/accountInfo.d.ts.map +1 -1
  30. package/dist/npm/models/methods/ammInfo.d.ts +39 -0
  31. package/dist/npm/models/methods/ammInfo.d.ts.map +1 -0
  32. package/dist/npm/models/methods/ammInfo.js +3 -0
  33. package/dist/npm/models/methods/ammInfo.js.map +1 -0
  34. package/dist/npm/models/methods/index.d.ts +4 -3
  35. package/dist/npm/models/methods/index.d.ts.map +1 -1
  36. package/dist/npm/models/methods/ledgerEntry.d.ts +10 -0
  37. package/dist/npm/models/methods/ledgerEntry.d.ts.map +1 -1
  38. package/dist/npm/models/transactions/AMMBid.d.ts +12 -0
  39. package/dist/npm/models/transactions/AMMBid.d.ts.map +1 -0
  40. package/dist/npm/models/transactions/AMMBid.js +56 -0
  41. package/dist/npm/models/transactions/AMMBid.js.map +1 -0
  42. package/dist/npm/models/transactions/AMMCreate.d.ts +11 -0
  43. package/dist/npm/models/transactions/AMMCreate.d.ts.map +1 -0
  44. package/dist/npm/models/transactions/AMMCreate.js +32 -0
  45. package/dist/npm/models/transactions/AMMCreate.js.map +1 -0
  46. package/dist/npm/models/transactions/AMMDelete.d.ts +9 -0
  47. package/dist/npm/models/transactions/AMMDelete.d.ts.map +1 -0
  48. package/dist/npm/models/transactions/AMMDelete.js +22 -0
  49. package/dist/npm/models/transactions/AMMDelete.js.map +1 -0
  50. package/dist/npm/models/transactions/AMMDeposit.d.ts +27 -0
  51. package/dist/npm/models/transactions/AMMDeposit.d.ts.map +1 -0
  52. package/dist/npm/models/transactions/AMMDeposit.js +51 -0
  53. package/dist/npm/models/transactions/AMMDeposit.js.map +1 -0
  54. package/dist/npm/models/transactions/AMMVote.d.ts +10 -0
  55. package/dist/npm/models/transactions/AMMVote.d.ts.map +1 -0
  56. package/dist/npm/models/transactions/AMMVote.js +32 -0
  57. package/dist/npm/models/transactions/AMMVote.js.map +1 -0
  58. package/dist/npm/models/transactions/AMMWithdraw.d.ts +31 -0
  59. package/dist/npm/models/transactions/AMMWithdraw.d.ts.map +1 -0
  60. package/dist/npm/models/transactions/AMMWithdraw.js +50 -0
  61. package/dist/npm/models/transactions/AMMWithdraw.js.map +1 -0
  62. package/dist/npm/models/transactions/accountSet.d.ts +2 -1
  63. package/dist/npm/models/transactions/accountSet.d.ts.map +1 -1
  64. package/dist/npm/models/transactions/accountSet.js +1 -0
  65. package/dist/npm/models/transactions/accountSet.js.map +1 -1
  66. package/dist/npm/models/transactions/clawback.d.ts +9 -0
  67. package/dist/npm/models/transactions/clawback.d.ts.map +1 -0
  68. package/dist/npm/models/transactions/clawback.js +19 -0
  69. package/dist/npm/models/transactions/clawback.js.map +1 -0
  70. package/dist/npm/models/transactions/common.d.ts +2 -1
  71. package/dist/npm/models/transactions/common.d.ts.map +1 -1
  72. package/dist/npm/models/transactions/common.js +12 -1
  73. package/dist/npm/models/transactions/common.js.map +1 -1
  74. package/dist/npm/models/transactions/index.d.ts +7 -0
  75. package/dist/npm/models/transactions/index.d.ts.map +1 -1
  76. package/dist/npm/models/transactions/index.js +5 -1
  77. package/dist/npm/models/transactions/index.js.map +1 -1
  78. package/dist/npm/models/transactions/transaction.d.ts +8 -1
  79. package/dist/npm/models/transactions/transaction.d.ts.map +1 -1
  80. package/dist/npm/models/transactions/transaction.js +28 -0
  81. package/dist/npm/models/transactions/transaction.js.map +1 -1
  82. package/dist/npm/models/utils/flags.d.ts.map +1 -1
  83. package/dist/npm/models/utils/flags.js +17 -23
  84. package/dist/npm/models/utils/flags.js.map +1 -1
  85. package/dist/npm/models/utils/index.js +1 -1
  86. package/dist/npm/models/utils/index.js.map +1 -1
  87. package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
  88. package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts +7 -0
  89. package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts.map +1 -0
  90. package/dist/npm/src/Wallet/walletFromSecretNumbers.js +27 -0
  91. package/dist/npm/src/Wallet/walletFromSecretNumbers.js.map +1 -0
  92. package/dist/npm/src/client/index.d.ts +2 -1
  93. package/dist/npm/src/client/index.d.ts.map +1 -1
  94. package/dist/npm/src/client/index.js.map +1 -1
  95. package/dist/npm/src/index.d.ts +1 -0
  96. package/dist/npm/src/index.d.ts.map +1 -1
  97. package/dist/npm/src/index.js +3 -1
  98. package/dist/npm/src/index.js.map +1 -1
  99. package/dist/npm/src/models/common/index.d.ts +5 -0
  100. package/dist/npm/src/models/common/index.d.ts.map +1 -1
  101. package/dist/npm/src/models/ledger/AMM.d.ts +27 -0
  102. package/dist/npm/src/models/ledger/AMM.d.ts.map +1 -0
  103. package/dist/npm/src/models/ledger/AMM.js +3 -0
  104. package/dist/npm/src/models/ledger/AMM.js.map +1 -0
  105. package/dist/npm/src/models/ledger/AccountRoot.d.ts +5 -1
  106. package/dist/npm/src/models/ledger/AccountRoot.d.ts.map +1 -1
  107. package/dist/npm/src/models/ledger/AccountRoot.js +2 -0
  108. package/dist/npm/src/models/ledger/AccountRoot.js.map +1 -1
  109. package/dist/npm/src/models/ledger/LedgerEntry.d.ts +2 -1
  110. package/dist/npm/src/models/ledger/LedgerEntry.d.ts.map +1 -1
  111. package/dist/npm/src/models/methods/accountInfo.d.ts +1 -0
  112. package/dist/npm/src/models/methods/accountInfo.d.ts.map +1 -1
  113. package/dist/npm/src/models/methods/ammInfo.d.ts +39 -0
  114. package/dist/npm/src/models/methods/ammInfo.d.ts.map +1 -0
  115. package/dist/npm/src/models/methods/ammInfo.js +3 -0
  116. package/dist/npm/src/models/methods/ammInfo.js.map +1 -0
  117. package/dist/npm/src/models/methods/index.d.ts +4 -3
  118. package/dist/npm/src/models/methods/index.d.ts.map +1 -1
  119. package/dist/npm/src/models/methods/ledgerEntry.d.ts +10 -0
  120. package/dist/npm/src/models/methods/ledgerEntry.d.ts.map +1 -1
  121. package/dist/npm/src/models/transactions/AMMBid.d.ts +12 -0
  122. package/dist/npm/src/models/transactions/AMMBid.d.ts.map +1 -0
  123. package/dist/npm/src/models/transactions/AMMBid.js +56 -0
  124. package/dist/npm/src/models/transactions/AMMBid.js.map +1 -0
  125. package/dist/npm/src/models/transactions/AMMCreate.d.ts +11 -0
  126. package/dist/npm/src/models/transactions/AMMCreate.d.ts.map +1 -0
  127. package/dist/npm/src/models/transactions/AMMCreate.js +32 -0
  128. package/dist/npm/src/models/transactions/AMMCreate.js.map +1 -0
  129. package/dist/npm/src/models/transactions/AMMDelete.d.ts +9 -0
  130. package/dist/npm/src/models/transactions/AMMDelete.d.ts.map +1 -0
  131. package/dist/npm/src/models/transactions/AMMDelete.js +22 -0
  132. package/dist/npm/src/models/transactions/AMMDelete.js.map +1 -0
  133. package/dist/npm/src/models/transactions/AMMDeposit.d.ts +27 -0
  134. package/dist/npm/src/models/transactions/AMMDeposit.d.ts.map +1 -0
  135. package/dist/npm/src/models/transactions/AMMDeposit.js +51 -0
  136. package/dist/npm/src/models/transactions/AMMDeposit.js.map +1 -0
  137. package/dist/npm/src/models/transactions/AMMVote.d.ts +10 -0
  138. package/dist/npm/src/models/transactions/AMMVote.d.ts.map +1 -0
  139. package/dist/npm/src/models/transactions/AMMVote.js +32 -0
  140. package/dist/npm/src/models/transactions/AMMVote.js.map +1 -0
  141. package/dist/npm/src/models/transactions/AMMWithdraw.d.ts +31 -0
  142. package/dist/npm/src/models/transactions/AMMWithdraw.d.ts.map +1 -0
  143. package/dist/npm/src/models/transactions/AMMWithdraw.js +50 -0
  144. package/dist/npm/src/models/transactions/AMMWithdraw.js.map +1 -0
  145. package/dist/npm/src/models/transactions/accountSet.d.ts +2 -1
  146. package/dist/npm/src/models/transactions/accountSet.d.ts.map +1 -1
  147. package/dist/npm/src/models/transactions/accountSet.js +1 -0
  148. package/dist/npm/src/models/transactions/accountSet.js.map +1 -1
  149. package/dist/npm/src/models/transactions/clawback.d.ts +9 -0
  150. package/dist/npm/src/models/transactions/clawback.d.ts.map +1 -0
  151. package/dist/npm/src/models/transactions/clawback.js +19 -0
  152. package/dist/npm/src/models/transactions/clawback.js.map +1 -0
  153. package/dist/npm/src/models/transactions/common.d.ts +2 -1
  154. package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
  155. package/dist/npm/src/models/transactions/common.js +12 -1
  156. package/dist/npm/src/models/transactions/common.js.map +1 -1
  157. package/dist/npm/src/models/transactions/index.d.ts +7 -0
  158. package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
  159. package/dist/npm/src/models/transactions/index.js +5 -1
  160. package/dist/npm/src/models/transactions/index.js.map +1 -1
  161. package/dist/npm/src/models/transactions/transaction.d.ts +8 -1
  162. package/dist/npm/src/models/transactions/transaction.d.ts.map +1 -1
  163. package/dist/npm/src/models/transactions/transaction.js +28 -0
  164. package/dist/npm/src/models/transactions/transaction.js.map +1 -1
  165. package/dist/npm/src/models/utils/flags.d.ts.map +1 -1
  166. package/dist/npm/src/models/utils/flags.js +17 -23
  167. package/dist/npm/src/models/utils/flags.js.map +1 -1
  168. package/dist/npm/src/models/utils/index.js +1 -1
  169. package/dist/npm/src/models/utils/index.js.map +1 -1
  170. package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
  171. package/dist/npm/src/sugar/autofill.js +4 -3
  172. package/dist/npm/src/sugar/autofill.js.map +1 -1
  173. package/dist/npm/sugar/autofill.d.ts.map +1 -1
  174. package/dist/npm/sugar/autofill.js +4 -3
  175. package/dist/npm/sugar/autofill.js.map +1 -1
  176. package/package.json +8 -6
  177. package/src/ECDSA.ts +6 -0
  178. package/src/Wallet/defaultFaucets.ts +82 -0
  179. package/src/Wallet/fundWallet.ts +344 -0
  180. package/src/Wallet/index.ts +504 -0
  181. package/src/Wallet/rfc1751.ts +190 -0
  182. package/src/Wallet/rfc1751Words.json +243 -0
  183. package/src/Wallet/signer.ts +173 -0
  184. package/src/Wallet/walletFromSecretNumbers.ts +37 -0
  185. package/src/client/BroadcastClient.ts +84 -0
  186. package/src/client/ConnectionManager.ts +40 -0
  187. package/src/client/ExponentialBackoff.ts +71 -0
  188. package/src/client/RequestManager.ts +194 -0
  189. package/src/client/WSWrapper.ts +106 -0
  190. package/src/client/connection.ts +593 -0
  191. package/src/client/index.ts +712 -0
  192. package/src/client/partialPayment.ts +153 -0
  193. package/src/errors.ts +161 -0
  194. package/src/index.ts +20 -0
  195. package/src/models/common/index.ts +149 -0
  196. package/src/models/index.ts +16 -0
  197. package/src/models/ledger/AMM.ts +78 -0
  198. package/src/models/ledger/AccountRoot.ts +217 -0
  199. package/src/models/ledger/Amendments.ts +45 -0
  200. package/src/models/ledger/BaseLedgerEntry.ts +3 -0
  201. package/src/models/ledger/Check.ts +70 -0
  202. package/src/models/ledger/DepositPreauth.ts +35 -0
  203. package/src/models/ledger/DirectoryNode.ts +46 -0
  204. package/src/models/ledger/Escrow.ts +74 -0
  205. package/src/models/ledger/FeeSettings.ts +52 -0
  206. package/src/models/ledger/Ledger.ts +65 -0
  207. package/src/models/ledger/LedgerEntry.ts +34 -0
  208. package/src/models/ledger/LedgerHashes.ts +24 -0
  209. package/src/models/ledger/NFTokenOffer.ts +16 -0
  210. package/src/models/ledger/NFTokenPage.ts +20 -0
  211. package/src/models/ledger/NegativeUNL.ts +34 -0
  212. package/src/models/ledger/Offer.ts +52 -0
  213. package/src/models/ledger/PayChannel.ts +107 -0
  214. package/src/models/ledger/RippleState.ts +88 -0
  215. package/src/models/ledger/SignerList.ts +56 -0
  216. package/src/models/ledger/Ticket.ts +36 -0
  217. package/src/models/ledger/index.ts +58 -0
  218. package/src/models/methods/accountChannels.ts +93 -0
  219. package/src/models/methods/accountCurrencies.ts +45 -0
  220. package/src/models/methods/accountInfo.ts +182 -0
  221. package/src/models/methods/accountLines.ts +137 -0
  222. package/src/models/methods/accountNFTs.ts +72 -0
  223. package/src/models/methods/accountObjects.ts +120 -0
  224. package/src/models/methods/accountOffers.ts +100 -0
  225. package/src/models/methods/accountTx.ts +109 -0
  226. package/src/models/methods/ammInfo.ts +145 -0
  227. package/src/models/methods/baseMethod.ts +58 -0
  228. package/src/models/methods/bookOffers.ts +96 -0
  229. package/src/models/methods/channelVerify.ts +41 -0
  230. package/src/models/methods/depositAuthorized.ts +56 -0
  231. package/src/models/methods/fee.ts +91 -0
  232. package/src/models/methods/gatewayBalances.ts +85 -0
  233. package/src/models/methods/index.ts +391 -0
  234. package/src/models/methods/ledger.ts +125 -0
  235. package/src/models/methods/ledgerClosed.ts +32 -0
  236. package/src/models/methods/ledgerCurrent.ts +31 -0
  237. package/src/models/methods/ledgerData.ts +78 -0
  238. package/src/models/methods/ledgerEntry.ts +177 -0
  239. package/src/models/methods/manifest.ts +54 -0
  240. package/src/models/methods/nftBuyOffers.ts +37 -0
  241. package/src/models/methods/nftHistory.ts +113 -0
  242. package/src/models/methods/nftInfo.ts +25 -0
  243. package/src/models/methods/nftSellOffers.ts +37 -0
  244. package/src/models/methods/norippleCheck.ts +82 -0
  245. package/src/models/methods/pathFind.ts +116 -0
  246. package/src/models/methods/ping.ts +21 -0
  247. package/src/models/methods/random.ts +23 -0
  248. package/src/models/methods/ripplePathFind.ts +81 -0
  249. package/src/models/methods/serverInfo.ts +257 -0
  250. package/src/models/methods/serverState.ts +77 -0
  251. package/src/models/methods/submit.ts +94 -0
  252. package/src/models/methods/submitMultisigned.ts +51 -0
  253. package/src/models/methods/subscribe.ts +435 -0
  254. package/src/models/methods/transactionEntry.ts +47 -0
  255. package/src/models/methods/tx.ts +69 -0
  256. package/src/models/methods/unsubscribe.ts +49 -0
  257. package/src/models/transactions/AMMBid.ts +140 -0
  258. package/src/models/transactions/AMMCreate.ts +80 -0
  259. package/src/models/transactions/AMMDelete.ts +55 -0
  260. package/src/models/transactions/AMMDeposit.ts +130 -0
  261. package/src/models/transactions/AMMVote.ts +71 -0
  262. package/src/models/transactions/AMMWithdraw.ts +126 -0
  263. package/src/models/transactions/NFTokenAcceptOffer.ts +104 -0
  264. package/src/models/transactions/NFTokenBurn.ts +48 -0
  265. package/src/models/transactions/NFTokenCancelOffer.ts +45 -0
  266. package/src/models/transactions/NFTokenCreateOffer.ts +145 -0
  267. package/src/models/transactions/NFTokenMint.ts +123 -0
  268. package/src/models/transactions/UNLModify.ts +20 -0
  269. package/src/models/transactions/accountDelete.ts +50 -0
  270. package/src/models/transactions/accountSet.ts +228 -0
  271. package/src/models/transactions/checkCancel.ts +34 -0
  272. package/src/models/transactions/checkCash.ts +73 -0
  273. package/src/models/transactions/checkCreate.ts +90 -0
  274. package/src/models/transactions/clawback.ts +49 -0
  275. package/src/models/transactions/common.ts +295 -0
  276. package/src/models/transactions/depositPreauth.ts +68 -0
  277. package/src/models/transactions/enableAmendment.ts +26 -0
  278. package/src/models/transactions/escrowCancel.ts +45 -0
  279. package/src/models/transactions/escrowCreate.ts +100 -0
  280. package/src/models/transactions/escrowFinish.ts +63 -0
  281. package/src/models/transactions/index.ts +66 -0
  282. package/src/models/transactions/metadata.ts +69 -0
  283. package/src/models/transactions/offerCancel.ts +37 -0
  284. package/src/models/transactions/offerCreate.ts +144 -0
  285. package/src/models/transactions/payment.ts +278 -0
  286. package/src/models/transactions/paymentChannelClaim.ts +165 -0
  287. package/src/models/transactions/paymentChannelCreate.ts +116 -0
  288. package/src/models/transactions/paymentChannelFund.ts +65 -0
  289. package/src/models/transactions/setFee.ts +48 -0
  290. package/src/models/transactions/setRegularKey.ts +33 -0
  291. package/src/models/transactions/signerListSet.ts +89 -0
  292. package/src/models/transactions/ticketCreate.ts +50 -0
  293. package/src/models/transactions/transaction.ts +303 -0
  294. package/src/models/transactions/trustSet.ts +146 -0
  295. package/src/models/utils/flags.ts +98 -0
  296. package/src/models/utils/index.ts +37 -0
  297. package/src/sugar/autofill.ts +373 -0
  298. package/src/sugar/balances.ts +123 -0
  299. package/src/sugar/getFeeXrp.ts +45 -0
  300. package/src/sugar/getLedgerIndex.ts +15 -0
  301. package/src/sugar/getOrderbook.ts +152 -0
  302. package/src/sugar/index.ts +11 -0
  303. package/src/sugar/submit.ts +305 -0
  304. package/src/sugar/utils.ts +29 -0
  305. package/src/utils/derive.ts +23 -0
  306. package/src/utils/getBalanceChanges.ts +186 -0
  307. package/src/utils/getNFTokenID.ts +97 -0
  308. package/src/utils/hashes/HashPrefix.ts +40 -0
  309. package/src/utils/hashes/README.md +65 -0
  310. package/src/utils/hashes/SHAMap/InnerNode.ts +124 -0
  311. package/src/utils/hashes/SHAMap/LeafNode.ts +69 -0
  312. package/src/utils/hashes/SHAMap/index.ts +41 -0
  313. package/src/utils/hashes/SHAMap/node.ts +14 -0
  314. package/src/utils/hashes/hashLedger.ts +236 -0
  315. package/src/utils/hashes/index.ts +187 -0
  316. package/src/utils/hashes/ledgerSpaces.ts +34 -0
  317. package/src/utils/hashes/sha512Half.ts +19 -0
  318. package/src/utils/index.ts +223 -0
  319. package/src/utils/parseNFTokenID.ts +84 -0
  320. package/src/utils/quality.ts +169 -0
  321. package/src/utils/signPaymentChannelClaim.ts +27 -0
  322. package/src/utils/stringConversion.ts +27 -0
  323. package/src/utils/timeConversion.ts +53 -0
  324. package/src/utils/verifyPaymentChannelClaim.ts +30 -0
  325. package/src/utils/xrpConversion.ts +104 -0
@@ -0,0 +1,116 @@
1
+ /* eslint-disable complexity -- Necessary for validatePaymentChannelCreate */
2
+ import { ValidationError } from '../../errors'
3
+
4
+ import { BaseTransaction, validateBaseTransaction } from './common'
5
+
6
+ /**
7
+ * Create a unidirectional channel and fund it with XRP. The address sending
8
+ * this transaction becomes the "source address" of the payment channel.
9
+ *
10
+ * @category Transaction Models
11
+ */
12
+ export interface PaymentChannelCreate extends BaseTransaction {
13
+ TransactionType: 'PaymentChannelCreate'
14
+ /**
15
+ * Amount of XRP, in drops, to deduct from the sender's balance and set aside
16
+ * in this channel. While the channel is open, the XRP can only go to the
17
+ * Destination address. When the channel closes, any unclaimed XRP is returned
18
+ * to the source address's balance.
19
+ */
20
+ Amount: string
21
+ /**
22
+ * Address to receive XRP claims against this channel. This is also known as
23
+ * the "destination address" for the channel.
24
+ */
25
+ Destination: string
26
+ /**
27
+ * Amount of time the source address must wait before closing the channel if
28
+ * it has unclaimed XRP.
29
+ */
30
+ SettleDelay: number
31
+ /**
32
+ * The public key of the key pair the source will use to sign claims against
33
+ * this channel in hexadecimal. This can be any secp256k1 or ed25519 public
34
+ * key.
35
+ */
36
+ PublicKey: string
37
+ /**
38
+ * The time, in seconds since the Ripple Epoch, when this channel expires.
39
+ * Any transaction that would modify the channel after this time closes the
40
+ * channel without otherwise affecting it. This value is immutable; the
41
+ * channel can be closed earlier than this time but cannot remain open after
42
+ * this time.
43
+ */
44
+ CancelAfter?: number
45
+ /**
46
+ * Arbitrary tag to further specify the destination for this payment channel,
47
+ * such as a hosted recipient at the destination address.
48
+ */
49
+ DestinationTag?: number
50
+ }
51
+
52
+ /**
53
+ * Verify the form and type of an PaymentChannelCreate at runtime.
54
+ *
55
+ * @param tx - An PaymentChannelCreate Transaction.
56
+ * @throws When the PaymentChannelCreate is Malformed.
57
+ */
58
+ // eslint-disable-next-line max-lines-per-function -- okay for this function, there's a lot of things to check
59
+ export function validatePaymentChannelCreate(
60
+ tx: Record<string, unknown>,
61
+ ): void {
62
+ validateBaseTransaction(tx)
63
+
64
+ if (tx.Amount === undefined) {
65
+ throw new ValidationError('PaymentChannelCreate: missing Amount')
66
+ }
67
+
68
+ if (typeof tx.Amount !== 'string') {
69
+ throw new ValidationError('PaymentChannelCreate: Amount must be a string')
70
+ }
71
+
72
+ if (tx.Destination === undefined) {
73
+ throw new ValidationError('PaymentChannelCreate: missing Destination')
74
+ }
75
+
76
+ if (typeof tx.Destination !== 'string') {
77
+ throw new ValidationError(
78
+ 'PaymentChannelCreate: Destination must be a string',
79
+ )
80
+ }
81
+
82
+ if (tx.SettleDelay === undefined) {
83
+ throw new ValidationError('PaymentChannelCreate: missing SettleDelay')
84
+ }
85
+
86
+ if (typeof tx.SettleDelay !== 'number') {
87
+ throw new ValidationError(
88
+ 'PaymentChannelCreate: SettleDelay must be a number',
89
+ )
90
+ }
91
+
92
+ if (tx.PublicKey === undefined) {
93
+ throw new ValidationError('PaymentChannelCreate: missing PublicKey')
94
+ }
95
+
96
+ if (typeof tx.PublicKey !== 'string') {
97
+ throw new ValidationError(
98
+ 'PaymentChannelCreate: PublicKey must be a string',
99
+ )
100
+ }
101
+
102
+ if (tx.CancelAfter !== undefined && typeof tx.CancelAfter !== 'number') {
103
+ throw new ValidationError(
104
+ 'PaymentChannelCreate: CancelAfter must be a number',
105
+ )
106
+ }
107
+
108
+ if (
109
+ tx.DestinationTag !== undefined &&
110
+ typeof tx.DestinationTag !== 'number'
111
+ ) {
112
+ throw new ValidationError(
113
+ 'PaymentChannelCreate: DestinationTag must be a number',
114
+ )
115
+ }
116
+ }
@@ -0,0 +1,65 @@
1
+ import { ValidationError } from '../../errors'
2
+
3
+ import { BaseTransaction, validateBaseTransaction } from './common'
4
+
5
+ /**
6
+ * Add additional XRP to an open payment channel, and optionally update the
7
+ * expiration time of the channel. Only the source address of the channel can
8
+ * use this transaction.
9
+ *
10
+ * @category Transaction Models
11
+ */
12
+ export interface PaymentChannelFund extends BaseTransaction {
13
+ TransactionType: 'PaymentChannelFund'
14
+ /**
15
+ * The unique ID of the channel to fund as a 64-character hexadecimal
16
+ * string.
17
+ */
18
+ Channel: string
19
+ /**
20
+ * Amount of XRP in drops to add to the channel. Must be a positive amount
21
+ * of XRP.
22
+ */
23
+ Amount: string
24
+ /**
25
+ * New Expiration time to set for the channel in seconds since the Ripple
26
+ * Epoch. This must be later than either the current time plus the SettleDelay
27
+ * of the channel, or the existing Expiration of the channel. After the
28
+ * Expiration time, any transaction that would access the channel closes the
29
+ * channel without taking its normal action. Any unspent XRP is returned to
30
+ * the source address when the channel closes. (Expiration is separate from
31
+ * the channel's immutable CancelAfter time.) For more information, see the
32
+ * PayChannel ledger object type.
33
+ */
34
+ Expiration?: number
35
+ }
36
+
37
+ /**
38
+ * Verify the form and type of an PaymentChannelFund at runtime.
39
+ *
40
+ * @param tx - An PaymentChannelFund Transaction.
41
+ * @throws When the PaymentChannelFund is Malformed.
42
+ */
43
+ export function validatePaymentChannelFund(tx: Record<string, unknown>): void {
44
+ validateBaseTransaction(tx)
45
+
46
+ if (tx.Channel === undefined) {
47
+ throw new ValidationError('PaymentChannelFund: missing Channel')
48
+ }
49
+
50
+ if (typeof tx.Channel !== 'string') {
51
+ throw new ValidationError('PaymentChannelFund: Channel must be a string')
52
+ }
53
+
54
+ if (tx.Amount === undefined) {
55
+ throw new ValidationError('PaymentChannelFund: missing Amount')
56
+ }
57
+
58
+ if (typeof tx.Amount !== 'string') {
59
+ throw new ValidationError('PaymentChannelFund: Amount must be a string')
60
+ }
61
+
62
+ if (tx.Expiration !== undefined && typeof tx.Expiration !== 'number') {
63
+ throw new ValidationError('PaymentChannelFund: Expiration must be a number')
64
+ }
65
+ }
@@ -0,0 +1,48 @@
1
+ import { BaseTransaction } from './common'
2
+
3
+ export interface SetFeePreAmendment extends BaseTransaction {
4
+ /**
5
+ * The charge, in drops of XRP, for the reference transaction, as hex. (This is the transaction cost before scaling for load.)
6
+ */
7
+ BaseFee: string
8
+ /**
9
+ * The cost, in fee units, of the [reference transaction](https://xrpl.org/transaction-cost.html#reference-transaction-cost)
10
+ */
11
+ ReferenceFeeUnits: number
12
+ /**
13
+ * The base reserve, in drops
14
+ */
15
+ ReserveBase: number
16
+ /**
17
+ * The incremental reserve, in drops
18
+ */
19
+ ReserveIncrement: number
20
+ }
21
+
22
+ export interface SetFeePostAmendment extends BaseTransaction {
23
+ /**
24
+ * The charge, in drops of XRP, for the reference transaction. (This is the transaction cost before scaling for load.)
25
+ */
26
+ BaseFeeDrops: string
27
+ /**
28
+ * The base reserve, in drops
29
+ */
30
+ ReserveBaseDrops: string
31
+ /**
32
+ * The incremental reserve, in drops
33
+ */
34
+ ReserveIncrementDrops: string
35
+ }
36
+
37
+ /**
38
+ * Marks a change in transaction cost or reserve requirements as a result of Fee Voting.
39
+ *
40
+ * The output will be based on the status of the `XRPFees` amendment at the time of this transaction.
41
+ * - Before: {@link SetFeePostAmendment}
42
+ * - After: {@link SetFeePostAmendment}
43
+ *
44
+ * @category Pseudo Transaction Models
45
+ */
46
+ export type SetFee = {
47
+ TransactionType: 'SetFee'
48
+ } & (SetFeePreAmendment | SetFeePostAmendment)
@@ -0,0 +1,33 @@
1
+ import { ValidationError } from '../../errors'
2
+
3
+ import { BaseTransaction, validateBaseTransaction } from './common'
4
+
5
+ /**
6
+ * A SetRegularKey transaction assigns, changes, or removes the regular key
7
+ * pair associated with an account.
8
+ *
9
+ * @category Transaction Models
10
+ */
11
+ export interface SetRegularKey extends BaseTransaction {
12
+ TransactionType: 'SetRegularKey'
13
+ /**
14
+ * A base-58-encoded Address that indicates the regular key pair to be
15
+ * assigned to the account. If omitted, removes any existing regular key pair.
16
+ * from the account. Must not match the master key pair for the address.
17
+ */
18
+ RegularKey?: string
19
+ }
20
+
21
+ /**
22
+ * Verify the form and type of a SetRegularKey at runtime.
23
+ *
24
+ * @param tx - A SetRegularKey Transaction.
25
+ * @throws When the SetRegularKey is malformed.
26
+ */
27
+ export function validateSetRegularKey(tx: Record<string, unknown>): void {
28
+ validateBaseTransaction(tx)
29
+
30
+ if (tx.RegularKey !== undefined && typeof tx.RegularKey !== 'string') {
31
+ throw new ValidationError('SetRegularKey: RegularKey must be a string')
32
+ }
33
+ }
@@ -0,0 +1,89 @@
1
+ import { ValidationError } from '../../errors'
2
+ import { SignerEntry } from '../common'
3
+
4
+ import { BaseTransaction, validateBaseTransaction } from './common'
5
+
6
+ /**
7
+ * The SignerListSet transaction creates, replaces, or removes a list of
8
+ * signers that can be used to multi-sign a transaction.
9
+ *
10
+ * @category Transaction Models
11
+ */
12
+ export interface SignerListSet extends BaseTransaction {
13
+ TransactionType: 'SignerListSet'
14
+ /**
15
+ * A target number for the signer weights. A multi-signature from this list
16
+ * is valid only if the sum weights of the signatures provided is greater than
17
+ * or equal to this value. To delete a signer list, use the value 0.
18
+ */
19
+ SignerQuorum: number
20
+ /**
21
+ * Array of SignerEntry objects, indicating the addresses and weights of
22
+ * signers in this list. This signer list must have at least 1 member and no
23
+ * more than 32 members. No address may appear more than once in the list, nor
24
+ * may the Account submitting the transaction appear in the list.
25
+ */
26
+ SignerEntries?: SignerEntry[]
27
+ }
28
+
29
+ const MAX_SIGNERS = 32
30
+
31
+ const HEX_WALLET_LOCATOR_REGEX = /^[0-9A-Fa-f]{64}$/u
32
+
33
+ /**
34
+ * Verify the form and type of an SignerListSet at runtime.
35
+ *
36
+ * @param tx - An SignerListSet Transaction.
37
+ * @throws When the SignerListSet is Malformed.
38
+ */
39
+ // eslint-disable-next-line complexity -- validation can be complex
40
+ export function validateSignerListSet(tx: Record<string, unknown>): void {
41
+ validateBaseTransaction(tx)
42
+
43
+ if (tx.SignerQuorum === undefined) {
44
+ throw new ValidationError('SignerListSet: missing field SignerQuorum')
45
+ }
46
+
47
+ if (typeof tx.SignerQuorum !== 'number') {
48
+ throw new ValidationError('SignerListSet: invalid SignerQuorum')
49
+ }
50
+
51
+ // All other checks are for if SignerQuorum is greater than 0
52
+ if (tx.SignerQuorum === 0) {
53
+ return
54
+ }
55
+
56
+ if (tx.SignerEntries === undefined) {
57
+ throw new ValidationError('SignerListSet: missing field SignerEntries')
58
+ }
59
+
60
+ if (!Array.isArray(tx.SignerEntries)) {
61
+ throw new ValidationError('SignerListSet: invalid SignerEntries')
62
+ }
63
+
64
+ if (tx.SignerEntries.length === 0) {
65
+ throw new ValidationError(
66
+ 'SignerListSet: need at least 1 member in SignerEntries',
67
+ )
68
+ }
69
+
70
+ if (tx.SignerEntries.length > MAX_SIGNERS) {
71
+ throw new ValidationError(
72
+ `SignerListSet: maximum of ${MAX_SIGNERS} members allowed in SignerEntries`,
73
+ )
74
+ }
75
+
76
+ for (const entry of tx.SignerEntries) {
77
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Should be a SignerEntry
78
+ const signerEntry = entry as SignerEntry
79
+ const { WalletLocator } = signerEntry.SignerEntry
80
+ if (
81
+ WalletLocator !== undefined &&
82
+ !HEX_WALLET_LOCATOR_REGEX.test(WalletLocator)
83
+ ) {
84
+ throw new ValidationError(
85
+ `SignerListSet: WalletLocator in SignerEntry must be a 256-bit (32-byte) hexadecimal value`,
86
+ )
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,50 @@
1
+ import { ValidationError } from '../../errors'
2
+
3
+ import { BaseTransaction, validateBaseTransaction } from './common'
4
+
5
+ /**
6
+ * A TicketCreate transaction sets aside one or more sequence numbers as
7
+ * Tickets.
8
+ *
9
+ * @category Transaction Models
10
+ */
11
+ export interface TicketCreate extends BaseTransaction {
12
+ TransactionType: 'TicketCreate'
13
+ /**
14
+ * How many Tickets to create. This must be a positive number and cannot
15
+ * cause the account to own more than 250 Tickets after executing this
16
+ * transaction.
17
+ */
18
+ TicketCount: number
19
+ }
20
+
21
+ const MAX_TICKETS = 250
22
+
23
+ /**
24
+ * Verify the form and type of a TicketCreate at runtime.
25
+ *
26
+ * @param tx - A TicketCreate Transaction.
27
+ * @throws When the TicketCreate is malformed.
28
+ */
29
+ export function validateTicketCreate(tx: Record<string, unknown>): void {
30
+ validateBaseTransaction(tx)
31
+ const { TicketCount } = tx
32
+
33
+ if (TicketCount === undefined) {
34
+ throw new ValidationError('TicketCreate: missing field TicketCount')
35
+ }
36
+
37
+ if (typeof TicketCount !== 'number') {
38
+ throw new ValidationError('TicketCreate: TicketCount must be a number')
39
+ }
40
+
41
+ if (
42
+ !Number.isInteger(TicketCount) ||
43
+ TicketCount < 1 ||
44
+ TicketCount > MAX_TICKETS
45
+ ) {
46
+ throw new ValidationError(
47
+ 'TicketCreate: TicketCount must be an integer from 1 to 250',
48
+ )
49
+ }
50
+ }
@@ -0,0 +1,303 @@
1
+ /* eslint-disable complexity -- verifies 19 tx types hence a lot of checks needed */
2
+ /* eslint-disable max-lines-per-function -- need to work with a lot of Tx verifications */
3
+
4
+ import { ValidationError } from '../../errors'
5
+ import { IssuedCurrencyAmount, Memo } from '../common'
6
+ import { isHex } from '../utils'
7
+ import { setTransactionFlagsToNumber } from '../utils/flags'
8
+
9
+ import { AccountDelete, validateAccountDelete } from './accountDelete'
10
+ import { AccountSet, validateAccountSet } from './accountSet'
11
+ import { AMMBid, validateAMMBid } from './AMMBid'
12
+ import { AMMCreate, validateAMMCreate } from './AMMCreate'
13
+ import { AMMDelete, validateAMMDelete } from './AMMDelete'
14
+ import { AMMDeposit, validateAMMDeposit } from './AMMDeposit'
15
+ import { AMMVote, validateAMMVote } from './AMMVote'
16
+ import { AMMWithdraw, validateAMMWithdraw } from './AMMWithdraw'
17
+ import { CheckCancel, validateCheckCancel } from './checkCancel'
18
+ import { CheckCash, validateCheckCash } from './checkCash'
19
+ import { CheckCreate, validateCheckCreate } from './checkCreate'
20
+ import { Clawback, validateClawback } from './clawback'
21
+ import { isIssuedCurrency } from './common'
22
+ import { DepositPreauth, validateDepositPreauth } from './depositPreauth'
23
+ import { EscrowCancel, validateEscrowCancel } from './escrowCancel'
24
+ import { EscrowCreate, validateEscrowCreate } from './escrowCreate'
25
+ import { EscrowFinish, validateEscrowFinish } from './escrowFinish'
26
+ import { TransactionMetadata } from './metadata'
27
+ import {
28
+ NFTokenAcceptOffer,
29
+ validateNFTokenAcceptOffer,
30
+ } from './NFTokenAcceptOffer'
31
+ import { NFTokenBurn, validateNFTokenBurn } from './NFTokenBurn'
32
+ import {
33
+ NFTokenCancelOffer,
34
+ validateNFTokenCancelOffer,
35
+ } from './NFTokenCancelOffer'
36
+ import {
37
+ NFTokenCreateOffer,
38
+ validateNFTokenCreateOffer,
39
+ } from './NFTokenCreateOffer'
40
+ import { NFTokenMint, validateNFTokenMint } from './NFTokenMint'
41
+ import { OfferCancel, validateOfferCancel } from './offerCancel'
42
+ import { OfferCreate, validateOfferCreate } from './offerCreate'
43
+ import { Payment, validatePayment } from './payment'
44
+ import {
45
+ PaymentChannelClaim,
46
+ validatePaymentChannelClaim,
47
+ } from './paymentChannelClaim'
48
+ import {
49
+ PaymentChannelCreate,
50
+ validatePaymentChannelCreate,
51
+ } from './paymentChannelCreate'
52
+ import {
53
+ PaymentChannelFund,
54
+ validatePaymentChannelFund,
55
+ } from './paymentChannelFund'
56
+ import { SetRegularKey, validateSetRegularKey } from './setRegularKey'
57
+ import { SignerListSet, validateSignerListSet } from './signerListSet'
58
+ import { TicketCreate, validateTicketCreate } from './ticketCreate'
59
+ import { TrustSet, validateTrustSet } from './trustSet'
60
+
61
+ /**
62
+ * @category Transaction Models
63
+ */
64
+ export type Transaction =
65
+ | AccountDelete
66
+ | AccountSet
67
+ | AMMBid
68
+ | AMMDelete
69
+ | AMMDeposit
70
+ | AMMCreate
71
+ | AMMVote
72
+ | AMMWithdraw
73
+ | CheckCancel
74
+ | CheckCash
75
+ | CheckCreate
76
+ | Clawback
77
+ | DepositPreauth
78
+ | EscrowCancel
79
+ | EscrowCreate
80
+ | EscrowFinish
81
+ | NFTokenAcceptOffer
82
+ | NFTokenBurn
83
+ | NFTokenCancelOffer
84
+ | NFTokenCreateOffer
85
+ | NFTokenMint
86
+ | OfferCancel
87
+ | OfferCreate
88
+ | Payment
89
+ | PaymentChannelClaim
90
+ | PaymentChannelCreate
91
+ | PaymentChannelFund
92
+ | SetRegularKey
93
+ | SignerListSet
94
+ | TicketCreate
95
+ | TrustSet
96
+
97
+ /**
98
+ * @category Transaction Models
99
+ */
100
+ export interface TransactionAndMetadata {
101
+ transaction: Transaction
102
+ metadata: TransactionMetadata
103
+ }
104
+
105
+ /**
106
+ * Verifies various Transaction Types.
107
+ * Encode/decode and individual type validation.
108
+ *
109
+ * @param transaction - A Transaction.
110
+ * @throws ValidationError When the Transaction is malformed.
111
+ * @category Utilities
112
+ */
113
+ export function validate(transaction: Record<string, unknown>): void {
114
+ const tx = { ...transaction }
115
+ if (tx.TransactionType == null) {
116
+ throw new ValidationError('Object does not have a `TransactionType`')
117
+ }
118
+ if (typeof tx.TransactionType !== 'string') {
119
+ throw new ValidationError("Object's `TransactionType` is not a string")
120
+ }
121
+
122
+ /*
123
+ * - Memos have exclusively hex data.
124
+ */
125
+ if (tx.Memos != null && typeof tx.Memos !== 'object') {
126
+ throw new ValidationError('Memo must be array')
127
+ }
128
+ if (tx.Memos != null) {
129
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed here
130
+ ;(tx.Memos as Array<Memo | null>).forEach((memo) => {
131
+ if (memo?.Memo == null) {
132
+ throw new ValidationError('Memo data must be in a `Memo` field')
133
+ }
134
+ if (memo.Memo.MemoData) {
135
+ if (!isHex(memo.Memo.MemoData)) {
136
+ throw new ValidationError('MemoData field must be a hex value')
137
+ }
138
+ }
139
+
140
+ if (memo.Memo.MemoType) {
141
+ if (!isHex(memo.Memo.MemoType)) {
142
+ throw new ValidationError('MemoType field must be a hex value')
143
+ }
144
+ }
145
+
146
+ if (memo.Memo.MemoFormat) {
147
+ if (!isHex(memo.Memo.MemoFormat)) {
148
+ throw new ValidationError('MemoFormat field must be a hex value')
149
+ }
150
+ }
151
+ })
152
+ }
153
+
154
+ Object.keys(tx).forEach((key) => {
155
+ const standard_currency_code_len = 3
156
+ if (tx[key] && isIssuedCurrency(tx[key])) {
157
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed
158
+ const txCurrency = (tx[key] as IssuedCurrencyAmount).currency
159
+
160
+ if (
161
+ txCurrency.length === standard_currency_code_len &&
162
+ txCurrency.toUpperCase() === 'XRP'
163
+ ) {
164
+ throw new ValidationError(
165
+ `Cannot have an issued currency with a similar standard code to XRP (received '${txCurrency}'). XRP is not an issued currency.`,
166
+ )
167
+ }
168
+ }
169
+ })
170
+
171
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- okay here
172
+ setTransactionFlagsToNumber(tx as unknown as Transaction)
173
+ switch (tx.TransactionType) {
174
+ case 'AccountDelete':
175
+ validateAccountDelete(tx)
176
+ break
177
+
178
+ case 'AccountSet':
179
+ validateAccountSet(tx)
180
+ break
181
+
182
+ case 'AMMBid':
183
+ validateAMMBid(tx)
184
+ break
185
+
186
+ case 'AMMDelete':
187
+ validateAMMDelete(tx)
188
+ break
189
+
190
+ case 'AMMDeposit':
191
+ validateAMMDeposit(tx)
192
+ break
193
+
194
+ case 'AMMCreate':
195
+ validateAMMCreate(tx)
196
+ break
197
+
198
+ case 'AMMVote':
199
+ validateAMMVote(tx)
200
+ break
201
+
202
+ case 'AMMWithdraw':
203
+ validateAMMWithdraw(tx)
204
+ break
205
+
206
+ case 'CheckCancel':
207
+ validateCheckCancel(tx)
208
+ break
209
+
210
+ case 'CheckCash':
211
+ validateCheckCash(tx)
212
+ break
213
+
214
+ case 'CheckCreate':
215
+ validateCheckCreate(tx)
216
+ break
217
+
218
+ case 'Clawback':
219
+ validateClawback(tx)
220
+ break
221
+
222
+ case 'DepositPreauth':
223
+ validateDepositPreauth(tx)
224
+ break
225
+
226
+ case 'EscrowCancel':
227
+ validateEscrowCancel(tx)
228
+ break
229
+
230
+ case 'EscrowCreate':
231
+ validateEscrowCreate(tx)
232
+ break
233
+
234
+ case 'EscrowFinish':
235
+ validateEscrowFinish(tx)
236
+ break
237
+
238
+ case 'NFTokenAcceptOffer':
239
+ validateNFTokenAcceptOffer(tx)
240
+ break
241
+
242
+ case 'NFTokenBurn':
243
+ validateNFTokenBurn(tx)
244
+ break
245
+
246
+ case 'NFTokenCancelOffer':
247
+ validateNFTokenCancelOffer(tx)
248
+ break
249
+
250
+ case 'NFTokenCreateOffer':
251
+ validateNFTokenCreateOffer(tx)
252
+ break
253
+
254
+ case 'NFTokenMint':
255
+ validateNFTokenMint(tx)
256
+ break
257
+
258
+ case 'OfferCancel':
259
+ validateOfferCancel(tx)
260
+ break
261
+
262
+ case 'OfferCreate':
263
+ validateOfferCreate(tx)
264
+ break
265
+
266
+ case 'Payment':
267
+ validatePayment(tx)
268
+ break
269
+
270
+ case 'PaymentChannelClaim':
271
+ validatePaymentChannelClaim(tx)
272
+ break
273
+
274
+ case 'PaymentChannelCreate':
275
+ validatePaymentChannelCreate(tx)
276
+ break
277
+
278
+ case 'PaymentChannelFund':
279
+ validatePaymentChannelFund(tx)
280
+ break
281
+
282
+ case 'SetRegularKey':
283
+ validateSetRegularKey(tx)
284
+ break
285
+
286
+ case 'SignerListSet':
287
+ validateSignerListSet(tx)
288
+ break
289
+
290
+ case 'TicketCreate':
291
+ validateTicketCreate(tx)
292
+ break
293
+
294
+ case 'TrustSet':
295
+ validateTrustSet(tx)
296
+ break
297
+
298
+ default:
299
+ throw new ValidationError(
300
+ `Invalid field TransactionType: ${tx.TransactionType}`,
301
+ )
302
+ }
303
+ }