@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.
- package/CHANGELOG.md +52 -0
- package/dist/amount/toChainAmount.d.ts +6 -1
- package/dist/amount/toChainAmount.d.ts.map +1 -1
- package/dist/amount/toChainAmount.js +88 -0
- package/dist/amount/toChainAmount.js.map +1 -1
- package/dist/chains/cardano/asset/cardanoAssetId.d.ts +14 -0
- package/dist/chains/cardano/asset/cardanoAssetId.d.ts.map +1 -0
- package/dist/chains/cardano/asset/cardanoAssetId.js +19 -0
- package/dist/chains/cardano/asset/cardanoAssetId.js.map +1 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts +10 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.d.ts.map +1 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.js +19 -0
- package/dist/chains/cardano/client/getCardanoAddressAssets.js.map +1 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts +23 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.d.ts.map +1 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.js +16 -0
- package/dist/chains/cardano/client/getCardanoAssetInfo.js.map +1 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts +20 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.d.ts.map +1 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js +22 -0
- package/dist/chains/cardano/utxo/getCardanoExtendedUtxos.js.map +1 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts +14 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.d.ts.map +1 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js +28 -0
- package/dist/chains/cosmos/computeCosmosTxReceiptFeeAmount.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts +7 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js +9 -0
- package/dist/chains/cosmos/qbtc/claim/BtcAddressType.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts +8 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js +2 -0
- package/dist/chains/cosmos/qbtc/claim/ClaimableUtxo.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts +25 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js +43 -0
- package/dist/chains/cosmos/qbtc/claim/broadcastClaimTx.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts +26 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js +57 -0
- package/dist/chains/cosmos/qbtc/claim/buildClaimTx.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts +49 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js +85 -0
- package/dist/chains/cosmos/qbtc/claim/computeClaimHashes.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts +14 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js +31 -0
- package/dist/chains/cosmos/qbtc/claim/detectBtcAddressType.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts +3 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js +13 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimWithProofDisabled.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts +14 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js +22 -0
- package/dist/chains/cosmos/qbtc/claim/getClaimableUtxos.js.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.d.ts +50 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.d.ts.map +1 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.js +71 -0
- package/dist/chains/cosmos/qbtc/claim/proofService.js.map +1 -0
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts +1 -2
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js +13 -9
- package/dist/chains/cosmos/qbtc/getQbtcAccountInfo.js.map +1 -1
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts +3 -5
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.d.ts.map +1 -1
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js +3 -5
- package/dist/chains/cosmos/qbtc/tendermintRpcUrl.js.map +1 -1
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts +15 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.d.ts.map +1 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js +22 -0
- package/dist/chains/cosmos/sumFeeAmountForCosmosChainFeeDenom.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/halts.d.ts +56 -0
- package/dist/chains/cosmos/thor/lp/halts.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/halts.js +95 -0
- package/dist/chains/cosmos/thor/lp/halts.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/index.d.ts +45 -0
- package/dist/chains/cosmos/thor/lp/index.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/index.js +12 -0
- package/dist/chains/cosmos/thor/lp/index.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/lockup.d.ts +47 -0
- package/dist/chains/cosmos/thor/lp/lockup.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/lockup.js +56 -0
- package/dist/chains/cosmos/thor/lp/lockup.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts +25 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.js +30 -0
- package/dist/chains/cosmos/thor/lp/lpChainMap.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/math.d.ts +129 -0
- package/dist/chains/cosmos/thor/lp/math.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/math.js +227 -0
- package/dist/chains/cosmos/thor/lp/math.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/memberPool.d.ts +4 -0
- package/dist/chains/cosmos/thor/lp/memberPool.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/memberPool.js +24 -0
- package/dist/chains/cosmos/thor/lp/memberPool.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/memo.d.ts +62 -0
- package/dist/chains/cosmos/thor/lp/memo.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/memo.js +62 -0
- package/dist/chains/cosmos/thor/lp/memo.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/pairing.d.ts +30 -0
- package/dist/chains/cosmos/thor/lp/pairing.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/pairing.js +44 -0
- package/dist/chains/cosmos/thor/lp/pairing.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/payload.d.ts +66 -0
- package/dist/chains/cosmos/thor/lp/payload.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/payload.js +49 -0
- package/dist/chains/cosmos/thor/lp/payload.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/pools.d.ts +46 -0
- package/dist/chains/cosmos/thor/lp/pools.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/pools.js +85 -0
- package/dist/chains/cosmos/thor/lp/pools.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/position.d.ts +23 -0
- package/dist/chains/cosmos/thor/lp/position.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/position.js +105 -0
- package/dist/chains/cosmos/thor/lp/position.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/positions.d.ts +15 -0
- package/dist/chains/cosmos/thor/lp/positions.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/positions.js +47 -0
- package/dist/chains/cosmos/thor/lp/positions.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/types.d.ts +45 -0
- package/dist/chains/cosmos/thor/lp/types.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/types.js +2 -0
- package/dist/chains/cosmos/thor/lp/types.js.map +1 -0
- package/dist/chains/cosmos/thor/lp/validation.d.ts +38 -0
- package/dist/chains/cosmos/thor/lp/validation.d.ts.map +1 -0
- package/dist/chains/cosmos/thor/lp/validation.js +100 -0
- package/dist/chains/cosmos/thor/lp/validation.js.map +1 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts +16 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.d.ts.map +1 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js +2 -0
- package/dist/chains/polkadot/dapp/PolkadotSignerPayload.js.map +1 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts +12 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.d.ts.map +1 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.js +30 -0
- package/dist/chains/polkadot/dapp/constructSigningPayload.js.map +1 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts +3 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.d.ts.map +1 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.js +20 -0
- package/dist/chains/solana/getDynamicPriorityFeePrice.js.map +1 -0
- package/dist/chains/solana/jito.d.ts +6 -0
- package/dist/chains/solana/jito.d.ts.map +1 -0
- package/dist/chains/solana/jito.js +40 -0
- package/dist/chains/solana/jito.js.map +1 -0
- package/dist/chains/ton/address.d.ts +6 -0
- package/dist/chains/ton/address.d.ts.map +1 -0
- package/dist/chains/ton/address.js +17 -0
- package/dist/chains/ton/address.js.map +1 -0
- package/dist/chains/ton/api.d.ts +7 -2
- package/dist/chains/ton/api.d.ts.map +1 -1
- package/dist/chains/ton/api.js +16 -3
- package/dist/chains/ton/api.js.map +1 -1
- package/dist/chains/utxo/client/getDashUtxos.d.ts +3 -0
- package/dist/chains/utxo/client/getDashUtxos.d.ts.map +1 -0
- package/dist/chains/utxo/client/getDashUtxos.js +28 -0
- package/dist/chains/utxo/client/getDashUtxos.js.map +1 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts +21 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.d.ts.map +1 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js +182 -0
- package/dist/chains/utxo/tx/buildSignBitcoinFromPsbt.js.map +1 -0
- package/dist/chains/utxo/tx/getPsbtTransferInfo.js +1 -1
- package/dist/chains/utxo/tx/getPsbtTransferInfo.js.map +1 -1
- package/dist/chains/utxo/tx/getUtxos.d.ts.map +1 -1
- package/dist/chains/utxo/tx/getUtxos.js +5 -0
- package/dist/chains/utxo/tx/getUtxos.js.map +1 -1
- package/dist/coin/balance/resolvers/cardano.d.ts +1 -0
- package/dist/coin/balance/resolvers/cardano.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/cardano.js +12 -0
- package/dist/coin/balance/resolvers/cardano.js.map +1 -1
- package/dist/coin/balance/resolvers/qbtc.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/qbtc.js +6 -5
- package/dist/coin/balance/resolvers/qbtc.js.map +1 -1
- package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/sui.js +1 -0
- package/dist/coin/balance/resolvers/sui.js.map +1 -1
- package/dist/coin/balance/resolvers/ton.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/ton.js +11 -2
- package/dist/coin/balance/resolvers/ton.js.map +1 -1
- package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
- package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
- package/dist/coin/find/CoinFinderChainKind.js +1 -1
- package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
- package/dist/coin/find/index.d.ts.map +1 -1
- package/dist/coin/find/index.js +2 -0
- package/dist/coin/find/index.js.map +1 -1
- package/dist/coin/find/resolvers/cardano.d.ts +5 -0
- package/dist/coin/find/resolvers/cardano.d.ts.map +1 -0
- package/dist/coin/find/resolvers/cardano.js +17 -0
- package/dist/coin/find/resolvers/cardano.js.map +1 -0
- package/dist/coin/knownTokens/index.d.ts.map +1 -1
- package/dist/coin/knownTokens/index.js +74 -0
- package/dist/coin/knownTokens/index.js.map +1 -1
- package/dist/coin/token/metadata/chains.d.ts +1 -1
- package/dist/coin/token/metadata/chains.d.ts.map +1 -1
- package/dist/coin/token/metadata/chains.js +1 -0
- package/dist/coin/token/metadata/chains.js.map +1 -1
- package/dist/coin/token/metadata/index.d.ts.map +1 -1
- package/dist/coin/token/metadata/index.js +2 -0
- package/dist/coin/token/metadata/index.js.map +1 -1
- package/dist/coin/token/metadata/resolvers/cardano.d.ts +8 -0
- package/dist/coin/token/metadata/resolvers/cardano.d.ts.map +1 -0
- package/dist/coin/token/metadata/resolvers/cardano.js +20 -0
- package/dist/coin/token/metadata/resolvers/cardano.js.map +1 -0
- package/dist/swap/native/utils/getNativeSwapDecimals.d.ts +8 -0
- package/dist/swap/native/utils/getNativeSwapDecimals.d.ts.map +1 -1
- package/dist/swap/native/utils/getNativeSwapDecimals.js +19 -4
- package/dist/swap/native/utils/getNativeSwapDecimals.js.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/qbtc.js +22 -5
- package/dist/tx/broadcast/resolvers/qbtc.js.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/solana.js +12 -1
- package/dist/tx/broadcast/resolvers/solana.js.map +1 -1
- package/dist/tx/hash/resolvers/cardano.d.ts.map +1 -1
- package/dist/tx/hash/resolvers/cardano.js +9 -5
- package/dist/tx/hash/resolvers/cardano.js.map +1 -1
- package/dist/tx/status/resolvers/cosmos.d.ts.map +1 -1
- package/dist/tx/status/resolvers/cosmos.js +21 -8
- package/dist/tx/status/resolvers/cosmos.js.map +1 -1
- package/dist/tx/status/resolvers/qbtc.d.ts.map +1 -1
- package/dist/tx/status/resolvers/qbtc.js +18 -19
- package/dist/tx/status/resolvers/qbtc.js.map +1 -1
- package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
- package/dist/tx/status/resolvers/ton.js +4 -4
- package/dist/tx/status/resolvers/ton.js.map +1 -1
- package/package.json +192 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#235](https://github.com/vultisig/vultisig-sdk/pull/235) [`aea1c28`](https://github.com/vultisig/vultisig-sdk/commit/aea1c28051345ddef9c952108b203caa8b7fa032) Thanks [@rcoderdev](https://github.com/rcoderdev)! - ### Swap amounts (backward compatible)
|
|
8
|
+
- `SwapQuoteParams.amount` and `SwapTxParams.amount` now accept **`string | number`**. Call sites that already pass a **number** require no code changes.
|
|
9
|
+
- Human-readable swap amounts can be passed as **decimal strings** end-to-end (compound `vault.swap()`, `getSwapQuote`, `prepareSwapTx`, CLI agent), avoiding precision loss from `Number()` / `parseFloat()` on extreme magnitudes or fractional digits.
|
|
10
|
+
- `toChainAmount` accepts **`string | number`**; whitespace-only / empty strings throw instead of being treated as zero.
|
|
11
|
+
|
|
12
|
+
### Send preparation (stricter validation)
|
|
13
|
+
- `prepareSendTx` and `estimateSendFee` reject **zero or negative** `amount` in base units. This aligns with real transfers; payloads with `toAmount: "0"` are no longer built for native/token sends.
|
|
14
|
+
- **Zero-value EVM contract calls** are unchanged: use `prepareContractCallTx` (or `vault.contractCall()`), which still builds via the internal path that allows `value: 0n`.
|
|
15
|
+
|
|
16
|
+
### Other
|
|
17
|
+
- Swap approval sizing uses `toChainAmount` instead of float scaling for required allowance.
|
|
18
|
+
- `@vultisig/rujira` (source): `VultisigSignature.format` includes **`MLDSA`** to match SDK `Signature` — type-only widening, no runtime change; Rujira will pick up a **patch** version via normal dependency releases when published next.
|
|
19
|
+
- CLI: direct **`viem`** dependency; Solana local swap human amount via `formatUnits`; agent SSE `Transaction` typing includes optional `swap_tx` / `send_tx` / `tx`.
|
|
20
|
+
|
|
21
|
+
**Semver:** **Minor** for `@vultisig/core-chain`, `@vultisig/core-mpc`, and `@vultisig/sdk` (additive types + intentional validation tightening). **`@vultisig/cli` is linked to the SDK** in Changesets config, so it receives the same minor bump. This is **not** a SemVer **major** for integration purposes: swap inputs are only widened; `prepareSendTx({ amount: 0n })` was never a valid broadcast path.
|
|
22
|
+
|
|
23
|
+
**Release tooling note:** `yarn changeset status` may still propose a **major** version for `@vultisig/rujira` when the SDK minors, even though the only Rujira change is adding `'MLDSA'` to a string-literal union (fully backward compatible). Review the Version Packages PR and **downgrade Rujira to patch** if your policy is to reserve majors for real breaking API changes.
|
|
24
|
+
|
|
25
|
+
**`@vultisig/sdk` is 0.x:** per [SemVer](https://semver.org/#spec-item-4), minor releases on `0.y.z` may include behavior changes; consumers pinning `^0.14.0` should still accept `0.15.0` but should read changelog for validation tightening.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- [#174](https://github.com/vultisig/vultisig-sdk/pull/174) [`c630597`](https://github.com/vultisig/vultisig-sdk/commit/c6305970d1685194f1c6c11d5e8d141e8aa6c9a1) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - fix: harden PSBT signing (SignBitcoin) - follow-up on PR [#174](https://github.com/vultisig/vultisig-sdk/issues/174)
|
|
30
|
+
- parameterize network in buildSignBitcoinFromPsbt (was hardcoded to mainnet)
|
|
31
|
+
- harden detectScriptType: full P2PKH template check, add P2WSH detection
|
|
32
|
+
- fail early for unsupported script types with descriptive BIP-referenced errors
|
|
33
|
+
- add fee snipe mitigation (cross-validate witnessUtxo vs nonWitnessUtxo)
|
|
34
|
+
- rename computeBip143Sighashes -> computePreSigningHashes for extensibility
|
|
35
|
+
- use @noble/hashes/sha256 instead of Node.js crypto (cross-platform)
|
|
36
|
+
- use unsigned int64 for Bitcoin amounts (writeBigUInt64LE)
|
|
37
|
+
- fix varint encoding for output script lengths in sighash computation
|
|
38
|
+
- refactor compileSignBitcoinTx to use bitcoinjs-lib Transaction class
|
|
39
|
+
- fix libType regression in commVault.ts for key-import vaults
|
|
40
|
+
- fix variable shadowing in compileTx.ts
|
|
41
|
+
- skip Blockaid simulation for PSBT flows (incompatible with WalletCore compiler)
|
|
42
|
+
- augment change detection with BIP32 derivation on outputs
|
|
43
|
+
- add 10 unit tests cross-validating sighash against bitcoinjs-lib v7
|
|
44
|
+
|
|
45
|
+
## 1.1.0
|
|
46
|
+
|
|
47
|
+
### Minor Changes
|
|
48
|
+
|
|
49
|
+
- [#179](https://github.com/vultisig/vultisig-sdk/pull/179) [`84a2950`](https://github.com/vultisig/vultisig-sdk/commit/84a295002ed7310320b584fbccb76aaf4a233b31) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add full QBTC (post-quantum Bitcoin) send support: MLDSA fast signing, address derivation, broadcast via Cosmos REST, funded e2e send test, and `scripts/add-mldsa-to-vault.ts` helper. Switch QBTC core resolvers from dead Tendermint RPC to vultisig Cosmos REST API.
|
|
50
|
+
|
|
51
|
+
### Patch Changes
|
|
52
|
+
|
|
53
|
+
- [#164](https://github.com/vultisig/vultisig-sdk/pull/164) [`ec0c298`](https://github.com/vultisig/vultisig-sdk/commit/ec0c2988cfece95a1d66763e830a5b02e33ece9f) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Fix Cosmos transaction status receipts when the indexer reports `gasWanted` as zero: derive the gas denominator from decoded `fee.gasLimit` or `gasUsed`, sum native fee coins case-insensitively, and clamp proportional fees to the max fee. Aligns THORChain swap success fee display with co-signed and cross-client flows (see vultisig-windows#3501).
|
|
54
|
+
|
|
3
55
|
## 1.0.0
|
|
4
56
|
|
|
5
57
|
### Major Changes
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/** Thrown when a human amount string cannot be converted to chain base units. */
|
|
2
|
+
export declare class ChainAmountParseError extends Error {
|
|
3
|
+
readonly name = "ChainAmountParseError";
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare const toChainAmount: (amount: string | number, decimals: number) => bigint;
|
|
2
7
|
//# sourceMappingURL=toChainAmount.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toChainAmount.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"toChainAmount.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA0B;gBAEpC,OAAO,EAAE,MAAM;CAG5B;AAgFD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,GAAG,MAAM,EAAE,UAAU,MAAM,WAetE,CAAA"}
|
|
@@ -1,5 +1,93 @@
|
|
|
1
1
|
import { parseUnits } from 'viem';
|
|
2
|
+
/** Thrown when a human amount string cannot be converted to chain base units. */
|
|
3
|
+
export class ChainAmountParseError extends Error {
|
|
4
|
+
name = 'ChainAmountParseError';
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const SCIENTIFIC_DECIMAL = /^([+-]?)(?:(\d+)\.?(\d*)|\.(\d+))[eE]([+-]?\d+)$/i;
|
|
10
|
+
/** Limits `10n ** |scale|` work and expanded string size for untrusted input. */
|
|
11
|
+
const MAX_SCALE_ABS = 10000n;
|
|
12
|
+
const padFractionDigits = (frac, totalLen) => {
|
|
13
|
+
const need = totalLen - BigInt(frac.length);
|
|
14
|
+
if (need <= 0n) {
|
|
15
|
+
return frac;
|
|
16
|
+
}
|
|
17
|
+
if (need <= BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
18
|
+
return `${'0'.repeat(Number(need))}${frac}`;
|
|
19
|
+
}
|
|
20
|
+
let out = frac;
|
|
21
|
+
while (BigInt(out.length) < totalLen) {
|
|
22
|
+
out = `0${out}`;
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Turns a decimal string in scientific notation into a plain decimal string
|
|
28
|
+
* without floating-point conversion, so mantissa digits beyond ~15 s.d. are kept.
|
|
29
|
+
*/
|
|
30
|
+
const expandScientificNotationToDecimalString = (s) => {
|
|
31
|
+
const m = SCIENTIFIC_DECIMAL.exec(s.trim());
|
|
32
|
+
if (!m) {
|
|
33
|
+
throw new ChainAmountParseError(`Invalid amount: "${s}"`);
|
|
34
|
+
}
|
|
35
|
+
const signNeg = m[1] === '-';
|
|
36
|
+
let digitStr;
|
|
37
|
+
let fracLen;
|
|
38
|
+
if (m[4] !== undefined) {
|
|
39
|
+
digitStr = m[4];
|
|
40
|
+
fracLen = digitStr.length;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
digitStr = `${m[2] ?? ''}${m[3] ?? ''}`;
|
|
44
|
+
fracLen = (m[3] ?? '').length;
|
|
45
|
+
}
|
|
46
|
+
if (!/^\d+$/.test(digitStr)) {
|
|
47
|
+
throw new ChainAmountParseError(`Invalid amount: "${s}"`);
|
|
48
|
+
}
|
|
49
|
+
const expStr = m[5] ?? '';
|
|
50
|
+
if (expStr === '' || expStr === '+' || expStr === '-') {
|
|
51
|
+
throw new ChainAmountParseError(`Invalid amount: "${s}"`);
|
|
52
|
+
}
|
|
53
|
+
const allDigits = BigInt(digitStr);
|
|
54
|
+
const exp = BigInt(expStr);
|
|
55
|
+
const scale = exp - BigInt(fracLen);
|
|
56
|
+
const scaleAbs = scale < 0n ? -scale : scale;
|
|
57
|
+
if (scaleAbs > MAX_SCALE_ABS) {
|
|
58
|
+
throw new ChainAmountParseError(`Amount exponent out of supported range: "${s}"`);
|
|
59
|
+
}
|
|
60
|
+
let absResult;
|
|
61
|
+
if (scale >= 0n) {
|
|
62
|
+
const mult = 10n ** scale;
|
|
63
|
+
absResult = (allDigits * mult).toString();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const k = -scale;
|
|
67
|
+
const divisor = 10n ** k;
|
|
68
|
+
const intPart = allDigits / divisor;
|
|
69
|
+
const rem = allDigits % divisor;
|
|
70
|
+
const frac = padFractionDigits(rem.toString(), k);
|
|
71
|
+
absResult =
|
|
72
|
+
intPart === 0n ? `0.${frac}` : `${intPart.toString()}.${frac}`;
|
|
73
|
+
}
|
|
74
|
+
if (signNeg && allDigits !== 0n) {
|
|
75
|
+
return `-${absResult}`;
|
|
76
|
+
}
|
|
77
|
+
return absResult;
|
|
78
|
+
};
|
|
2
79
|
export const toChainAmount = (amount, decimals) => {
|
|
80
|
+
if (typeof amount === 'string') {
|
|
81
|
+
const trimmed = amount.trim();
|
|
82
|
+
if (!trimmed) {
|
|
83
|
+
throw new ChainAmountParseError('Amount cannot be empty');
|
|
84
|
+
}
|
|
85
|
+
if (/[eE]/.test(trimmed)) {
|
|
86
|
+
const expanded = expandScientificNotationToDecimalString(trimmed);
|
|
87
|
+
return parseUnits(expanded, decimals);
|
|
88
|
+
}
|
|
89
|
+
return parseUnits(trimmed, decimals);
|
|
90
|
+
}
|
|
3
91
|
const str = amount.toString();
|
|
4
92
|
const value = /[eE]/.test(str) ? amount.toFixed(decimals) : str;
|
|
5
93
|
return parseUnits(value, decimals);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toChainAmount.js","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"toChainAmount.js","sourceRoot":"","sources":["../../../../../packages/core/chain/amount/toChainAmount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cardano native tokens are identified by `policy_id.asset_name` (both hex-encoded).
|
|
3
|
+
* This module provides helpers to parse and construct that compound ID.
|
|
4
|
+
*/
|
|
5
|
+
type CardanoAssetIdParts = {
|
|
6
|
+
policyId: string;
|
|
7
|
+
assetName: string;
|
|
8
|
+
};
|
|
9
|
+
/** Constructs a Cardano asset ID from policy ID and asset name. */
|
|
10
|
+
export declare const toCardanoAssetId: ({ policyId, assetName, }: CardanoAssetIdParts) => string;
|
|
11
|
+
/** Splits a Cardano asset ID into policy ID and asset name. */
|
|
12
|
+
export declare const fromCardanoAssetId: (id: string) => CardanoAssetIdParts;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=cardanoAssetId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardanoAssetId.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/asset/cardanoAssetId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAID,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,GAAI,0BAG9B,mBAAmB,KAAG,MACc,CAAA;AAEvC,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,GAAI,IAAI,MAAM,KAAG,mBAU/C,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cardano native tokens are identified by `policy_id.asset_name` (both hex-encoded).
|
|
3
|
+
* This module provides helpers to parse and construct that compound ID.
|
|
4
|
+
*/
|
|
5
|
+
const separator = '.';
|
|
6
|
+
/** Constructs a Cardano asset ID from policy ID and asset name. */
|
|
7
|
+
export const toCardanoAssetId = ({ policyId, assetName, }) => `${policyId}${separator}${assetName}`;
|
|
8
|
+
/** Splits a Cardano asset ID into policy ID and asset name. */
|
|
9
|
+
export const fromCardanoAssetId = (id) => {
|
|
10
|
+
const dotIndex = id.indexOf(separator);
|
|
11
|
+
if (dotIndex === -1) {
|
|
12
|
+
throw new Error(`Invalid Cardano asset ID (missing separator): ${id}`);
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
policyId: id.slice(0, dotIndex),
|
|
16
|
+
assetName: id.slice(dotIndex + 1),
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=cardanoAssetId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardanoAssetId.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/asset/cardanoAssetId.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAC/B,QAAQ,EACR,SAAS,GACW,EAAU,EAAE,CAChC,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,EAAE,CAAA;AAEvC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAuB,EAAE;IACpE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;QAC/B,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;KAClC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type CardanoAddressAsset = {
|
|
2
|
+
policy_id: string;
|
|
3
|
+
asset_name: string;
|
|
4
|
+
fingerprint: string;
|
|
5
|
+
decimals: number;
|
|
6
|
+
quantity: string;
|
|
7
|
+
};
|
|
8
|
+
/** Fetches all native tokens held at a Cardano address via the Koios `address_assets` endpoint. */
|
|
9
|
+
export declare const getCardanoAddressAssets: (address: string) => Promise<CardanoAddressAsset[]>;
|
|
10
|
+
//# sourceMappingURL=getCardanoAddressAssets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoAddressAssets.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAddressAssets.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAWD,mGAAmG;AACnG,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,EAAE,CAgB/B,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { cardanoApiUrl } from './config.js';
|
|
3
|
+
/** Fetches all native tokens held at a Cardano address via the Koios `address_assets` endpoint. */
|
|
4
|
+
export const getCardanoAddressAssets = async (address) => {
|
|
5
|
+
const url = `${cardanoApiUrl}/address_assets`;
|
|
6
|
+
const response = await queryUrl(url, {
|
|
7
|
+
body: {
|
|
8
|
+
_addresses: [address],
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
return response.map(({ policy_id, asset_name, fingerprint, decimals, quantity }) => ({
|
|
12
|
+
policy_id,
|
|
13
|
+
asset_name,
|
|
14
|
+
fingerprint,
|
|
15
|
+
decimals: decimals ?? 0,
|
|
16
|
+
quantity,
|
|
17
|
+
}));
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=getCardanoAddressAssets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoAddressAssets.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAddressAssets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAmBxC,mGAAmG;AACnG,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,OAAe,EACiB,EAAE;IAClC,MAAM,GAAG,GAAG,GAAG,aAAa,iBAAiB,CAAA;IAE7C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA8B,GAAG,EAAE;QAChE,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,OAAO,CAAC;SACtB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnF,SAAS;QACT,UAAU;QACV,WAAW;QACX,QAAQ,EAAE,QAAQ,IAAI,CAAC;QACvB,QAAQ;KACT,CAAC,CAAC,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
type CardanoTokenRegistryMetadata = {
|
|
2
|
+
name?: string;
|
|
3
|
+
ticker?: string;
|
|
4
|
+
decimals?: number;
|
|
5
|
+
logo?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
};
|
|
9
|
+
export type CardanoAssetInfo = {
|
|
10
|
+
policy_id: string;
|
|
11
|
+
asset_name: string;
|
|
12
|
+
asset_name_ascii: string;
|
|
13
|
+
fingerprint: string;
|
|
14
|
+
total_supply: string;
|
|
15
|
+
token_registry_metadata: CardanoTokenRegistryMetadata | null;
|
|
16
|
+
};
|
|
17
|
+
/** Fetches metadata for a Cardano native asset via the Koios `asset_info` endpoint. */
|
|
18
|
+
export declare const getCardanoAssetInfo: ({ policyId, assetName, }: {
|
|
19
|
+
policyId: string;
|
|
20
|
+
assetName: string;
|
|
21
|
+
}) => Promise<CardanoAssetInfo>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=getCardanoAssetInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoAssetInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAssetInfo.ts"],"names":[],"mappings":"AAIA,KAAK,4BAA4B,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,uBAAuB,EAAE,4BAA4B,GAAG,IAAI,CAAA;CAC7D,CAAA;AAID,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,GAAU,0BAGvC;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,KAAG,OAAO,CAAC,gBAAgB,CAgB3B,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { cardanoApiUrl } from './config.js';
|
|
3
|
+
/** Fetches metadata for a Cardano native asset via the Koios `asset_info` endpoint. */
|
|
4
|
+
export const getCardanoAssetInfo = async ({ policyId, assetName, }) => {
|
|
5
|
+
const url = `${cardanoApiUrl}/asset_info`;
|
|
6
|
+
const [info] = await queryUrl(url, {
|
|
7
|
+
body: {
|
|
8
|
+
_asset_list: [[policyId, assetName]],
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
if (!info) {
|
|
12
|
+
throw new Error(`Asset info not found for ${policyId}.${assetName}`);
|
|
13
|
+
}
|
|
14
|
+
return info;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=getCardanoAssetInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoAssetInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/client/getCardanoAssetInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAsBxC,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,QAAQ,EACR,SAAS,GAIV,EAA6B,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,aAAa,aAAa,CAAA;IAEzC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,QAAQ,CAA2B,GAAG,EAAE;QAC3D,IAAI,EAAE;YACJ,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SACrC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,IAAI,SAAS,EAAE,CACpD,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type CardanoUtxoAsset = {
|
|
2
|
+
policy_id: string;
|
|
3
|
+
asset_name: string;
|
|
4
|
+
decimals: number;
|
|
5
|
+
quantity: string;
|
|
6
|
+
fingerprint: string;
|
|
7
|
+
};
|
|
8
|
+
export type CardanoExtendedUtxo = {
|
|
9
|
+
hash: string;
|
|
10
|
+
amount: bigint;
|
|
11
|
+
index: number;
|
|
12
|
+
assets: CardanoUtxoAsset[];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Fetches UTXOs for a Cardano address with the `_extended` flag,
|
|
16
|
+
* which includes the `asset_list` field for each UTXO.
|
|
17
|
+
*/
|
|
18
|
+
export declare const getCardanoExtendedUtxos: (address: string) => Promise<CardanoExtendedUtxo[]>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=getCardanoExtendedUtxos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoExtendedUtxos.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/utxo/getCardanoExtendedUtxos.ts"],"names":[],"mappings":"AAIA,KAAK,gBAAgB,GAAG;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B,CAAA;AASD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,EAAE,CAgB/B,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
|
|
2
|
+
import { cardanoApiUrl } from '../client/config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Fetches UTXOs for a Cardano address with the `_extended` flag,
|
|
5
|
+
* which includes the `asset_list` field for each UTXO.
|
|
6
|
+
*/
|
|
7
|
+
export const getCardanoExtendedUtxos = async (address) => {
|
|
8
|
+
const url = `${cardanoApiUrl}/address_utxos`;
|
|
9
|
+
const response = await queryUrl(url, {
|
|
10
|
+
body: {
|
|
11
|
+
_addresses: [address],
|
|
12
|
+
_extended: true,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
return response.map(({ tx_hash, tx_index, value, asset_list }) => ({
|
|
16
|
+
hash: tx_hash,
|
|
17
|
+
amount: BigInt(value),
|
|
18
|
+
index: tx_index,
|
|
19
|
+
assets: asset_list ?? [],
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=getCardanoExtendedUtxos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCardanoExtendedUtxos.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/utxo/getCardanoExtendedUtxos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAwBhD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC1C,OAAe,EACiB,EAAE;IAClC,MAAM,GAAG,GAAG,GAAG,aAAa,gBAAgB,CAAA;IAE5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA4B,GAAG,EAAE;QAC9D,IAAI,EAAE;YACJ,UAAU,EAAE,CAAC,OAAO,CAAC;YACrB,SAAS,EAAE,IAAI;SAChB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;QACrB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,UAAU,IAAI,EAAE;KACzB,CAAC,CAAC,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ComputeCosmosTxReceiptFeeAmountInput = {
|
|
2
|
+
gasUsed: bigint;
|
|
3
|
+
gasWantedFromTx: bigint;
|
|
4
|
+
feeGasLimit: bigint;
|
|
5
|
+
maxFeeAmount: bigint;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Proportional native fee from max fee, gas used, and a gas denominator.
|
|
9
|
+
* Denominator prefers `gasWantedFromTx` when positive, else `feeGasLimit`,
|
|
10
|
+
* else `gasUsed` (treats max fee as paid when no better estimate exists).
|
|
11
|
+
* Result is clamped to `maxFeeAmount`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const computeCosmosTxReceiptFeeAmount: ({ gasUsed, gasWantedFromTx, feeGasLimit, maxFeeAmount, }: ComputeCosmosTxReceiptFeeAmountInput) => bigint | undefined;
|
|
14
|
+
//# sourceMappingURL=computeCosmosTxReceiptFeeAmount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeCosmosTxReceiptFeeAmount.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/computeCosmosTxReceiptFeeAmount.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oCAAoC,GAAG;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,GAAI,0DAK7C,oCAAoC,KAAG,MAAM,GAAG,SA0BlD,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proportional native fee from max fee, gas used, and a gas denominator.
|
|
3
|
+
* Denominator prefers `gasWantedFromTx` when positive, else `feeGasLimit`,
|
|
4
|
+
* else `gasUsed` (treats max fee as paid when no better estimate exists).
|
|
5
|
+
* Result is clamped to `maxFeeAmount`.
|
|
6
|
+
*/
|
|
7
|
+
export const computeCosmosTxReceiptFeeAmount = ({ gasUsed, gasWantedFromTx, feeGasLimit, maxFeeAmount, }) => {
|
|
8
|
+
if (gasUsed === 0n || maxFeeAmount === 0n) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const gasDenominator = gasWantedFromTx > 0n
|
|
12
|
+
? gasWantedFromTx
|
|
13
|
+
: feeGasLimit > 0n
|
|
14
|
+
? feeGasLimit
|
|
15
|
+
: gasUsed;
|
|
16
|
+
if (gasDenominator === 0n) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
let actualFee = (maxFeeAmount * gasUsed) / gasDenominator;
|
|
20
|
+
if (actualFee > maxFeeAmount) {
|
|
21
|
+
actualFee = maxFeeAmount;
|
|
22
|
+
}
|
|
23
|
+
if (actualFee === 0n) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return actualFee;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=computeCosmosTxReceiptFeeAmount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeCosmosTxReceiptFeeAmount.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/computeCosmosTxReceiptFeeAmount.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,EAC9C,OAAO,EACP,eAAe,EACf,WAAW,EACX,YAAY,GACyB,EAAsB,EAAE;IAC7D,IAAI,OAAO,KAAK,EAAE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,cAAc,GAClB,eAAe,GAAG,EAAE;QAClB,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,WAAW,GAAG,EAAE;YAChB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,OAAO,CAAA;IAEf,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,cAAc,CAAA;IACzD,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;QAC7B,SAAS,GAAG,YAAY,CAAA;IAC1B,CAAC;IAED,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** ZK circuit used for the claim proof. */
|
|
2
|
+
export type QbtcClaimCircuit = 'ecdsa' | 'schnorr';
|
|
3
|
+
/** Supported Bitcoin address types for QBTC claiming. */
|
|
4
|
+
export type BtcAddressType = 'p2pkh' | 'p2wpkh' | 'p2sh-p2wpkh' | 'p2wsh' | 'p2tr';
|
|
5
|
+
/** Maps a Bitcoin address type to its corresponding ZK circuit. */
|
|
6
|
+
export declare const btcAddressTypeCircuit: Record<BtcAddressType, QbtcClaimCircuit>;
|
|
7
|
+
//# sourceMappingURL=BtcAddressType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BtcAddressType.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/BtcAddressType.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAA;AAElD,yDAAyD;AACzD,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,QAAQ,GACR,aAAa,GACb,OAAO,GACP,MAAM,CAAA;AAEV,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAM1E,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BtcAddressType.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/BtcAddressType.ts"],"names":[],"mappings":"AAWA,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAA6C;IAC7E,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,aAAa,EAAE,OAAO;IACtB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,SAAS;CAChB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimableUtxo.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/ClaimableUtxo.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimableUtxo.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/ClaimableUtxo.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type ClaimTxResponse = {
|
|
2
|
+
/** Total satoshis claimed. */
|
|
3
|
+
totalAmountClaimed: bigint;
|
|
4
|
+
/** Number of UTXOs successfully claimed. */
|
|
5
|
+
utxosClaimed: number;
|
|
6
|
+
/** Number of UTXOs skipped (already claimed or address mismatch). */
|
|
7
|
+
utxosSkipped: number;
|
|
8
|
+
/** Transaction hash. */
|
|
9
|
+
txHash: string;
|
|
10
|
+
};
|
|
11
|
+
type BroadcastClaimTxInput = {
|
|
12
|
+
/** Base64-encoded TxRaw protobuf bytes. */
|
|
13
|
+
txBytesBase64: string;
|
|
14
|
+
/** Transaction hash (SHA256 of TxRaw), hex-encoded. */
|
|
15
|
+
txHash: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Broadcasts a signed MsgClaimWithProof transaction to the QBTC chain
|
|
19
|
+
* via the REST API (following the restOnlyChains pattern).
|
|
20
|
+
*
|
|
21
|
+
* The claim transaction is gas-free — the chain does not charge gas.
|
|
22
|
+
*/
|
|
23
|
+
export declare const broadcastClaimTx: ({ txBytesBase64, txHash, }: BroadcastClaimTxInput) => Promise<ClaimTxResponse>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=broadcastClaimTx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcastClaimTx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/broadcastClaimTx.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG;IACrB,8BAA8B;IAC9B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAA;IACpB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAWD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAU,4BAGpC,qBAAqB,KAAG,OAAO,CAAC,eAAe,CAwCjD,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { qbtcRestUrl } from '@vultisig/core-chain/chains/cosmos/qbtc/tendermintRpcUrl';
|
|
2
|
+
/**
|
|
3
|
+
* Broadcasts a signed MsgClaimWithProof transaction to the QBTC chain
|
|
4
|
+
* via the REST API (following the restOnlyChains pattern).
|
|
5
|
+
*
|
|
6
|
+
* The claim transaction is gas-free — the chain does not charge gas.
|
|
7
|
+
*/
|
|
8
|
+
export const broadcastClaimTx = async ({ txBytesBase64, txHash, }) => {
|
|
9
|
+
const response = await fetch(`${qbtcRestUrl}/cosmos/tx/v1beta1/txs`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: { 'Content-Type': 'application/json' },
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
tx_bytes: txBytesBase64,
|
|
14
|
+
mode: 'BROADCAST_MODE_SYNC',
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
const idempotentResult = {
|
|
18
|
+
totalAmountClaimed: 0n,
|
|
19
|
+
utxosClaimed: 0,
|
|
20
|
+
utxosSkipped: 0,
|
|
21
|
+
txHash,
|
|
22
|
+
};
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const text = await response.text();
|
|
25
|
+
if (text.includes('tx already exists in cache')) {
|
|
26
|
+
return idempotentResult;
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`QBTC claim broadcast failed (${response.status}): ${text}`);
|
|
29
|
+
}
|
|
30
|
+
const data = await response.json();
|
|
31
|
+
if (typeof data.tx_response?.code !== 'number') {
|
|
32
|
+
throw new Error('QBTC claim broadcast failed: missing tx_response.code');
|
|
33
|
+
}
|
|
34
|
+
if (data.tx_response.code !== 0) {
|
|
35
|
+
const log = data.tx_response.raw_log || data.tx_response.log;
|
|
36
|
+
if (log?.includes('tx already exists in cache')) {
|
|
37
|
+
return idempotentResult;
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`QBTC claim tx error: ${log}`);
|
|
40
|
+
}
|
|
41
|
+
return idempotentResult;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=broadcastClaimTx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcastClaimTx.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/broadcastClaimTx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0DAA0D,CAAA;AA6BtF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,aAAa,EACb,MAAM,GACgB,EAA4B,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,wBAAwB,EAAE;QACnE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,aAAa;YACvB,IAAI,EAAE,qBAAqB;SAC5B,CAAC;KACH,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAoB;QACxC,kBAAkB,EAAE,EAAE;QACtB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,MAAM;KACP,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,EAAE,CAAC;YAChD,OAAO,gBAAgB,CAAA;QACzB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,IAAI,GAAsB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAErD,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAA;QAC5D,IAAI,GAAG,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAAE,CAAC;YAChD,OAAO,gBAAgB,CAAA;QACzB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,gBAAgB,CAAA;AACzB,CAAC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type UtxoRef = {
|
|
2
|
+
txid: string;
|
|
3
|
+
vout: number;
|
|
4
|
+
};
|
|
5
|
+
type BuildMsgClaimWithProofInput = {
|
|
6
|
+
/** QBTC bech32 address of the claimer. */
|
|
7
|
+
claimer: string;
|
|
8
|
+
/** UTXOs to include in the claim (1-50, no duplicates). */
|
|
9
|
+
utxos: UtxoRef[];
|
|
10
|
+
/** Hex-encoded PLONK ZK proof. */
|
|
11
|
+
proof: string;
|
|
12
|
+
/** 64-char hex MessageHash. */
|
|
13
|
+
messageHash: string;
|
|
14
|
+
/** 40-char hex AddressHash (Hash160). */
|
|
15
|
+
addressHash: string;
|
|
16
|
+
/** 64-char hex QBTCAddressHash. */
|
|
17
|
+
qbtcAddressHash: string;
|
|
18
|
+
};
|
|
19
|
+
/** Validates the claim input against the chain's constraints (Section 5). */
|
|
20
|
+
export declare const validateClaimInput: (input: BuildMsgClaimWithProofInput) => void;
|
|
21
|
+
/** Wraps MsgClaimWithProof in a Cosmos Any message. */
|
|
22
|
+
export declare const buildClaimWithProofAny: (input: BuildMsgClaimWithProofInput) => Uint8Array;
|
|
23
|
+
/** Builds the TxBody containing a single MsgClaimWithProof. */
|
|
24
|
+
export declare const buildClaimTxBody: (input: BuildMsgClaimWithProofInput) => Uint8Array;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=buildClaimTx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildClaimTx.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/chains/cosmos/qbtc/claim/buildClaimTx.ts"],"names":[],"mappings":"AASA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,2BAA2B,GAAG;IACjC,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAYD,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,GAAI,OAAO,2BAA2B,SA+BpE,CAAA;AAsBD,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,GACjC,OAAO,2BAA2B,KACjC,UAOF,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,GAC3B,OAAO,2BAA2B,KACjC,UAGF,CAAA"}
|