@vultisig/core-chain 1.2.2 → 1.3.1

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 (68) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/chains/cardano/cip30/buildCardanoValue.d.ts +18 -0
  3. package/dist/chains/cardano/cip30/buildCardanoValue.d.ts.map +1 -0
  4. package/dist/chains/cardano/cip30/buildCardanoValue.js +72 -0
  5. package/dist/chains/cardano/cip30/buildCardanoValue.js.map +1 -0
  6. package/dist/chains/cardano/cip30/buildCardanoWitnessSet.d.ts +10 -0
  7. package/dist/chains/cardano/cip30/buildCardanoWitnessSet.d.ts.map +1 -0
  8. package/dist/chains/cardano/cip30/buildCardanoWitnessSet.js +15 -0
  9. package/dist/chains/cardano/cip30/buildCardanoWitnessSet.js.map +1 -0
  10. package/dist/chains/cardano/cip30/buildCoseStructures.d.ts +45 -0
  11. package/dist/chains/cardano/cip30/buildCoseStructures.d.ts.map +1 -0
  12. package/dist/chains/cardano/cip30/buildCoseStructures.js +70 -0
  13. package/dist/chains/cardano/cip30/buildCoseStructures.js.map +1 -0
  14. package/dist/chains/cardano/cip30/cardanoAddressBytes.d.ts +6 -0
  15. package/dist/chains/cardano/cip30/cardanoAddressBytes.d.ts.map +1 -0
  16. package/dist/chains/cardano/cip30/cardanoAddressBytes.js +12 -0
  17. package/dist/chains/cardano/cip30/cardanoAddressBytes.js.map +1 -0
  18. package/dist/chains/cardano/cip30/cardanoCborPrimitives.d.ts +53 -0
  19. package/dist/chains/cardano/cip30/cardanoCborPrimitives.d.ts.map +1 -0
  20. package/dist/chains/cardano/cip30/cardanoCborPrimitives.js +91 -0
  21. package/dist/chains/cardano/cip30/cardanoCborPrimitives.js.map +1 -0
  22. package/dist/chains/cardano/cip30/cardanoTxBodyHash.d.ts +6 -0
  23. package/dist/chains/cardano/cip30/cardanoTxBodyHash.d.ts.map +1 -0
  24. package/dist/chains/cardano/cip30/cardanoTxBodyHash.js +55 -0
  25. package/dist/chains/cardano/cip30/cardanoTxBodyHash.js.map +1 -0
  26. package/dist/chains/cardano/cip30/cborEncoder.d.ts +11 -0
  27. package/dist/chains/cardano/cip30/cborEncoder.d.ts.map +1 -0
  28. package/dist/chains/cardano/cip30/cborEncoder.js +14 -0
  29. package/dist/chains/cardano/cip30/cborEncoder.js.map +1 -0
  30. package/dist/chains/cardano/cip30/cborSkip.d.ts +13 -0
  31. package/dist/chains/cardano/cip30/cborSkip.d.ts.map +1 -0
  32. package/dist/chains/cardano/cip30/cborSkip.js +108 -0
  33. package/dist/chains/cardano/cip30/cborSkip.js.map +1 -0
  34. package/dist/chains/cardano/cip30/decodeCardanoAmountValue.d.ts +16 -0
  35. package/dist/chains/cardano/cip30/decodeCardanoAmountValue.d.ts.map +1 -0
  36. package/dist/chains/cardano/cip30/decodeCardanoAmountValue.js +72 -0
  37. package/dist/chains/cardano/cip30/decodeCardanoAmountValue.js.map +1 -0
  38. package/dist/chains/cardano/cip30/encodeCardanoUnspentOutput.d.ts +16 -0
  39. package/dist/chains/cardano/cip30/encodeCardanoUnspentOutput.d.ts.map +1 -0
  40. package/dist/chains/cardano/cip30/encodeCardanoUnspentOutput.js +23 -0
  41. package/dist/chains/cardano/cip30/encodeCardanoUnspentOutput.js.map +1 -0
  42. package/dist/chains/cardano/cip30/encodeCardanoValue.d.ts +4 -0
  43. package/dist/chains/cardano/cip30/encodeCardanoValue.d.ts.map +1 -0
  44. package/dist/chains/cardano/cip30/encodeCardanoValue.js +5 -0
  45. package/dist/chains/cardano/cip30/encodeCardanoValue.js.map +1 -0
  46. package/dist/chains/cardano/cip30/selectCardanoUtxosByLovelace.d.ts +24 -0
  47. package/dist/chains/cardano/cip30/selectCardanoUtxosByLovelace.d.ts.map +1 -0
  48. package/dist/chains/cardano/cip30/selectCardanoUtxosByLovelace.js +23 -0
  49. package/dist/chains/cardano/cip30/selectCardanoUtxosByLovelace.js.map +1 -0
  50. package/dist/chains/cardano/submit/submitCardanoCbor.d.ts +18 -0
  51. package/dist/chains/cardano/submit/submitCardanoCbor.d.ts.map +1 -0
  52. package/dist/chains/cardano/submit/submitCardanoCbor.js +71 -0
  53. package/dist/chains/cardano/submit/submitCardanoCbor.js.map +1 -0
  54. package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts +1 -1
  55. package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts.map +1 -1
  56. package/dist/chains/cosmos/account/getCosmosAccountInfo.js +5 -3
  57. package/dist/chains/cosmos/account/getCosmosAccountInfo.js.map +1 -1
  58. package/dist/coin/price/evm/getErc20Prices.d.ts +3 -1
  59. package/dist/coin/price/evm/getErc20Prices.d.ts.map +1 -1
  60. package/dist/coin/price/evm/getErc20Prices.js +4 -1
  61. package/dist/coin/price/evm/getErc20Prices.js.map +1 -1
  62. package/dist/publicKey/getPublicKey.d.ts.map +1 -1
  63. package/dist/publicKey/getPublicKey.js +11 -5
  64. package/dist/publicKey/getPublicKey.js.map +1 -1
  65. package/dist/tx/broadcast/resolvers/cardano.d.ts.map +1 -1
  66. package/dist/tx/broadcast/resolvers/cardano.js +11 -63
  67. package/dist/tx/broadcast/resolvers/cardano.js.map +1 -1
  68. package/package.json +67 -2
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Walk a CBOR data item starting at `offset` and return the offset
3
+ * immediately after the item ends. This allows extracting raw byte
4
+ * ranges from CBOR without re-encoding.
5
+ *
6
+ * Supports: unsigned/negative ints, byte/text strings, arrays, maps, tags,
7
+ * and simple values (true/false/null). Does NOT support indefinite-length.
8
+ *
9
+ * Every read is bounds-checked so a truncated / malformed CBOR input fails
10
+ * fast with a descriptive error instead of silently returning bogus offsets.
11
+ */
12
+ export const cborSkip = (data, offset) => {
13
+ if (!Number.isInteger(offset) || offset < 0 || offset >= data.length) {
14
+ throw new Error(`cborSkip: offset ${offset} is out of bounds (data length ${data.length})`);
15
+ }
16
+ const initial = data[offset];
17
+ const majorType = initial >> 5;
18
+ const additional = initial & 0x1f;
19
+ const { value, nextOffset } = readArgument(data, offset, additional);
20
+ // Major type 0/1: unsigned/negative integer — head only
21
+ if (majorType <= 1)
22
+ return nextOffset;
23
+ // Major type 2/3: byte/text string — head + N bytes
24
+ if (majorType <= 3) {
25
+ const end = nextOffset + Number(value);
26
+ if (end > data.length) {
27
+ throw new Error(`cborSkip: truncated string at offset ${offset} (need ${Number(value)} bytes, have ${data.length - nextOffset})`);
28
+ }
29
+ return end;
30
+ }
31
+ // Major type 4: array — head + N items
32
+ if (majorType === 4) {
33
+ let pos = nextOffset;
34
+ for (let i = 0; i < Number(value); i++) {
35
+ pos = cborSkip(data, pos);
36
+ }
37
+ return pos;
38
+ }
39
+ // Major type 5: map — head + N key-value pairs
40
+ if (majorType === 5) {
41
+ let pos = nextOffset;
42
+ for (let i = 0; i < Number(value); i++) {
43
+ pos = cborSkip(data, pos); // key
44
+ pos = cborSkip(data, pos); // value
45
+ }
46
+ return pos;
47
+ }
48
+ // Major type 6: tag — head + 1 nested item
49
+ if (majorType === 6)
50
+ return cborSkip(data, nextOffset);
51
+ // Major type 7: simple values / floats
52
+ if (additional <= 23)
53
+ return nextOffset; // simple value in head
54
+ if (additional === 24)
55
+ return nextOffset; // 1-byte simple
56
+ if (additional === 25)
57
+ return nextOffset; // float16 (2 bytes in arg)
58
+ if (additional === 26)
59
+ return nextOffset; // float32 (4 bytes in arg)
60
+ if (additional === 27)
61
+ return nextOffset; // float64 (8 bytes in arg)
62
+ throw new Error(`Unsupported CBOR item at offset ${offset}: initial byte 0x${initial.toString(16)}`);
63
+ };
64
+ /** Read the argument value and return the offset after the argument. */
65
+ const readArgument = (data, offset, additional) => {
66
+ const ensureBytes = (needed) => {
67
+ const end = offset + 1 + needed;
68
+ if (end > data.length) {
69
+ throw new Error(`cborSkip/readArgument: truncated CBOR head at offset ${offset} (need ${needed} argument bytes, have ${data.length - offset - 1})`);
70
+ }
71
+ };
72
+ if (additional < 24)
73
+ return { value: BigInt(additional), nextOffset: offset + 1 };
74
+ if (additional === 24) {
75
+ ensureBytes(1);
76
+ return { value: BigInt(data[offset + 1]), nextOffset: offset + 2 };
77
+ }
78
+ if (additional === 25) {
79
+ ensureBytes(2);
80
+ const v = (data[offset + 1] << 8) | data[offset + 2];
81
+ return { value: BigInt(v), nextOffset: offset + 3 };
82
+ }
83
+ if (additional === 26) {
84
+ ensureBytes(4);
85
+ const v = (data[offset + 1] << 24) |
86
+ (data[offset + 2] << 16) |
87
+ (data[offset + 3] << 8) |
88
+ data[offset + 4];
89
+ return { value: BigInt(v >>> 0), nextOffset: offset + 5 };
90
+ }
91
+ if (additional === 27) {
92
+ ensureBytes(8);
93
+ const hi = (data[offset + 1] << 24) |
94
+ (data[offset + 2] << 16) |
95
+ (data[offset + 3] << 8) |
96
+ data[offset + 4];
97
+ const lo = (data[offset + 5] << 24) |
98
+ (data[offset + 6] << 16) |
99
+ (data[offset + 7] << 8) |
100
+ data[offset + 8];
101
+ return {
102
+ value: (BigInt(hi >>> 0) << 32n) | BigInt(lo >>> 0),
103
+ nextOffset: offset + 9,
104
+ };
105
+ }
106
+ throw new Error(`Unsupported CBOR additional info ${additional}`);
107
+ };
108
+ //# sourceMappingURL=cborSkip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cborSkip.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/cborSkip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,MAAc,EAAU,EAAE;IACnE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,kCAAkC,IAAI,CAAC,MAAM,GAAG,CAC3E,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,CAAA;IAC9B,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAA;IAEjC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAEpE,wDAAwD;IACxD,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,UAAU,CAAA;IAErC,oDAAoD;IACpD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wCAAwC,MAAM,UAAU,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,UAAU,GAAG,CACjH,CAAA;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,uCAAuC;IACvC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,GAAG,UAAU,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,+CAA+C;IAC/C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,GAAG,UAAU,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA,CAAC,MAAM;YAChC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA,CAAC,QAAQ;QACpC,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,2CAA2C;IAC3C,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAEtD,uCAAuC;IACvC,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,UAAU,CAAA,CAAU,uBAAuB;IACxE,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA,CAAU,gBAAgB;IAClE,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA,CAAU,2BAA2B;IAC7E,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA,CAAU,2BAA2B;IAC7E,IAAI,UAAU,KAAK,EAAE;QAAE,OAAO,UAAU,CAAA,CAAU,2BAA2B;IAE7E,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,oBAAoB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,wEAAwE;AACxE,MAAM,YAAY,GAAG,CACnB,IAAgB,EAChB,MAAc,EACd,UAAkB,EACqB,EAAE;IACzC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,CAAA;QAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wDAAwD,MAAM,UAAU,MAAM,yBAAyB,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CACnI,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAED,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;IACjF,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,WAAW,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;IACpE,CAAC;IACD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,WAAW,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACpD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;IACrD,CAAC;IACD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,WAAW,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GACL,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;IAC3D,CAAC;IACD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,WAAW,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,EAAE,GACN,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClB,MAAM,EAAE,GACN,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClB,OAAO;YACL,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YACnD,UAAU,EAAE,MAAM,GAAG,CAAC;SACvB,CAAA;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,EAAE,CAAC,CAAA;AACnE,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Decoded shape of a CIP-30 `amount` argument:
3
+ *
4
+ * value = coin / [coin, multiasset<uint>]
5
+ *
6
+ * We surface `hasAssets` as a boolean rather than a full multiasset tree
7
+ * because the main consumer (`getUtxos` coin selection) only selects by
8
+ * lovelace and falls back to a conservative "return all" when the request
9
+ * also has native-token requirements.
10
+ */
11
+ export type CardanoValueRequirement = {
12
+ lovelace: bigint;
13
+ hasAssets: boolean;
14
+ };
15
+ export declare const decodeCardanoAmountValue: (amountHex: string) => CardanoValueRequirement | null;
16
+ //# sourceMappingURL=decodeCardanoAmountValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeCardanoAmountValue.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/decodeCardanoAmountValue.ts"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAoED,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,KAChB,uBAAuB,GAAG,IAI5B,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { stripHexPrefix } from '@vultisig/lib-utils/hex/stripHexPrefix';
2
+ import { attempt } from '@vultisig/lib-utils/attempt';
3
+ import { cardanoCborEncoder } from './cborEncoder.js';
4
+ const hexPattern = /^[0-9a-fA-F]*$/;
5
+ /** Cardano coin is always a non-negative uint — reject anything else. */
6
+ const toBigInt = (value) => {
7
+ if (typeof value === 'bigint')
8
+ return value >= 0n ? value : null;
9
+ if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {
10
+ return BigInt(value);
11
+ }
12
+ return null;
13
+ };
14
+ /**
15
+ * A valid multiasset is a CBOR map:
16
+ *
17
+ * multiasset<a> = { * policy_id => { * asset_name => a } }
18
+ *
19
+ * cbor-x decodes this as a `Map` (because we set `mapsAsObjects: false`), but
20
+ * we accept a plain non-array object too for robustness against inputs that
21
+ * went through a re-encode pass elsewhere. Arrays and scalars are rejected.
22
+ */
23
+ const isMultiassetShape = (value) => value instanceof Map ||
24
+ (typeof value === 'object' && value !== null && !Array.isArray(value));
25
+ const multiassetHasEntries = (value) => {
26
+ if (value instanceof Map)
27
+ return value.size > 0;
28
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
29
+ return Object.keys(value).length > 0;
30
+ }
31
+ return false;
32
+ };
33
+ /**
34
+ * Decode a hex-encoded CBOR `value` (per CIP-30 `getUtxos(amount)`).
35
+ *
36
+ * Returns `null` for inputs that fail to decode or don't match the
37
+ * `coin / [coin, multiasset]` shape — callers should treat a null result as
38
+ * "no usable filter" and fall back to returning all UTXOs.
39
+ */
40
+ const tryDecode = (amountHex) => {
41
+ const stripped = stripHexPrefix(amountHex);
42
+ // Buffer.from('...', 'hex') silently truncates at the first non-hex byte,
43
+ // which would let `0xgg` or odd-length inputs squeak past as valid-looking
44
+ // (but wrong) CBOR. Validate up front.
45
+ if (stripped.length === 0 || stripped.length % 2 !== 0 || !hexPattern.test(stripped)) {
46
+ return null;
47
+ }
48
+ const bytes = Uint8Array.from(Buffer.from(stripped, 'hex'));
49
+ if (bytes.length === 0)
50
+ return null;
51
+ const decoded = cardanoCborEncoder.decode(bytes);
52
+ if (Array.isArray(decoded) && decoded.length === 2) {
53
+ const lovelace = toBigInt(decoded[0]);
54
+ if (lovelace === null)
55
+ return null;
56
+ const ma = decoded[1];
57
+ if (!isMultiassetShape(ma))
58
+ return null;
59
+ return { lovelace, hasAssets: multiassetHasEntries(ma) };
60
+ }
61
+ const lovelace = toBigInt(decoded);
62
+ if (lovelace === null)
63
+ return null;
64
+ return { lovelace, hasAssets: false };
65
+ };
66
+ export const decodeCardanoAmountValue = (amountHex) => {
67
+ const result = attempt(() => tryDecode(amountHex));
68
+ if ('error' in result)
69
+ return null;
70
+ return result.data ?? null;
71
+ };
72
+ //# sourceMappingURL=decodeCardanoAmountValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decodeCardanoAmountValue.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/decodeCardanoAmountValue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CardanoExtendedUtxo } from '../utxo/getCardanoExtendedUtxos.js';
2
+ type Input = {
3
+ utxo: CardanoExtendedUtxo;
4
+ addressBytes: Uint8Array;
5
+ };
6
+ /**
7
+ * CBOR-encode a CIP-30 `transaction_unspent_output = [input, output]`:
8
+ *
9
+ * transaction_input = [ tx_hash: bytes .size 32, index: uint ]
10
+ * transaction_output = [ address: bytes, amount: value ]
11
+ *
12
+ * `address_bytes` should already be the raw address bytes (see `cardanoAddressBytes`).
13
+ */
14
+ export declare const encodeCardanoUnspentOutput: ({ utxo, addressBytes, }: Input) => Uint8Array;
15
+ export {};
16
+ //# sourceMappingURL=encodeCardanoUnspentOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeCardanoUnspentOutput.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/encodeCardanoUnspentOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAOrE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,mBAAmB,CAAA;IACzB,YAAY,EAAE,UAAU,CAAA;CACzB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GAAI,yBAGxC,KAAK,KAAG,UAWV,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { stripHexPrefix } from '@vultisig/lib-utils/hex/stripHexPrefix';
2
+ import { buildCardanoValue } from './buildCardanoValue.js';
3
+ import { cardanoCborEncoder } from './cborEncoder.js';
4
+ const hexToBytes = (hex) => Uint8Array.from(Buffer.from(stripHexPrefix(hex), 'hex'));
5
+ /**
6
+ * CBOR-encode a CIP-30 `transaction_unspent_output = [input, output]`:
7
+ *
8
+ * transaction_input = [ tx_hash: bytes .size 32, index: uint ]
9
+ * transaction_output = [ address: bytes, amount: value ]
10
+ *
11
+ * `address_bytes` should already be the raw address bytes (see `cardanoAddressBytes`).
12
+ */
13
+ export const encodeCardanoUnspentOutput = ({ utxo, addressBytes, }) => {
14
+ const txHashBytes = hexToBytes(utxo.hash);
15
+ if (txHashBytes.length !== 32) {
16
+ throw new Error(`encodeCardanoUnspentOutput: tx_hash must be 32 bytes, got ${txHashBytes.length} (hash=${JSON.stringify(utxo.hash)})`);
17
+ }
18
+ return cardanoCborEncoder.encode([
19
+ [txHashBytes, utxo.index],
20
+ [addressBytes, buildCardanoValue(utxo.amount, utxo.assets)],
21
+ ]);
22
+ };
23
+ //# sourceMappingURL=encodeCardanoUnspentOutput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeCardanoUnspentOutput.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/encodeCardanoUnspentOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAc,EAAE,CAC7C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAO1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,IAAI,EACJ,YAAY,GACN,EAAc,EAAE;IACtB,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,WAAW,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,6DAA6D,WAAW,CAAC,MAAM,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACtH,CAAA;IACH,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC;QAC/B,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5D,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { CardanoNativeAsset } from './buildCardanoValue.js';
2
+ /** CBOR-encode a Cardano `value` — the shape returned by `getBalance()` under CIP-30. */
3
+ export declare const encodeCardanoValue: (lovelace: bigint, assets: readonly CardanoNativeAsset[]) => Uint8Array;
4
+ //# sourceMappingURL=encodeCardanoValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeCardanoValue.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/encodeCardanoValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAG5B,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,QAAQ,SAAS,kBAAkB,EAAE,KACpC,UAC6D,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { buildCardanoValue, } from './buildCardanoValue.js';
2
+ import { cardanoCborEncoder } from './cborEncoder.js';
3
+ /** CBOR-encode a Cardano `value` — the shape returned by `getBalance()` under CIP-30. */
4
+ export const encodeCardanoValue = (lovelace, assets) => cardanoCborEncoder.encode(buildCardanoValue(lovelace, assets));
5
+ //# sourceMappingURL=encodeCardanoValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeCardanoValue.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/encodeCardanoValue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,yFAAyF;AACzF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAgB,EAChB,MAAqC,EACzB,EAAE,CACd,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Minimal UTXO shape required by lovelace coin selection. Matches
3
+ * `CardanoExtendedUtxo` but is structurally typed so callers can pass any
4
+ * row with an `amount: bigint`.
5
+ */
6
+ export type CardanoCoinSelectionUtxo = {
7
+ amount: bigint;
8
+ };
9
+ export type SelectCardanoUtxosByLovelaceInput<T extends CardanoCoinSelectionUtxo> = {
10
+ utxos: readonly T[];
11
+ targetLovelace: bigint;
12
+ };
13
+ /**
14
+ * Greedy largest-first coin selection by lovelace.
15
+ *
16
+ * Used by CIP-30 `getUtxos(amount)` to return a minimal covering set. The
17
+ * wallet is free to return a superset (the spec explicitly allows it), but
18
+ * picking largest-first keeps the returned set small, which reduces the
19
+ * CBOR payload size and the dApp's downstream selection work.
20
+ *
21
+ * Returns `null` when even the full set is insufficient to meet the target.
22
+ */
23
+ export declare const selectCardanoUtxosByLovelace: <T extends CardanoCoinSelectionUtxo>({ utxos, targetLovelace, }: SelectCardanoUtxosByLovelaceInput<T>) => T[] | null;
24
+ //# sourceMappingURL=selectCardanoUtxosByLovelace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectCardanoUtxosByLovelace.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/selectCardanoUtxosByLovelace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzD,MAAM,MAAM,iCAAiC,CAAC,CAAC,SAAS,wBAAwB,IAAI;IAClF,KAAK,EAAE,SAAS,CAAC,EAAE,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,wBAAwB,EAAE,4BAG9E,iCAAiC,CAAC,CAAC,CAAC,KAAG,CAAC,EAAE,GAAG,IAY/C,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Greedy largest-first coin selection by lovelace.
3
+ *
4
+ * Used by CIP-30 `getUtxos(amount)` to return a minimal covering set. The
5
+ * wallet is free to return a superset (the spec explicitly allows it), but
6
+ * picking largest-first keeps the returned set small, which reduces the
7
+ * CBOR payload size and the dApp's downstream selection work.
8
+ *
9
+ * Returns `null` when even the full set is insufficient to meet the target.
10
+ */
11
+ export const selectCardanoUtxosByLovelace = ({ utxos, targetLovelace, }) => {
12
+ const sorted = [...utxos].sort((a, b) => a.amount > b.amount ? -1 : a.amount < b.amount ? 1 : 0);
13
+ let total = 0n;
14
+ const picked = [];
15
+ for (const u of sorted) {
16
+ if (total >= targetLovelace)
17
+ break;
18
+ picked.push(u);
19
+ total += u.amount;
20
+ }
21
+ return total >= targetLovelace ? picked : null;
22
+ };
23
+ //# sourceMappingURL=selectCardanoUtxosByLovelace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectCardanoUtxosByLovelace.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/cip30/selectCardanoUtxosByLovelace.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAqC,EAC/E,KAAK,EACL,cAAc,GACuB,EAAc,EAAE;IACrD,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACvD,CAAA;IACD,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,MAAM,MAAM,GAAQ,EAAE,CAAA;IACtB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,KAAK,IAAI,cAAc;YAAE,MAAK;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACd,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA;IACnB,CAAC;IACD,OAAO,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAChD,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ /** Low-level result so callers can branch on already-committed (3117) etc. */
2
+ export type SubmitCardanoCborResult = {
3
+ txHash: string | null;
4
+ errorMessage: string | null;
5
+ /** JSON-RPC error code from the node, when present. */
6
+ rpcErrorCode?: number;
7
+ /** Raw response body, for callers that want to log or pattern match. */
8
+ rawResponse: string;
9
+ };
10
+ /**
11
+ * Broadcast a hex-encoded Cardano transaction CBOR via the Vultisig Ogmios JSON-RPC proxy.
12
+ *
13
+ * This low-level helper exposes the raw response so higher-level callers can
14
+ * distinguish "already-committed" (`rpcErrorCode === 3117`), mempool conflicts,
15
+ * etc. For the common "submit or throw" shape, use `submitCardanoCborTx`.
16
+ */
17
+ export declare const submitCardanoCbor: (cborHex: string) => Promise<SubmitCardanoCborResult>;
18
+ //# sourceMappingURL=submitCardanoCbor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitCardanoCbor.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/submit/submitCardanoCbor.ts"],"names":[],"mappings":"AAkBA,8EAA8E;AAC9E,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,KACd,OAAO,CAAC,uBAAuB,CAmEjC,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { rootApiUrl } from '@vultisig/core-config';
2
+ import { extractErrorMsg } from '@vultisig/lib-utils/error/extractErrorMsg';
3
+ import { attempt } from '@vultisig/lib-utils/attempt';
4
+ const cardanoBroadcastUrl = `${rootApiUrl}/ada/`;
5
+ /** Cap a submit at 30s so a hung connection doesn't wedge the signer popup. */
6
+ const cardanoBroadcastTimeoutMs = 30_000;
7
+ const stripHashPrefix = (hash) => hash.replace(/^0x/i, '');
8
+ /**
9
+ * Broadcast a hex-encoded Cardano transaction CBOR via the Vultisig Ogmios JSON-RPC proxy.
10
+ *
11
+ * This low-level helper exposes the raw response so higher-level callers can
12
+ * distinguish "already-committed" (`rpcErrorCode === 3117`), mempool conflicts,
13
+ * etc. For the common "submit or throw" shape, use `submitCardanoCborTx`.
14
+ */
15
+ export const submitCardanoCbor = async (cborHex) => {
16
+ const cleaned = cborHex.replace(/^0x/i, '').toLowerCase();
17
+ // Direct fetch: `queryUrl` auto-runs assertFetchResponse which throws before
18
+ // we can inspect the raw body or status.
19
+ const controller = new AbortController();
20
+ const timeoutId = setTimeout(() => controller.abort(), cardanoBroadcastTimeoutMs);
21
+ const fetchResult = await attempt(() => fetch(cardanoBroadcastUrl, {
22
+ method: 'POST',
23
+ headers: { 'Content-Type': 'application/json' },
24
+ body: JSON.stringify({
25
+ jsonrpc: '2.0',
26
+ method: 'submitTransaction',
27
+ params: { transaction: { cbor: cleaned } },
28
+ id: 1,
29
+ }),
30
+ signal: controller.signal,
31
+ }));
32
+ clearTimeout(timeoutId);
33
+ if ('error' in fetchResult) {
34
+ const timedOut = controller.signal.aborted;
35
+ return {
36
+ txHash: null,
37
+ errorMessage: timedOut
38
+ ? `Cardano broadcast timed out after ${cardanoBroadcastTimeoutMs}ms`
39
+ : extractErrorMsg(fetchResult.error),
40
+ rawResponse: '',
41
+ };
42
+ }
43
+ const response = fetchResult.data;
44
+ const bodyResult = await attempt(() => response.text());
45
+ if ('error' in bodyResult) {
46
+ return {
47
+ txHash: null,
48
+ errorMessage: extractErrorMsg(bodyResult.error),
49
+ rawResponse: '',
50
+ };
51
+ }
52
+ const rawResponse = bodyResult.data;
53
+ const parsedResult = attempt(() => JSON.parse(rawResponse));
54
+ const parsed = 'data' in parsedResult ? parsedResult.data : null;
55
+ const txId = parsed?.result?.transaction?.id;
56
+ if (typeof txId === 'string' && txId.trim()) {
57
+ return {
58
+ txHash: stripHashPrefix(txId.trim()),
59
+ errorMessage: null,
60
+ rpcErrorCode: parsed?.error?.code,
61
+ rawResponse,
62
+ };
63
+ }
64
+ return {
65
+ txHash: null,
66
+ errorMessage: extractErrorMsg(parsed?.error ?? rawResponse),
67
+ rpcErrorCode: parsed?.error?.code,
68
+ rawResponse,
69
+ };
70
+ };
71
+ //# sourceMappingURL=submitCardanoCbor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitCardanoCbor.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cardano/submit/submitCardanoCbor.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { CosmosChain } from '@vultisig/core-chain/Chain';
2
2
  import { ChainAccount } from '@vultisig/core-chain/ChainAccount';
3
3
  export declare const getCosmosAccountInfo: ({ chain, address, }: ChainAccount<CosmosChain>) => Promise<{
4
- latestBlock: string;
5
4
  address: string;
6
5
  pubkey: import("@cosmjs/amino").Pubkey | null;
7
6
  accountNumber: number;
8
7
  sequence: number;
8
+ latestBlock: string;
9
9
  }>;
10
10
  //# sourceMappingURL=getCosmosAccountInfo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAIhE,eAAO,MAAM,oBAAoB,GAAU,qBAGxC,YAAY,CAAC,WAAW,CAAC;;;;;;EAe3B,CAAA"}
1
+ {"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAGhE,eAAO,MAAM,oBAAoB,GAAU,qBAGxC,YAAY,CAAC,WAAW,CAAC;;;;;;EAkB3B,CAAA"}
@@ -1,15 +1,17 @@
1
1
  import { getCosmosClient } from '@vultisig/core-chain/chains/cosmos/client';
2
- import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
3
2
  export const getCosmosAccountInfo = async ({ chain, address, }) => {
4
3
  const client = await getCosmosClient(chain);
5
- const accountInfo = shouldBePresent(await client.getAccount(address));
4
+ const accountInfo = await client.getAccount(address);
6
5
  const block = await client.getBlock();
7
6
  const blockTimestampStr = block.header.time;
8
7
  const blockTimestampNs = BigInt(new Date(blockTimestampStr).getTime()) * 1000000n;
9
8
  const timeoutNs = blockTimestampNs + 600000000000n; // +10 minutes
10
9
  const latestBlock = `${block.header.height}_${timeoutNs}`;
11
10
  return {
12
- ...accountInfo,
11
+ address,
12
+ pubkey: accountInfo?.pubkey ?? null,
13
+ accountNumber: accountInfo?.accountNumber ?? 0,
14
+ sequence: accountInfo?.sequence ?? 0,
13
15
  latestBlock,
14
16
  };
15
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAE5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,KAAK,EACL,OAAO,GACmB,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;IACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IAC3C,MAAM,gBAAgB,GACpB,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAU,CAAA;IAE5D,MAAM,SAAS,GAAG,gBAAgB,GAAG,aAAgB,CAAA,CAAC,cAAc;IACpE,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAA;IAEzD,OAAO;QACL,GAAG,WAAW;QACd,WAAW;KACZ,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAE3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,EACzC,KAAK,EACL,OAAO,GACmB,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;IACrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IAC3C,MAAM,gBAAgB,GACpB,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,QAAU,CAAA;IAE5D,MAAM,SAAS,GAAG,gBAAgB,GAAG,aAAgB,CAAA,CAAC,cAAc;IACpE,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAA;IAEzD,OAAO;QACL,OAAO;QACP,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI;QACnC,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,CAAC;QAC9C,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,CAAC;QACpC,WAAW;KACZ,CAAA;AACH,CAAC,CAAA"}
@@ -5,6 +5,8 @@ type Input = {
5
5
  fiatCurrency?: FiatCurrency;
6
6
  chain: EvmChain;
7
7
  };
8
- export declare const getErc20Prices: ({ ids, fiatCurrency, chain, }: Input) => Promise<Record<string, number>>;
8
+ export declare const getErc20Prices: ({ ids, fiatCurrency, chain, }: Input) => Promise<{
9
+ [k: string]: number;
10
+ }>;
9
11
  export {};
10
12
  //# sourceMappingURL=getErc20Prices.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getErc20Prices.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/price/evm/getErc20Prices.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAuB,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAOtF,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAkBD,eAAO,MAAM,cAAc,GAAU,+BAIlC,KAAK,oCAUP,CAAA"}
1
+ {"version":3,"file":"getErc20Prices.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/price/evm/getErc20Prices.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAuB,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAOtF,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAkBD,eAAO,MAAM,cAAc,GAAU,+BAIlC,KAAK;;EAcP,CAAA"}
@@ -24,9 +24,12 @@ export const getErc20Prices = async ({ ids, fiatCurrency = defaultFiatCurrency,
24
24
  contract_addresses: ids.join(','),
25
25
  vs_currencies: fiatCurrency,
26
26
  });
27
- return queryCoingeickoPrices({
27
+ const prices = await queryCoingeickoPrices({
28
28
  url,
29
29
  fiatCurrency,
30
30
  });
31
+ // Normalize contract-address keys to lowercase so consumers can do
32
+ // `prices[addr.toLowerCase()]` without depending on upstream casing.
33
+ return Object.fromEntries(Object.entries(prices).map(([k, v]) => [k.toLowerCase(), v]));
31
34
  };
32
35
  //# sourceMappingURL=getErc20Prices.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getErc20Prices.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/price/evm/getErc20Prices.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAgB,MAAM,oCAAoC,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,OAAO,GAAG,GAAG,UAAU,wCAAwC,CAAA;AAQrE,MAAM,gBAAgB,GAA6B;IACjD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC/B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW;IACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc;IACnC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa;IACjC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB;IAC1C,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,qBAAqB;IACrC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ;IAChC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa;IACrC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa;CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,GAAG,EACH,YAAY,GAAG,mBAAmB,EAClC,KAAK,GACC,EAAE,EAAE;IACV,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE;QAClE,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAA;IAEF,OAAO,qBAAqB,CAAC;QAC3B,GAAG;QACH,YAAY;KACb,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"getErc20Prices.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/price/evm/getErc20Prices.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAgB,MAAM,oCAAoC,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,MAAM,OAAO,GAAG,GAAG,UAAU,wCAAwC,CAAA;AAQrE,MAAM,gBAAgB,GAA6B;IACjD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU;IAC/B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW;IACjC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc;IACnC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa;IACjC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB;IAC1C,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,qBAAqB;IACrC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ;IAChC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa;IACrC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa;CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,GAAG,EACH,YAAY,GAAG,mBAAmB,EAClC,KAAK,GACC,EAAE,EAAE;IACV,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE;QAClE,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,aAAa,EAAE,YAAY;KAC5B,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;QACzC,GAAG;QACH,YAAY;KACb,CAAC,CAAA;IAEF,mEAAmE;IACnE,qEAAqE;IACrE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPublicKey.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/publicKey/getPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,mEAM1B,KAAK,sEA2DP,CAAA"}
1
+ {"version":3,"file":"getPublicKey.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/publicKey/getPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAIrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,mEAM1B,KAAK,sEAkEP,CAAA"}
@@ -24,11 +24,17 @@ export const getPublicKey = ({ chain, walletCore, hexChainCode, publicKeys, chai
24
24
  const publicKeyType = getTwPublicKeyType({ walletCore, chain });
25
25
  const derivedPublicKey = chainPublicKey ??
26
26
  match(keysignType, {
27
- ecdsa: () => derivePublicKey({
28
- hexRootPubKey: publicKeys.ecdsa,
29
- hexChainCode: hexChainCode,
30
- path: walletCore.CoinTypeExt.derivationPath(coinType),
31
- }),
27
+ ecdsa: () => {
28
+ const path = walletCore.CoinTypeExt.derivationPath(coinType);
29
+ if (!path) {
30
+ throw new Error(`WalletCore returned empty derivation path (chain=${chain}, coinType=${coinType})`);
31
+ }
32
+ return derivePublicKey({
33
+ hexRootPubKey: publicKeys.ecdsa,
34
+ hexChainCode,
35
+ path,
36
+ });
37
+ },
32
38
  eddsa: () => publicKeys.eddsa,
33
39
  mldsa: () => {
34
40
  throw new Error('MLDSA public key is not derived via ECDSA/EdDSA paths');
@@ -1 +1 @@
1
- {"version":3,"file":"getPublicKey.js","sourceRoot":"","sources":["../../../../../packages/core/chain/publicKey/getPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAGjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAU5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,eAAe,GACT,EAAE,EAAE;IACV,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,UAAU;QACV,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,eAAe,EAAE,CAAC,KAAK,CAAC,CAAA;IAE/C,IACE,eAAe,KAAK,SAAS;QAC7B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,cAAc,EACf,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IAE5D,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IAE/D,MAAM,gBAAgB,GACpB,cAAc;QACd,KAAK,CAAC,WAAW,EAAE;YACjB,KAAK,EAAE,GAAG,EAAE,CACV,eAAe,CAAC;gBACd,aAAa,EAAE,UAAU,CAAC,KAAK;gBAC/B,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC;aACtD,CAAC;YACJ,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK;YAC7B,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;YAC1E,CAAC;SACF,CAAC,CAAA;IAEJ,MAAM,aAAa,GACjB,KAAK,KAAK,KAAK,CAAC,OAAO;QACrB,CAAC,CAAC,uBAAuB,CAAC;YACtB,SAAS,EAAE,gBAAgB;YAC3B,YAAY;SACb,CAAC;QACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAChD,aAAa,EACb,aAAa,CACd,CAAA;IAED,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,YAAY,EAAE,CAAA;IAC9B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"getPublicKey.js","sourceRoot":"","sources":["../../../../../packages/core/chain/publicKey/getPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAA;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAGjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAU5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAC3B,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,eAAe,GACT,EAAE,EAAE;IACV,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,UAAU;QACV,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,eAAe,EAAE,CAAC,KAAK,CAAC,CAAA;IAE/C,IACE,eAAe,KAAK,SAAS;QAC7B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;QACvC,CAAC,cAAc,EACf,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IAE5D,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IAE/D,MAAM,gBAAgB,GACpB,cAAc;QACd,KAAK,CAAC,WAAW,EAAE;YACjB,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,oDAAoD,KAAK,cAAc,QAAQ,GAAG,CACnF,CAAA;gBACH,CAAC;gBACD,OAAO,eAAe,CAAC;oBACrB,aAAa,EAAE,UAAU,CAAC,KAAK;oBAC/B,YAAY;oBACZ,IAAI;iBACL,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK;YAC7B,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;YAC1E,CAAC;SACF,CAAC,CAAA;IAEJ,MAAM,aAAa,GACjB,KAAK,KAAK,KAAK,CAAC,OAAO;QACrB,CAAC,CAAC,uBAAuB,CAAC;YACtB,SAAS,EAAE,gBAAgB;YAC3B,YAAY;SACb,CAAC;QACJ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,cAAc,CAChD,aAAa,EACb,aAAa,CACd,CAAA;IAED,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,YAAY,EAAE,CAAA;IAC9B,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAsDjD,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAClD,UAAU,CAAC,OAAO,CAwDnB,CAAA"}
1
+ {"version":3,"file":"cardano.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/broadcast/resolvers/cardano.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAMvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AASjD,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,CAClD,UAAU,CAAC,OAAO,CA4BnB,CAAA"}