@bitgo-beta/sdk-coin-dot 2.2.8-beta.167 → 2.2.8-beta.1670

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 (292) hide show
  1. package/dist/{src → cjs/src}/dot.d.ts +8 -19
  2. package/dist/cjs/src/dot.d.ts.map +1 -0
  3. package/dist/cjs/src/dot.js +623 -0
  4. package/dist/cjs/src/index.d.ts.map +1 -0
  5. package/dist/{src → cjs/src}/index.js +6 -2
  6. package/dist/cjs/src/lib/addressInitializationBuilder.d.ts.map +1 -0
  7. package/dist/cjs/src/lib/addressInitializationBuilder.js +182 -0
  8. package/dist/{src → cjs/src}/lib/batchTransactionBuilder.d.ts +1 -0
  9. package/dist/cjs/src/lib/batchTransactionBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/batchTransactionBuilder.js +229 -0
  11. package/dist/cjs/src/lib/claimBuilder.d.ts.map +1 -0
  12. package/dist/cjs/src/lib/claimBuilder.js +117 -0
  13. package/dist/cjs/src/lib/errors.d.ts.map +1 -0
  14. package/dist/cjs/src/lib/errors.js +19 -0
  15. package/dist/{src → cjs/src}/lib/iface.d.ts +16 -13
  16. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  17. package/dist/cjs/src/lib/iface.js +128 -0
  18. package/dist/cjs/src/lib/iface_utils.d.ts.map +1 -0
  19. package/dist/cjs/src/lib/iface_utils.js +92 -0
  20. package/dist/{src → cjs/src}/lib/index.d.ts +2 -0
  21. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  22. package/dist/cjs/src/lib/index.js +73 -0
  23. package/dist/{src → cjs/src}/lib/keyPair.d.ts +7 -0
  24. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  25. package/dist/cjs/src/lib/keyPair.js +117 -0
  26. package/dist/cjs/src/lib/nativeTransferBuilder.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/nativeTransferBuilder.js +219 -0
  28. package/dist/cjs/src/lib/proxyBuilder.d.ts.map +1 -0
  29. package/dist/cjs/src/lib/proxyBuilder.js +116 -0
  30. package/dist/cjs/src/lib/singletonRegistry.d.ts.map +1 -0
  31. package/dist/cjs/src/lib/singletonRegistry.js +20 -0
  32. package/dist/cjs/src/lib/stakingBuilder.d.ts.map +1 -0
  33. package/dist/cjs/src/lib/stakingBuilder.js +167 -0
  34. package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -1
  35. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  36. package/dist/cjs/src/lib/transaction.js +624 -0
  37. package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -1
  38. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  39. package/dist/cjs/src/lib/transactionBuilder.js +351 -0
  40. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  41. package/dist/cjs/src/lib/transactionBuilderFactory.js +104 -0
  42. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  43. package/dist/cjs/src/lib/transferBuilder.js +11 -0
  44. package/dist/cjs/src/lib/txnSchema.d.ts.map +1 -0
  45. package/dist/cjs/src/lib/txnSchema.js +117 -0
  46. package/dist/cjs/src/lib/unnominateBuilder.d.ts.map +1 -0
  47. package/dist/cjs/src/lib/unnominateBuilder.js +48 -0
  48. package/dist/cjs/src/lib/unstakeBuilder.d.ts.map +1 -0
  49. package/dist/cjs/src/lib/unstakeBuilder.js +87 -0
  50. package/dist/{src → cjs/src}/lib/utils.d.ts +10 -2
  51. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  52. package/dist/cjs/src/lib/utils.js +491 -0
  53. package/dist/cjs/src/lib/wasmParser.d.ts +57 -0
  54. package/dist/cjs/src/lib/wasmParser.d.ts.map +1 -0
  55. package/dist/cjs/src/lib/wasmParser.js +345 -0
  56. package/dist/cjs/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
  57. package/dist/cjs/src/lib/withdrawUnstakedBuilder.js +88 -0
  58. package/dist/cjs/src/register.d.ts.map +1 -0
  59. package/dist/cjs/src/register.js +11 -0
  60. package/dist/cjs/src/resources/index.d.ts +5 -0
  61. package/dist/cjs/src/resources/index.d.ts.map +1 -0
  62. package/dist/cjs/src/resources/index.js +21 -0
  63. package/dist/cjs/src/resources/mainnet.d.ts.map +1 -0
  64. package/dist/cjs/src/resources/mainnet.js +5 -0
  65. package/dist/cjs/src/resources/polkadotAssetHub.d.ts +2 -0
  66. package/dist/cjs/src/resources/polkadotAssetHub.d.ts.map +1 -0
  67. package/dist/cjs/src/resources/polkadotAssetHub.js +5 -0
  68. package/dist/cjs/src/resources/westend.d.ts.map +1 -0
  69. package/dist/cjs/src/resources/westend.js +5 -0
  70. package/dist/cjs/src/resources/westendAssetHub.d.ts +2 -0
  71. package/dist/cjs/src/resources/westendAssetHub.d.ts.map +1 -0
  72. package/dist/cjs/src/resources/westendAssetHub.js +5 -0
  73. package/dist/cjs/src/tdot.d.ts.map +1 -0
  74. package/dist/cjs/src/tdot.js +27 -0
  75. package/dist/cjs/test/fixtures.d.ts +283 -0
  76. package/dist/cjs/test/fixtures.d.ts.map +1 -0
  77. package/dist/cjs/test/fixtures.js +439 -0
  78. package/dist/cjs/test/resources/index.d.ts +141 -0
  79. package/dist/cjs/test/resources/index.d.ts.map +1 -0
  80. package/dist/cjs/test/resources/index.js +157 -0
  81. package/dist/cjs/test/resources/materialData.json +8 -0
  82. package/dist/cjs/test/resources/materialDataModified.json +8 -0
  83. package/dist/cjs/test/resources/testnet.d.ts +2 -0
  84. package/dist/cjs/test/resources/testnet.d.ts.map +1 -0
  85. package/dist/{src/resources/westend.js → cjs/test/resources/testnet.js} +3 -3
  86. package/dist/cjs/test/unit/address.d.ts +2 -0
  87. package/dist/cjs/test/unit/address.d.ts.map +1 -0
  88. package/dist/cjs/test/unit/address.js +45 -0
  89. package/dist/cjs/test/unit/dot.d.ts +2 -0
  90. package/dist/cjs/test/unit/dot.d.ts.map +1 -0
  91. package/dist/cjs/test/unit/dot.js +944 -0
  92. package/dist/cjs/test/unit/keypair.d.ts +2 -0
  93. package/dist/cjs/test/unit/keypair.d.ts.map +1 -0
  94. package/dist/cjs/test/unit/keypair.js +111 -0
  95. package/dist/cjs/test/unit/transaction.d.ts +2 -0
  96. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  97. package/dist/cjs/test/unit/transaction.js +269 -0
  98. package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  99. package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  100. package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
  101. package/dist/cjs/test/unit/transactionBuilder/base.d.ts +8 -0
  102. package/dist/cjs/test/unit/transactionBuilder/base.d.ts.map +1 -0
  103. package/dist/cjs/test/unit/transactionBuilder/base.js +233 -0
  104. package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
  105. package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
  106. package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
  107. package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
  108. package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
  109. package/dist/cjs/test/unit/transactionBuilder/claimBuilder.js +129 -0
  110. package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
  111. package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
  112. package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.js +88 -0
  113. package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
  114. package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
  115. package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
  116. package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
  117. package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  118. package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.js +235 -0
  119. package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  120. package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  121. package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
  122. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  123. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  124. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +437 -0
  125. package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
  126. package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
  127. package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
  128. package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
  129. package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
  130. package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
  131. package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
  132. package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
  134. package/dist/cjs/test/unit/utils.d.ts +2 -0
  135. package/dist/cjs/test/unit/utils.d.ts.map +1 -0
  136. package/dist/cjs/test/unit/utils.js +117 -0
  137. package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts +22 -0
  138. package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts.map +1 -0
  139. package/dist/cjs/test/unit/wasmBuilderByteComparison.js +197 -0
  140. package/dist/cjs/test/unit/wasmParserExplanation.d.ts +15 -0
  141. package/dist/cjs/test/unit/wasmParserExplanation.d.ts.map +1 -0
  142. package/dist/cjs/test/unit/wasmParserExplanation.js +147 -0
  143. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  144. package/dist/esm/dot.d.ts +147 -0
  145. package/dist/esm/dot.d.ts.map +1 -0
  146. package/dist/esm/dot.js +583 -0
  147. package/dist/esm/index.d.ts +5 -0
  148. package/dist/esm/index.js +5 -0
  149. package/dist/esm/lib/addressInitializationBuilder.d.ts +79 -0
  150. package/dist/esm/lib/addressInitializationBuilder.js +175 -0
  151. package/dist/esm/lib/batchTransactionBuilder.d.ts +62 -0
  152. package/dist/{src → esm}/lib/batchTransactionBuilder.d.ts.map +1 -1
  153. package/dist/esm/lib/batchTransactionBuilder.js +222 -0
  154. package/dist/esm/lib/claimBuilder.d.ts +58 -0
  155. package/dist/esm/lib/claimBuilder.js +110 -0
  156. package/dist/esm/lib/errors.d.ts +8 -0
  157. package/dist/esm/lib/errors.js +14 -0
  158. package/dist/esm/lib/iface.d.ts +337 -0
  159. package/dist/esm/lib/iface.d.ts.map +1 -0
  160. package/dist/esm/lib/iface.js +125 -0
  161. package/dist/esm/lib/iface_utils.d.ts +59 -0
  162. package/dist/esm/lib/iface_utils.js +83 -0
  163. package/dist/esm/lib/index.d.ts +21 -0
  164. package/dist/{src → esm}/lib/index.d.ts.map +1 -1
  165. package/dist/esm/lib/index.js +20 -0
  166. package/dist/esm/lib/keyPair.d.ts +38 -0
  167. package/dist/esm/lib/keyPair.d.ts.map +1 -0
  168. package/dist/esm/lib/keyPair.js +77 -0
  169. package/dist/esm/lib/nativeTransferBuilder.d.ts +84 -0
  170. package/dist/esm/lib/nativeTransferBuilder.js +212 -0
  171. package/dist/esm/lib/proxyBuilder.d.ts +54 -0
  172. package/dist/esm/lib/proxyBuilder.js +109 -0
  173. package/dist/esm/lib/singletonRegistry.d.ts +7 -0
  174. package/dist/esm/lib/singletonRegistry.js +16 -0
  175. package/dist/esm/lib/stakingBuilder.d.ts +66 -0
  176. package/dist/esm/lib/stakingBuilder.js +160 -0
  177. package/dist/esm/lib/transaction.d.ts +83 -0
  178. package/dist/esm/lib/transaction.d.ts.map +1 -0
  179. package/dist/esm/lib/transaction.js +584 -0
  180. package/dist/esm/lib/transactionBuilder.d.ts +131 -0
  181. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
  182. package/dist/esm/lib/transactionBuilder.js +311 -0
  183. package/dist/esm/lib/transactionBuilderFactory.d.ts +28 -0
  184. package/dist/esm/lib/transactionBuilderFactory.js +97 -0
  185. package/dist/esm/lib/transferBuilder.d.ts +11 -0
  186. package/dist/esm/lib/transferBuilder.js +7 -0
  187. package/dist/esm/lib/txnSchema.d.ts +15 -0
  188. package/dist/esm/lib/txnSchema.js +111 -0
  189. package/dist/esm/lib/unnominateBuilder.d.ts +24 -0
  190. package/dist/esm/lib/unnominateBuilder.js +44 -0
  191. package/dist/esm/lib/unstakeBuilder.d.ts +38 -0
  192. package/dist/esm/lib/unstakeBuilder.js +80 -0
  193. package/dist/esm/lib/utils.d.ts +261 -0
  194. package/dist/esm/lib/utils.d.ts.map +1 -0
  195. package/dist/esm/lib/utils.js +451 -0
  196. package/dist/esm/lib/wasmParser.d.ts +57 -0
  197. package/dist/esm/lib/wasmParser.d.ts.map +1 -0
  198. package/dist/esm/lib/wasmParser.js +341 -0
  199. package/dist/esm/lib/withdrawUnstakedBuilder.d.ts +38 -0
  200. package/dist/esm/lib/withdrawUnstakedBuilder.js +81 -0
  201. package/dist/esm/register.d.ts +3 -0
  202. package/dist/esm/register.js +7 -0
  203. package/dist/esm/resources/index.d.ts +5 -0
  204. package/dist/{src → esm}/resources/index.d.ts.map +1 -1
  205. package/dist/esm/resources/index.js +5 -0
  206. package/dist/esm/resources/mainnet.d.ts +2 -0
  207. package/dist/esm/resources/mainnet.js +2 -0
  208. package/dist/esm/resources/polkadotAssetHub.d.ts +2 -0
  209. package/dist/esm/resources/polkadotAssetHub.d.ts.map +1 -0
  210. package/dist/esm/resources/polkadotAssetHub.js +2 -0
  211. package/dist/esm/resources/westend.d.ts +2 -0
  212. package/dist/esm/resources/westend.js +2 -0
  213. package/dist/esm/resources/westendAssetHub.d.ts +2 -0
  214. package/dist/esm/resources/westendAssetHub.d.ts.map +1 -0
  215. package/dist/esm/resources/westendAssetHub.js +2 -0
  216. package/dist/esm/tdot.d.ts +12 -0
  217. package/dist/esm/tdot.js +23 -0
  218. package/package.json +43 -21
  219. package/.eslintignore +0 -5
  220. package/.mocharc.yml +0 -8
  221. package/CHANGELOG.md +0 -450
  222. package/dist/src/dot.d.ts.map +0 -1
  223. package/dist/src/dot.js +0 -562
  224. package/dist/src/lib/addressInitializationBuilder.js +0 -184
  225. package/dist/src/lib/batchTransactionBuilder.js +0 -220
  226. package/dist/src/lib/claimBuilder.js +0 -119
  227. package/dist/src/lib/errors.js +0 -19
  228. package/dist/src/lib/iface.d.ts.map +0 -1
  229. package/dist/src/lib/iface.js +0 -128
  230. package/dist/src/lib/iface_utils.js +0 -93
  231. package/dist/src/lib/index.js +0 -57
  232. package/dist/src/lib/keyPair.d.ts.map +0 -1
  233. package/dist/src/lib/keyPair.js +0 -70
  234. package/dist/src/lib/nativeTransferBuilder.js +0 -221
  235. package/dist/src/lib/proxyBuilder.js +0 -118
  236. package/dist/src/lib/singletonRegistry.js +0 -20
  237. package/dist/src/lib/stakingBuilder.js +0 -169
  238. package/dist/src/lib/transaction.d.ts.map +0 -1
  239. package/dist/src/lib/transaction.js +0 -590
  240. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  241. package/dist/src/lib/transactionBuilder.js +0 -337
  242. package/dist/src/lib/transactionBuilderFactory.js +0 -105
  243. package/dist/src/lib/transferBuilder.js +0 -11
  244. package/dist/src/lib/txnSchema.js +0 -117
  245. package/dist/src/lib/unnominateBuilder.js +0 -50
  246. package/dist/src/lib/unstakeBuilder.js +0 -89
  247. package/dist/src/lib/utils.d.ts.map +0 -1
  248. package/dist/src/lib/utils.js +0 -458
  249. package/dist/src/lib/withdrawUnstakedBuilder.js +0 -90
  250. package/dist/src/register.js +0 -11
  251. package/dist/src/resources/index.d.ts +0 -3
  252. package/dist/src/resources/index.js +0 -15
  253. package/dist/src/resources/mainnet.js +0 -5
  254. package/dist/src/tdot.js +0 -27
  255. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  256. /package/dist/{src → cjs/src}/lib/addressInitializationBuilder.d.ts +0 -0
  257. /package/dist/{src → cjs/src}/lib/claimBuilder.d.ts +0 -0
  258. /package/dist/{src → cjs/src}/lib/errors.d.ts +0 -0
  259. /package/dist/{src → cjs/src}/lib/iface_utils.d.ts +0 -0
  260. /package/dist/{src → cjs/src}/lib/nativeTransferBuilder.d.ts +0 -0
  261. /package/dist/{src → cjs/src}/lib/proxyBuilder.d.ts +0 -0
  262. /package/dist/{src → cjs/src}/lib/singletonRegistry.d.ts +0 -0
  263. /package/dist/{src → cjs/src}/lib/stakingBuilder.d.ts +0 -0
  264. /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
  265. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  266. /package/dist/{src → cjs/src}/lib/txnSchema.d.ts +0 -0
  267. /package/dist/{src → cjs/src}/lib/unnominateBuilder.d.ts +0 -0
  268. /package/dist/{src → cjs/src}/lib/unstakeBuilder.d.ts +0 -0
  269. /package/dist/{src → cjs/src}/lib/withdrawUnstakedBuilder.d.ts +0 -0
  270. /package/dist/{src → cjs/src}/register.d.ts +0 -0
  271. /package/dist/{src → cjs/src}/resources/mainnet.d.ts +0 -0
  272. /package/dist/{src → cjs/src}/resources/westend.d.ts +0 -0
  273. /package/dist/{src → cjs/src}/tdot.d.ts +0 -0
  274. /package/dist/{src → esm}/index.d.ts.map +0 -0
  275. /package/dist/{src → esm}/lib/addressInitializationBuilder.d.ts.map +0 -0
  276. /package/dist/{src → esm}/lib/claimBuilder.d.ts.map +0 -0
  277. /package/dist/{src → esm}/lib/errors.d.ts.map +0 -0
  278. /package/dist/{src → esm}/lib/iface_utils.d.ts.map +0 -0
  279. /package/dist/{src → esm}/lib/nativeTransferBuilder.d.ts.map +0 -0
  280. /package/dist/{src → esm}/lib/proxyBuilder.d.ts.map +0 -0
  281. /package/dist/{src → esm}/lib/singletonRegistry.d.ts.map +0 -0
  282. /package/dist/{src → esm}/lib/stakingBuilder.d.ts.map +0 -0
  283. /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
  284. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  285. /package/dist/{src → esm}/lib/txnSchema.d.ts.map +0 -0
  286. /package/dist/{src → esm}/lib/unnominateBuilder.d.ts.map +0 -0
  287. /package/dist/{src → esm}/lib/unstakeBuilder.d.ts.map +0 -0
  288. /package/dist/{src → esm}/lib/withdrawUnstakedBuilder.d.ts.map +0 -0
  289. /package/dist/{src → esm}/register.d.ts.map +0 -0
  290. /package/dist/{src → esm}/resources/mainnet.d.ts.map +0 -0
  291. /package/dist/{src → esm}/resources/westend.d.ts.map +0 -0
  292. /package/dist/{src → esm}/tdot.d.ts.map +0 -0
@@ -0,0 +1,341 @@
1
+ /**
2
+ * WASM-based DOT transaction explanation.
3
+ *
4
+ * Built on @bitgo/wasm-dot's parseTransaction(). Derives transaction types,
5
+ * extracts outputs/inputs, and maps to BitGoJS TransactionExplanation format.
6
+ * This is BitGo-specific business logic that lives outside the wasm package.
7
+ */
8
+ import { TransactionType } from '@bitgo-beta/sdk-core';
9
+ import { DotTransaction, parseTransaction, getProxyDepositCost } from '@bitgo/wasm-dot';
10
+ const MAX_NESTING_DEPTH = 10;
11
+ /**
12
+ * Display-only sentinel address for staking outputs (bond, bondExtra, unbond).
13
+ *
14
+ * Staking extrinsics don't transfer funds to an external address. The bonded DOT
15
+ * stays in the sender's account as "bonded balance". But the explanation format
16
+ * requires an output address, so we use this null address (SS58 encoding of 32
17
+ * zero bytes, substrate generic prefix 42) as a placeholder meaning "this amount
18
+ * went to staking". Same constant used by the legacy account-lib Transaction class.
19
+ */
20
+ const STAKING_DESTINATION = '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM';
21
+ /** Sentinel for transferAll: the actual amount is determined on-chain. */
22
+ const ALL = 'ALL';
23
+ // =============================================================================
24
+ // Main exports
25
+ // =============================================================================
26
+ /**
27
+ * Explain a DOT transaction using the WASM parser.
28
+ *
29
+ * Parses the transaction via WASM, derives the transaction type and
30
+ * outputs locally, then maps to BitGoJS TransactionExplanation format.
31
+ */
32
+ export function explainDotTransaction(params) {
33
+ const explained = buildExplanation(params);
34
+ const sender = explained.sender || params.senderAddress || '';
35
+ const methodName = `${explained.method.pallet}.${explained.method.name}`;
36
+ // Convert bigint to string at the serialization boundary
37
+ const outputs = explained.outputs.map((o) => ({
38
+ address: o.address,
39
+ amount: o.amount === ALL ? '0' : String(o.amount),
40
+ }));
41
+ const inputs = explained.inputs.map((i) => {
42
+ const valueStr = i.value === ALL ? ALL : String(i.value);
43
+ const value = i.value === ALL ? 0 : Number(i.value);
44
+ return { address: i.address, value, valueString: valueStr };
45
+ });
46
+ return {
47
+ displayOrder: ['outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'type', 'sequenceId', 'id'],
48
+ id: explained.id || '',
49
+ outputs,
50
+ outputAmount: String(explained.outputAmount),
51
+ changeOutputs: [],
52
+ changeAmount: '0',
53
+ fee: { fee: explained.tip ? String(explained.tip) : '0', type: 'tip' },
54
+ type: explained.type,
55
+ sender,
56
+ nonce: explained.nonce,
57
+ isSigned: explained.isSigned,
58
+ methodName,
59
+ inputs,
60
+ };
61
+ }
62
+ /**
63
+ * Produce a TxData object using WASM parsing instead of the JS txwrapper.
64
+ *
65
+ * This replaces the legacy `toJson()` path for chains where WASM parsing is enabled.
66
+ * The WASM parser decodes the extrinsic bytes (with metadata-aware signed extension handling),
67
+ * and this function maps the result to the TxData interface that consumers expect.
68
+ */
69
+ export function toJsonFromWasm(params) {
70
+ const explained = buildExplanation(params);
71
+ const type = explained.type;
72
+ const method = explained.method;
73
+ const args = method.args;
74
+ const result = {
75
+ id: explained.id || '',
76
+ sender: explained.sender || params.senderAddress,
77
+ referenceBlock: params.referenceBlock || '',
78
+ blockNumber: params.blockNumber || 0,
79
+ genesisHash: params.material.genesisHash || '',
80
+ nonce: explained.nonce,
81
+ specVersion: params.material.specVersion || 0,
82
+ transactionVersion: params.material.txVersion || 0,
83
+ chainName: params.material.chainName || '',
84
+ tip: Number(explained.tip) || 0,
85
+ eraPeriod: explained.era.type === 'mortal' ? explained.era.period : 0,
86
+ };
87
+ if (type === TransactionType.Send) {
88
+ populateSendFields(result, method, args);
89
+ }
90
+ else if (type === TransactionType.StakingActivate) {
91
+ populateStakingActivateFields(result, method, args, params.senderAddress);
92
+ }
93
+ else if (type === TransactionType.StakingUnlock) {
94
+ result.amount = String(args.value ?? '');
95
+ }
96
+ else if (type === TransactionType.StakingWithdraw) {
97
+ result.numSlashingSpans = Number(args.numSlashingSpans ?? 0);
98
+ }
99
+ else if (type === TransactionType.StakingClaim) {
100
+ result.validatorStash = String(args.validatorStash ?? '');
101
+ result.claimEra = String(args.era ?? '');
102
+ }
103
+ else if (type === TransactionType.AddressInitialization) {
104
+ populateAddressInitFields(result, method, args);
105
+ }
106
+ else if (type === TransactionType.Batch) {
107
+ result.batchCalls = mapBatchCalls(args.calls);
108
+ }
109
+ return result;
110
+ }
111
+ function buildExplanation(params) {
112
+ const tx = DotTransaction.fromHex(params.txHex, params.material);
113
+ const context = {
114
+ material: params.material,
115
+ sender: params.senderAddress,
116
+ referenceBlock: params.referenceBlock,
117
+ blockNumber: params.blockNumber,
118
+ };
119
+ const parsed = parseTransaction(tx, context);
120
+ const sender = parsed.sender ?? params.senderAddress;
121
+ const analysis = analyzeMethod(parsed.method, sender, params.material.metadata);
122
+ // Use explicit inputs from analysis if provided (e.g., unstake batch where
123
+ // the input source is the proxy address, not the sender). Otherwise, mirror
124
+ // outputs with sender as the default input source.
125
+ const inputs = analysis.inputs ?? (sender ? analysis.outputs.map((o) => ({ address: sender, value: o.amount })) : []);
126
+ const outputAmount = analysis.outputs.reduce((sum, o) => {
127
+ if (o.amount === ALL)
128
+ return sum;
129
+ return sum + o.amount;
130
+ }, 0n);
131
+ return {
132
+ type: analysis.type,
133
+ id: parsed.id ?? undefined,
134
+ sender: parsed.sender ?? undefined,
135
+ outputs: analysis.outputs,
136
+ inputs,
137
+ outputAmount,
138
+ tip: BigInt(parsed.tip || '0'),
139
+ era: parsed.era,
140
+ method: parsed.method,
141
+ isSigned: parsed.isSigned,
142
+ nonce: parsed.nonce,
143
+ };
144
+ }
145
+ /**
146
+ * Analyze a parsed method to determine its transaction type and extract outputs.
147
+ *
148
+ * This is a single switch that handles both concerns together, preventing them
149
+ * from getting out of sync. Every case that sets a type also sets the outputs
150
+ * for that type.
151
+ */
152
+ function analyzeMethod(method, senderAddress, metadataHex) {
153
+ return analyzeMethodInner(method, senderAddress, metadataHex, 0);
154
+ }
155
+ function analyzeMethodInner(method, senderAddress, metadataHex, depth) {
156
+ const key = `${method.pallet}.${method.name}`;
157
+ const args = (method.args ?? {});
158
+ switch (key) {
159
+ // --- Transfers ---
160
+ case 'balances.transfer':
161
+ case 'balances.transferKeepAlive':
162
+ case 'balances.transferAllowDeath':
163
+ return {
164
+ type: TransactionType.Send,
165
+ outputs: [{ address: String(args.dest ?? ''), amount: BigInt(args.value ?? '0') }],
166
+ };
167
+ case 'balances.transferAll':
168
+ return {
169
+ type: TransactionType.Send,
170
+ outputs: [{ address: String(args.dest ?? ''), amount: ALL }],
171
+ };
172
+ // --- Staking ---
173
+ case 'staking.bond':
174
+ case 'staking.bondExtra':
175
+ return {
176
+ type: TransactionType.StakingActivate,
177
+ outputs: [{ address: STAKING_DESTINATION, amount: BigInt(args.value ?? '0') }],
178
+ };
179
+ case 'staking.unbond':
180
+ // Empty outputs: unbond unlocks DOT (no external spend). Matches legacy Transaction class
181
+ // behavior where decodeInputsAndOutputsForUnbond() returns []. Bond/bondExtra keep the
182
+ // sentinel because they represent actual balance locks visible to policy evaluation.
183
+ return { type: TransactionType.StakingUnlock, outputs: [] };
184
+ case 'staking.withdrawUnbonded':
185
+ return { type: TransactionType.StakingWithdraw, outputs: [] };
186
+ case 'staking.chill':
187
+ return { type: TransactionType.StakingUnvote, outputs: [] };
188
+ case 'staking.payoutStakers':
189
+ return { type: TransactionType.StakingClaim, outputs: [] };
190
+ // --- Proxy ---
191
+ case 'proxy.addProxy':
192
+ case 'proxy.removeProxy':
193
+ case 'proxy.createPure':
194
+ return { type: TransactionType.AddressInitialization, outputs: [] };
195
+ // --- Proxy-wrapped call ---
196
+ case 'proxy.proxy': {
197
+ if (depth >= MAX_NESTING_DEPTH)
198
+ return { type: TransactionType.Send, outputs: [] };
199
+ const call = args.call;
200
+ if (call?.pallet && call?.name)
201
+ return analyzeMethodInner(call, senderAddress, metadataHex, depth + 1);
202
+ return { type: TransactionType.Send, outputs: [] };
203
+ }
204
+ // --- Batch ---
205
+ case 'utility.batch':
206
+ case 'utility.batchAll':
207
+ return analyzeBatch(args, senderAddress, metadataHex, depth);
208
+ default:
209
+ return { type: TransactionType.Send, outputs: [] };
210
+ }
211
+ }
212
+ /**
213
+ * Analyze a batch transaction.
214
+ *
215
+ * Detects known proxy batch patterns (stake: bond+addProxy, unstake:
216
+ * removeProxy+chill+unbond) and handles proxy deposit cost. For unrecognized
217
+ * batch patterns, recursively extracts outputs from each inner call.
218
+ */
219
+ function analyzeBatch(args, senderAddress, metadataHex, depth) {
220
+ const calls = (args.calls ?? []);
221
+ if (calls.length === 0)
222
+ return { type: TransactionType.Batch, outputs: [] };
223
+ const callKeys = calls.map((c) => `${c.pallet}.${c.name}`);
224
+ // Staking batch: bond + addProxy (2 calls)
225
+ if (calls.length === 2 && callKeys[0] === 'staking.bond' && callKeys[1] === 'proxy.addProxy') {
226
+ const bondArgs = (calls[0].args ?? {});
227
+ const addProxyArgs = (calls[1].args ?? {});
228
+ const bondAmount = BigInt(bondArgs.value ?? '0');
229
+ const proxyAddress = String(addProxyArgs.delegate ?? '');
230
+ const proxyDepositCost = metadataHex ? getProxyDepositCost(metadataHex) : 0n;
231
+ return {
232
+ type: TransactionType.Batch,
233
+ outputs: [
234
+ { address: STAKING_DESTINATION, amount: bondAmount },
235
+ { address: proxyAddress, amount: proxyDepositCost },
236
+ ],
237
+ };
238
+ }
239
+ // Unstaking batch: removeProxy + chill + unbond (3 calls)
240
+ // Input source is the proxy address (deposit refund), not the sender.
241
+ if (calls.length === 3 &&
242
+ callKeys[0] === 'proxy.removeProxy' &&
243
+ callKeys[1] === 'staking.chill' &&
244
+ callKeys[2] === 'staking.unbond') {
245
+ const removeProxyArgs = (calls[0].args ?? {});
246
+ const proxyAddress = String(removeProxyArgs.delegate ?? '');
247
+ const proxyDepositCost = metadataHex ? getProxyDepositCost(metadataHex) : 0n;
248
+ const outputs = senderAddress ? [{ address: senderAddress, amount: proxyDepositCost }] : [];
249
+ const inputs = [{ address: proxyAddress, value: proxyDepositCost }];
250
+ return { type: TransactionType.Batch, outputs, inputs };
251
+ }
252
+ // Generic batch: recursively extract outputs from each inner call
253
+ if (depth >= MAX_NESTING_DEPTH)
254
+ return { type: TransactionType.Batch, outputs: [] };
255
+ const outputs = calls
256
+ .filter((c) => c?.pallet && c?.name)
257
+ .flatMap((c) => analyzeMethodInner(c, senderAddress, metadataHex, depth + 1).outputs);
258
+ return { type: TransactionType.Batch, outputs };
259
+ }
260
+ // =============================================================================
261
+ // Helpers
262
+ // =============================================================================
263
+ function populateSendFields(result, method, args) {
264
+ const key = `${method.pallet}.${method.name}`;
265
+ if (key === 'proxy.proxy') {
266
+ // Proxy-wrapped transfer
267
+ const innerCall = args.call;
268
+ result.owner = String(args.real ?? '');
269
+ result.forceProxyType = args.forceProxyType ?? undefined;
270
+ if (innerCall?.args) {
271
+ const innerArgs = innerCall.args;
272
+ result.to = String(innerArgs.dest ?? '');
273
+ result.amount = String(innerArgs.value ?? '');
274
+ }
275
+ }
276
+ else if (key === 'balances.transferAll') {
277
+ result.to = String(args.dest ?? '');
278
+ result.keepAlive = Boolean(args.keepAlive);
279
+ }
280
+ else {
281
+ // transfer, transferKeepAlive, transferAllowDeath
282
+ result.to = String(args.dest ?? '');
283
+ result.amount = String(args.value ?? '');
284
+ }
285
+ }
286
+ function populateStakingActivateFields(result, method, args, senderAddress) {
287
+ if (method.name === 'bondExtra') {
288
+ result.amount = String(args.value ?? '');
289
+ }
290
+ else {
291
+ // bond
292
+ result.controller = senderAddress;
293
+ result.amount = String(args.value ?? '');
294
+ result.payee = String(args.payee ?? '');
295
+ }
296
+ }
297
+ function populateAddressInitFields(result, method, args) {
298
+ const key = `${method.pallet}.${method.name}`;
299
+ result.method = key;
300
+ result.proxyType = String(args.proxy_type ?? '');
301
+ result.delay = String(args.delay ?? '');
302
+ if (key === 'proxy.createPure') {
303
+ result.index = String(args.index ?? '');
304
+ }
305
+ else {
306
+ // addProxy, removeProxy
307
+ result.owner = String(args.delegate ?? '');
308
+ }
309
+ }
310
+ function mapBatchCalls(calls) {
311
+ if (!calls)
312
+ return [];
313
+ return calls.map((call) => ({
314
+ callIndex: `0x${call.palletIndex.toString(16).padStart(2, '0')}${call.methodIndex.toString(16).padStart(2, '0')}`,
315
+ args: transformBatchCallArgs((call.args ?? {})),
316
+ }));
317
+ }
318
+ /** Transform WASM-decoded batch call args to match the Polkadot.js format that consumers expect */
319
+ function transformBatchCallArgs(args) {
320
+ const result = {};
321
+ for (const [key, value] of Object.entries(args)) {
322
+ if (key === 'delegate' && typeof value === 'string') {
323
+ // MultiAddress Id variant: string -> { id: string }
324
+ result[key] = { id: value };
325
+ }
326
+ else if (key === 'value' && typeof value === 'string') {
327
+ // Compact u128: string -> number (matches Polkadot.js behavior)
328
+ result[key] = Number(value);
329
+ }
330
+ else if (key === 'payee' && typeof value === 'string') {
331
+ // Enum unit variant: "Staked" -> { staked: null }
332
+ const variantName = value.charAt(0).toLowerCase() + value.slice(1);
333
+ result[key] = { [variantName]: null };
334
+ }
335
+ else {
336
+ result[key] = value;
337
+ }
338
+ }
339
+ return result;
340
+ }
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvd2FzbVBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBK0IsTUFBTSxpQkFBaUIsQ0FBQztBQUdySCxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUU3Qjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsa0RBQWtELENBQUM7QUFFL0UsMEVBQTBFO0FBQzFFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQztBQTJDbEIsZ0ZBQWdGO0FBQ2hGLGVBQWU7QUFDZixnRkFBZ0Y7QUFFaEY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBbUM7SUFDdkUsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUM5RCxNQUFNLFVBQVUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFekUseURBQXlEO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztRQUNsQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7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QU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEQsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3BELG9EQUFvRDtZQUNwRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4RCxnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hELGtEQUFrRDtZQUNsRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXQVNNLWJhc2VkIERPVCB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbi5cbiAqXG4gKiBCdWlsdCBvbiBAYml0Z28vd2FzbS1kb3QncyBwYXJzZVRyYW5zYWN0aW9uKCkuIERlcml2ZXMgdHJhbnNhY3Rpb24gdHlwZXMsXG4gKiBleHRyYWN0cyBvdXRwdXRzL2lucHV0cywgYW5kIG1hcHMgdG8gQml0R29KUyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGZvcm1hdC5cbiAqIFRoaXMgaXMgQml0R28tc3BlY2lmaWMgYnVzaW5lc3MgbG9naWMgdGhhdCBsaXZlcyBvdXRzaWRlIHRoZSB3YXNtIHBhY2thZ2UuXG4gKi9cblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRG90VHJhbnNhY3Rpb24sIHBhcnNlVHJhbnNhY3Rpb24sIGdldFByb3h5RGVwb3NpdENvc3QsIHR5cGUgUGFyc2VkTWV0aG9kLCB0eXBlIEVyYSB9IGZyb20gJ0BiaXRnby93YXNtLWRvdCc7XG5pbXBvcnQgdHlwZSB7IEJhdGNoQ2FsbE9iamVjdCwgUHJveHlUeXBlLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBNYXRlcmlhbCwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5cbmNvbnN0IE1BWF9ORVNUSU5HX0RFUFRIID0gMTA7XG5cbi8qKlxuICogRGlzcGxheS1vbmx5IHNlbnRpbmVsIGFkZHJlc3MgZm9yIHN0YWtpbmcgb3V0cHV0cyAoYm9uZCwgYm9uZEV4dHJhLCB1bmJvbmQpLlxuICpcbiAqIFN0YWtpbmcgZXh0cmluc2ljcyBkb24ndCB0cmFuc2ZlciBmdW5kcyB0byBhbiBleHRlcm5hbCBhZGRyZXNzLiBUaGUgYm9uZGVkIERPVFxuICogc3RheXMgaW4gdGhlIHNlbmRlcidzIGFjY291bnQgYXMgXCJib25kZWQgYmFsYW5jZVwiLiBCdXQgdGhlIGV4cGxhbmF0aW9uIGZvcm1hdFxuICogcmVxdWlyZXMgYW4gb3V0cHV0IGFkZHJlc3MsIHNvIHdlIHVzZSB0aGlzIG51bGwgYWRkcmVzcyAoU1M1OCBlbmNvZGluZyBvZiAzMlxuICogemVybyBieXRlcywgc3Vic3RyYXRlIGdlbmVyaWMgcHJlZml4IDQyKSBhcyBhIHBsYWNlaG9sZGVyIG1lYW5pbmcgXCJ0aGlzIGFtb3VudFxuICogd2VudCB0byBzdGFraW5nXCIuIFNhbWUgY29uc3RhbnQgdXNlZCBieSB0aGUgbGVnYWN5IGFjY291bnQtbGliIFRyYW5zYWN0aW9uIGNsYXNzLlxuICovXG5jb25zdCBTVEFLSU5HX0RFU1RJTkFUSU9OID0gJzVDNGhyZmp3OURqWFpUelYzTXd6cnJBcjlQMU1KaFNydldHV3FpMWVTdXlVcG5oTSc7XG5cbi8qKiBTZW50aW5lbCBmb3IgdHJhbnNmZXJBbGw6IHRoZSBhY3R1YWwgYW1vdW50IGlzIGRldGVybWluZWQgb24tY2hhaW4uICovXG5jb25zdCBBTEwgPSAnQUxMJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFB1YmxpYyB0eXBlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbnB1dCBlbnRyeSBmb3IgYSBET1QgdHJhbnNhY3Rpb24uXG4gKiBGb3IgYWNjb3VudC1tb2RlbCBjaGFpbnMsIHRoZXJlJ3MgdHlwaWNhbGx5IG9uZSBpbnB1dCAodGhlIHNlbmRlcikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG90SW5wdXQge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIHZhbHVlU3RyaW5nOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgZXhwbGFuYXRpb24gcmV0dXJuZWQgYnkgV0FTTS1iYXNlZCBwYXJzaW5nLlxuICogSW5jbHVkZXMgZmllbGRzIG5lZWRlZCBieSB3YWxsZXQtcGxhdGZvcm0gdGhhdCBhcmVuJ3QgaW4gdGhlIGJhc2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3RXYXNtRXhwbGFuYXRpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgc2VuZGVyOiBzdHJpbmc7XG4gIG5vbmNlOiBudW1iZXI7XG4gIGlzU2lnbmVkOiBib29sZWFuO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIGlucHV0czogRG90SW5wdXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluRG90VHJhbnNhY3Rpb25QYXJhbXMge1xuICB0eEhleDogc3RyaW5nO1xuICBtYXRlcmlhbDogTWF0ZXJpYWw7XG4gIHNlbmRlckFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9Kc29uRnJvbVdhc21QYXJhbXMge1xuICB0eEhleDogc3RyaW5nO1xuICBtYXRlcmlhbDogTWF0ZXJpYWw7XG4gIHNlbmRlckFkZHJlc3M6IHN0cmluZztcbiAgY29pbkNvbmZpZ05hbWU6IHN0cmluZztcbiAgcmVmZXJlbmNlQmxvY2s/OiBzdHJpbmc7XG4gIGJsb2NrTnVtYmVyPzogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTWFpbiBleHBvcnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4cGxhaW4gYSBET1QgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIFdBU00gcGFyc2VyLlxuICpcbiAqIFBhcnNlcyB0aGUgdHJhbnNhY3Rpb24gdmlhIFdBU00sIGRlcml2ZXMgdGhlIHRyYW5zYWN0aW9uIHR5cGUgYW5kXG4gKiBvdXRwdXRzIGxvY2FsbHksIHRoZW4gbWFwcyB0byBCaXRHb0pTIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gZm9ybWF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpbkRvdFRyYW5zYWN0aW9uUGFyYW1zKTogRG90V2FzbUV4cGxhbmF0aW9uIHtcbiAgY29uc3QgZXhwbGFpbmVkID0gYnVpbGRFeHBsYW5hdGlvbihwYXJhbXMpO1xuXG4gIGNvbnN0IHNlbmRlciA9IGV4cGxhaW5lZC5zZW5kZXIgfHwgcGFyYW1zLnNlbmRlckFkZHJlc3MgfHwgJyc7XG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBgJHtleHBsYWluZWQubWV0aG9kLnBhbGxldH0uJHtleHBsYWluZWQubWV0aG9kLm5hbWV9YDtcblxuICAvLyBDb252ZXJ0IGJpZ2ludCB0byBzdHJpbmcgYXQgdGhlIHNlcmlhbGl6YXRpb24gYm91bmRhcnlcbiAgY29uc3Qgb3V0cHV0cyA9IGV4cGxhaW5lZC5vdXRwdXRzLm1hcCgobykgPT4gKHtcbiAgICBhZGRyZXNzOiBvLmFkZHJlc3MsXG4gICAgYW1vdW50OiBvLmFtb3VudCA9PT0gQUxMID8gJzAnIDogU3RyaW5nKG8uYW1vdW50KSxcbiAgfSkpO1xuXG4gIGNvbnN0IGlucHV0czogRG90SW5wdXRbXSA9IGV4cGxhaW5lZC5pbnB1dHMubWFwKChpKSA9PiB7XG4gICAgY29uc3QgdmFsdWVTdHIgPSBpLnZhbHVlID09PSBBTEwgPyBBTEwgOiBTdHJpbmcoaS52YWx1ZSk7XG4gICAgY29uc3QgdmFsdWUgPSBpLnZhbHVlID09PSBBTEwgPyAwIDogTnVtYmVyKGkudmFsdWUpO1xuICAgIHJldHVybiB7IGFkZHJlc3M6IGkuYWRkcmVzcywgdmFsdWUsIHZhbHVlU3RyaW5nOiB2YWx1ZVN0ciB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGRpc3BsYXlPcmRlcjogWydvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZScsICdzZXF1ZW5jZUlkJywgJ2lkJ10sXG4gICAgaWQ6IGV4cGxhaW5lZC5pZCB8fCAnJyxcbiAgICBvdXRwdXRzLFxuICAgIG91dHB1dEFtb3VudDogU3RyaW5nKGV4cGxhaW5lZC5vdXRwdXRBbW91bnQpLFxuICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgIGZlZTogeyBmZWU6IGV4cGxhaW5lZC50aXAgPyBTdHJpbmcoZXhwbGFpbmVkLnRpcCkgOiAnMCcsIHR5cGU6ICd0aXAnIH0sXG4gICAgdHlwZTogZXhwbGFpbmVkLnR5cGUsXG4gICAgc2VuZGVyLFxuICAgIG5vbmNlOiBleHBsYWluZWQubm9uY2UsXG4gICAgaXNTaWduZWQ6IGV4cGxhaW5lZC5pc1NpZ25lZCxcbiAgICBtZXRob2ROYW1lLFxuICAgIGlucHV0cyxcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlIGEgVHhEYXRhIG9iamVjdCB1c2luZyBXQVNNIHBhcnNpbmcgaW5zdGVhZCBvZiB0aGUgSlMgdHh3cmFwcGVyLlxuICpcbiAqIFRoaXMgcmVwbGFjZXMgdGhlIGxlZ2FjeSBgdG9Kc29uKClgIHBhdGggZm9yIGNoYWlucyB3aGVyZSBXQVNNIHBhcnNpbmcgaXMgZW5hYmxlZC5cbiAqIFRoZSBXQVNNIHBhcnNlciBkZWNvZGVzIHRoZSBleHRyaW5zaWMgYnl0ZXMgKHdpdGggbWV0YWRhdGEtYXdhcmUgc2lnbmVkIGV4dGVuc2lvbiBoYW5kbGluZyksXG4gKiBhbmQgdGhpcyBmdW5jdGlvbiBtYXBzIHRoZSByZXN1bHQgdG8gdGhlIFR4RGF0YSBpbnRlcmZhY2UgdGhhdCBjb25zdW1lcnMgZXhwZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uRnJvbVdhc20ocGFyYW1zOiBUb0pzb25Gcm9tV2FzbVBhcmFtcyk6IFR4RGF0YSB7XG4gIGNvbnN0IGV4cGxhaW5lZCA9IGJ1aWxkRXhwbGFuYXRpb24ocGFyYW1zKTtcbiAgY29uc3QgdHlwZSA9IGV4cGxhaW5lZC50eXBlO1xuICBjb25zdCBtZXRob2QgPSBleHBsYWluZWQubWV0aG9kO1xuICBjb25zdCBhcmdzID0gbWV0aG9kLmFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3QgcmVzdWx0OiBUeERhdGEgPSB7XG4gICAgaWQ6IGV4cGxhaW5lZC5pZCB8fCAnJyxcbiAgICBzZW5kZXI6IGV4cGxhaW5lZC5zZW5kZXIgfHwgcGFyYW1zLnNlbmRlckFkZHJlc3MsXG4gICAgcmVmZXJlbmNlQmxvY2s6IHBhcmFtcy5yZWZlcmVuY2VCbG9jayB8fCAnJyxcbiAgICBibG9ja051bWJlcjogcGFyYW1zLmJsb2NrTnVtYmVyIHx8IDAsXG4gICAgZ2VuZXNpc0hhc2g6IHBhcmFtcy5tYXRlcmlhbC5nZW5lc2lzSGFzaCB8fCAnJyxcbiAgICBub25jZTogZXhwbGFpbmVkLm5vbmNlLFxuICAgIHNwZWNWZXJzaW9uOiBwYXJhbXMubWF0ZXJpYWwuc3BlY1ZlcnNpb24gfHwgMCxcbiAgICB0cmFuc2FjdGlvblZlcnNpb246IHBhcmFtcy5tYXRlcmlhbC50eFZlcnNpb24gfHwgMCxcbiAgICBjaGFpbk5hbWU6IHBhcmFtcy5tYXRlcmlhbC5jaGFpbk5hbWUgfHwgJycsXG4gICAgdGlwOiBOdW1iZXIoZXhwbGFpbmVkLnRpcCkgfHwgMCxcbiAgICBlcmFQZXJpb2Q6IGV4cGxhaW5lZC5lcmEudHlwZSA9PT0gJ21vcnRhbCcgPyAoZXhwbGFpbmVkLmVyYSBhcyB7IHBlcmlvZDogbnVtYmVyIH0pLnBlcmlvZCA6IDAsXG4gIH07XG5cbiAgaWYgKHR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgcG9wdWxhdGVTZW5kRmllbGRzKHJlc3VsdCwgbWV0aG9kLCBhcmdzKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgcG9wdWxhdGVTdGFraW5nQWN0aXZhdGVGaWVsZHMocmVzdWx0LCBtZXRob2QsIGFyZ3MsIHBhcmFtcy5zZW5kZXJBZGRyZXNzKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaykge1xuICAgIHJlc3VsdC5hbW91bnQgPSBTdHJpbmcoYXJncy52YWx1ZSA/PyAnJyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdykge1xuICAgIHJlc3VsdC5udW1TbGFzaGluZ1NwYW5zID0gTnVtYmVyKGFyZ3MubnVtU2xhc2hpbmdTcGFucyA/PyAwKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltKSB7XG4gICAgcmVzdWx0LnZhbGlkYXRvclN0YXNoID0gU3RyaW5nKGFyZ3MudmFsaWRhdG9yU3Rhc2ggPz8gJycpO1xuICAgIHJlc3VsdC5jbGFpbUVyYSA9IFN0cmluZyhhcmdzLmVyYSA/PyAnJyk7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbikge1xuICAgIHBvcHVsYXRlQWRkcmVzc0luaXRGaWVsZHMocmVzdWx0LCBtZXRob2QsIGFyZ3MpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCkge1xuICAgIHJlc3VsdC5iYXRjaENhbGxzID0gbWFwQmF0Y2hDYWxscyhhcmdzLmNhbGxzIGFzIFBhcnNlZE1ldGhvZFtdKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb3JlIGV4cGxhaW4gbG9naWNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBJbnRlcm5hbE91dHB1dCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBiaWdpbnQgfCB0eXBlb2YgQUxMO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJuYWxJbnB1dCB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IGJpZ2ludCB8IHR5cGVvZiBBTEw7XG59XG5cbmludGVyZmFjZSBJbnRlcm5hbEV4cGxhaW5lZCB7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc2VuZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG91dHB1dHM6IEludGVybmFsT3V0cHV0W107XG4gIGlucHV0czogSW50ZXJuYWxJbnB1dFtdO1xuICBvdXRwdXRBbW91bnQ6IGJpZ2ludDtcbiAgdGlwOiBiaWdpbnQ7XG4gIGVyYTogRXJhO1xuICBtZXRob2Q6IFBhcnNlZE1ldGhvZDtcbiAgaXNTaWduZWQ6IGJvb2xlYW47XG4gIG5vbmNlOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwbGFuYXRpb24ocGFyYW1zOiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIG1hdGVyaWFsOiBNYXRlcmlhbDtcbiAgc2VuZGVyQWRkcmVzcz86IHN0cmluZztcbiAgcmVmZXJlbmNlQmxvY2s/OiBzdHJpbmc7XG4gIGJsb2NrTnVtYmVyPzogbnVtYmVyO1xufSk6IEludGVybmFsRXhwbGFpbmVkIHtcbiAgY29uc3QgdHggPSBEb3RUcmFuc2FjdGlvbi5mcm9tSGV4KHBhcmFtcy50eEhleCwgcGFyYW1zLm1hdGVyaWFsKTtcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBtYXRlcmlhbDogcGFyYW1zLm1hdGVyaWFsLFxuICAgIHNlbmRlcjogcGFyYW1zLnNlbmRlckFkZHJlc3MsXG4gICAgcmVmZXJlbmNlQmxvY2s6IHBhcmFtcy5yZWZlcmVuY2VCbG9jayxcbiAgICBibG9ja051bWJlcjogcGFyYW1zLmJsb2NrTnVtYmVyLFxuICB9O1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVRyYW5zYWN0aW9uKHR4LCBjb250ZXh0KTtcbiAgY29uc3Qgc2VuZGVyID0gcGFyc2VkLnNlbmRlciA/PyBwYXJhbXMuc2VuZGVyQWRkcmVzcztcblxuICBjb25zdCBhbmFseXNpcyA9IGFuYWx5emVNZXRob2QocGFyc2VkLm1ldGhvZCwgc2VuZGVyLCBwYXJhbXMubWF0ZXJpYWwubWV0YWRhdGEpO1xuXG4gIC8vIFVzZSBleHBsaWNpdCBpbnB1dHMgZnJvbSBhbmFseXNpcyBpZiBwcm92aWRlZCAoZS5nLiwgdW5zdGFrZSBiYXRjaCB3aGVyZVxuICAvLyB0aGUgaW5wdXQgc291cmNlIGlzIHRoZSBwcm94eSBhZGRyZXNzLCBub3QgdGhlIHNlbmRlcikuIE90aGVyd2lzZSwgbWlycm9yXG4gIC8vIG91dHB1dHMgd2l0aCBzZW5kZXIgYXMgdGhlIGRlZmF1bHQgaW5wdXQgc291cmNlLlxuICBjb25zdCBpbnB1dHM6IEludGVybmFsSW5wdXRbXSA9XG4gICAgYW5hbHlzaXMuaW5wdXRzID8/IChzZW5kZXIgPyBhbmFseXNpcy5vdXRwdXRzLm1hcCgobykgPT4gKHsgYWRkcmVzczogc2VuZGVyLCB2YWx1ZTogby5hbW91bnQgfSkpIDogW10pO1xuXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IGFuYWx5c2lzLm91dHB1dHMucmVkdWNlKChzdW0sIG8pID0+IHtcbiAgICBpZiAoby5hbW91bnQgPT09IEFMTCkgcmV0dXJuIHN1bTtcbiAgICByZXR1cm4gc3VtICsgby5hbW91bnQ7XG4gIH0sIDBuKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGFuYWx5c2lzLnR5cGUsXG4gICAgaWQ6IHBhcnNlZC5pZCA/PyB1bmRlZmluZWQsXG4gICAgc2VuZGVyOiBwYXJzZWQuc2VuZGVyID8/IHVuZGVmaW5lZCxcbiAgICBvdXRwdXRzOiBhbmFseXNpcy5vdXRwdXRzLFxuICAgIGlucHV0cyxcbiAgICBvdXRwdXRBbW91bnQsXG4gICAgdGlwOiBCaWdJbnQocGFyc2VkLnRpcCB8fCAnMCcpLFxuICAgIGVyYTogcGFyc2VkLmVyYSxcbiAgICBtZXRob2Q6IHBhcnNlZC5tZXRob2QsXG4gICAgaXNTaWduZWQ6IHBhcnNlZC5pc1NpZ25lZCxcbiAgICBub25jZTogcGFyc2VkLm5vbmNlLFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tYmluZWQgdHlwZSArIG91dHB1dCBhbmFseXNpcyAoc2luZ2xlIHN3aXRjaCwgc2luZ2xlIHBsYWNlIHRvIHVwZGF0ZSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmludGVyZmFjZSBNZXRob2RBbmFseXNpcyB7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgb3V0cHV0czogSW50ZXJuYWxPdXRwdXRbXTtcbiAgLyoqIEV4cGxpY2l0IGlucHV0cywgd2hlbiB0aGV5IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IChzZW5kZXIgbWlycm9ycyBvdXRwdXRzKS4gKi9cbiAgaW5wdXRzPzogSW50ZXJuYWxJbnB1dFtdO1xufVxuXG4vKipcbiAqIEFuYWx5emUgYSBwYXJzZWQgbWV0aG9kIHRvIGRldGVybWluZSBpdHMgdHJhbnNhY3Rpb24gdHlwZSBhbmQgZXh0cmFjdCBvdXRwdXRzLlxuICpcbiAqIFRoaXMgaXMgYSBzaW5nbGUgc3dpdGNoIHRoYXQgaGFuZGxlcyBib3RoIGNvbmNlcm5zIHRvZ2V0aGVyLCBwcmV2ZW50aW5nIHRoZW1cbiAqIGZyb20gZ2V0dGluZyBvdXQgb2Ygc3luYy4gRXZlcnkgY2FzZSB0aGF0IHNldHMgYSB0eXBlIGFsc28gc2V0cyB0aGUgb3V0cHV0c1xuICogZm9yIHRoYXQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZU1ldGhvZChtZXRob2Q6IFBhcnNlZE1ldGhvZCwgc2VuZGVyQWRkcmVzcz86IHN0cmluZywgbWV0YWRhdGFIZXg/OiBzdHJpbmcpOiBNZXRob2RBbmFseXNpcyB7XG4gIHJldHVybiBhbmFseXplTWV0aG9kSW5uZXIobWV0aG9kLCBzZW5kZXJBZGRyZXNzLCBtZXRhZGF0YUhleCwgMCk7XG59XG5cbmZ1bmN0aW9uIGFuYWx5emVNZXRob2RJbm5lcihcbiAgbWV0aG9kOiBQYXJzZWRNZXRob2QsXG4gIHNlbmRlckFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgbWV0YWRhdGFIZXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZGVwdGg6IG51bWJlclxuKTogTWV0aG9kQW5hbHlzaXMge1xuICBjb25zdCBrZXkgPSBgJHttZXRob2QucGFsbGV0fS4ke21ldGhvZC5uYW1lfWA7XG4gIGNvbnN0IGFyZ3MgPSAobWV0aG9kLmFyZ3MgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgLy8gLS0tIFRyYW5zZmVycyAtLS1cbiAgICBjYXNlICdiYWxhbmNlcy50cmFuc2Zlcic6XG4gICAgY2FzZSAnYmFsYW5jZXMudHJhbnNmZXJLZWVwQWxpdmUnOlxuICAgIGNhc2UgJ2JhbGFuY2VzLnRyYW5zZmVyQWxsb3dEZWF0aCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogU3RyaW5nKGFyZ3MuZGVzdCA/PyAnJyksIGFtb3VudDogQmlnSW50KChhcmdzLnZhbHVlIGFzIHN0cmluZykgPz8gJzAnKSB9XSxcbiAgICAgIH07XG5cbiAgICBjYXNlICdiYWxhbmNlcy50cmFuc2ZlckFsbCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogU3RyaW5nKGFyZ3MuZGVzdCA/PyAnJyksIGFtb3VudDogQUxMIH1dLFxuICAgICAgfTtcblxuICAgIC8vIC0tLSBTdGFraW5nIC0tLVxuICAgIGNhc2UgJ3N0YWtpbmcuYm9uZCc6XG4gICAgY2FzZSAnc3Rha2luZy5ib25kRXh0cmEnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSxcbiAgICAgICAgb3V0cHV0czogW3sgYWRkcmVzczogU1RBS0lOR19ERVNUSU5BVElPTiwgYW1vdW50OiBCaWdJbnQoKGFyZ3MudmFsdWUgYXMgc3RyaW5nKSA/PyAnMCcpIH1dLFxuICAgICAgfTtcblxuICAgIGNhc2UgJ3N0YWtpbmcudW5ib25kJzpcbiAgICAgIC8vIEVtcHR5IG91dHB1dHM6IHVuYm9uZCB1bmxvY2tzIERPVCAobm8gZXh0ZXJuYWwgc3BlbmQpLiBNYXRjaGVzIGxlZ2FjeSBUcmFuc2FjdGlvbiBjbGFzc1xuICAgICAgLy8gYmVoYXZpb3Igd2hlcmUgZGVjb2RlSW5wdXRzQW5kT3V0cHV0c0ZvclVuYm9uZCgpIHJldHVybnMgW10uIEJvbmQvYm9uZEV4dHJhIGtlZXAgdGhlXG4gICAgICAvLyBzZW50aW5lbCBiZWNhdXNlIHRoZXkgcmVwcmVzZW50IGFjdHVhbCBiYWxhbmNlIGxvY2tzIHZpc2libGUgdG8gcG9saWN5IGV2YWx1YXRpb24uXG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaywgb3V0cHV0czogW10gfTtcblxuICAgIGNhc2UgJ3N0YWtpbmcud2l0aGRyYXdVbmJvbmRlZCc6XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3LCBvdXRwdXRzOiBbXSB9O1xuXG4gICAgY2FzZSAnc3Rha2luZy5jaGlsbCc6XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1Vudm90ZSwgb3V0cHV0czogW10gfTtcblxuICAgIGNhc2UgJ3N0YWtpbmcucGF5b3V0U3Rha2Vycyc6XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBvdXRwdXRzOiBbXSB9O1xuXG4gICAgLy8gLS0tIFByb3h5IC0tLVxuICAgIGNhc2UgJ3Byb3h5LmFkZFByb3h5JzpcbiAgICBjYXNlICdwcm94eS5yZW1vdmVQcm94eSc6XG4gICAgY2FzZSAncHJveHkuY3JlYXRlUHVyZSc6XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uLCBvdXRwdXRzOiBbXSB9O1xuXG4gICAgLy8gLS0tIFByb3h5LXdyYXBwZWQgY2FsbCAtLS1cbiAgICBjYXNlICdwcm94eS5wcm94eSc6IHtcbiAgICAgIGlmIChkZXB0aCA+PSBNQVhfTkVTVElOR19ERVBUSCkgcmV0dXJuIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsIG91dHB1dHM6IFtdIH07XG4gICAgICBjb25zdCBjYWxsID0gYXJncy5jYWxsIGFzIFBhcnNlZE1ldGhvZCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjYWxsPy5wYWxsZXQgJiYgY2FsbD8ubmFtZSkgcmV0dXJuIGFuYWx5emVNZXRob2RJbm5lcihjYWxsLCBzZW5kZXJBZGRyZXNzLCBtZXRhZGF0YUhleCwgZGVwdGggKyAxKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TZW5kLCBvdXRwdXRzOiBbXSB9O1xuICAgIH1cblxuICAgIC8vIC0tLSBCYXRjaCAtLS1cbiAgICBjYXNlICd1dGlsaXR5LmJhdGNoJzpcbiAgICBjYXNlICd1dGlsaXR5LmJhdGNoQWxsJzpcbiAgICAgIHJldHVybiBhbmFseXplQmF0Y2goYXJncywgc2VuZGVyQWRkcmVzcywgbWV0YWRhdGFIZXgsIGRlcHRoKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCwgb3V0cHV0czogW10gfTtcbiAgfVxufVxuXG4vKipcbiAqIEFuYWx5emUgYSBiYXRjaCB0cmFuc2FjdGlvbi5cbiAqXG4gKiBEZXRlY3RzIGtub3duIHByb3h5IGJhdGNoIHBhdHRlcm5zIChzdGFrZTogYm9uZCthZGRQcm94eSwgdW5zdGFrZTpcbiAqIHJlbW92ZVByb3h5K2NoaWxsK3VuYm9uZCkgYW5kIGhhbmRsZXMgcHJveHkgZGVwb3NpdCBjb3N0LiBGb3IgdW5yZWNvZ25pemVkXG4gKiBiYXRjaCBwYXR0ZXJucywgcmVjdXJzaXZlbHkgZXh0cmFjdHMgb3V0cHV0cyBmcm9tIGVhY2ggaW5uZXIgY2FsbC5cbiAqL1xuZnVuY3Rpb24gYW5hbHl6ZUJhdGNoKFxuICBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2VuZGVyQWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBtZXRhZGF0YUhleDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkZXB0aDogbnVtYmVyXG4pOiBNZXRob2RBbmFseXNpcyB7XG4gIGNvbnN0IGNhbGxzID0gKGFyZ3MuY2FsbHMgPz8gW10pIGFzIFBhcnNlZE1ldGhvZFtdO1xuICBpZiAoY2FsbHMubGVuZ3RoID09PSAwKSByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQmF0Y2gsIG91dHB1dHM6IFtdIH07XG5cbiAgY29uc3QgY2FsbEtleXMgPSBjYWxscy5tYXAoKGMpID0+IGAke2MucGFsbGV0fS4ke2MubmFtZX1gKTtcblxuICAvLyBTdGFraW5nIGJhdGNoOiBib25kICsgYWRkUHJveHkgKDIgY2FsbHMpXG4gIGlmIChjYWxscy5sZW5ndGggPT09IDIgJiYgY2FsbEtleXNbMF0gPT09ICdzdGFraW5nLmJvbmQnICYmIGNhbGxLZXlzWzFdID09PSAncHJveHkuYWRkUHJveHknKSB7XG4gICAgY29uc3QgYm9uZEFyZ3MgPSAoY2FsbHNbMF0uYXJncyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgYWRkUHJveHlBcmdzID0gKGNhbGxzWzFdLmFyZ3MgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGJvbmRBbW91bnQgPSBCaWdJbnQoKGJvbmRBcmdzLnZhbHVlIGFzIHN0cmluZykgPz8gJzAnKTtcbiAgICBjb25zdCBwcm94eUFkZHJlc3MgPSBTdHJpbmcoYWRkUHJveHlBcmdzLmRlbGVnYXRlID8/ICcnKTtcbiAgICBjb25zdCBwcm94eURlcG9zaXRDb3N0ID0gbWV0YWRhdGFIZXggPyBnZXRQcm94eURlcG9zaXRDb3N0KG1ldGFkYXRhSGV4KSA6IDBuO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCxcbiAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgeyBhZGRyZXNzOiBTVEFLSU5HX0RFU1RJTkFUSU9OLCBhbW91bnQ6IGJvbmRBbW91bnQgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBwcm94eUFkZHJlc3MsIGFtb3VudDogcHJveHlEZXBvc2l0Q29zdCB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVW5zdGFraW5nIGJhdGNoOiByZW1vdmVQcm94eSArIGNoaWxsICsgdW5ib25kICgzIGNhbGxzKVxuICAvLyBJbnB1dCBzb3VyY2UgaXMgdGhlIHByb3h5IGFkZHJlc3MgKGRlcG9zaXQgcmVmdW5kKSwgbm90IHRoZSBzZW5kZXIuXG4gIGlmIChcbiAgICBjYWxscy5sZW5ndGggPT09IDMgJiZcbiAgICBjYWxsS2V5c1swXSA9PT0gJ3Byb3h5LnJlbW92ZVByb3h5JyAmJlxuICAgIGNhbGxLZXlzWzFdID09PSAnc3Rha2luZy5jaGlsbCcgJiZcbiAgICBjYWxsS2V5c1syXSA9PT0gJ3N0YWtpbmcudW5ib25kJ1xuICApIHtcbiAgICBjb25zdCByZW1vdmVQcm94eUFyZ3MgPSAoY2FsbHNbMF0uYXJncyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgcHJveHlBZGRyZXNzID0gU3RyaW5nKHJlbW92ZVByb3h5QXJncy5kZWxlZ2F0ZSA/PyAnJyk7XG4gICAgY29uc3QgcHJveHlEZXBvc2l0Q29zdCA9IG1ldGFkYXRhSGV4ID8gZ2V0UHJveHlEZXBvc2l0Q29zdChtZXRhZGF0YUhleCkgOiAwbjtcblxuICAgIGNvbnN0IG91dHB1dHMgPSBzZW5kZXJBZGRyZXNzID8gW3sgYWRkcmVzczogc2VuZGVyQWRkcmVzcywgYW1vdW50OiBwcm94eURlcG9zaXRDb3N0IH1dIDogW107XG4gICAgY29uc3QgaW5wdXRzID0gW3sgYWRkcmVzczogcHJveHlBZGRyZXNzLCB2YWx1ZTogcHJveHlEZXBvc2l0Q29zdCB9XTtcblxuICAgIHJldHVybiB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCwgb3V0cHV0cywgaW5wdXRzIH07XG4gIH1cblxuICAvLyBHZW5lcmljIGJhdGNoOiByZWN1cnNpdmVseSBleHRyYWN0IG91dHB1dHMgZnJvbSBlYWNoIGlubmVyIGNhbGxcbiAgaWYgKGRlcHRoID49IE1BWF9ORVNUSU5HX0RFUFRIKSByZXR1cm4geyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQmF0Y2gsIG91dHB1dHM6IFtdIH07XG4gIGNvbnN0IG91dHB1dHMgPSBjYWxsc1xuICAgIC5maWx0ZXIoKGMpID0+IGM/LnBhbGxldCAmJiBjPy5uYW1lKVxuICAgIC5mbGF0TWFwKChjKSA9PiBhbmFseXplTWV0aG9kSW5uZXIoYywgc2VuZGVyQWRkcmVzcywgbWV0YWRhdGFIZXgsIGRlcHRoICsgMSkub3V0cHV0cyk7XG4gIHJldHVybiB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5CYXRjaCwgb3V0cHV0cyB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcG9wdWxhdGVTZW5kRmllbGRzKHJlc3VsdDogVHhEYXRhLCBtZXRob2Q6IFBhcnNlZE1ldGhvZCwgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgY29uc3Qga2V5ID0gYCR7bWV0aG9kLnBhbGxldH0uJHttZXRob2QubmFtZX1gO1xuXG4gIGlmIChrZXkgPT09ICdwcm94eS5wcm94eScpIHtcbiAgICAvLyBQcm94eS13cmFwcGVkIHRyYW5zZmVyXG4gICAgY29uc3QgaW5uZXJDYWxsID0gYXJncy5jYWxsIGFzIFBhcnNlZE1ldGhvZCB8IHVuZGVmaW5lZDtcbiAgICByZXN1bHQub3duZXIgPSBTdHJpbmcoYXJncy5yZWFsID8/ICcnKTtcbiAgICByZXN1bHQuZm9yY2VQcm94eVR5cGUgPSAoYXJncy5mb3JjZVByb3h5VHlwZSBhcyBQcm94eVR5cGUpID8/IHVuZGVmaW5lZDtcbiAgICBpZiAoaW5uZXJDYWxsPy5hcmdzKSB7XG4gICAgICBjb25zdCBpbm5lckFyZ3MgPSBpbm5lckNhbGwuYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJlc3VsdC50byA9IFN0cmluZyhpbm5lckFyZ3MuZGVzdCA/PyAnJyk7XG4gICAgICByZXN1bHQuYW1vdW50ID0gU3RyaW5nKGlubmVyQXJncy52YWx1ZSA/PyAnJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGtleSA9PT0gJ2JhbGFuY2VzLnRyYW5zZmVyQWxsJykge1xuICAgIHJlc3VsdC50byA9IFN0cmluZyhhcmdzLmRlc3QgPz8gJycpO1xuICAgIHJlc3VsdC5rZWVwQWxpdmUgPSBCb29sZWFuKGFyZ3Mua2VlcEFsaXZlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0cmFuc2ZlciwgdHJhbnNmZXJLZWVwQWxpdmUsIHRyYW5zZmVyQWxsb3dEZWF0aFxuICAgIHJlc3VsdC50byA9IFN0cmluZyhhcmdzLmRlc3QgPz8gJycpO1xuICAgIHJlc3VsdC5hbW91bnQgPSBTdHJpbmcoYXJncy52YWx1ZSA/PyAnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wdWxhdGVTdGFraW5nQWN0aXZhdGVGaWVsZHMoXG4gIHJlc3VsdDogVHhEYXRhLFxuICBtZXRob2Q6IFBhcnNlZE1ldGhvZCxcbiAgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNlbmRlckFkZHJlc3M6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmIChtZXRob2QubmFtZSA9PT0gJ2JvbmRFeHRyYScpIHtcbiAgICByZXN1bHQuYW1vdW50ID0gU3RyaW5nKGFyZ3MudmFsdWUgPz8gJycpO1xuICB9IGVsc2Uge1xuICAgIC8vIGJvbmRcbiAgICByZXN1bHQuY29udHJvbGxlciA9IHNlbmRlckFkZHJlc3M7XG4gICAgcmVzdWx0LmFtb3VudCA9IFN0cmluZyhhcmdzLnZhbHVlID8/ICcnKTtcbiAgICByZXN1bHQucGF5ZWUgPSBTdHJpbmcoYXJncy5wYXllZSA/PyAnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wdWxhdGVBZGRyZXNzSW5pdEZpZWxkcyhyZXN1bHQ6IFR4RGF0YSwgbWV0aG9kOiBQYXJzZWRNZXRob2QsIGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gIGNvbnN0IGtleSA9IGAke21ldGhvZC5wYWxsZXR9LiR7bWV0aG9kLm5hbWV9YDtcbiAgcmVzdWx0Lm1ldGhvZCA9IGtleTtcbiAgcmVzdWx0LnByb3h5VHlwZSA9IFN0cmluZyhhcmdzLnByb3h5X3R5cGUgPz8gJycpO1xuICByZXN1bHQuZGVsYXkgPSBTdHJpbmcoYXJncy5kZWxheSA/PyAnJyk7XG5cbiAgaWYgKGtleSA9PT0gJ3Byb3h5LmNyZWF0ZVB1cmUnKSB7XG4gICAgcmVzdWx0LmluZGV4ID0gU3RyaW5nKGFyZ3MuaW5kZXggPz8gJycpO1xuICB9IGVsc2Uge1xuICAgIC8vIGFkZFByb3h5LCByZW1vdmVQcm94eVxuICAgIHJlc3VsdC5vd25lciA9IFN0cmluZyhhcmdzLmRlbGVnYXRlID8/ICcnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBCYXRjaENhbGxzKGNhbGxzOiBQYXJzZWRNZXRob2RbXSB8IHVuZGVmaW5lZCk6IEJhdGNoQ2FsbE9iamVjdFtdIHtcbiAgaWYgKCFjYWxscykgcmV0dXJuIFtdO1xuICByZXR1cm4gY2FsbHMubWFwKChjYWxsKSA9PiAoe1xuICAgIGNhbGxJbmRleDogYDB4JHtjYWxsLnBhbGxldEluZGV4LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Y2FsbC5tZXRob2RJbmRleC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gLFxuICAgIGFyZ3M6IHRyYW5zZm9ybUJhdGNoQ2FsbEFyZ3MoKGNhbGwuYXJncyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLFxuICB9KSk7XG59XG5cbi8qKiBUcmFuc2Zvcm0gV0FTTS1kZWNvZGVkIGJhdGNoIGNhbGwgYXJncyB0byBtYXRjaCB0aGUgUG9sa2Fkb3QuanMgZm9ybWF0IHRoYXQgY29uc3VtZXJzIGV4cGVjdCAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtQmF0Y2hDYWxsQXJncyhhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuICAgIGlmIChrZXkgPT09ICdkZWxlZ2F0ZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gTXVsdGlBZGRyZXNzIElkIHZhcmlhbnQ6IHN0cmluZyAtPiB7IGlkOiBzdHJpbmcgfVxuICAgICAgcmVzdWx0W2tleV0gPSB7IGlkOiB2YWx1ZSB9O1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndmFsdWUnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIENvbXBhY3QgdTEyODogc3RyaW5nIC0+IG51bWJlciAobWF0Y2hlcyBQb2xrYWRvdC5qcyBiZWhhdmlvcilcbiAgICAgIHJlc3VsdFtrZXldID0gTnVtYmVyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3BheWVlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBFbnVtIHVuaXQgdmFyaWFudDogXCJTdGFrZWRcIiAtPiB7IHN0YWtlZDogbnVsbCB9XG4gICAgICBjb25zdCB2YXJpYW50TmFtZSA9IHZhbHVlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG4gICAgICByZXN1bHRba2V5XSA9IHsgW3ZhcmlhbnROYW1lXTogbnVsbCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
@@ -0,0 +1,38 @@
1
+ import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
4
+ import { Transaction } from './transaction';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ export declare class WithdrawUnstakedBuilder extends TransactionBuilder {
7
+ protected _numSlashingSpans: number;
8
+ constructor(_coinConfig: Readonly<CoinConfig>);
9
+ /**
10
+ *
11
+ * Frees up any unlocked chunks.
12
+ * The balance can now be used by the stash account to do whatever it wants.
13
+ *
14
+ * @returns {UnsignedTransaction} an unsigned Dot transaction
15
+ *
16
+ * @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
17
+ */
18
+ protected buildTransaction(): UnsignedTransaction;
19
+ protected get transactionType(): TransactionType;
20
+ /**
21
+ *
22
+ * The number of slashing spans.
23
+ *
24
+ * @param {number} slashingSpans
25
+ * @returns {WithdrawUnstakedBuilder} This withdrawUnstaked builder.
26
+ *
27
+ * @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
28
+ */
29
+ slashingSpans(slashingSpans: number): this;
30
+ /** @inheritdoc */
31
+ validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
32
+ /** @inheritdoc */
33
+ protected fromImplementation(rawTransaction: string): Transaction;
34
+ /** @inheritdoc */
35
+ validateTransaction(_: Transaction): void;
36
+ private validateFields;
37
+ }
38
+ //# sourceMappingURL=withdrawUnstakedBuilder.d.ts.map
@@ -0,0 +1,81 @@
1
+ import { InvalidTransactionError, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { methods } from '@substrate/txwrapper-polkadot';
3
+ import BigNumber from 'bignumber.js';
4
+ import { MethodNames } from './iface';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ import { WithdrawUnstakedTransactionSchema } from './txnSchema';
7
+ export class WithdrawUnstakedBuilder extends TransactionBuilder {
8
+ constructor(_coinConfig) {
9
+ super(_coinConfig);
10
+ }
11
+ /**
12
+ *
13
+ * Frees up any unlocked chunks.
14
+ * The balance can now be used by the stash account to do whatever it wants.
15
+ *
16
+ * @returns {UnsignedTransaction} an unsigned Dot transaction
17
+ *
18
+ * @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
19
+ */
20
+ buildTransaction() {
21
+ const baseTxInfo = this.createBaseTxInfo();
22
+ // TODO: The method changes the args type from number to string, verify it doesn't break anything
23
+ return methods.staking.withdrawUnbonded({
24
+ numSlashingSpans: this._numSlashingSpans,
25
+ }, baseTxInfo.baseTxInfo, baseTxInfo.options);
26
+ }
27
+ get transactionType() {
28
+ return TransactionType.StakingWithdraw;
29
+ }
30
+ /**
31
+ *
32
+ * The number of slashing spans.
33
+ *
34
+ * @param {number} slashingSpans
35
+ * @returns {WithdrawUnstakedBuilder} This withdrawUnstaked builder.
36
+ *
37
+ * @see https://polkadot.js.org/docs/substrate/extrinsics/#withdrawunbondednum_slashing_spans-u32
38
+ */
39
+ slashingSpans(slashingSpans) {
40
+ this.validateValue(new BigNumber(slashingSpans));
41
+ this._numSlashingSpans = slashingSpans;
42
+ return this;
43
+ }
44
+ /** @inheritdoc */
45
+ validateDecodedTransaction(decodedTxn) {
46
+ if (decodedTxn.method?.name === MethodNames.WithdrawUnbonded) {
47
+ const txMethod = decodedTxn.method.args;
48
+ const value = txMethod.numSlashingSpans;
49
+ const validationResult = WithdrawUnstakedTransactionSchema.validate({ value });
50
+ if (validationResult.error) {
51
+ throw new InvalidTransactionError(`WithdrawUnstaked Transaction validation failed: ${validationResult.error.message}`);
52
+ }
53
+ }
54
+ }
55
+ /** @inheritdoc */
56
+ fromImplementation(rawTransaction) {
57
+ const tx = super.fromImplementation(rawTransaction);
58
+ if (this._method?.name === MethodNames.WithdrawUnbonded) {
59
+ const txMethod = this._method.args;
60
+ this.slashingSpans(txMethod.numSlashingSpans);
61
+ }
62
+ else {
63
+ throw new InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected withdrawUnbonded`);
64
+ }
65
+ return tx;
66
+ }
67
+ /** @inheritdoc */
68
+ validateTransaction(_) {
69
+ super.validateTransaction(_);
70
+ this.validateFields(this._numSlashingSpans);
71
+ }
72
+ validateFields(value) {
73
+ const validationResult = WithdrawUnstakedTransactionSchema.validate({
74
+ value,
75
+ });
76
+ if (validationResult.error) {
77
+ throw new InvalidTransactionError(`WithdrawUnstaked Builder Transaction validation failed: ${validationResult.error.message}`);
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXdVbnN0YWtlZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dpdGhkcmF3VW5zdGFrZWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdoRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQXdCLE1BQU0sU0FBUyxDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRSxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsa0JBQWtCO0lBRzdELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLGdCQUFnQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxpR0FBaUc7UUFDakcsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUNyQztZQUNFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDekMsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsYUFBYSxDQUFDLGFBQXFCO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiwwQkFBMEIsQ0FBQyxVQUFtRDtRQUM1RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBdUMsQ0FBQztZQUMzRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSx1QkFBdUIsQ0FDL0IsbURBQW1ELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDcEYsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLGNBQXNCO1FBQ2pELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBNEIsQ0FBQztZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLHVCQUF1QixDQUFDLDZCQUE2QixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksNkJBQTZCLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLENBQWM7UUFDaEMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhO1FBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUMsUUFBUSxDQUFDO1lBQ2xFLEtBQUs7U0FDTixDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSx1QkFBdUIsQ0FDL0IsMkRBQTJELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDNUYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBNZXRob2ROYW1lcywgV2l0aGRyYXdVbnN0YWtlZEFyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBXaXRoZHJhd1Vuc3Rha2VkVHJhbnNhY3Rpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5cbmV4cG9ydCBjbGFzcyBXaXRoZHJhd1Vuc3Rha2VkQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfbnVtU2xhc2hpbmdTcGFuczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGcmVlcyB1cCBhbnkgdW5sb2NrZWQgY2h1bmtzLlxuICAgKiBUaGUgYmFsYW5jZSBjYW4gbm93IGJlIHVzZWQgYnkgdGhlIHN0YXNoIGFjY291bnQgdG8gZG8gd2hhdGV2ZXIgaXQgd2FudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyN3aXRoZHJhd3VuYm9uZGVkbnVtX3NsYXNoaW5nX3NwYW5zLXUzMlxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIC8vIFRPRE86IFRoZSBtZXRob2QgY2hhbmdlcyB0aGUgYXJncyB0eXBlIGZyb20gbnVtYmVyIHRvIHN0cmluZywgdmVyaWZ5IGl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmdcbiAgICByZXR1cm4gbWV0aG9kcy5zdGFraW5nLndpdGhkcmF3VW5ib25kZWQoXG4gICAgICB7XG4gICAgICAgIG51bVNsYXNoaW5nU3BhbnM6IHRoaXMuX251bVNsYXNoaW5nU3BhbnMsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhlIG51bWJlciBvZiBzbGFzaGluZyBzcGFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNsYXNoaW5nU3BhbnNcbiAgICogQHJldHVybnMge1dpdGhkcmF3VW5zdGFrZWRCdWlsZGVyfSBUaGlzIHdpdGhkcmF3VW5zdGFrZWQgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyN3aXRoZHJhd3VuYm9uZGVkbnVtX3NsYXNoaW5nX3NwYW5zLXUzMlxuICAgKi9cbiAgc2xhc2hpbmdTcGFucyhzbGFzaGluZ1NwYW5zOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihzbGFzaGluZ1NwYW5zKSk7XG4gICAgdGhpcy5fbnVtU2xhc2hpbmdTcGFucyA9IHNsYXNoaW5nU3BhbnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5XaXRoZHJhd1VuYm9uZGVkKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBXaXRoZHJhd1Vuc3Rha2VkQXJncztcbiAgICAgIGNvbnN0IHZhbHVlID0gdHhNZXRob2QubnVtU2xhc2hpbmdTcGFucztcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBXaXRoZHJhd1Vuc3Rha2VkVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoeyB2YWx1ZSB9KTtcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgV2l0aGRyYXdVbnN0YWtlZCBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLldpdGhkcmF3VW5ib25kZWQpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgV2l0aGRyYXdVbnN0YWtlZEFyZ3M7XG4gICAgICB0aGlzLnNsYXNoaW5nU3BhbnModHhNZXRob2QubnVtU2xhc2hpbmdTcGFucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkIHdpdGhkcmF3VW5ib25kZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24oXzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZVRyYW5zYWN0aW9uKF8pO1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHModGhpcy5fbnVtU2xhc2hpbmdTcGFucyk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gV2l0aGRyYXdVbnN0YWtlZFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYFdpdGhkcmF3VW5zdGFrZWQgQnVpbGRlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { BitGoBase } from '@bitgo-beta/sdk-core';
2
+ export declare const register: (sdk: BitGoBase) => void;
3
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { Dot } from './dot';
2
+ import { Tdot } from './tdot';
3
+ export const register = (sdk) => {
4
+ sdk.register('dot', Dot.createInstance);
5
+ sdk.register('tdot', Tdot.createInstance);
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRG90IH0gZnJvbSAnLi9kb3QnO1xuaW1wb3J0IHsgVGRvdCB9IGZyb20gJy4vdGRvdCc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ2RvdCcsIERvdC5jcmVhdGVJbnN0YW5jZSk7XG4gIHNkay5yZWdpc3RlcigndGRvdCcsIFRkb3QuY3JlYXRlSW5zdGFuY2UpO1xufTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './mainnet';
2
+ export * from './westend';
3
+ export * from './polkadotAssetHub';
4
+ export * from './westendAssetHub';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './mainnet';
2
+ export * from './westend';
3
+ export * from './polkadotAssetHub';
4
+ export * from './westendAssetHub';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVzb3VyY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbWFpbm5ldCc7XG5leHBvcnQgKiBmcm9tICcuL3dlc3RlbmQnO1xuZXhwb3J0ICogZnJvbSAnLi9wb2xrYWRvdEFzc2V0SHViJztcbmV4cG9ydCAqIGZyb20gJy4vd2VzdGVuZEFzc2V0SHViJztcbiJdfQ==