@vultisig/core-chain 1.0.0 → 1.2.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 (227) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/amount/toChainAmount.d.ts +6 -1
  3. package/dist/amount/toChainAmount.d.ts.map +1 -1
  4. package/dist/amount/toChainAmount.js +88 -0
  5. package/dist/amount/toChainAmount.js.map +1 -1
  6. package/dist/chains/cardano/asset/cardanoAssetId.d.ts +14 -0
  7. package/dist/chains/cardano/asset/cardanoAssetId.d.ts.map +1 -0
  8. package/dist/chains/cardano/asset/cardanoAssetId.js +19 -0
  9. package/dist/chains/cardano/asset/cardanoAssetId.js.map +1 -0
  10. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts +10 -0
  11. package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts.map +1 -0
  12. package/dist/chains/cardano/client/getCardanoAddressAssets.js +19 -0
  13. package/dist/chains/cardano/client/getCardanoAddressAssets.js.map +1 -0
  14. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts +23 -0
  15. package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts.map +1 -0
  16. package/dist/chains/cardano/client/getCardanoAssetInfo.js +16 -0
  17. package/dist/chains/cardano/client/getCardanoAssetInfo.js.map +1 -0
  18. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts +20 -0
  19. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts.map +1 -0
  20. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js +22 -0
  21. package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js.map +1 -0
  22. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts +14 -0
  23. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts.map +1 -0
  24. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js +28 -0
  25. package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js.map +1 -0
  26. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts +7 -0
  27. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts.map +1 -0
  28. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js +9 -0
  29. package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js.map +1 -0
  30. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts +8 -0
  31. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts.map +1 -0
  32. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js +2 -0
  33. package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js.map +1 -0
  34. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts +25 -0
  35. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts.map +1 -0
  36. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js +43 -0
  37. package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js.map +1 -0
  38. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +26 -0
  39. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -0
  40. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +57 -0
  41. package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -0
  42. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +49 -0
  43. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -0
  44. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +85 -0
  45. package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -0
  46. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts +14 -0
  47. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts.map +1 -0
  48. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js +31 -0
  49. package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js.map +1 -0
  50. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts +3 -0
  51. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts.map +1 -0
  52. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js +13 -0
  53. package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js.map +1 -0
  54. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +14 -0
  55. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -0
  56. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +22 -0
  57. package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -0
  58. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts +50 -0
  59. package/dist/chains/cosmos/qbtc/claim/proofService.d.ts.map +1 -0
  60. package/dist/chains/cosmos/qbtc/claim/proofService.js +71 -0
  61. package/dist/chains/cosmos/qbtc/claim/proofService.js.map +1 -0
  62. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts +1 -2
  63. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts.map +1 -1
  64. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js +13 -9
  65. package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js.map +1 -1
  66. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts +3 -5
  67. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts.map +1 -1
  68. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js +3 -5
  69. package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js.map +1 -1
  70. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts +15 -0
  71. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts.map +1 -0
  72. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js +22 -0
  73. package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js.map +1 -0
  74. package/dist/chains/cosmos/thor/lp/halts.d.ts +56 -0
  75. package/dist/chains/cosmos/thor/lp/halts.d.ts.map +1 -0
  76. package/dist/chains/cosmos/thor/lp/halts.js +95 -0
  77. package/dist/chains/cosmos/thor/lp/halts.js.map +1 -0
  78. package/dist/chains/cosmos/thor/lp/index.d.ts +45 -0
  79. package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -0
  80. package/dist/chains/cosmos/thor/lp/index.js +12 -0
  81. package/dist/chains/cosmos/thor/lp/index.js.map +1 -0
  82. package/dist/chains/cosmos/thor/lp/lockup.d.ts +47 -0
  83. package/dist/chains/cosmos/thor/lp/lockup.d.ts.map +1 -0
  84. package/dist/chains/cosmos/thor/lp/lockup.js +56 -0
  85. package/dist/chains/cosmos/thor/lp/lockup.js.map +1 -0
  86. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts +25 -0
  87. package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts.map +1 -0
  88. package/dist/chains/cosmos/thor/lp/lpChainMap.js +30 -0
  89. package/dist/chains/cosmos/thor/lp/lpChainMap.js.map +1 -0
  90. package/dist/chains/cosmos/thor/lp/math.d.ts +129 -0
  91. package/dist/chains/cosmos/thor/lp/math.d.ts.map +1 -0
  92. package/dist/chains/cosmos/thor/lp/math.js +227 -0
  93. package/dist/chains/cosmos/thor/lp/math.js.map +1 -0
  94. package/dist/chains/cosmos/thor/lp/memberPool.d.ts +4 -0
  95. package/dist/chains/cosmos/thor/lp/memberPool.d.ts.map +1 -0
  96. package/dist/chains/cosmos/thor/lp/memberPool.js +24 -0
  97. package/dist/chains/cosmos/thor/lp/memberPool.js.map +1 -0
  98. package/dist/chains/cosmos/thor/lp/memo.d.ts +62 -0
  99. package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -0
  100. package/dist/chains/cosmos/thor/lp/memo.js +62 -0
  101. package/dist/chains/cosmos/thor/lp/memo.js.map +1 -0
  102. package/dist/chains/cosmos/thor/lp/pairing.d.ts +30 -0
  103. package/dist/chains/cosmos/thor/lp/pairing.d.ts.map +1 -0
  104. package/dist/chains/cosmos/thor/lp/pairing.js +44 -0
  105. package/dist/chains/cosmos/thor/lp/pairing.js.map +1 -0
  106. package/dist/chains/cosmos/thor/lp/payload.d.ts +66 -0
  107. package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -0
  108. package/dist/chains/cosmos/thor/lp/payload.js +49 -0
  109. package/dist/chains/cosmos/thor/lp/payload.js.map +1 -0
  110. package/dist/chains/cosmos/thor/lp/pools.d.ts +46 -0
  111. package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -0
  112. package/dist/chains/cosmos/thor/lp/pools.js +85 -0
  113. package/dist/chains/cosmos/thor/lp/pools.js.map +1 -0
  114. package/dist/chains/cosmos/thor/lp/position.d.ts +23 -0
  115. package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -0
  116. package/dist/chains/cosmos/thor/lp/position.js +105 -0
  117. package/dist/chains/cosmos/thor/lp/position.js.map +1 -0
  118. package/dist/chains/cosmos/thor/lp/positions.d.ts +15 -0
  119. package/dist/chains/cosmos/thor/lp/positions.d.ts.map +1 -0
  120. package/dist/chains/cosmos/thor/lp/positions.js +47 -0
  121. package/dist/chains/cosmos/thor/lp/positions.js.map +1 -0
  122. package/dist/chains/cosmos/thor/lp/types.d.ts +45 -0
  123. package/dist/chains/cosmos/thor/lp/types.d.ts.map +1 -0
  124. package/dist/chains/cosmos/thor/lp/types.js +2 -0
  125. package/dist/chains/cosmos/thor/lp/types.js.map +1 -0
  126. package/dist/chains/cosmos/thor/lp/validation.d.ts +38 -0
  127. package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -0
  128. package/dist/chains/cosmos/thor/lp/validation.js +100 -0
  129. package/dist/chains/cosmos/thor/lp/validation.js.map +1 -0
  130. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts +16 -0
  131. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts.map +1 -0
  132. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js +2 -0
  133. package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js.map +1 -0
  134. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts +12 -0
  135. package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts.map +1 -0
  136. package/dist/chains/polkadot/dapp/constructSigningPayload.js +30 -0
  137. package/dist/chains/polkadot/dapp/constructSigningPayload.js.map +1 -0
  138. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +3 -0
  139. package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -0
  140. package/dist/chains/solana/getDynamicPriorityFeePrice.js +20 -0
  141. package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -0
  142. package/dist/chains/solana/jito.d.ts +6 -0
  143. package/dist/chains/solana/jito.d.ts.map +1 -0
  144. package/dist/chains/solana/jito.js +40 -0
  145. package/dist/chains/solana/jito.js.map +1 -0
  146. package/dist/chains/ton/address.d.ts +6 -0
  147. package/dist/chains/ton/address.d.ts.map +1 -0
  148. package/dist/chains/ton/address.js +17 -0
  149. package/dist/chains/ton/address.js.map +1 -0
  150. package/dist/chains/ton/api.d.ts +7 -2
  151. package/dist/chains/ton/api.d.ts.map +1 -1
  152. package/dist/chains/ton/api.js +16 -3
  153. package/dist/chains/ton/api.js.map +1 -1
  154. package/dist/chains/utxo/client/getDashUtxos.d.ts +3 -0
  155. package/dist/chains/utxo/client/getDashUtxos.d.ts.map +1 -0
  156. package/dist/chains/utxo/client/getDashUtxos.js +28 -0
  157. package/dist/chains/utxo/client/getDashUtxos.js.map +1 -0
  158. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +21 -0
  159. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -0
  160. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +182 -0
  161. package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -0
  162. package/dist/chains/utxo/tx/getPsbtTransferInfo.js +1 -1
  163. package/dist/chains/utxo/tx/getPsbtTransferInfo.js.map +1 -1
  164. package/dist/chains/utxo/tx/getUtxos.d.ts.map +1 -1
  165. package/dist/chains/utxo/tx/getUtxos.js +5 -0
  166. package/dist/chains/utxo/tx/getUtxos.js.map +1 -1
  167. package/dist/coin/balance/resolvers/cardano.d.ts +1 -0
  168. package/dist/coin/balance/resolvers/cardano.d.ts.map +1 -1
  169. package/dist/coin/balance/resolvers/cardano.js +12 -0
  170. package/dist/coin/balance/resolvers/cardano.js.map +1 -1
  171. package/dist/coin/balance/resolvers/qbtc.d.ts.map +1 -1
  172. package/dist/coin/balance/resolvers/qbtc.js +6 -5
  173. package/dist/coin/balance/resolvers/qbtc.js.map +1 -1
  174. package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
  175. package/dist/coin/balance/resolvers/sui.js +1 -0
  176. package/dist/coin/balance/resolvers/sui.js.map +1 -1
  177. package/dist/coin/balance/resolvers/ton.d.ts.map +1 -1
  178. package/dist/coin/balance/resolvers/ton.js +11 -2
  179. package/dist/coin/balance/resolvers/ton.js.map +1 -1
  180. package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
  181. package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
  182. package/dist/coin/find/CoinFinderChainKind.js +1 -1
  183. package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
  184. package/dist/coin/find/index.d.ts.map +1 -1
  185. package/dist/coin/find/index.js +2 -0
  186. package/dist/coin/find/index.js.map +1 -1
  187. package/dist/coin/find/resolvers/cardano.d.ts +5 -0
  188. package/dist/coin/find/resolvers/cardano.d.ts.map +1 -0
  189. package/dist/coin/find/resolvers/cardano.js +17 -0
  190. package/dist/coin/find/resolvers/cardano.js.map +1 -0
  191. package/dist/coin/knownTokens/index.d.ts.map +1 -1
  192. package/dist/coin/knownTokens/index.js +74 -0
  193. package/dist/coin/knownTokens/index.js.map +1 -1
  194. package/dist/coin/token/metadata/chains.d.ts +1 -1
  195. package/dist/coin/token/metadata/chains.d.ts.map +1 -1
  196. package/dist/coin/token/metadata/chains.js +1 -0
  197. package/dist/coin/token/metadata/chains.js.map +1 -1
  198. package/dist/coin/token/metadata/index.d.ts.map +1 -1
  199. package/dist/coin/token/metadata/index.js +2 -0
  200. package/dist/coin/token/metadata/index.js.map +1 -1
  201. package/dist/coin/token/metadata/resolvers/cardano.d.ts +8 -0
  202. package/dist/coin/token/metadata/resolvers/cardano.d.ts.map +1 -0
  203. package/dist/coin/token/metadata/resolvers/cardano.js +20 -0
  204. package/dist/coin/token/metadata/resolvers/cardano.js.map +1 -0
  205. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts +8 -0
  206. package/dist/swap/native/utils/getNativeSwapDecimals.d.ts.map +1 -1
  207. package/dist/swap/native/utils/getNativeSwapDecimals.js +19 -4
  208. package/dist/swap/native/utils/getNativeSwapDecimals.js.map +1 -1
  209. package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
  210. package/dist/tx/broadcast/resolvers/qbtc.js +22 -5
  211. package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
  212. package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
  213. package/dist/tx/broadcast/resolvers/solana.js +12 -1
  214. package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
  215. package/dist/tx/hash/resolvers/cardano.d.ts.map +1 -1
  216. package/dist/tx/hash/resolvers/cardano.js +9 -5
  217. package/dist/tx/hash/resolvers/cardano.js.map +1 -1
  218. package/dist/tx/status/resolvers/cosmos.d.ts.map +1 -1
  219. package/dist/tx/status/resolvers/cosmos.js +21 -8
  220. package/dist/tx/status/resolvers/cosmos.js.map +1 -1
  221. package/dist/tx/status/resolvers/qbtc.d.ts.map +1 -1
  222. package/dist/tx/status/resolvers/qbtc.js +18 -19
  223. package/dist/tx/status/resolvers/qbtc.js.map +1 -1
  224. package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
  225. package/dist/tx/status/resolvers/ton.js +4 -4
  226. package/dist/tx/status/resolvers/ton.js.map +1 -1
  227. package/package.json +192 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructSigningPayload.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/polkadot/dapp/constructSigningPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAInD,MAAM,mCAAmC,GAAG,GAAG,CAAA;AAE/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,OAAkC,EACtB,EAAE;IACd,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;IACvD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAEhE,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CACxC,CAAC,EACD,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EACjC,IAAI,CACL,CAAA;IAED,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,SAAS,CAC/C,CAAC,EACD,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,EACxC,IAAI,CACL,CAAA;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAE7C,MAAM,GAAG,GAAG,SAAS,CACnB,MAAM,EACN,GAAG,EACH,KAAK,EACL,GAAG,EACH,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,SAAS,CACV,CAAA;IAED,IAAI,GAAG,CAAC,MAAM,GAAG,mCAAmC,EAAE,CAAC;QACrD,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Fetches the median of non-zero recent prioritization fees from the Solana RPC. */
2
+ export declare const getDynamicPriorityFeePrice: () => Promise<number>;
3
+ //# sourceMappingURL=getDynamicPriorityFeePrice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDynamicPriorityFeePrice.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"AAGA,qFAAqF;AACrF,eAAO,MAAM,0BAA0B,QAAa,OAAO,CAAC,MAAM,CAqBjE,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { getSolanaClient } from './client.js';
2
+ import { solanaConfig } from './solanaConfig.js';
3
+ /** Fetches the median of non-zero recent prioritization fees from the Solana RPC. */
4
+ export const getDynamicPriorityFeePrice = async () => {
5
+ const client = getSolanaClient();
6
+ const recentFees = await client.getRecentPrioritizationFees();
7
+ const nonZeroFees = recentFees
8
+ .map(entry => entry.prioritizationFee)
9
+ .filter(fee => fee > 0)
10
+ .sort((a, b) => a - b);
11
+ if (nonZeroFees.length === 0) {
12
+ return solanaConfig.priorityFeePrice;
13
+ }
14
+ const mid = Math.floor(nonZeroFees.length / 2);
15
+ if (nonZeroFees.length % 2 === 0) {
16
+ return Math.round((nonZeroFees[mid - 1] + nonZeroFees[mid]) / 2);
17
+ }
18
+ return nonZeroFees[mid];
19
+ };
20
+ //# sourceMappingURL=getDynamicPriorityFeePrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDynamicPriorityFeePrice.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/getDynamicPriorityFeePrice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,qFAAqF;AACrF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,IAAqB,EAAE;IAClE,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAEhC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,2BAA2B,EAAE,CAAA;IAE7D,MAAM,WAAW,GAAG,UAAU;SACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;SACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAE1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,gBAAgB,CAAA;IACxC,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Submit a single signed transaction via JITO's sendTransaction endpoint.
3
+ * Provides free MEV protection (private mempool) without requiring a bundle or tip.
4
+ */
5
+ export declare function sendJitoTransaction(rawTransaction: Uint8Array): Promise<string>;
6
+ //# sourceMappingURL=jito.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jito.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/jito.ts"],"names":[],"mappings":"AA6BA;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,cAAc,EAAE,UAAU,GACzB,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -0,0 +1,40 @@
1
+ import base58 from 'bs58';
2
+ const JITO_BLOCK_ENGINE_URL = 'https://mainnet.block-engine.jito.wtf';
3
+ const JITO_HTTP_TIMEOUT_MS = 8_000;
4
+ async function jitoFetch(url, body) {
5
+ const controller = new AbortController();
6
+ const timeout = setTimeout(() => controller.abort(), JITO_HTTP_TIMEOUT_MS);
7
+ try {
8
+ const response = await fetch(url, {
9
+ method: 'POST',
10
+ headers: { 'Content-Type': 'application/json' },
11
+ body: JSON.stringify(body),
12
+ signal: controller.signal,
13
+ });
14
+ if (!response.ok) {
15
+ throw new Error(`JITO request failed: ${response.status} ${response.statusText}`);
16
+ }
17
+ return response.json();
18
+ }
19
+ finally {
20
+ clearTimeout(timeout);
21
+ }
22
+ }
23
+ /**
24
+ * Submit a single signed transaction via JITO's sendTransaction endpoint.
25
+ * Provides free MEV protection (private mempool) without requiring a bundle or tip.
26
+ */
27
+ export async function sendJitoTransaction(rawTransaction) {
28
+ const encoded = base58.encode(rawTransaction);
29
+ const data = await jitoFetch(`${JITO_BLOCK_ENGINE_URL}/api/v1/transactions`, {
30
+ jsonrpc: '2.0',
31
+ id: 1,
32
+ method: 'sendTransaction',
33
+ params: [encoded, { encoding: 'base58' }],
34
+ });
35
+ if (data.error) {
36
+ throw new Error(`JITO sendTransaction failed: ${JSON.stringify(data.error)}`);
37
+ }
38
+ return data.result;
39
+ }
40
+ //# sourceMappingURL=jito.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jito.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/solana/jito.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,MAAM,CAAA;AAEzB,MAAM,qBAAqB,GAAG,uCAAuC,CAAA;AACrE,MAAM,oBAAoB,GAAG,KAAK,CAAA;AAOlC,KAAK,UAAU,SAAS,CAAc,GAAW,EAAE,IAAa;IAC9D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAA;IAC1E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QACnF,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,cAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAE7C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAS,GAAG,qBAAqB,sBAAsB,EAAE;QACnF,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KAC1C,CAAC,CAAA;IACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC7D,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAA;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Converts a user-friendly TON address (EQ.../UQ...) to raw format (workchain:hex).
3
+ * The toncenter v3 API requires raw addresses.
4
+ */
5
+ export declare const tonAddressToRaw: (userFriendlyAddress: string) => string;
6
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,qBAAqB,MAAM,KAAG,MAM7D,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { fromBase64 } from '@vultisig/lib-utils/fromBase64';
2
+ /** Converts base64url encoding to standard base64 so `Buffer.from` can decode it. */
3
+ const fromBase64Url = (value) => {
4
+ const standardBase64 = value.replace(/-/g, '+').replace(/_/g, '/');
5
+ return fromBase64(standardBase64);
6
+ };
7
+ /**
8
+ * Converts a user-friendly TON address (EQ.../UQ...) to raw format (workchain:hex).
9
+ * The toncenter v3 API requires raw addresses.
10
+ */
11
+ export const tonAddressToRaw = (userFriendlyAddress) => {
12
+ const decoded = fromBase64Url(userFriendlyAddress);
13
+ const workchain = decoded[1] >= 128 ? decoded[1] - 256 : decoded[1];
14
+ const hash = decoded.subarray(2, 34).toString('hex');
15
+ return `${workchain}:${hash}`;
16
+ };
17
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAE3D,qFAAqF;AACrF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAClE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,mBAA2B,EAAU,EAAE;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpD,OAAO,GAAG,SAAS,IAAI,IAAI,EAAE,CAAA;AAC/B,CAAC,CAAA"}
@@ -1,6 +1,11 @@
1
- export declare const getJettonWalletAddress: ({ ownerAddress, jettonMasterAddress, }: {
1
+ type GetJettonWalletInput = {
2
2
  ownerAddress: string;
3
3
  jettonMasterAddress: string;
4
- }) => Promise<string>;
4
+ };
5
+ /** Resolves the user-friendly jetton wallet address for a given owner and jetton master. */
6
+ export declare const getJettonWalletAddress: (input: GetJettonWalletInput) => Promise<string>;
7
+ /** Fetches the balance of a specific jetton for a given owner address. */
8
+ export declare const getJettonBalance: (input: GetJettonWalletInput) => Promise<bigint>;
5
9
  export declare const getTonWalletState: (address: string) => Promise<string>;
10
+ export {};
6
11
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,sBAAsB,GAAU,wCAG1C;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,KAAG,OAAO,CAAC,MAAM,CAWjB,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAKvE,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAqBA,KAAK,oBAAoB,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAA;AAaD,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,GACjC,OAAO,oBAAoB,KAC1B,OAAO,CAAC,MAAM,CAYhB,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,GAC3B,OAAO,oBAAoB,KAC1B,OAAO,CAAC,MAAM,CAOhB,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAKvE,CAAA"}
@@ -1,9 +1,16 @@
1
1
  import { rootApiUrl } from '@vultisig/core-config';
2
2
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
3
+ import { tonAddressToRaw } from './address.js';
3
4
  const tonApiUrl = `${rootApiUrl}/ton`;
4
- export const getJettonWalletAddress = async ({ ownerAddress, jettonMasterAddress, }) => {
5
- const url = `${tonApiUrl}/v3/jetton/wallets?owner_address=${ownerAddress}&jetton_master_address=${jettonMasterAddress}`;
6
- const response = await queryUrl(url);
5
+ /** Builds the toncenter v3 jetton wallets query URL, converting addresses to raw format. */
6
+ const getJettonWalletsUrl = ({ ownerAddress, jettonMasterAddress, }) => {
7
+ const rawOwner = tonAddressToRaw(ownerAddress);
8
+ const rawMaster = tonAddressToRaw(jettonMasterAddress);
9
+ return `${tonApiUrl}/v3/jetton/wallets?owner_address=${rawOwner}&jetton_address=${rawMaster}`;
10
+ };
11
+ /** Resolves the user-friendly jetton wallet address for a given owner and jetton master. */
12
+ export const getJettonWalletAddress = async (input) => {
13
+ const response = await queryUrl(getJettonWalletsUrl(input));
7
14
  const jettonAddress = response.jetton_wallets[0]?.address;
8
15
  if (!jettonAddress) {
9
16
  throw new Error('No jetton wallet found');
@@ -11,6 +18,12 @@ export const getJettonWalletAddress = async ({ ownerAddress, jettonMasterAddress
11
18
  const addressEntry = response.address_book[jettonAddress];
12
19
  return addressEntry?.user_friendly || jettonAddress;
13
20
  };
21
+ /** Fetches the balance of a specific jetton for a given owner address. */
22
+ export const getJettonBalance = async (input) => {
23
+ const response = await queryUrl(getJettonWalletsUrl(input));
24
+ const balance = response.jetton_wallets[0]?.balance;
25
+ return BigInt(balance ?? 0);
26
+ };
14
27
  export const getTonWalletState = async (address) => {
15
28
  const url = `${tonApiUrl}/v3/addressInformation?address=${address}&use_v2=false`;
16
29
  const response = await queryUrl(url);
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAA;AAgBrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,EAC3C,YAAY,EACZ,mBAAmB,GAIpB,EAAmB,EAAE;IACpB,MAAM,GAAG,GAAG,GAAG,SAAS,oCAAoC,YAAY,0BAA0B,mBAAmB,EAAE,CAAA;IACvH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAuB,GAAG,CAAC,CAAA;IAE1D,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IACzD,OAAO,YAAY,EAAE,aAAa,IAAI,aAAa,CAAA;AACrD,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,GAAG,GAAG,GAAG,SAAS,kCAAkC,OAAO,eAAe,CAAA;IAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA6B,GAAG,CAAC,CAAA;IAEhE,OAAO,QAAQ,CAAC,MAAM,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAA;AAqBrC,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,CAAC,EAC3B,YAAY,EACZ,mBAAmB,GACE,EAAU,EAAE;IACjC,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAEtD,OAAO,GAAG,SAAS,oCAAoC,QAAQ,mBAAmB,SAAS,EAAE,CAAA;AAC/F,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACzC,KAA2B,EACV,EAAE;IACnB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,mBAAmB,CAAC,KAAK,CAAC,CAC3B,CAAA;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IACzD,OAAO,YAAY,EAAE,aAAa,IAAI,aAAa,CAAA;AACrD,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,KAA2B,EACV,EAAE;IACnB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,mBAAmB,CAAC,KAAK,CAAC,CAC3B,CAAA;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACnD,OAAO,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,GAAG,GAAG,GAAG,SAAS,kCAAkC,OAAO,eAAe,CAAA;IAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA6B,GAAG,CAAC,CAAA;IAEhE,OAAO,QAAQ,CAAC,MAAM,CAAA;AACxB,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { ChainPlainUtxo } from '../tx/ChainPlainUtxo.js';
2
+ export declare const getDashUtxos: (address: string) => Promise<ChainPlainUtxo[]>;
3
+ //# sourceMappingURL=getDashUtxos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDashUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/client/getDashUtxos.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAiB1D,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,KACd,OAAO,CAAC,cAAc,EAAE,CAyB1B,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { rootApiUrl } from '@vultisig/core-config';
2
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
3
+ import { minUtxo } from '../minUtxo.js';
4
+ import { Chain } from '@vultisig/core-chain/Chain';
5
+ export const getDashUtxos = async (address) => {
6
+ const response = await queryUrl(`${rootApiUrl}/dash/`, {
7
+ body: {
8
+ jsonrpc: '1.0',
9
+ id: 'vultisig',
10
+ method: 'getaddressutxos',
11
+ params: [{ addresses: [address] }],
12
+ },
13
+ });
14
+ if (response.error) {
15
+ throw new Error(`Dash RPC error: ${response.error.message}`);
16
+ }
17
+ if (!response.result) {
18
+ return [];
19
+ }
20
+ return response.result
21
+ .filter(({ satoshis }) => satoshis > Number(minUtxo[Chain.Dash]))
22
+ .map(({ txid, satoshis, outputIndex }) => ({
23
+ hash: txid,
24
+ amount: BigInt(satoshis),
25
+ index: outputIndex,
26
+ }));
27
+ };
28
+ //# sourceMappingURL=getDashUtxos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDashUtxos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/client/getDashUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAkBlD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,OAAe,EACY,EAAE;IAC7B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAkB,GAAG,UAAU,QAAQ,EAAE;QACtE,IAAI,EAAE;YACJ,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SACnC;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM;SACnB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;SAChE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;QACxB,KAAK,EAAE,WAAW;KACnB,CAAC,CAAC,CAAA;AACP,CAAC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { SignBitcoin } from '@vultisig/core-mpc/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb';
2
+ import { Network, Psbt } from 'bitcoinjs-lib';
3
+ type BuildSignBitcoinFromPsbtInput = {
4
+ psbt: Psbt;
5
+ senderAddress: string;
6
+ /** Bitcoin network for address decoding. Defaults to mainnet. */
7
+ network?: Network;
8
+ };
9
+ /**
10
+ * Decompose a BIP-174 PSBT into a structured SignBitcoin proto message.
11
+ * Co-signing devices can verify every input/output and compute exact sighashes
12
+ * from these fields without receiving an opaque blob.
13
+ *
14
+ * Currently supports P2WPKH and P2SH-P2WPKH inputs only.
15
+ * P2TR (Taproot/BIP-341) requires a different sighash algorithm and is planned for follow-up.
16
+ * P2PKH (legacy) requires legacy sighash (not BIP-143).
17
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
18
+ */
19
+ export declare const buildSignBitcoinFromPsbt: ({ psbt, senderAddress, network, }: BuildSignBitcoinFromPsbtInput) => SignBitcoin;
20
+ export {};
21
+ //# sourceMappingURL=buildSignBitcoinFromPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildSignBitcoinFromPsbt.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/buildSignBitcoinFromPsbt.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,WAAW,EAEZ,MAAM,+EAA+E,CAAA;AACtF,OAAO,EAEL,OAAO,EAGP,IAAI,EAGL,MAAM,eAAe,CAAA;AAsEtB,KAAK,6BAA6B,GAAG;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,GAAI,mCAItC,6BAA6B,KAAG,WA4IlC,CAAA"}
@@ -0,0 +1,182 @@
1
+ import { create } from '@bufbuild/protobuf';
2
+ import { BitcoinInputSchema, BitcoinOutputSchema, SignBitcoinSchema, } from '@vultisig/core-mpc/types/vultisig/keysign/v1/wasm_execute_contract_payload_pb';
3
+ import { address as btcAddress, networks, opcodes, script as bscript, Transaction, } from 'bitcoinjs-lib';
4
+ /**
5
+ * Detect the script type from a scriptPubKey buffer.
6
+ * See https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
7
+ */
8
+ const detectScriptType = (scriptPubKey, redeemScript) => {
9
+ // P2WPKH: OP_0 PUSH_20 <20-byte-hash> (22 bytes)
10
+ if (scriptPubKey.length === 22 && scriptPubKey[0] === 0x00 && scriptPubKey[1] === 0x14) {
11
+ return 'p2wpkh';
12
+ }
13
+ // P2PKH: OP_DUP OP_HASH160 PUSH_20 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG (25 bytes)
14
+ if (scriptPubKey.length === 25 &&
15
+ scriptPubKey[0] === 0x76 &&
16
+ scriptPubKey[1] === 0xa9 &&
17
+ scriptPubKey[2] === 0x14 &&
18
+ scriptPubKey[23] === 0x88 &&
19
+ scriptPubKey[24] === 0xac) {
20
+ return 'p2pkh';
21
+ }
22
+ // P2TR: OP_1 PUSH_32 <32-byte-key> (34 bytes)
23
+ if (scriptPubKey.length === 34 && scriptPubKey[0] === 0x51 && scriptPubKey[1] === 0x20) {
24
+ return 'p2tr';
25
+ }
26
+ // P2WSH: OP_0 PUSH_32 <32-byte-hash> (34 bytes)
27
+ if (scriptPubKey.length === 34 && scriptPubKey[0] === 0x00 && scriptPubKey[1] === 0x20) {
28
+ return 'p2wsh';
29
+ }
30
+ // P2SH-P2WPKH: only when redeemScript is a valid P2WPKH witness program
31
+ const redeem = redeemScript ? Buffer.from(redeemScript) : undefined;
32
+ if (scriptPubKey.length === 23 &&
33
+ scriptPubKey[0] === 0xa9 &&
34
+ scriptPubKey[1] === 0x14 &&
35
+ scriptPubKey[22] === 0x87 &&
36
+ redeem?.length === 22 &&
37
+ redeem[0] === 0x00 &&
38
+ redeem[1] === 0x14) {
39
+ return 'p2sh-p2wpkh';
40
+ }
41
+ return 'unknown';
42
+ };
43
+ /** Script types that computePreSigningHashes can produce sighashes for. */
44
+ const SUPPORTED_SCRIPT_TYPES = new Set(['p2wpkh', 'p2sh-p2wpkh']);
45
+ const isOpReturn = (script) => {
46
+ const chunks = bscript.decompile(script);
47
+ return chunks !== null && chunks[0] === opcodes.OP_RETURN;
48
+ };
49
+ const getOpReturnHex = (script) => {
50
+ const chunks = bscript.decompile(script);
51
+ if (!chunks || chunks[0] !== opcodes.OP_RETURN)
52
+ return undefined;
53
+ const dataChunks = chunks
54
+ .slice(1)
55
+ .filter((chunk) => Buffer.isBuffer(chunk));
56
+ if (dataChunks.length === 0)
57
+ return undefined;
58
+ return Buffer.concat(dataChunks).toString('hex');
59
+ };
60
+ /**
61
+ * Decompose a BIP-174 PSBT into a structured SignBitcoin proto message.
62
+ * Co-signing devices can verify every input/output and compute exact sighashes
63
+ * from these fields without receiving an opaque blob.
64
+ *
65
+ * Currently supports P2WPKH and P2SH-P2WPKH inputs only.
66
+ * P2TR (Taproot/BIP-341) requires a different sighash algorithm and is planned for follow-up.
67
+ * P2PKH (legacy) requires legacy sighash (not BIP-143).
68
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
69
+ */
70
+ export const buildSignBitcoinFromPsbt = ({ psbt, senderAddress, network = networks.bitcoin, }) => {
71
+ // Compute anyInputHasBip32 once (not per-input) for O(n) ownership detection
72
+ const anyInputHasBip32 = psbt.data.inputs.some(inp => (inp.bip32Derivation && inp.bip32Derivation.length > 0) ||
73
+ (inp.tapBip32Derivation &&
74
+ inp.tapBip32Derivation.length > 0));
75
+ const inputs = psbt.txInputs.map((txInput, i) => {
76
+ const inputData = psbt.data.inputs[i];
77
+ // Prefer witnessUtxo; fall back to nonWitnessUtxo (full prev tx)
78
+ let scriptPubKey;
79
+ let inputValue;
80
+ if (inputData.witnessUtxo) {
81
+ scriptPubKey = Buffer.from(inputData.witnessUtxo.script);
82
+ inputValue = BigInt(inputData.witnessUtxo.value);
83
+ // Fee snipe mitigation: cross-validate against nonWitnessUtxo if present.
84
+ // A malicious PSBT can lie about witnessUtxo.value; BIP-143 commits to it
85
+ // in the sighash, causing excess fees if the actual UTXO is worth more.
86
+ // See https://blog.trezor.io/details-of-the-multisig-change-address-issue-and-its-mitigation-6370ad73ed2a
87
+ if (inputData.nonWitnessUtxo) {
88
+ const prevTx = Transaction.fromBuffer(Buffer.from(inputData.nonWitnessUtxo));
89
+ // BIP-174: verify nonWitnessUtxo txid matches the input's prevout hash
90
+ const prevTxId = prevTx.getId();
91
+ const expectedTxId = Buffer.from(txInput.hash).reverse().toString('hex');
92
+ if (prevTxId !== expectedTxId) {
93
+ throw new Error(`Input #${i}: nonWitnessUtxo txid (${prevTxId.slice(0, 16)}...) does not match ` +
94
+ `input prevout (${expectedTxId.slice(0, 16)}...)`);
95
+ }
96
+ const prevOutput = prevTx.outs[txInput.index];
97
+ if (prevOutput && BigInt(prevOutput.value) !== inputValue) {
98
+ throw new Error(`Input #${i}: witnessUtxo value (${inputValue}) does not match ` +
99
+ `nonWitnessUtxo value (${prevOutput.value}) - possible fee snipe`);
100
+ }
101
+ }
102
+ }
103
+ else if (inputData.nonWitnessUtxo) {
104
+ const prevTx = Transaction.fromBuffer(Buffer.from(inputData.nonWitnessUtxo));
105
+ const prevOutput = prevTx.outs[txInput.index];
106
+ if (!prevOutput) {
107
+ throw new Error(`Input #${i}: nonWitnessUtxo has no output at index ${txInput.index}`);
108
+ }
109
+ scriptPubKey = Buffer.from(prevOutput.script);
110
+ inputValue = BigInt(prevOutput.value);
111
+ }
112
+ else {
113
+ throw new Error(`Input #${i} missing both witnessUtxo and nonWitnessUtxo`);
114
+ }
115
+ if (inputValue < 0n) {
116
+ throw new Error(`Input #${i}: negative amount (${inputValue})`);
117
+ }
118
+ const scriptType = detectScriptType(scriptPubKey, inputData.redeemScript);
119
+ // Fail early for unsupported script types rather than at sighash time.
120
+ // This gives a clearer error at decomposition time.
121
+ const hasBip32 = (inputData.bip32Derivation && inputData.bip32Derivation.length > 0) ||
122
+ (inputData.tapBip32Derivation &&
123
+ inputData.tapBip32Derivation.length > 0);
124
+ const isOurs = anyInputHasBip32 ? !!hasBip32 : true;
125
+ if (isOurs && !SUPPORTED_SCRIPT_TYPES.has(scriptType)) {
126
+ const hints = {
127
+ p2tr: 'P2TR (Taproot) requires BIP-341 sighash. See https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki',
128
+ p2pkh: 'P2PKH (legacy) requires legacy sighash, not BIP-143.',
129
+ p2wsh: 'P2WSH requires BIP-143 with the full witnessScript as scriptCode.',
130
+ unknown: `Unrecognized scriptPubKey: ${scriptPubKey.toString('hex')}`,
131
+ };
132
+ throw new Error(`Input #${i}: unsupported script type '${scriptType}' for signing. ${hints[scriptType] ?? ''}`);
133
+ }
134
+ const sighashType = inputData.sighashType ?? 1; // SIGHASH_ALL
135
+ const redeemScript = inputData.redeemScript
136
+ ? Buffer.from(inputData.redeemScript).toString('hex')
137
+ : undefined;
138
+ return create(BitcoinInputSchema, {
139
+ hash: Buffer.from(txInput.hash).reverse().toString('hex'),
140
+ index: txInput.index,
141
+ amount: inputValue,
142
+ scriptPubKey: scriptPubKey.toString('hex'),
143
+ scriptType,
144
+ sighashType,
145
+ isOurs,
146
+ redeemScript,
147
+ sequence: txInput.sequence,
148
+ });
149
+ });
150
+ const outputs = psbt.txOutputs.map((txOutput, outputIndex) => {
151
+ const script = Buffer.from(txOutput.script);
152
+ const opReturn = isOpReturn(script);
153
+ let outputAddress = '';
154
+ if (!opReturn) {
155
+ try {
156
+ outputAddress = btcAddress.fromOutputScript(txOutput.script, network);
157
+ }
158
+ catch {
159
+ // Non-standard output - address stays empty
160
+ }
161
+ }
162
+ // Change detection: Vultisig uses a single address per UTXO chain (no HD change
163
+ // derivation), so address comparison is the primary signal. BIP32 derivation on
164
+ // outputs is NOT used alone because a malicious dApp could inject derivation paths
165
+ // on attacker outputs to disguise them as change. Address match is unforgeable
166
+ // since only the vault owner knows the private key for that address.
167
+ return create(BitcoinOutputSchema, {
168
+ amount: BigInt(txOutput.value),
169
+ address: outputAddress,
170
+ opReturnData: opReturn ? getOpReturnHex(script) : undefined,
171
+ scriptPubKey: script.toString('hex'),
172
+ isChange: outputAddress !== '' && outputAddress === senderAddress,
173
+ });
174
+ });
175
+ return create(SignBitcoinSchema, {
176
+ version: psbt.version,
177
+ locktime: psbt.locktime,
178
+ inputs,
179
+ outputs,
180
+ });
181
+ };
182
+ //# sourceMappingURL=buildSignBitcoinFromPsbt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildSignBitcoinFromPsbt.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/buildSignBitcoinFromPsbt.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ export const getPsbtTransferInfo = (psbt, senderAddress) => {
54
54
  // Filter out OP_RETURN outputs and null addresses (failed parsing)
55
55
  const validOutputs = allOutputs.filter(o => !o.isOpReturn && o.addr !== null);
56
56
  // Filter out sender's change address to isolate payment recipients.
57
- // See https://github.com/vultisig/vultisig-windows/pull/2533 for context: that PR prevents change outputs from being treated as recipients.
57
+ // Do not treat change outputs as transfer recipients (context: vultisig/vultisig-windows#2533).
58
58
  // However, for self-sends (all outputs to sender address), we need to include
59
59
  // them as recipients since there are no "external" recipients in that case.
60
60
  const nonSenderOutputs = validOutputs.filter(o => o.addr !== senderAddress);
@@ -1 +1 @@
1
- {"version":3,"file":"getPsbtTransferInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getPsbtTransferInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getPsbtTransferInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getPsbtTransferInfo.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAK1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,QAAQ,GACnB,SAAS,YAAY,CAAC,SAAS,CAAC,KAC/B,OAAO,CAAC,cAAc,EAAE,CAY1B,CAAA"}
1
+ {"version":3,"file":"getUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAMjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,eAAO,MAAM,QAAQ,GACnB,SAAS,YAAY,CAAC,SAAS,CAAC,KAC/B,OAAO,CAAC,cAAc,EAAE,CAgB1B,CAAA"}
@@ -1,6 +1,11 @@
1
+ import { Chain } from '../../../Chain.js';
2
+ import { getDashUtxos } from '../client/getDashUtxos.js';
1
3
  import { getUtxoAddressInfo } from '../client/getUtxoAddressInfo.js';
2
4
  import { minUtxo } from '../minUtxo.js';
3
5
  export const getUtxos = async (account) => {
6
+ if (account.chain === Chain.Dash) {
7
+ return getDashUtxos(account.address);
8
+ }
4
9
  const { data } = await getUtxoAddressInfo(account);
5
10
  const { utxo } = data[account.address];
6
11
  return utxo
@@ -1 +1 @@
1
- {"version":3,"file":"getUtxos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getUtxos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAMpC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAAgC,EACL,EAAE;IAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAElD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtC,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK;KACN,CAAC,CAAC,CAAA;AACP,CAAC,CAAA"}
1
+ {"version":3,"file":"getUtxos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/utxo/tx/getUtxos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAa,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAMpC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,OAAgC,EACL,EAAE;IAC7B,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAElD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEtC,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK;KACN,CAAC,CAAC,CAAA;AACP,CAAC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { OtherChain } from '@vultisig/core-chain/Chain';
2
2
  import { CoinBalanceResolver } from '../resolver.js';
3
+ /** Fetches the balance for ADA (when `id` is absent) or a Cardano native token (when `id` is present). */
3
4
  export declare const getCardanoCoinBalance: CoinBalanceResolver<OtherChain.Cardano>;
4
5
  //# sourceMappingURL=cardano.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMjD,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,CACrD,UAAU,CAAC,OAAO,CAYnB,CAAA"}
1
+ {"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMjD,0GAA0G;AAC1G,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,CACrD,UAAU,CAAC,OAAO,CAyBnB,CAAA"}
@@ -1,6 +1,18 @@
1
+ import { fromCardanoAssetId } from '@vultisig/core-chain/chains/cardano/asset/cardanoAssetId';
2
+ import { getCardanoAddressAssets } from '@vultisig/core-chain/chains/cardano/client/getCardanoAddressAssets';
1
3
  import { cardanoApiUrl } from '@vultisig/core-chain/chains/cardano/client/config';
2
4
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
+ /** Fetches the balance for ADA (when `id` is absent) or a Cardano native token (when `id` is present). */
3
6
  export const getCardanoCoinBalance = async (input) => {
7
+ if (input.id) {
8
+ const { policyId, assetName } = fromCardanoAssetId(input.id);
9
+ const normalizedPolicyId = policyId.toLowerCase();
10
+ const normalizedAssetName = assetName.toLowerCase();
11
+ const assets = await getCardanoAddressAssets(input.address);
12
+ const match = assets.find(a => a.policy_id.toLowerCase() === normalizedPolicyId &&
13
+ a.asset_name.toLowerCase() === normalizedAssetName);
14
+ return match ? BigInt(match.quantity) : 0n;
15
+ }
4
16
  const url = `${cardanoApiUrl}/address_info`;
5
17
  const [{ balance } = { balance: '0' }] = await queryUrl(url, {
6
18
  body: {
@@ -1 +1 @@
1
- {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cardano.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAA;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAQ7D,MAAM,CAAC,MAAM,qBAAqB,GAE9B,KAAK,EAAC,KAAK,EAAC,EAAE;IAChB,MAAM,GAAG,GAAG,GAAG,aAAa,eAAe,CAAA;IAE3C,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GACpC,MAAM,QAAQ,CAA6B,GAAG,EAAE;QAC9C,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;SAC5B;KACF,CAAC,CAAA;IAEJ,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"cardano.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/cardano.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAA;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAC5G,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAA;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAQ7D,0GAA0G;AAC1G,MAAM,CAAC,MAAM,qBAAqB,GAE9B,KAAK,EAAC,KAAK,EAAC,EAAE;IAChB,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;QACjD,MAAM,mBAAmB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;QACnD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,kBAAkB;YAChD,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,mBAAmB,CACrD,CAAA;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,aAAa,eAAe,CAAA;IAE3C,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,GACpC,MAAM,QAAQ,CAA6B,GAAG,EAAE;QAC9C,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;SAC5B;KACF,CAAC,CAAA;IAEJ,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;AACxB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"qbtc.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/qbtc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAClD,OAAO,KAAK,CAAC,IAAI,CAMlB,CAAA"}
1
+ {"version":3,"file":"qbtc.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/qbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAMlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAClD,OAAO,KAAK,CAAC,IAAI,CASlB,CAAA"}
@@ -1,12 +1,13 @@
1
- import { StargateClient } from '@cosmjs/stargate';
2
- import { qbtcTendermintRpcUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
1
+ import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
3
2
  import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
4
3
  import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
4
+ import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
5
5
  const nativeQbtcDenom = 'qbtc';
6
6
  export const getQbtcCoinBalance = async (input) => {
7
- const client = await StargateClient.connect(qbtcTendermintRpcUrl);
8
7
  const denom = isFeeCoin(input) ? nativeQbtcDenom : shouldBePresent(input.id);
9
- const balance = await client.getBalance(input.address, denom);
10
- return BigInt(balance.amount);
8
+ const url = `${qbtcRestUrl}/cosmos/bank/v1beta1/balances/${input.address}`;
9
+ const data = await queryUrl(url);
10
+ const entry = data.balances.find(b => b.denom === denom);
11
+ return entry ? BigInt(entry.amount) : 0n;
11
12
  };
12
13
  //# sourceMappingURL=qbtc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qbtc.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/qbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAA;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAI5E,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,MAAM,CAAC,MAAM,kBAAkB,GAE3B,KAAK,EAAC,KAAK,EAAC,EAAE;IAChB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC5E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAA"}
1
+ {"version":3,"file":"qbtc.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/qbtc.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAI7D,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,MAAM,CAAC,MAAM,kBAAkB,GAE3B,KAAK,EAAC,KAAK,EAAC,EAAE;IAChB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC5E,MAAM,GAAG,GAAG,GAAG,WAAW,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAA;IAC1E,MAAM,IAAI,GAAG,MAAM,QAAQ,CAExB,GAAG,CAAC,CAAA;IACP,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;IACxD,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC1C,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/sui.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,iBAAiB,EAAE,mBAQ/B,CAAA"}
1
+ {"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/sui.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,iBAAiB,EAAE,mBAS/B,CAAA"}
@@ -3,6 +3,7 @@ export const getSuiCoinBalance = async (input) => {
3
3
  const rpcClient = getSuiClient();
4
4
  const { totalBalance } = await rpcClient.getBalance({
5
5
  owner: input.address,
6
+ ...(input.id ? { coinType: input.id } : {}),
6
7
  });
7
8
  return BigInt(totalBalance);
8
9
  };