xrpl 2.10.0 → 2.12.0-beta.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 (414) 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 +1308 -33
  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 +11 -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 +2 -0
  23. package/dist/npm/models/ledger/AccountRoot.d.ts.map +1 -1
  24. package/dist/npm/models/ledger/AccountRoot.js +1 -0
  25. package/dist/npm/models/ledger/AccountRoot.js.map +1 -1
  26. package/dist/npm/models/ledger/Bridge.d.ts +17 -0
  27. package/dist/npm/models/ledger/Bridge.d.ts.map +1 -0
  28. package/dist/npm/models/ledger/Bridge.js +3 -0
  29. package/dist/npm/models/ledger/Bridge.js.map +1 -0
  30. package/dist/npm/models/ledger/LedgerEntry.d.ts +5 -1
  31. package/dist/npm/models/ledger/LedgerEntry.d.ts.map +1 -1
  32. package/dist/npm/models/ledger/XChainOwnedClaimID.d.ts +16 -0
  33. package/dist/npm/models/ledger/XChainOwnedClaimID.d.ts.map +1 -0
  34. package/dist/npm/models/ledger/XChainOwnedClaimID.js +3 -0
  35. package/dist/npm/models/ledger/XChainOwnedClaimID.js.map +1 -0
  36. package/dist/npm/models/ledger/XChainOwnedCreateAccountClaimID.d.ts +14 -0
  37. package/dist/npm/models/ledger/XChainOwnedCreateAccountClaimID.d.ts.map +1 -0
  38. package/dist/npm/models/ledger/XChainOwnedCreateAccountClaimID.js +3 -0
  39. package/dist/npm/models/ledger/XChainOwnedCreateAccountClaimID.js.map +1 -0
  40. package/dist/npm/models/ledger/index.d.ts +4 -1
  41. package/dist/npm/models/ledger/index.d.ts.map +1 -1
  42. package/dist/npm/models/ledger/index.js.map +1 -1
  43. package/dist/npm/models/methods/accountObjects.d.ts +3 -3
  44. package/dist/npm/models/methods/accountObjects.d.ts.map +1 -1
  45. package/dist/npm/models/methods/ammInfo.d.ts +39 -0
  46. package/dist/npm/models/methods/ammInfo.d.ts.map +1 -0
  47. package/dist/npm/models/methods/ammInfo.js +3 -0
  48. package/dist/npm/models/methods/ammInfo.js.map +1 -0
  49. package/dist/npm/models/methods/index.d.ts +4 -3
  50. package/dist/npm/models/methods/index.d.ts.map +1 -1
  51. package/dist/npm/models/methods/ledgerEntry.d.ts +27 -0
  52. package/dist/npm/models/methods/ledgerEntry.d.ts.map +1 -1
  53. package/dist/npm/models/transactions/AMMBid.d.ts +12 -0
  54. package/dist/npm/models/transactions/AMMBid.d.ts.map +1 -0
  55. package/dist/npm/models/transactions/AMMBid.js +56 -0
  56. package/dist/npm/models/transactions/AMMBid.js.map +1 -0
  57. package/dist/npm/models/transactions/AMMCreate.d.ts +11 -0
  58. package/dist/npm/models/transactions/AMMCreate.d.ts.map +1 -0
  59. package/dist/npm/models/transactions/AMMCreate.js +32 -0
  60. package/dist/npm/models/transactions/AMMCreate.js.map +1 -0
  61. package/dist/npm/models/transactions/AMMDelete.d.ts +9 -0
  62. package/dist/npm/models/transactions/AMMDelete.d.ts.map +1 -0
  63. package/dist/npm/models/transactions/AMMDelete.js +22 -0
  64. package/dist/npm/models/transactions/AMMDelete.js.map +1 -0
  65. package/dist/npm/models/transactions/AMMDeposit.d.ts +27 -0
  66. package/dist/npm/models/transactions/AMMDeposit.d.ts.map +1 -0
  67. package/dist/npm/models/transactions/AMMDeposit.js +51 -0
  68. package/dist/npm/models/transactions/AMMDeposit.js.map +1 -0
  69. package/dist/npm/models/transactions/AMMVote.d.ts +10 -0
  70. package/dist/npm/models/transactions/AMMVote.d.ts.map +1 -0
  71. package/dist/npm/models/transactions/AMMVote.js +32 -0
  72. package/dist/npm/models/transactions/AMMVote.js.map +1 -0
  73. package/dist/npm/models/transactions/AMMWithdraw.d.ts +31 -0
  74. package/dist/npm/models/transactions/AMMWithdraw.d.ts.map +1 -0
  75. package/dist/npm/models/transactions/AMMWithdraw.js +50 -0
  76. package/dist/npm/models/transactions/AMMWithdraw.js.map +1 -0
  77. package/dist/npm/models/transactions/XChainAccountCreateCommit.d.ts +11 -0
  78. package/dist/npm/models/transactions/XChainAccountCreateCommit.d.ts.map +1 -0
  79. package/dist/npm/models/transactions/XChainAccountCreateCommit.js +35 -0
  80. package/dist/npm/models/transactions/XChainAccountCreateCommit.js.map +1 -0
  81. package/dist/npm/models/transactions/XChainAddAccountCreateAttestation.d.ts +18 -0
  82. package/dist/npm/models/transactions/XChainAddAccountCreateAttestation.d.ts.map +1 -0
  83. package/dist/npm/models/transactions/XChainAddAccountCreateAttestation.js +77 -0
  84. package/dist/npm/models/transactions/XChainAddAccountCreateAttestation.js.map +1 -0
  85. package/dist/npm/models/transactions/XChainAddClaimAttestation.d.ts +17 -0
  86. package/dist/npm/models/transactions/XChainAddClaimAttestation.d.ts.map +1 -0
  87. package/dist/npm/models/transactions/XChainAddClaimAttestation.js +68 -0
  88. package/dist/npm/models/transactions/XChainAddClaimAttestation.js.map +1 -0
  89. package/dist/npm/models/transactions/XChainClaim.d.ts +12 -0
  90. package/dist/npm/models/transactions/XChainClaim.d.ts.map +1 -0
  91. package/dist/npm/models/transactions/XChainClaim.js +39 -0
  92. package/dist/npm/models/transactions/XChainClaim.js.map +1 -0
  93. package/dist/npm/models/transactions/XChainCommit.d.ts +11 -0
  94. package/dist/npm/models/transactions/XChainCommit.d.ts.map +1 -0
  95. package/dist/npm/models/transactions/XChainCommit.js +33 -0
  96. package/dist/npm/models/transactions/XChainCommit.js.map +1 -0
  97. package/dist/npm/models/transactions/XChainCreateBridge.d.ts +10 -0
  98. package/dist/npm/models/transactions/XChainCreateBridge.d.ts.map +1 -0
  99. package/dist/npm/models/transactions/XChainCreateBridge.js +26 -0
  100. package/dist/npm/models/transactions/XChainCreateBridge.js.map +1 -0
  101. package/dist/npm/models/transactions/XChainCreateClaimID.d.ts +10 -0
  102. package/dist/npm/models/transactions/XChainCreateClaimID.d.ts.map +1 -0
  103. package/dist/npm/models/transactions/XChainCreateClaimID.js +28 -0
  104. package/dist/npm/models/transactions/XChainCreateClaimID.js.map +1 -0
  105. package/dist/npm/models/transactions/XChainModifyBridge.d.ts +17 -0
  106. package/dist/npm/models/transactions/XChainModifyBridge.d.ts.map +1 -0
  107. package/dist/npm/models/transactions/XChainModifyBridge.js +27 -0
  108. package/dist/npm/models/transactions/XChainModifyBridge.js.map +1 -0
  109. package/dist/npm/models/transactions/common.d.ts +3 -1
  110. package/dist/npm/models/transactions/common.d.ts.map +1 -1
  111. package/dist/npm/models/transactions/common.js +22 -1
  112. package/dist/npm/models/transactions/common.js.map +1 -1
  113. package/dist/npm/models/transactions/index.d.ts +15 -1
  114. package/dist/npm/models/transactions/index.d.ts.map +1 -1
  115. package/dist/npm/models/transactions/index.js +7 -1
  116. package/dist/npm/models/transactions/index.js.map +1 -1
  117. package/dist/npm/models/transactions/transaction.d.ts +15 -1
  118. package/dist/npm/models/transactions/transaction.d.ts.map +1 -1
  119. package/dist/npm/models/transactions/transaction.js +56 -0
  120. package/dist/npm/models/transactions/transaction.js.map +1 -1
  121. package/dist/npm/models/utils/flags.d.ts.map +1 -1
  122. package/dist/npm/models/utils/flags.js +18 -21
  123. package/dist/npm/models/utils/flags.js.map +1 -1
  124. package/dist/npm/snippets/src/bridgeTransfer.d.ts +2 -0
  125. package/dist/npm/snippets/src/bridgeTransfer.d.ts.map +1 -0
  126. package/dist/npm/snippets/src/bridgeTransfer.js +124 -0
  127. package/dist/npm/snippets/src/bridgeTransfer.js.map +1 -0
  128. package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
  129. package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts +7 -0
  130. package/dist/npm/src/Wallet/walletFromSecretNumbers.d.ts.map +1 -0
  131. package/dist/npm/src/Wallet/walletFromSecretNumbers.js +27 -0
  132. package/dist/npm/src/Wallet/walletFromSecretNumbers.js.map +1 -0
  133. package/dist/npm/src/client/index.d.ts +2 -1
  134. package/dist/npm/src/client/index.d.ts.map +1 -1
  135. package/dist/npm/src/client/index.js.map +1 -1
  136. package/dist/npm/src/index.d.ts +1 -0
  137. package/dist/npm/src/index.d.ts.map +1 -1
  138. package/dist/npm/src/index.js +3 -1
  139. package/dist/npm/src/index.js.map +1 -1
  140. package/dist/npm/src/models/common/index.d.ts +11 -0
  141. package/dist/npm/src/models/common/index.d.ts.map +1 -1
  142. package/dist/npm/src/models/ledger/AMM.d.ts +27 -0
  143. package/dist/npm/src/models/ledger/AMM.d.ts.map +1 -0
  144. package/dist/npm/src/models/ledger/AMM.js +3 -0
  145. package/dist/npm/src/models/ledger/AMM.js.map +1 -0
  146. package/dist/npm/src/models/ledger/AccountRoot.d.ts +2 -0
  147. package/dist/npm/src/models/ledger/AccountRoot.d.ts.map +1 -1
  148. package/dist/npm/src/models/ledger/AccountRoot.js +1 -0
  149. package/dist/npm/src/models/ledger/AccountRoot.js.map +1 -1
  150. package/dist/npm/src/models/ledger/Bridge.d.ts +17 -0
  151. package/dist/npm/src/models/ledger/Bridge.d.ts.map +1 -0
  152. package/dist/npm/src/models/ledger/Bridge.js +3 -0
  153. package/dist/npm/src/models/ledger/Bridge.js.map +1 -0
  154. package/dist/npm/src/models/ledger/LedgerEntry.d.ts +5 -1
  155. package/dist/npm/src/models/ledger/LedgerEntry.d.ts.map +1 -1
  156. package/dist/npm/src/models/ledger/XChainOwnedClaimID.d.ts +16 -0
  157. package/dist/npm/src/models/ledger/XChainOwnedClaimID.d.ts.map +1 -0
  158. package/dist/npm/src/models/ledger/XChainOwnedClaimID.js +3 -0
  159. package/dist/npm/src/models/ledger/XChainOwnedClaimID.js.map +1 -0
  160. package/dist/npm/src/models/ledger/XChainOwnedCreateAccountClaimID.d.ts +14 -0
  161. package/dist/npm/src/models/ledger/XChainOwnedCreateAccountClaimID.d.ts.map +1 -0
  162. package/dist/npm/src/models/ledger/XChainOwnedCreateAccountClaimID.js +3 -0
  163. package/dist/npm/src/models/ledger/XChainOwnedCreateAccountClaimID.js.map +1 -0
  164. package/dist/npm/src/models/ledger/index.d.ts +4 -1
  165. package/dist/npm/src/models/ledger/index.d.ts.map +1 -1
  166. package/dist/npm/src/models/ledger/index.js.map +1 -1
  167. package/dist/npm/src/models/methods/accountObjects.d.ts +3 -3
  168. package/dist/npm/src/models/methods/accountObjects.d.ts.map +1 -1
  169. package/dist/npm/src/models/methods/ammInfo.d.ts +39 -0
  170. package/dist/npm/src/models/methods/ammInfo.d.ts.map +1 -0
  171. package/dist/npm/src/models/methods/ammInfo.js +3 -0
  172. package/dist/npm/src/models/methods/ammInfo.js.map +1 -0
  173. package/dist/npm/src/models/methods/index.d.ts +4 -3
  174. package/dist/npm/src/models/methods/index.d.ts.map +1 -1
  175. package/dist/npm/src/models/methods/ledgerEntry.d.ts +27 -0
  176. package/dist/npm/src/models/methods/ledgerEntry.d.ts.map +1 -1
  177. package/dist/npm/src/models/transactions/AMMBid.d.ts +12 -0
  178. package/dist/npm/src/models/transactions/AMMBid.d.ts.map +1 -0
  179. package/dist/npm/src/models/transactions/AMMBid.js +56 -0
  180. package/dist/npm/src/models/transactions/AMMBid.js.map +1 -0
  181. package/dist/npm/src/models/transactions/AMMCreate.d.ts +11 -0
  182. package/dist/npm/src/models/transactions/AMMCreate.d.ts.map +1 -0
  183. package/dist/npm/src/models/transactions/AMMCreate.js +32 -0
  184. package/dist/npm/src/models/transactions/AMMCreate.js.map +1 -0
  185. package/dist/npm/src/models/transactions/AMMDelete.d.ts +9 -0
  186. package/dist/npm/src/models/transactions/AMMDelete.d.ts.map +1 -0
  187. package/dist/npm/src/models/transactions/AMMDelete.js +22 -0
  188. package/dist/npm/src/models/transactions/AMMDelete.js.map +1 -0
  189. package/dist/npm/src/models/transactions/AMMDeposit.d.ts +27 -0
  190. package/dist/npm/src/models/transactions/AMMDeposit.d.ts.map +1 -0
  191. package/dist/npm/src/models/transactions/AMMDeposit.js +51 -0
  192. package/dist/npm/src/models/transactions/AMMDeposit.js.map +1 -0
  193. package/dist/npm/src/models/transactions/AMMVote.d.ts +10 -0
  194. package/dist/npm/src/models/transactions/AMMVote.d.ts.map +1 -0
  195. package/dist/npm/src/models/transactions/AMMVote.js +32 -0
  196. package/dist/npm/src/models/transactions/AMMVote.js.map +1 -0
  197. package/dist/npm/src/models/transactions/AMMWithdraw.d.ts +31 -0
  198. package/dist/npm/src/models/transactions/AMMWithdraw.d.ts.map +1 -0
  199. package/dist/npm/src/models/transactions/AMMWithdraw.js +50 -0
  200. package/dist/npm/src/models/transactions/AMMWithdraw.js.map +1 -0
  201. package/dist/npm/src/models/transactions/XChainAccountCreateCommit.d.ts +11 -0
  202. package/dist/npm/src/models/transactions/XChainAccountCreateCommit.d.ts.map +1 -0
  203. package/dist/npm/src/models/transactions/XChainAccountCreateCommit.js +35 -0
  204. package/dist/npm/src/models/transactions/XChainAccountCreateCommit.js.map +1 -0
  205. package/dist/npm/src/models/transactions/XChainAddAccountCreateAttestation.d.ts +18 -0
  206. package/dist/npm/src/models/transactions/XChainAddAccountCreateAttestation.d.ts.map +1 -0
  207. package/dist/npm/src/models/transactions/XChainAddAccountCreateAttestation.js +77 -0
  208. package/dist/npm/src/models/transactions/XChainAddAccountCreateAttestation.js.map +1 -0
  209. package/dist/npm/src/models/transactions/XChainAddClaimAttestation.d.ts +17 -0
  210. package/dist/npm/src/models/transactions/XChainAddClaimAttestation.d.ts.map +1 -0
  211. package/dist/npm/src/models/transactions/XChainAddClaimAttestation.js +68 -0
  212. package/dist/npm/src/models/transactions/XChainAddClaimAttestation.js.map +1 -0
  213. package/dist/npm/src/models/transactions/XChainClaim.d.ts +12 -0
  214. package/dist/npm/src/models/transactions/XChainClaim.d.ts.map +1 -0
  215. package/dist/npm/src/models/transactions/XChainClaim.js +39 -0
  216. package/dist/npm/src/models/transactions/XChainClaim.js.map +1 -0
  217. package/dist/npm/src/models/transactions/XChainCommit.d.ts +11 -0
  218. package/dist/npm/src/models/transactions/XChainCommit.d.ts.map +1 -0
  219. package/dist/npm/src/models/transactions/XChainCommit.js +33 -0
  220. package/dist/npm/src/models/transactions/XChainCommit.js.map +1 -0
  221. package/dist/npm/src/models/transactions/XChainCreateBridge.d.ts +10 -0
  222. package/dist/npm/src/models/transactions/XChainCreateBridge.d.ts.map +1 -0
  223. package/dist/npm/src/models/transactions/XChainCreateBridge.js +26 -0
  224. package/dist/npm/src/models/transactions/XChainCreateBridge.js.map +1 -0
  225. package/dist/npm/src/models/transactions/XChainCreateClaimID.d.ts +10 -0
  226. package/dist/npm/src/models/transactions/XChainCreateClaimID.d.ts.map +1 -0
  227. package/dist/npm/src/models/transactions/XChainCreateClaimID.js +28 -0
  228. package/dist/npm/src/models/transactions/XChainCreateClaimID.js.map +1 -0
  229. package/dist/npm/src/models/transactions/XChainModifyBridge.d.ts +17 -0
  230. package/dist/npm/src/models/transactions/XChainModifyBridge.d.ts.map +1 -0
  231. package/dist/npm/src/models/transactions/XChainModifyBridge.js +27 -0
  232. package/dist/npm/src/models/transactions/XChainModifyBridge.js.map +1 -0
  233. package/dist/npm/src/models/transactions/common.d.ts +3 -1
  234. package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
  235. package/dist/npm/src/models/transactions/common.js +22 -1
  236. package/dist/npm/src/models/transactions/common.js.map +1 -1
  237. package/dist/npm/src/models/transactions/index.d.ts +15 -1
  238. package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
  239. package/dist/npm/src/models/transactions/index.js +7 -1
  240. package/dist/npm/src/models/transactions/index.js.map +1 -1
  241. package/dist/npm/src/models/transactions/transaction.d.ts +15 -1
  242. package/dist/npm/src/models/transactions/transaction.d.ts.map +1 -1
  243. package/dist/npm/src/models/transactions/transaction.js +56 -0
  244. package/dist/npm/src/models/transactions/transaction.js.map +1 -1
  245. package/dist/npm/src/models/utils/flags.d.ts.map +1 -1
  246. package/dist/npm/src/models/utils/flags.js +18 -21
  247. package/dist/npm/src/models/utils/flags.js.map +1 -1
  248. package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
  249. package/dist/npm/src/sugar/autofill.js +4 -3
  250. package/dist/npm/src/sugar/autofill.js.map +1 -1
  251. package/dist/npm/sugar/autofill.d.ts.map +1 -1
  252. package/dist/npm/sugar/autofill.js +4 -3
  253. package/dist/npm/sugar/autofill.js.map +1 -1
  254. package/package.json +8 -6
  255. package/src/ECDSA.ts +6 -0
  256. package/src/Wallet/defaultFaucets.ts +82 -0
  257. package/src/Wallet/fundWallet.ts +344 -0
  258. package/src/Wallet/index.ts +504 -0
  259. package/src/Wallet/rfc1751.ts +190 -0
  260. package/src/Wallet/rfc1751Words.json +243 -0
  261. package/src/Wallet/signer.ts +173 -0
  262. package/src/Wallet/walletFromSecretNumbers.ts +37 -0
  263. package/src/client/BroadcastClient.ts +84 -0
  264. package/src/client/ConnectionManager.ts +40 -0
  265. package/src/client/ExponentialBackoff.ts +71 -0
  266. package/src/client/RequestManager.ts +194 -0
  267. package/src/client/WSWrapper.ts +106 -0
  268. package/src/client/connection.ts +593 -0
  269. package/src/client/index.ts +712 -0
  270. package/src/client/partialPayment.ts +153 -0
  271. package/src/errors.ts +161 -0
  272. package/src/index.ts +20 -0
  273. package/src/models/common/index.ts +156 -0
  274. package/src/models/index.ts +16 -0
  275. package/src/models/ledger/AMM.ts +78 -0
  276. package/src/models/ledger/AccountRoot.ts +217 -0
  277. package/src/models/ledger/Amendments.ts +45 -0
  278. package/src/models/ledger/BaseLedgerEntry.ts +3 -0
  279. package/src/models/ledger/Bridge.ts +84 -0
  280. package/src/models/ledger/Check.ts +70 -0
  281. package/src/models/ledger/DepositPreauth.ts +35 -0
  282. package/src/models/ledger/DirectoryNode.ts +46 -0
  283. package/src/models/ledger/Escrow.ts +74 -0
  284. package/src/models/ledger/FeeSettings.ts +52 -0
  285. package/src/models/ledger/Ledger.ts +65 -0
  286. package/src/models/ledger/LedgerEntry.ts +40 -0
  287. package/src/models/ledger/LedgerHashes.ts +24 -0
  288. package/src/models/ledger/NFTokenOffer.ts +16 -0
  289. package/src/models/ledger/NFTokenPage.ts +20 -0
  290. package/src/models/ledger/NegativeUNL.ts +34 -0
  291. package/src/models/ledger/Offer.ts +52 -0
  292. package/src/models/ledger/PayChannel.ts +107 -0
  293. package/src/models/ledger/RippleState.ts +88 -0
  294. package/src/models/ledger/SignerList.ts +56 -0
  295. package/src/models/ledger/Ticket.ts +36 -0
  296. package/src/models/ledger/XChainOwnedClaimID.ts +73 -0
  297. package/src/models/ledger/XChainOwnedCreateAccountClaimID.ts +60 -0
  298. package/src/models/ledger/index.ts +64 -0
  299. package/src/models/methods/accountChannels.ts +93 -0
  300. package/src/models/methods/accountCurrencies.ts +45 -0
  301. package/src/models/methods/accountInfo.ts +182 -0
  302. package/src/models/methods/accountLines.ts +137 -0
  303. package/src/models/methods/accountNFTs.ts +72 -0
  304. package/src/models/methods/accountObjects.ts +129 -0
  305. package/src/models/methods/accountOffers.ts +100 -0
  306. package/src/models/methods/accountTx.ts +109 -0
  307. package/src/models/methods/ammInfo.ts +145 -0
  308. package/src/models/methods/baseMethod.ts +58 -0
  309. package/src/models/methods/bookOffers.ts +96 -0
  310. package/src/models/methods/channelVerify.ts +41 -0
  311. package/src/models/methods/depositAuthorized.ts +56 -0
  312. package/src/models/methods/fee.ts +91 -0
  313. package/src/models/methods/gatewayBalances.ts +85 -0
  314. package/src/models/methods/index.ts +391 -0
  315. package/src/models/methods/ledger.ts +125 -0
  316. package/src/models/methods/ledgerClosed.ts +32 -0
  317. package/src/models/methods/ledgerCurrent.ts +31 -0
  318. package/src/models/methods/ledgerData.ts +78 -0
  319. package/src/models/methods/ledgerEntry.ts +202 -0
  320. package/src/models/methods/manifest.ts +54 -0
  321. package/src/models/methods/nftBuyOffers.ts +37 -0
  322. package/src/models/methods/nftHistory.ts +113 -0
  323. package/src/models/methods/nftInfo.ts +25 -0
  324. package/src/models/methods/nftSellOffers.ts +37 -0
  325. package/src/models/methods/norippleCheck.ts +82 -0
  326. package/src/models/methods/pathFind.ts +116 -0
  327. package/src/models/methods/ping.ts +21 -0
  328. package/src/models/methods/random.ts +23 -0
  329. package/src/models/methods/ripplePathFind.ts +81 -0
  330. package/src/models/methods/serverInfo.ts +257 -0
  331. package/src/models/methods/serverState.ts +77 -0
  332. package/src/models/methods/submit.ts +94 -0
  333. package/src/models/methods/submitMultisigned.ts +51 -0
  334. package/src/models/methods/subscribe.ts +435 -0
  335. package/src/models/methods/transactionEntry.ts +47 -0
  336. package/src/models/methods/tx.ts +69 -0
  337. package/src/models/methods/unsubscribe.ts +49 -0
  338. package/src/models/transactions/AMMBid.ts +140 -0
  339. package/src/models/transactions/AMMCreate.ts +80 -0
  340. package/src/models/transactions/AMMDelete.ts +55 -0
  341. package/src/models/transactions/AMMDeposit.ts +130 -0
  342. package/src/models/transactions/AMMVote.ts +71 -0
  343. package/src/models/transactions/AMMWithdraw.ts +126 -0
  344. package/src/models/transactions/NFTokenAcceptOffer.ts +104 -0
  345. package/src/models/transactions/NFTokenBurn.ts +48 -0
  346. package/src/models/transactions/NFTokenCancelOffer.ts +45 -0
  347. package/src/models/transactions/NFTokenCreateOffer.ts +145 -0
  348. package/src/models/transactions/NFTokenMint.ts +123 -0
  349. package/src/models/transactions/UNLModify.ts +20 -0
  350. package/src/models/transactions/XChainAccountCreateCommit.ts +107 -0
  351. package/src/models/transactions/XChainAddAccountCreateAttestation.ts +225 -0
  352. package/src/models/transactions/XChainAddClaimAttestation.ts +198 -0
  353. package/src/models/transactions/XChainClaim.ts +103 -0
  354. package/src/models/transactions/XChainCommit.ts +95 -0
  355. package/src/models/transactions/XChainCreateBridge.ts +78 -0
  356. package/src/models/transactions/XChainCreateClaimID.ts +78 -0
  357. package/src/models/transactions/XChainModifyBridge.ts +93 -0
  358. package/src/models/transactions/accountDelete.ts +50 -0
  359. package/src/models/transactions/accountSet.ts +228 -0
  360. package/src/models/transactions/checkCancel.ts +34 -0
  361. package/src/models/transactions/checkCash.ts +73 -0
  362. package/src/models/transactions/checkCreate.ts +90 -0
  363. package/src/models/transactions/clawback.ts +49 -0
  364. package/src/models/transactions/common.ts +320 -0
  365. package/src/models/transactions/depositPreauth.ts +68 -0
  366. package/src/models/transactions/enableAmendment.ts +26 -0
  367. package/src/models/transactions/escrowCancel.ts +45 -0
  368. package/src/models/transactions/escrowCreate.ts +100 -0
  369. package/src/models/transactions/escrowFinish.ts +63 -0
  370. package/src/models/transactions/index.ts +78 -0
  371. package/src/models/transactions/metadata.ts +69 -0
  372. package/src/models/transactions/offerCancel.ts +37 -0
  373. package/src/models/transactions/offerCreate.ts +144 -0
  374. package/src/models/transactions/payment.ts +278 -0
  375. package/src/models/transactions/paymentChannelClaim.ts +165 -0
  376. package/src/models/transactions/paymentChannelCreate.ts +116 -0
  377. package/src/models/transactions/paymentChannelFund.ts +65 -0
  378. package/src/models/transactions/setFee.ts +48 -0
  379. package/src/models/transactions/setRegularKey.ts +33 -0
  380. package/src/models/transactions/signerListSet.ts +89 -0
  381. package/src/models/transactions/ticketCreate.ts +50 -0
  382. package/src/models/transactions/transaction.ts +370 -0
  383. package/src/models/transactions/trustSet.ts +146 -0
  384. package/src/models/utils/flags.ts +103 -0
  385. package/src/models/utils/index.ts +37 -0
  386. package/src/sugar/autofill.ts +373 -0
  387. package/src/sugar/balances.ts +123 -0
  388. package/src/sugar/getFeeXrp.ts +45 -0
  389. package/src/sugar/getLedgerIndex.ts +15 -0
  390. package/src/sugar/getOrderbook.ts +152 -0
  391. package/src/sugar/index.ts +11 -0
  392. package/src/sugar/submit.ts +305 -0
  393. package/src/sugar/utils.ts +29 -0
  394. package/src/utils/derive.ts +23 -0
  395. package/src/utils/getBalanceChanges.ts +186 -0
  396. package/src/utils/getNFTokenID.ts +97 -0
  397. package/src/utils/hashes/HashPrefix.ts +40 -0
  398. package/src/utils/hashes/README.md +65 -0
  399. package/src/utils/hashes/SHAMap/InnerNode.ts +124 -0
  400. package/src/utils/hashes/SHAMap/LeafNode.ts +69 -0
  401. package/src/utils/hashes/SHAMap/index.ts +41 -0
  402. package/src/utils/hashes/SHAMap/node.ts +14 -0
  403. package/src/utils/hashes/hashLedger.ts +236 -0
  404. package/src/utils/hashes/index.ts +187 -0
  405. package/src/utils/hashes/ledgerSpaces.ts +34 -0
  406. package/src/utils/hashes/sha512Half.ts +19 -0
  407. package/src/utils/index.ts +223 -0
  408. package/src/utils/parseNFTokenID.ts +84 -0
  409. package/src/utils/quality.ts +169 -0
  410. package/src/utils/signPaymentChannelClaim.ts +27 -0
  411. package/src/utils/stringConversion.ts +27 -0
  412. package/src/utils/timeConversion.ts +53 -0
  413. package/src/utils/verifyPaymentChannelClaim.ts +30 -0
  414. package/src/utils/xrpConversion.ts +104 -0
@@ -0,0 +1,187 @@
1
+ /* eslint-disable @typescript-eslint/no-magic-numbers -- this file mimics
2
+ behavior in rippled. Magic numbers are used for lengths and conditions */
3
+ /* eslint-disable no-bitwise -- this file mimics behavior in rippled. It uses
4
+ bitwise operators for and-ing numbers with a mask and bit shifting. */
5
+
6
+ import BigNumber from 'bignumber.js'
7
+ import { decodeAccountID } from 'ripple-address-codec'
8
+
9
+ import hashLedger, {
10
+ hashLedgerHeader,
11
+ hashSignedTx,
12
+ hashTxTree,
13
+ hashStateTree,
14
+ } from './hashLedger'
15
+ import HashPrefix from './HashPrefix'
16
+ import ledgerSpaces from './ledgerSpaces'
17
+ import sha512Half from './sha512Half'
18
+
19
+ const HEX = 16
20
+ const BYTE_LENGTH = 4
21
+
22
+ function addressToHex(address: string): string {
23
+ return Buffer.from(decodeAccountID(address)).toString('hex')
24
+ }
25
+
26
+ function ledgerSpaceHex(name: keyof typeof ledgerSpaces): string {
27
+ return ledgerSpaces[name].charCodeAt(0).toString(HEX).padStart(4, '0')
28
+ }
29
+
30
+ const MASK = 0xff
31
+ function currencyToHex(currency: string): string {
32
+ if (currency.length !== 3) {
33
+ return currency
34
+ }
35
+
36
+ const bytes = Array(20).fill(0)
37
+ bytes[12] = currency.charCodeAt(0) & MASK
38
+ bytes[13] = currency.charCodeAt(1) & MASK
39
+ bytes[14] = currency.charCodeAt(2) & MASK
40
+ return Buffer.from(bytes).toString('hex')
41
+ }
42
+
43
+ /**
44
+ * Hash the given binary transaction data with the single-signing prefix.
45
+ *
46
+ * See [Serialization Format](https://xrpl.org/serialization.html).
47
+ *
48
+ * @param txBlobHex - The binary transaction blob as a hexadecimal string.
49
+ * @returns The hash to sign.
50
+ * @category Utilities
51
+ */
52
+ export function hashTx(txBlobHex: string): string {
53
+ const prefix = HashPrefix.TRANSACTION_SIGN.toString(HEX).toUpperCase()
54
+ return sha512Half(prefix + txBlobHex)
55
+ }
56
+
57
+ /**
58
+ * Compute AccountRoot Ledger Object Index.
59
+ *
60
+ * All objects in a ledger's state tree have a unique Index.
61
+ * The AccountRoot Ledger Object Index is derived by hashing the
62
+ * address with a namespace identifier. This ensures every
63
+ * Index is unique.
64
+ *
65
+ * See [Ledger Object Indexes](https://xrpl.org/ledger-object-ids.html).
66
+ *
67
+ * @param address - The classic account address.
68
+ * @returns The Ledger Object Index for the account.
69
+ * @category Utilities
70
+ */
71
+ export function hashAccountRoot(address: string): string {
72
+ return sha512Half(ledgerSpaceHex('account') + addressToHex(address))
73
+ }
74
+
75
+ /**
76
+ * [SignerList Index Format](https://xrpl.org/signerlist.html#signerlist-id-format).
77
+ *
78
+ * The Index of a SignerList object is the SHA-512Half of the following values, concatenated in order:
79
+ * * The RippleState space key (0x0053)
80
+ * * The AccountID of the owner of the SignerList
81
+ * * The SignerListID (currently always 0).
82
+ *
83
+ * This method computes a SignerList Ledger Object Index.
84
+ *
85
+ * @param address - The classic account address of the SignerList owner (starting with r).
86
+ * @returns The Index of the account's SignerList object.
87
+ * @category Utilities
88
+ */
89
+ export function hashSignerListId(address: string): string {
90
+ return sha512Half(
91
+ `${ledgerSpaceHex('signerList') + addressToHex(address)}00000000`,
92
+ )
93
+ }
94
+
95
+ /**
96
+ * [Offer Index Format](https://xrpl.org/offer.html#offer-id-format).
97
+ *
98
+ * The Index of a Offer object is the SHA-512Half of the following values, concatenated in order:
99
+ * * The Offer space key (0x006F)
100
+ * * The AccountID of the account placing the offer
101
+ * * The Sequence number of the OfferCreate transaction that created the offer.
102
+ *
103
+ * This method computes an Offer Index.
104
+ *
105
+ * @param address - The classic account address of the SignerList owner (starting with r).
106
+ * @param sequence - Sequence of the Offer.
107
+ * @returns The Index of the account's Offer object.
108
+ * @category Utilities
109
+ */
110
+ export function hashOfferId(address: string, sequence: number): string {
111
+ const hexPrefix = ledgerSpaces.offer
112
+ .charCodeAt(0)
113
+ .toString(HEX)
114
+ .padStart(2, '0')
115
+ const hexSequence = sequence.toString(HEX).padStart(8, '0')
116
+ const prefix = `00${hexPrefix}`
117
+ return sha512Half(prefix + addressToHex(address) + hexSequence)
118
+ }
119
+
120
+ /**
121
+ * Compute the hash of a Trustline.
122
+ *
123
+ * @param address1 - One of the addresses in the Trustline.
124
+ * @param address2 - The other address in the Trustline.
125
+ * @param currency - Currency in the Trustline.
126
+ * @returns The hash of the Trustline.
127
+ * @category Utilities
128
+ */
129
+ export function hashTrustline(
130
+ address1: string,
131
+ address2: string,
132
+ currency: string,
133
+ ): string {
134
+ const address1Hex = addressToHex(address1)
135
+ const address2Hex = addressToHex(address2)
136
+
137
+ const swap = new BigNumber(address1Hex, 16).isGreaterThan(
138
+ new BigNumber(address2Hex, 16),
139
+ )
140
+ const lowAddressHex = swap ? address2Hex : address1Hex
141
+ const highAddressHex = swap ? address1Hex : address2Hex
142
+
143
+ const prefix = ledgerSpaceHex('rippleState')
144
+ return sha512Half(
145
+ prefix + lowAddressHex + highAddressHex + currencyToHex(currency),
146
+ )
147
+ }
148
+
149
+ /**
150
+ * Compute the Hash of an Escrow LedgerEntry.
151
+ *
152
+ * @param address - Address of the Escrow.
153
+ * @param sequence - OfferSequence of the Escrow.
154
+ * @returns The hash of the Escrow LedgerEntry.
155
+ * @category Utilities
156
+ */
157
+ export function hashEscrow(address: string, sequence: number): string {
158
+ return sha512Half(
159
+ ledgerSpaceHex('escrow') +
160
+ addressToHex(address) +
161
+ sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'),
162
+ )
163
+ }
164
+
165
+ /**
166
+ * Compute the hash of a Payment Channel.
167
+ *
168
+ * @param address - Account of the Payment Channel.
169
+ * @param dstAddress - Destination Account of the Payment Channel.
170
+ * @param sequence - Sequence number of the Transaction that created the Payment Channel.
171
+ * @returns Hash of the Payment Channel.
172
+ * @category Utilities
173
+ */
174
+ export function hashPaymentChannel(
175
+ address: string,
176
+ dstAddress: string,
177
+ sequence: number,
178
+ ): string {
179
+ return sha512Half(
180
+ ledgerSpaceHex('paychan') +
181
+ addressToHex(address) +
182
+ addressToHex(dstAddress) +
183
+ sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'),
184
+ )
185
+ }
186
+
187
+ export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * XRP Ledger namespace prefixes.
3
+ *
4
+ * The XRP Ledger is a key-value store. In order to avoid name collisions,
5
+ * names are partitioned into namespaces.
6
+ *
7
+ * Each namespace is just a single character prefix.
8
+ *
9
+ * See [LedgerNameSpace enum](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/LedgerFormats.h#L100).
10
+ */
11
+ const ledgerSpaces = {
12
+ account: 'a',
13
+ dirNode: 'd',
14
+ generatorMap: 'g',
15
+ rippleState: 'r',
16
+ // Entry for an offer.
17
+ offer: 'o',
18
+ // Directory of things owned by an account.
19
+ ownerDir: 'O',
20
+ // Directory of order books.
21
+ bookDir: 'B',
22
+ contract: 'c',
23
+ skipList: 's',
24
+ escrow: 'u',
25
+ amendment: 'f',
26
+ feeSettings: 'e',
27
+ ticket: 'T',
28
+ signerList: 'S',
29
+ paychan: 'x',
30
+ check: 'C',
31
+ depositPreauth: 'p',
32
+ }
33
+
34
+ export default ledgerSpaces
@@ -0,0 +1,19 @@
1
+ import { createHash } from 'crypto'
2
+
3
+ const HASH_SIZE = 64
4
+
5
+ /**
6
+ * Compute a sha512Half Hash of a hex string.
7
+ *
8
+ * @param hex - Hex string to hash.
9
+ * @returns Hash of hex.
10
+ */
11
+ function sha512Half(hex: string): string {
12
+ return createHash('sha512')
13
+ .update(Buffer.from(hex, 'hex'))
14
+ .digest('hex')
15
+ .toUpperCase()
16
+ .slice(0, HASH_SIZE)
17
+ }
18
+
19
+ export default sha512Half
@@ -0,0 +1,223 @@
1
+ import {
2
+ classicAddressToXAddress,
3
+ decodeAccountID,
4
+ decodeAccountPublic,
5
+ decodeNodePublic,
6
+ decodeSeed,
7
+ decodeXAddress,
8
+ encodeAccountID,
9
+ encodeAccountPublic,
10
+ encodeNodePublic,
11
+ encodeSeed,
12
+ encodeXAddress,
13
+ isValidClassicAddress,
14
+ isValidXAddress,
15
+ xAddressToClassicAddress,
16
+ } from 'ripple-address-codec'
17
+ import * as rbc from 'ripple-binary-codec'
18
+ import { verify as verifyKeypairSignature } from 'ripple-keypairs'
19
+
20
+ import { LedgerEntry } from '../models/ledger'
21
+ import { Response } from '../models/methods'
22
+ import { PaymentChannelClaim } from '../models/transactions/paymentChannelClaim'
23
+ import { Transaction } from '../models/transactions/transaction'
24
+
25
+ import { deriveKeypair, deriveAddress, deriveXAddress } from './derive'
26
+ import getBalanceChanges from './getBalanceChanges'
27
+ import getNFTokenID from './getNFTokenID'
28
+ import {
29
+ hashSignedTx,
30
+ hashTx,
31
+ hashAccountRoot,
32
+ hashSignerListId,
33
+ hashOfferId,
34
+ hashTrustline,
35
+ hashTxTree,
36
+ hashStateTree,
37
+ hashLedger,
38
+ hashLedgerHeader,
39
+ hashEscrow,
40
+ hashPaymentChannel,
41
+ } from './hashes'
42
+ import parseNFTokenID from './parseNFTokenID'
43
+ import {
44
+ percentToTransferRate,
45
+ decimalToTransferRate,
46
+ transferRateToDecimal,
47
+ percentToQuality,
48
+ decimalToQuality,
49
+ qualityToDecimal,
50
+ } from './quality'
51
+ import signPaymentChannelClaim from './signPaymentChannelClaim'
52
+ import { convertHexToString, convertStringToHex } from './stringConversion'
53
+ import {
54
+ rippleTimeToISOTime,
55
+ isoTimeToRippleTime,
56
+ rippleTimeToUnixTime,
57
+ unixTimeToRippleTime,
58
+ } from './timeConversion'
59
+ import verifyPaymentChannelClaim from './verifyPaymentChannelClaim'
60
+ import { xrpToDrops, dropsToXrp } from './xrpConversion'
61
+
62
+ /**
63
+ * Check if a secret is valid.
64
+ *
65
+ * @param secret - Secret to test for validity.
66
+ * @returns True if secret can be derived into a keypair.
67
+ * @category Utilities
68
+ */
69
+ function isValidSecret(secret: string): boolean {
70
+ try {
71
+ deriveKeypair(secret)
72
+ return true
73
+ } catch (_err) {
74
+ return false
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Encodes a LedgerEntry or Transaction into a hex string
80
+ *
81
+ * @param object - LedgerEntry or Transaction in JSON format.
82
+ * @returns A hex string representing the encoded object.
83
+ */
84
+ function encode(object: Transaction | LedgerEntry): string {
85
+ return rbc.encode(object)
86
+ }
87
+
88
+ /**
89
+ * Encodes a Transaction for signing
90
+ *
91
+ * @param object - LedgerEntry in JSON or Transaction format.
92
+ * @returns A hex string representing the encoded object.
93
+ */
94
+ function encodeForSigning(object: Transaction): string {
95
+ return rbc.encodeForSigning(object)
96
+ }
97
+
98
+ /**
99
+ * Encodes a PaymentChannelClaim for signing
100
+ *
101
+ * @param object - PaymentChannelClaim in JSON format.
102
+ * @returns A hex string representing the encoded object.
103
+ */
104
+ function encodeForSigningClaim(object: PaymentChannelClaim): string {
105
+ return rbc.encodeForSigningClaim(object)
106
+ }
107
+
108
+ /**
109
+ * Encodes a Transaction for multi-signing
110
+ *
111
+ * @param object - Transaction in JSON format.
112
+ * @param signer - The address of the account signing this transaction
113
+ * @returns A hex string representing the encoded object.
114
+ */
115
+ function encodeForMultiSigning(object: Transaction, signer: string): string {
116
+ return rbc.encodeForMultisigning(object, signer)
117
+ }
118
+
119
+ /**
120
+ * Decodes a hex string into a transaction | ledger entry
121
+ *
122
+ * @param hex - hex string in the XRPL serialization format.
123
+ * @returns The hex string decoded according to XRPL serialization format.
124
+ */
125
+ function decode(hex: string): Record<string, unknown> {
126
+ return rbc.decode(hex)
127
+ }
128
+
129
+ /**
130
+ * Validates that a given address is a valid X-Address or a valid classic
131
+ * address.
132
+ *
133
+ * @param address - Address to validate.
134
+ * @returns True if address is a valid X-Address or classic address.
135
+ * @category Utilities
136
+ */
137
+ function isValidAddress(address: string): boolean {
138
+ return isValidXAddress(address) || isValidClassicAddress(address)
139
+ }
140
+
141
+ /**
142
+ * Returns true if there are more pages of data.
143
+ *
144
+ * When there are more results than contained in the response, the response
145
+ * includes a `marker` field.
146
+ *
147
+ * See https://ripple.com/build/rippled-apis/#markers-and-pagination.
148
+ *
149
+ * @param response - Response to check for more pages on.
150
+ * @returns Whether the response has more pages of data.
151
+ * @category Utilities
152
+ */
153
+ function hasNextPage(response: Response): boolean {
154
+ // eslint-disable-next-line @typescript-eslint/dot-notation -- only checking if it exists
155
+ return Boolean(response.result['marker'])
156
+ }
157
+
158
+ /**
159
+ * @category Utilities
160
+ */
161
+ const hashes = {
162
+ hashSignedTx,
163
+ hashTx,
164
+ hashAccountRoot,
165
+ hashSignerListId,
166
+ hashOfferId,
167
+ hashTrustline,
168
+ hashTxTree,
169
+ hashStateTree,
170
+ hashLedger,
171
+ hashLedgerHeader,
172
+ hashEscrow,
173
+ hashPaymentChannel,
174
+ }
175
+
176
+ export {
177
+ getBalanceChanges,
178
+ dropsToXrp,
179
+ xrpToDrops,
180
+ hasNextPage,
181
+ rippleTimeToISOTime,
182
+ isoTimeToRippleTime,
183
+ rippleTimeToUnixTime,
184
+ unixTimeToRippleTime,
185
+ percentToQuality,
186
+ decimalToQuality,
187
+ percentToTransferRate,
188
+ decimalToTransferRate,
189
+ transferRateToDecimal,
190
+ qualityToDecimal,
191
+ isValidSecret,
192
+ isValidAddress,
193
+ hashes,
194
+ deriveKeypair,
195
+ deriveAddress,
196
+ deriveXAddress,
197
+ signPaymentChannelClaim,
198
+ verifyKeypairSignature,
199
+ verifyPaymentChannelClaim,
200
+ convertStringToHex,
201
+ convertHexToString,
202
+ classicAddressToXAddress,
203
+ xAddressToClassicAddress,
204
+ isValidXAddress,
205
+ isValidClassicAddress,
206
+ encodeSeed,
207
+ decodeSeed,
208
+ encodeAccountID,
209
+ decodeAccountID,
210
+ encodeNodePublic,
211
+ decodeNodePublic,
212
+ encodeAccountPublic,
213
+ decodeAccountPublic,
214
+ encodeXAddress,
215
+ decodeXAddress,
216
+ encode,
217
+ decode,
218
+ encodeForMultiSigning,
219
+ encodeForSigning,
220
+ encodeForSigningClaim,
221
+ getNFTokenID,
222
+ parseNFTokenID,
223
+ }
@@ -0,0 +1,84 @@
1
+ /* eslint-disable @typescript-eslint/no-magic-numbers -- Doing hex string parsing. */
2
+ import BigNumber from 'bignumber.js'
3
+ import { encodeAccountID } from 'ripple-address-codec'
4
+
5
+ import { XrplError } from '../errors'
6
+
7
+ /**
8
+ * An issuer may issue several NFTs with the same taxon; to ensure that NFTs are
9
+ * spread across multiple pages we lightly mix the taxon up by using the sequence
10
+ * (which is not under the issuer's direct control) as the seed for a simple linear
11
+ * congruential generator.
12
+ *
13
+ * From the Hull-Dobell theorem we know that f(x)=(m*x+c) mod n will yield a
14
+ * permutation of [0, n) when n is a power of 2 if m is congruent to 1 mod 4 and
15
+ * c is odd. By doing a bitwise XOR with this permutation we can scramble/unscramble
16
+ * the taxon.
17
+ *
18
+ * The XLS-20d proposal fixes m = 384160001 and c = 2459.
19
+ * We then take the modulus of 2^32 which is 4294967296.
20
+ *
21
+ * @param taxon - The scrambled or unscrambled taxon (The XOR is both the encoding and decoding)
22
+ * @param tokenSeq - The account sequence when the token was minted. Used as a psuedorandom seed.
23
+ * @returns the opposite taxon. If the taxon was scrambled it becomes unscrambled, and vice versa.
24
+ */
25
+ function unscrambleTaxon(taxon: number, tokenSeq: number): number {
26
+ /* eslint-disable no-bitwise -- XOR is part of the encode/decode scheme. */
27
+ return (taxon ^ (384160001 * tokenSeq + 2459)) % 4294967296
28
+ /* eslint-enable no-bitwise */
29
+ }
30
+
31
+ /**
32
+ * Parses an NFTokenID into the information it is encoding.
33
+ *
34
+ * Example decoding:
35
+ *
36
+ * 000B 0539 C35B55AA096BA6D87A6E6C965A6534150DC56E5E 12C5D09E 0000000C
37
+ * +--- +--- +--------------------------------------- +------- +-------
38
+ * | | | | |
39
+ * | | | | `---> Sequence: 12
40
+ * | | | |
41
+ * | | | `---> Scrambled Taxon: 314,953,886
42
+ * | | | Unscrambled Taxon: 1337
43
+ * | | |
44
+ * | | `---> Issuer: rJoxBSzpXhPtAuqFmqxQtGKjA13jUJWthE
45
+ * | |
46
+ * | `---> TransferFee: 1337.0 bps or 13.37%
47
+ * |
48
+ * `---> Flags: 11 -> lsfBurnable, lsfOnlyXRP and lsfTransferable
49
+ *
50
+ * @param nftokenID - A hex string which identifies an NFToken on the ledger.
51
+ * @throws XrplError when given an invalid nftokenID.
52
+ * @returns a decoded nftokenID with all fields encoded within.
53
+ */
54
+ export default function parseNFTokenID(nftokenID: string): {
55
+ NFTokenID: string
56
+ Flags: number
57
+ TransferFee: number
58
+ Issuer: string
59
+ Taxon: number
60
+ Sequence: number
61
+ } {
62
+ const expectedLength = 64
63
+ if (nftokenID.length !== expectedLength) {
64
+ throw new XrplError(`Attempting to parse a nftokenID with length ${nftokenID.length}
65
+ , but expected a token with length ${expectedLength}`)
66
+ }
67
+
68
+ const scrambledTaxon = new BigNumber(
69
+ nftokenID.substring(48, 56),
70
+ 16,
71
+ ).toNumber()
72
+ const sequence = new BigNumber(nftokenID.substring(56, 64), 16).toNumber()
73
+
74
+ const NFTokenIDData = {
75
+ NFTokenID: nftokenID,
76
+ Flags: new BigNumber(nftokenID.substring(0, 4), 16).toNumber(),
77
+ TransferFee: new BigNumber(nftokenID.substring(4, 8), 16).toNumber(),
78
+ Issuer: encodeAccountID(Buffer.from(nftokenID.substring(8, 48), 'hex')),
79
+ Taxon: unscrambleTaxon(scrambledTaxon, sequence),
80
+ Sequence: sequence,
81
+ }
82
+
83
+ return NFTokenIDData
84
+ }