@chainvue/verus-sdk 0.4.1 → 0.5.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 (49) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +31 -0
  3. package/README.md +47 -63
  4. package/dist/VerusSDK.js +7 -7
  5. package/dist/VerusSDK.js.map +1 -1
  6. package/dist/bundle.js +1112 -1030
  7. package/dist/constants/index.d.ts +4 -4
  8. package/dist/constants/index.d.ts.map +1 -1
  9. package/dist/constants/index.js +4 -4
  10. package/dist/constants/index.js.map +1 -1
  11. package/dist/currency/classify.d.ts +1 -1
  12. package/dist/currency/classify.d.ts.map +1 -1
  13. package/dist/currency/index.d.ts.map +1 -1
  14. package/dist/currency/index.js +5 -4
  15. package/dist/currency/index.js.map +1 -1
  16. package/dist/errors.d.ts +8 -3
  17. package/dist/errors.d.ts.map +1 -1
  18. package/dist/errors.js +12 -1
  19. package/dist/errors.js.map +1 -1
  20. package/dist/fork-shims.d.ts +50 -0
  21. package/dist/identity/index.d.ts +8 -8
  22. package/dist/identity/index.d.ts.map +1 -1
  23. package/dist/identity/index.js +29 -29
  24. package/dist/identity/index.js.map +1 -1
  25. package/dist/index.d.ts +3 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +6 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/keys/index.d.ts.map +1 -1
  30. package/dist/keys/index.js +4 -3
  31. package/dist/keys/index.js.map +1 -1
  32. package/dist/signing/index.d.ts +2 -2
  33. package/dist/signing/index.d.ts.map +1 -1
  34. package/dist/signing/index.js +12 -6
  35. package/dist/signing/index.js.map +1 -1
  36. package/dist/transfer/index.d.ts.map +1 -1
  37. package/dist/transfer/index.js +65 -39
  38. package/dist/transfer/index.js.map +1 -1
  39. package/dist/types/index.d.ts +26 -26
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/dist/utils/index.d.ts +24 -5
  42. package/dist/utils/index.d.ts.map +1 -1
  43. package/dist/utils/index.js +71 -11
  44. package/dist/utils/index.js.map +1 -1
  45. package/dist/utxo/index.d.ts +8 -2
  46. package/dist/utxo/index.d.ts.map +1 -1
  47. package/dist/utxo/index.js +58 -31
  48. package/dist/utxo/index.js.map +1 -1
  49. package/package.json +20 -7
@@ -6,7 +6,7 @@ import type { Network } from '../constants/index.js';
6
6
  export interface Utxo {
7
7
  txid: string;
8
8
  outputIndex: number;
9
- satoshis: number;
9
+ satoshis: bigint;
10
10
  script: string;
11
11
  /** Height where this UTXO was created (0 = mempool) */
12
12
  height?: number;
@@ -14,18 +14,18 @@ export interface Utxo {
14
14
  /** Decoded currency values on a UTXO */
15
15
  export interface DecodedUtxo extends Utxo {
16
16
  /** Currency i-address → satoshi amount */
17
- currencyValues: Map<string, number>;
17
+ currencyValues: Map<string, bigint>;
18
18
  }
19
19
  /** Result of UTXO selection */
20
20
  export interface SelectionResult {
21
21
  /** Selected UTXOs */
22
22
  selected: Utxo[];
23
23
  /** Native (VRSC) change in satoshis */
24
- nativeChange: number;
24
+ nativeChange: bigint;
25
25
  /** Currency changes: i-address → satoshi amount */
26
- currencyChanges: Map<string, number>;
26
+ currencyChanges: Map<string, bigint>;
27
27
  /** Estimated fee in satoshis */
28
- fee: number;
28
+ fee: bigint;
29
29
  }
30
30
  /** SDK configuration */
31
31
  export interface VerusSDKConfig {
@@ -35,7 +35,7 @@ export interface VerusSDKConfig {
35
35
  export interface SignedTxResult {
36
36
  signedTx: string;
37
37
  txid: string;
38
- fee: number;
38
+ fee: bigint;
39
39
  }
40
40
  /** Transfer parameters */
41
41
  export interface TransferParams {
@@ -43,7 +43,7 @@ export interface TransferParams {
43
43
  /** Recipient address (R-address) */
44
44
  to: string;
45
45
  /** Amount in satoshis */
46
- amount: number;
46
+ amount: bigint;
47
47
  utxos: Utxo[];
48
48
  changeAddress: string;
49
49
  expiryHeight?: number;
@@ -54,7 +54,7 @@ export interface TransferTokenParams {
54
54
  /** Recipient address (R-address or i-address) */
55
55
  to: string;
56
56
  /** Amount in satoshis */
57
- amount: number;
57
+ amount: bigint;
58
58
  /** Currency i-address */
59
59
  currency: string;
60
60
  /** Address type: 'PKH' (R-address) or 'ID' (i-address) */
@@ -67,7 +67,7 @@ export interface TransferTokenParams {
67
67
  export interface ConvertParams {
68
68
  wif: string;
69
69
  /** Amount in satoshis */
70
- amount: number;
70
+ amount: bigint;
71
71
  /** Source currency i-address */
72
72
  currency: string;
73
73
  /** Target currency i-address */
@@ -82,8 +82,8 @@ export interface ConvertParams {
82
82
  export interface CurrencyOutput {
83
83
  /** Currency i-address (use system ID for native VRSC) */
84
84
  currency: string;
85
- /** Amount in satoshis (as string) */
86
- satoshis: string;
85
+ /** Amount in satoshis */
86
+ satoshis: bigint;
87
87
  /** Recipient address */
88
88
  address: string;
89
89
  /** Address type: 'PKH' (R-address), 'ID' (i-address), 'ETH' (Ethereum) */
@@ -99,7 +99,7 @@ export interface CurrencyOutput {
99
99
  /** Fee currency i-address */
100
100
  feeCurrency?: string;
101
101
  /** Fee amount in satoshis */
102
- feeSatoshis?: string;
102
+ feeSatoshis?: bigint;
103
103
  /** Pre-conversion flag */
104
104
  preconvert?: boolean;
105
105
  }
@@ -114,7 +114,7 @@ export interface SendCurrencyParams {
114
114
  /** Send currency result */
115
115
  export interface SendCurrencyResult extends SignedTxResult {
116
116
  inputsUsed: number;
117
- nativeChange: number;
117
+ nativeChange: bigint;
118
118
  }
119
119
  /** Simple P2PKH build+sign parameters */
120
120
  export interface BuildAndSignParams {
@@ -123,13 +123,13 @@ export interface BuildAndSignParams {
123
123
  txid: string;
124
124
  vout: number;
125
125
  scriptPubKey: string;
126
- amount: number;
126
+ amount: bigint;
127
127
  }>;
128
128
  outputs: Array<{
129
129
  address: string;
130
- amount: number;
130
+ amount: bigint;
131
131
  }>;
132
- fee?: number;
132
+ fee?: bigint;
133
133
  expiryHeight?: number;
134
134
  }
135
135
  /** Commitment data returned from createCommitment */
@@ -169,12 +169,12 @@ export interface RegisterIdentityParams {
169
169
  recoveryAuthority?: string;
170
170
  /** Referral chain: i-addresses tracing referral levels (up to 3) */
171
171
  referralChain?: string[];
172
- /** Registration fee in VRSC satoshis (default: 10000000000 = 100 VRSC) */
173
- registrationFee?: number;
172
+ /** Registration fee in VRSC satoshis (default: 10000000000n = 100 VRSC) */
173
+ registrationFee?: bigint;
174
174
  /** Registration fee in parent currency satoshis (for sub-IDs) */
175
- registrationFeeAmount?: number;
175
+ registrationFeeAmount?: bigint;
176
176
  /** Native import fee in VRSC satoshis (for sub-IDs on fractional currencies) */
177
- nativeImportFee?: number;
177
+ nativeImportFee?: bigint;
178
178
  /** Number of referral levels (default: 3) */
179
179
  referralLevels?: number;
180
180
  expiryHeight?: number;
@@ -182,11 +182,11 @@ export interface RegisterIdentityParams {
182
182
  /** Register identity result */
183
183
  export interface RegisterIdentityResult extends SignedTxResult {
184
184
  identityAddress: string;
185
- registrationFee: number;
185
+ registrationFee: bigint;
186
186
  referralPayments: number;
187
- referralAmountEach: number;
187
+ referralAmountEach: bigint;
188
188
  inputsUsed: number;
189
- nativeChange: number;
189
+ nativeChange: bigint;
190
190
  }
191
191
  /** Update identity parameters */
192
192
  export interface UpdateIdentityParams {
@@ -208,7 +208,7 @@ export interface UpdateIdentityResult extends SignedTxResult {
208
208
  identityAddress: string;
209
209
  operation: string;
210
210
  inputsUsed: number;
211
- nativeChange: number;
211
+ nativeChange: bigint;
212
212
  }
213
213
  /** Lock identity parameters */
214
214
  export interface LockIdentityParams {
@@ -256,7 +256,7 @@ export interface DefineCurrencyParams {
256
256
  identityHex: string;
257
257
  identityUtxo: Utxo;
258
258
  currencyDefScript: string;
259
- currencyDefValue?: number;
259
+ currencyDefValue?: bigint;
260
260
  utxos: Utxo[];
261
261
  changeAddress: string;
262
262
  expiryHeight?: number;
@@ -265,7 +265,7 @@ export interface DefineCurrencyParams {
265
265
  export interface DefineCurrencyResult extends SignedTxResult {
266
266
  identityAddress: string;
267
267
  inputsUsed: number;
268
- nativeChange: number;
268
+ nativeChange: bigint;
269
269
  }
270
270
  /** Sign message parameters */
271
271
  export interface SignMessageParams {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -13,10 +13,29 @@ export declare function writeCompactSize(value: number): Buffer;
13
13
  * Decode an i-address to its 20-byte hash
14
14
  */
15
15
  export declare function iAddressToHash(iAddress: string): Buffer;
16
- /** Convert coin units to satoshis */
17
- export declare function toSatoshis(coins: number): number;
18
- /** Convert satoshis to coin units */
19
- export declare function toCoins(satoshis: number): number;
16
+ /** Number of decimal places in a coin amount */
17
+ export declare const AMOUNT_DECIMALS = 8;
18
+ /** Satoshis per coin unit */
19
+ export declare const SATS_PER_COIN = 100000000n;
20
+ /**
21
+ * Parse a decimal coin-amount string into bigint satoshis. Exact arithmetic
22
+ * only — rejects anything outside the grammar (negative, exponent notation,
23
+ * more than 8 fraction digits, empty, non-numeric) with a typed error.
24
+ */
25
+ export declare function parseSats(decimal: string): bigint;
26
+ /** Convert coin units (decimal string) to satoshis — alias of parseSats */
27
+ export declare function toSatoshis(coins: string): bigint;
28
+ /**
29
+ * Convert satoshis to a decimal coin-unit string (minimal form, trailing
30
+ * fraction zeros trimmed). Exact — never goes through float64.
31
+ */
32
+ export declare function toCoins(satoshis: bigint): string;
33
+ /**
34
+ * Convert bigint satoshis to the `number` that @bitgo/utxo-lib expects at its
35
+ * boundary. The SDK is exact-integer internally; this is the single checked
36
+ * crossing into the signing library, which still models values as float64.
37
+ */
38
+ export declare function toSafeNumber(sats: bigint): number;
20
39
  /**
21
40
  * Convert an R-address or P2SH address to a scriptPubKey Buffer
22
41
  */
@@ -28,7 +47,7 @@ export interface DecodedInput {
28
47
  }
29
48
  /** One output of a signed transaction. `address` is null for smart outputs. */
30
49
  export interface DecodedOutput {
31
- valueSat: number;
50
+ valueSat: bigint;
32
51
  scriptHex: string;
33
52
  /** Base58 address when the script is plain P2PKH/P2SH, else null. */
34
53
  address: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,qCAAqC;AACrC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,qCAAqC;AACrC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAwB7D;AAID,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,SAAS,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAqCpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAID,gDAAgD;AAChD,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,6BAA6B;AAC7B,eAAO,MAAM,aAAa,aAAe,CAAC;AAS1C;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWhD;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA8B7D;AAID,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,SAAS,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAqCpE"}
@@ -6,17 +6,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SATS_PER_COIN = exports.AMOUNT_DECIMALS = void 0;
9
10
  exports.sha256d = sha256d;
10
11
  exports.writeCompactSize = writeCompactSize;
11
12
  exports.iAddressToHash = iAddressToHash;
13
+ exports.parseSats = parseSats;
12
14
  exports.toSatoshis = toSatoshis;
13
15
  exports.toCoins = toCoins;
16
+ exports.toSafeNumber = toSafeNumber;
14
17
  exports.addressToScriptPubKey = addressToScriptPubKey;
15
18
  exports.summarizeSignedTransaction = summarizeSignedTransaction;
16
19
  const crypto_1 = require("crypto");
17
20
  const bs58check_1 = __importDefault(require("bs58check"));
18
21
  const verus_typescript_primitives_1 = require("verus-typescript-primitives");
19
22
  const index_js_1 = require("../constants/index.js");
23
+ const errors_js_1 = require("../errors.js");
20
24
  /**
21
25
  * SHA256d (double SHA-256) of one or more buffers
22
26
  */
@@ -59,19 +63,73 @@ function iAddressToHash(iAddress) {
59
63
  const { hash } = (0, verus_typescript_primitives_1.fromBase58Check)(iAddress);
60
64
  return Buffer.from(hash);
61
65
  }
62
- /** Convert coin units to satoshis */
66
+ // ─── Exact money conversions (bigint satoshis ↔ decimal strings) ─────────
67
+ /** Number of decimal places in a coin amount */
68
+ exports.AMOUNT_DECIMALS = 8;
69
+ /** Satoshis per coin unit */
70
+ exports.SATS_PER_COIN = 100000000n;
71
+ /**
72
+ * Grammar for decimal coin amounts: non-negative, no leading zeros in the
73
+ * integer part, optional `.` with 1–8 fraction digits. No exponents, no
74
+ * signs, no whitespace.
75
+ */
76
+ const DECIMAL_AMOUNT_RE = /^(?:0|[1-9]\d*)(?:\.\d{1,8})?$/;
77
+ /**
78
+ * Parse a decimal coin-amount string into bigint satoshis. Exact arithmetic
79
+ * only — rejects anything outside the grammar (negative, exponent notation,
80
+ * more than 8 fraction digits, empty, non-numeric) with a typed error.
81
+ */
82
+ function parseSats(decimal) {
83
+ if (typeof decimal !== 'string' || !DECIMAL_AMOUNT_RE.test(decimal)) {
84
+ throw new errors_js_1.InvalidAmountError(String(decimal));
85
+ }
86
+ const [whole = '0', fraction = ''] = decimal.split('.');
87
+ return BigInt(whole) * exports.SATS_PER_COIN + BigInt(fraction.padEnd(exports.AMOUNT_DECIMALS, '0'));
88
+ }
89
+ /** Convert coin units (decimal string) to satoshis — alias of parseSats */
63
90
  function toSatoshis(coins) {
64
- return Math.round(coins * 1e8);
91
+ return parseSats(coins);
65
92
  }
66
- /** Convert satoshis to coin units */
93
+ /**
94
+ * Convert satoshis to a decimal coin-unit string (minimal form, trailing
95
+ * fraction zeros trimmed). Exact — never goes through float64.
96
+ */
67
97
  function toCoins(satoshis) {
68
- return satoshis / 1e8;
98
+ const sign = satoshis < 0n ? '-' : '';
99
+ const abs = satoshis < 0n ? -satoshis : satoshis;
100
+ const whole = abs / exports.SATS_PER_COIN;
101
+ const fraction = abs % exports.SATS_PER_COIN;
102
+ if (fraction === 0n)
103
+ return `${sign}${whole}`;
104
+ const fractionStr = fraction
105
+ .toString()
106
+ .padStart(exports.AMOUNT_DECIMALS, '0')
107
+ .replace(/0+$/, '');
108
+ return `${sign}${whole}.${fractionStr}`;
109
+ }
110
+ const MAX_SAFE_SATS = BigInt(Number.MAX_SAFE_INTEGER);
111
+ /**
112
+ * Convert bigint satoshis to the `number` that @bitgo/utxo-lib expects at its
113
+ * boundary. The SDK is exact-integer internally; this is the single checked
114
+ * crossing into the signing library, which still models values as float64.
115
+ */
116
+ function toSafeNumber(sats) {
117
+ if (sats < 0n || sats > MAX_SAFE_SATS) {
118
+ throw new errors_js_1.InvalidAmountError(sats.toString(), 'outside the safe-integer range supported by the underlying signing library');
119
+ }
120
+ return Number(sats);
69
121
  }
70
122
  /**
71
123
  * Convert an R-address or P2SH address to a scriptPubKey Buffer
72
124
  */
73
125
  function addressToScriptPubKey(address) {
74
- const decoded = bs58check_1.default.decode(address);
126
+ let decoded;
127
+ try {
128
+ decoded = bs58check_1.default.decode(address);
129
+ }
130
+ catch (err) {
131
+ throw new errors_js_1.InvalidAddressError(address, err.message);
132
+ }
75
133
  const prefix = decoded[0];
76
134
  const hash = decoded.slice(1);
77
135
  if (prefix === 0x3c) {
@@ -91,7 +149,7 @@ function addressToScriptPubKey(address) {
91
149
  ]);
92
150
  }
93
151
  else {
94
- throw new Error(`Unsupported address prefix: 0x${prefix.toString(16)}. Use sendCurrency for i-address destinations.`);
152
+ throw new errors_js_1.InvalidAddressError(address, `Unsupported address prefix: 0x${(prefix ?? 0).toString(16)}. Use sendCurrency for i-address destinations.`);
95
153
  }
96
154
  }
97
155
  /**
@@ -102,9 +160,11 @@ function addressToScriptPubKey(address) {
102
160
  * transaction parsing.
103
161
  */
104
162
  function summarizeSignedTransaction(hex, network) {
105
- // Lazy require keeps utils' import graph light for non-tx consumers.
106
- // eslint-disable-next-line @typescript-eslint/no-var-requires
107
- const { Transaction, address: addressLib, networks, smarttxs } = require('@bitgo/utxo-lib');
163
+ // Lazy require keeps utils' import graph light for non-tx consumers. The
164
+ // fork's ambient module declaration (bitgo-utxo-lib.d.ts) types the shape.
165
+ // eslint-disable-next-line @typescript-eslint/no-require-imports -- deliberate lazy load; see above
166
+ const utxolib = require('@bitgo/utxo-lib');
167
+ const { Transaction, address: addressLib, networks, smarttxs } = utxolib;
108
168
  const net = network === 'testnet' ? networks.verustest : networks.verus;
109
169
  const chainId = network === 'testnet' ? index_js_1.NETWORK_CONFIG.testnet.chainId : index_js_1.NETWORK_CONFIG.mainnet.chainId;
110
170
  const tx = Transaction.fromHex(hex, net);
@@ -127,14 +187,14 @@ function summarizeSignedTransaction(hex, network) {
127
187
  const unpacked = smarttxs.unpackOutput({ script: out.script, value: out.value }, chainId);
128
188
  const evalCodes = (unpacked.params ?? []).map((p) => p.eval);
129
189
  if (unpacked.destinations.length === 1 && evalCodes.every((code) => code === 0)) {
130
- addr = unpacked.destinations[0];
190
+ addr = unpacked.destinations[0] ?? null;
131
191
  }
132
192
  }
133
193
  catch {
134
194
  addr = null; // exotic CC output — no address form
135
195
  }
136
196
  }
137
- return { valueSat: out.value, scriptHex: out.script.toString('hex'), address: addr };
197
+ return { valueSat: BigInt(out.value), scriptHex: out.script.toString('hex'), address: addr };
138
198
  });
139
199
  return { txid: tx.getId(), inputs, outputs };
140
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -3,19 +3,25 @@
3
3
  *
4
4
  * Selects UTXOs to cover required native + currency amounts,
5
5
  * calculates fees, and determines change outputs.
6
+ *
7
+ * All amounts are bigint satoshis — exact integer arithmetic only.
6
8
  */
7
9
  import type { Utxo, DecodedUtxo, SelectionResult } from '../types/index.js';
8
10
  export type { Utxo, DecodedUtxo, SelectionResult };
9
11
  /**
10
12
  * Decode a UTXO's script to extract currency values
13
+ *
14
+ * Throws TransactionBuildError if a smart output fails to decode — a failed
15
+ * token decode must never be silently reclassified as native-only, because
16
+ * selection would then spend token value it did not account for.
11
17
  */
12
18
  export declare function decodeUtxo(utxo: Utxo, systemId: string): DecodedUtxo;
13
19
  /**
14
20
  * Estimate transaction fee based on input/output counts
15
21
  */
16
- export declare function estimateFee(numInputs: number, numOutputs: number, feePerKb?: number, hasSmartOutputs?: boolean): number;
22
+ export declare function estimateFee(numInputs: number, numOutputs: number, feePerKb?: bigint, hasSmartOutputs?: boolean): bigint;
17
23
  /**
18
24
  * Select UTXOs to cover required amounts
19
25
  */
20
- export declare function selectUtxos(utxos: Utxo[], requiredNative: number, requiredCurrencies?: Map<string, number>, numOutputs?: number, systemId?: string, feePerKb?: number, hasSmartOutputs?: boolean): SelectionResult;
26
+ export declare function selectUtxos(utxos: Utxo[], requiredNative: bigint, requiredCurrencies?: Map<string, bigint>, numOutputs?: number, systemId?: string, feePerKb?: bigint, hasSmartOutputs?: boolean): SelectionResult;
21
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utxo/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK5E,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAQnD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAwBpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAA2B,EACrC,eAAe,GAAE,OAAe,GAC/B,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,kBAAkB,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,EACnD,UAAU,GAAE,MAAU,EACtB,QAAQ,GAAE,MAAuC,EACjD,QAAQ,GAAE,MAA2B,EACrC,eAAe,GAAE,OAAe,GAC/B,eAAe,CA4GjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utxo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK5E,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AA6BnD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CA2BpE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAA2B,EACrC,eAAe,GAAE,OAAe,GAC/B,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,kBAAkB,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAa,EACnD,UAAU,GAAE,MAAU,EACtB,QAAQ,GAAE,MAAuC,EACjD,QAAQ,GAAE,MAA2B,EACrC,eAAe,GAAE,OAAe,GAC/B,eAAe,CA+GjB"}
@@ -4,6 +4,8 @@
4
4
  *
5
5
  * Selects UTXOs to cover required native + currency amounts,
6
6
  * calculates fees, and determines change outputs.
7
+ *
8
+ * All amounts are bigint satoshis — exact integer arithmetic only.
7
9
  */
8
10
  Object.defineProperty(exports, "__esModule", { value: true });
9
11
  exports.decodeUtxo = decodeUtxo;
@@ -12,33 +14,58 @@ exports.selectUtxos = selectUtxos;
12
14
  const utxo_lib_1 = require("@bitgo/utxo-lib");
13
15
  const index_js_1 = require("../constants/index.js");
14
16
  const errors_js_1 = require("../errors.js");
17
+ const index_js_2 = require("../utils/index.js");
15
18
  const { unpackOutput } = utxo_lib_1.smarttxs;
16
19
  // Transaction size estimation constants
17
20
  const INPUT_SIZE = 180;
18
21
  const P2PKH_OUTPUT_SIZE = 34;
19
22
  const SMART_OUTPUT_SIZE = 200;
20
23
  const TX_OVERHEAD = 60;
24
+ /** Absolute fee floor in satoshis */
25
+ const MIN_FEE = 10000n;
26
+ /**
27
+ * True when the script is a Verus smart (CryptoCondition) output. Used to
28
+ * separate "plain script that unpackOutput doesn't model" (fine — native
29
+ * only) from "smart output that failed to decode" (dangerous — the UTXO may
30
+ * carry token value we cannot see).
31
+ */
32
+ function isSmartTransactionScript(script) {
33
+ try {
34
+ const chunks = utxo_lib_1.script.decompile(script);
35
+ if (chunks === null)
36
+ return false;
37
+ return chunks.some((chunk) => typeof chunk === 'number' && chunk === utxo_lib_1.opcodes.OP_CHECKCRYPTOCONDITION);
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
21
43
  /**
22
44
  * Decode a UTXO's script to extract currency values
45
+ *
46
+ * Throws TransactionBuildError if a smart output fails to decode — a failed
47
+ * token decode must never be silently reclassified as native-only, because
48
+ * selection would then spend token value it did not account for.
23
49
  */
24
50
  function decodeUtxo(utxo, systemId) {
25
51
  const currencyValues = new Map();
52
+ const script = Buffer.from(utxo.script, 'hex');
53
+ const nativeValue = (0, index_js_2.toSafeNumber)(utxo.satoshis);
26
54
  try {
27
- const output = {
28
- value: utxo.satoshis,
29
- script: Buffer.from(utxo.script, 'hex'),
30
- };
31
- const unpacked = unpackOutput(output, systemId, true);
55
+ const unpacked = unpackOutput({ value: nativeValue, script }, systemId, true);
32
56
  for (const [currency, value] of Object.entries(unpacked.values)) {
33
- const amount = typeof value === 'number' ? value : value.toNumber();
34
- if (amount > 0) {
57
+ const amount = BigInt(value.toString(10));
58
+ if (amount > 0n) {
35
59
  currencyValues.set(currency, amount);
36
60
  }
37
61
  }
38
62
  }
39
- catch {
40
- // If unpacking fails, treat as native-only
41
- if (utxo.satoshis > 0) {
63
+ catch (err) {
64
+ if (isSmartTransactionScript(script)) {
65
+ throw new errors_js_1.TransactionBuildError(`cannot decode smart output ${utxo.txid}:${utxo.outputIndex}: ${err.message}`);
66
+ }
67
+ // Plain script that unpackOutput doesn't model (e.g. P2SH) — native-only
68
+ if (utxo.satoshis > 0n) {
42
69
  currencyValues.set(systemId, utxo.satoshis);
43
70
  }
44
71
  }
@@ -50,8 +77,8 @@ function decodeUtxo(utxo, systemId) {
50
77
  function estimateFee(numInputs, numOutputs, feePerKb = index_js_1.DEFAULT_FEE_PER_KB, hasSmartOutputs = false) {
51
78
  const outputSize = hasSmartOutputs ? SMART_OUTPUT_SIZE : P2PKH_OUTPUT_SIZE;
52
79
  const txSize = TX_OVERHEAD + numInputs * INPUT_SIZE + numOutputs * outputSize;
53
- const fee = Math.ceil((txSize / 1000) * feePerKb);
54
- return Math.max(fee, 10000);
80
+ const fee = (BigInt(txSize) * feePerKb + 999n) / 1000n; // ceil(txSize * feePerKb / 1000)
81
+ return fee > MIN_FEE ? fee : MIN_FEE;
55
82
  }
56
83
  /**
57
84
  * Select UTXOs to cover required amounts
@@ -70,8 +97,8 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
70
97
  for (const [currency, needed] of remaining) {
71
98
  if (currency === systemId)
72
99
  continue;
73
- const utxoAmount = utxo.currencyValues.get(currency) || 0;
74
- if (utxoAmount > 0 && needed > 0) {
100
+ const utxoAmount = utxo.currencyValues.get(currency) || 0n;
101
+ if (utxoAmount > 0n && needed > 0n) {
75
102
  hasNeededCurrency = true;
76
103
  break;
77
104
  }
@@ -79,20 +106,20 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
79
106
  if (hasNeededCurrency) {
80
107
  selected.push(utxo);
81
108
  for (const [currency, amount] of utxo.currencyValues) {
82
- if (currency === systemId) {
83
- remainingNative -= amount;
84
- }
85
- else {
86
- const needed = remaining.get(currency) || 0;
87
- remaining.set(currency, needed - amount);
88
- }
109
+ // The UTXO's native value is credited once below via utxo.satoshis;
110
+ // unpackOutput also reports it under systemId in currencyValues, so
111
+ // skipping it here avoids double-counting.
112
+ if (currency === systemId)
113
+ continue;
114
+ const needed = remaining.get(currency) || 0n;
115
+ remaining.set(currency, needed - amount);
89
116
  }
90
117
  remainingNative -= utxo.satoshis;
91
118
  }
92
119
  }
93
120
  for (const [currency, needed] of remaining) {
94
- if (currency !== systemId && needed > 0) {
95
- const totalAvailable = decoded.reduce((sum, u) => sum + (u.currencyValues.get(currency) || 0), 0);
121
+ if (currency !== systemId && needed > 0n) {
122
+ const totalAvailable = decoded.reduce((sum, u) => sum + (u.currencyValues.get(currency) || 0n), 0n);
96
123
  throw new errors_js_1.InsufficientFundsError(needed + totalAvailable, totalAvailable, currency);
97
124
  }
98
125
  }
@@ -100,18 +127,18 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
100
127
  // Phase 2: Select UTXOs for native amount + fee
101
128
  const nativeOnly = decoded
102
129
  .filter((u) => !selected.includes(u))
103
- .sort((a, b) => b.satoshis - a.satoshis);
130
+ .sort((a, b) => (b.satoshis > a.satoshis ? 1 : b.satoshis < a.satoshis ? -1 : 0));
104
131
  let changeOutputCount = 0;
105
132
  for (const [currency, needed] of remaining) {
106
- if (currency !== systemId && needed < 0) {
133
+ if (currency !== systemId && needed < 0n) {
107
134
  changeOutputCount++;
108
135
  }
109
136
  }
110
137
  let fee = estimateFee(selected.length + 1, numOutputs + 1 + changeOutputCount, feePerKb, hasSmartOutputs);
111
- while (remainingNative + fee > 0) {
138
+ while (remainingNative + fee > 0n) {
112
139
  const next = nativeOnly.shift();
113
140
  if (!next) {
114
- const totalAvailable = decoded.reduce((sum, u) => sum + u.satoshis, 0);
141
+ const totalAvailable = decoded.reduce((sum, u) => sum + u.satoshis, 0n);
115
142
  throw new errors_js_1.InsufficientFundsError(requiredNative + fee, totalAvailable, 'VRSC');
116
143
  }
117
144
  selected.push(next);
@@ -119,18 +146,18 @@ function selectUtxos(utxos, requiredNative, requiredCurrencies = new Map(), numO
119
146
  fee = estimateFee(selected.length, numOutputs + 1 + changeOutputCount, feePerKb, hasSmartOutputs);
120
147
  }
121
148
  // Calculate change
122
- const totalNativeIn = selected.reduce((sum, u) => sum + u.satoshis, 0);
149
+ const totalNativeIn = selected.reduce((sum, u) => sum + u.satoshis, 0n);
123
150
  const actualNativeChange = totalNativeIn - requiredNative - fee;
124
151
  const currencyChanges = new Map();
125
152
  for (const [currency, needed] of remaining) {
126
- if (currency !== systemId && needed < 0) {
153
+ if (currency !== systemId && needed < 0n) {
127
154
  currencyChanges.set(currency, -needed);
128
155
  }
129
156
  }
130
- const finalNativeChange = actualNativeChange > index_js_1.DUST_THRESHOLD ? actualNativeChange : 0;
157
+ const finalNativeChange = actualNativeChange > index_js_1.DUST_THRESHOLD ? actualNativeChange : 0n;
131
158
  const finalFee = actualNativeChange > index_js_1.DUST_THRESHOLD ? fee : fee + actualNativeChange;
132
159
  return {
133
- selected: selected.map(({ currencyValues, ...utxo }) => utxo),
160
+ selected: selected.map(({ currencyValues: _currencyValues, ...utxo }) => utxo),
134
161
  nativeChange: finalNativeChange,
135
162
  currencyChanges,
136
163
  fee: finalFee,