@vbyte/btc-dev 1.0.10 → 1.0.12

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 (67) hide show
  1. package/dist/index.d.ts +0 -1
  2. package/dist/index.js +0 -1
  3. package/dist/lib/sighash/segwit.d.ts +4 -1
  4. package/dist/lib/sighash/segwit.js +6 -6
  5. package/dist/lib/sighash/taproot.d.ts +7 -6
  6. package/dist/lib/sighash/taproot.js +24 -53
  7. package/dist/lib/sighash/util.d.ts +4 -2
  8. package/dist/lib/sighash/util.js +16 -2
  9. package/dist/lib/signer/sign.js +8 -5
  10. package/dist/lib/signer/verify.d.ts +1 -2
  11. package/dist/lib/signer/verify.js +1 -5
  12. package/dist/lib/tx/create.d.ts +7 -6
  13. package/dist/lib/tx/create.js +25 -27
  14. package/dist/lib/tx/decode.d.ts +4 -9
  15. package/dist/lib/tx/decode.js +16 -28
  16. package/dist/lib/tx/encode.d.ts +1 -1
  17. package/dist/lib/tx/encode.js +6 -6
  18. package/dist/lib/tx/parse.d.ts +3 -2
  19. package/dist/lib/tx/parse.js +38 -5
  20. package/dist/lib/tx/util.d.ts +8 -4
  21. package/dist/lib/tx/util.js +39 -15
  22. package/dist/lib/tx/validate.d.ts +4 -2
  23. package/dist/lib/tx/validate.js +9 -2
  24. package/dist/main.cjs +4049 -4269
  25. package/dist/main.cjs.map +1 -1
  26. package/dist/module.mjs +4040 -4255
  27. package/dist/module.mjs.map +1 -1
  28. package/dist/package.json +2 -2
  29. package/dist/schema/taproot.d.ts +2 -2
  30. package/dist/schema/tx.d.ts +53 -40
  31. package/dist/schema/tx.js +9 -6
  32. package/dist/script.js +8 -8
  33. package/dist/script.js.map +1 -1
  34. package/dist/types/txdata.d.ts +28 -5
  35. package/package.json +2 -2
  36. package/src/index.ts +0 -2
  37. package/src/lib/sighash/segwit.ts +6 -6
  38. package/src/lib/sighash/taproot.ts +40 -70
  39. package/src/lib/sighash/util.ts +25 -3
  40. package/src/lib/signer/sign.ts +9 -5
  41. package/src/lib/signer/verify.ts +1 -18
  42. package/src/lib/tx/create.ts +44 -36
  43. package/src/lib/tx/decode.ts +23 -45
  44. package/src/lib/tx/encode.ts +10 -9
  45. package/src/lib/tx/parse.ts +61 -8
  46. package/src/lib/tx/util.ts +57 -20
  47. package/src/lib/tx/validate.ts +15 -2
  48. package/src/schema/tx.ts +10 -6
  49. package/src/types/txdata.ts +32 -5
  50. package/dist/class/index.d.ts +0 -5
  51. package/dist/class/index.js +0 -5
  52. package/dist/class/signer.d.ts +0 -18
  53. package/dist/class/signer.js +0 -34
  54. package/dist/class/tx.d.ts +0 -51
  55. package/dist/class/tx.js +0 -122
  56. package/dist/class/txin.d.ts +0 -27
  57. package/dist/class/txin.js +0 -59
  58. package/dist/class/txout.d.ts +0 -16
  59. package/dist/class/txout.js +0 -31
  60. package/dist/class/witness.d.ts +0 -23
  61. package/dist/class/witness.js +0 -68
  62. package/src/class/index.ts +0 -5
  63. package/src/class/signer.ts +0 -49
  64. package/src/class/tx.ts +0 -175
  65. package/src/class/txin.ts +0 -81
  66. package/src/class/txout.ts +0 -50
  67. package/src/class/witness.ts +0 -99
@@ -1,7 +1,10 @@
1
+ import { Buff } from '@vbyte/buff';
2
+ import { Test } from '@vbyte/micro-lib';
3
+ import { Assert } from '@vbyte/micro-lib/assert';
1
4
  import { hash256 } from '@vbyte/micro-lib/hash';
2
- import { LOCK_SCRIPT_REGEX } from '../../const.js';
3
5
  import { encode_tx } from './encode.js';
4
- import { parse_tx } from './parse.js';
6
+ import { assert_tx_template } from './validate.js';
7
+ import { DEFAULT, LOCK_SCRIPT_REGEX } from '../../const.js';
5
8
  export function is_return_script(script) {
6
9
  return script.startsWith('6a');
7
10
  }
@@ -21,28 +24,49 @@ export function get_vout_type(script) {
21
24
  export function get_vout_version(script) {
22
25
  const wit_ver = script.slice(0, 4);
23
26
  switch (wit_ver) {
24
- case '0014':
25
- return 0;
26
- case '5120':
27
- return 1;
28
- default:
29
- return null;
27
+ case '0014': return 0;
28
+ case '5120': return 1;
29
+ default: return null;
30
30
  }
31
31
  }
32
32
  export function get_txid(txdata) {
33
- const json = parse_tx(txdata);
34
- const data = encode_tx(json, false);
33
+ assert_tx_template(txdata);
34
+ const data = encode_tx(txdata, false);
35
35
  return hash256(data).reverse().hex;
36
36
  }
37
37
  export function get_txhash(txdata) {
38
- const json = parse_tx(txdata);
39
- const data = encode_tx(json, true);
38
+ assert_tx_template(txdata);
39
+ const data = encode_tx(txdata, true);
40
40
  return hash256(data).reverse().hex;
41
41
  }
42
42
  export function get_tx_value(txdata) {
43
- const tx = parse_tx(txdata);
44
- const vin = tx.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n);
45
- const vout = tx.vout.reduce((acc, txout) => acc + txout.value, 0n);
43
+ const vin = txdata.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n);
44
+ const vout = txdata.vout.reduce((acc, txout) => acc + txout.value, 0n);
46
45
  const fees = (vin > vout) ? (vin - vout) : 0n;
47
46
  return { fees, vin, vout };
48
47
  }
48
+ export function get_prevouts(txdata) {
49
+ assert_tx_template(txdata);
50
+ const prevouts = txdata.vin.map(e => e.prevout);
51
+ Assert.ok(prevouts.every(e => e !== null), 'prevouts missing from tx');
52
+ return prevouts;
53
+ }
54
+ export function normalize_sequence(sequence) {
55
+ if (!Test.exists(sequence))
56
+ return DEFAULT.SEQUENCE;
57
+ if (Test.is_hex(sequence))
58
+ return Buff.hex(sequence, 4).reverse().num;
59
+ if (Test.is_uint(sequence))
60
+ return sequence;
61
+ throw new Error('invalid sequence value: ' + String(sequence));
62
+ }
63
+ export function normalize_value(value) {
64
+ if (Test.is_uint(value))
65
+ return BigInt(value);
66
+ if (typeof value === 'bigint')
67
+ return value;
68
+ throw new TypeError('invalid output value: ' + String(value));
69
+ }
70
+ export function normalize_prevout(prevout) {
71
+ return { script_pk: prevout.script_pk, value: normalize_value(prevout.value) };
72
+ }
@@ -1,7 +1,9 @@
1
- import { TxSpendInput, TxData, TxInput, TxInputTemplate, TxOutput, TxTemplate } from '../../types/index.js';
1
+ import { TxSpendInput, TxData, TxInput, TxInputTemplate, TxOutput, TxTemplate, TxOutputTemplate, TxSpendData } from '../../types/index.js';
2
2
  export declare function assert_tx_template(txdata: unknown): asserts txdata is TxTemplate;
3
3
  export declare function assert_has_prevouts(vin: TxInput[]): asserts vin is TxSpendInput[];
4
4
  export declare function assert_tx_data(txdata: unknown): asserts txdata is TxData;
5
+ export declare function assert_tx_spend_data(txdata: unknown): asserts txdata is TxSpendData;
5
6
  export declare function assert_tx_input(tx_input: unknown): asserts tx_input is TxInput;
6
7
  export declare function assert_tx_output(tx_output: unknown): asserts tx_output is TxOutput;
7
- export declare function assert_vin_template(vin_template: unknown): asserts vin_template is TxInputTemplate;
8
+ export declare function assert_vin_template(vin: unknown): asserts vin is TxInputTemplate;
9
+ export declare function assert_vout_template(vout: unknown): asserts vout is TxOutputTemplate;
@@ -10,12 +10,19 @@ export function assert_has_prevouts(vin) {
10
10
  export function assert_tx_data(txdata) {
11
11
  Schema.tx.tx_data.parse(txdata);
12
12
  }
13
+ export function assert_tx_spend_data(txdata) {
14
+ assert_tx_data(txdata);
15
+ assert_has_prevouts(txdata.vin);
16
+ }
13
17
  export function assert_tx_input(tx_input) {
14
18
  Schema.tx.tx_input.parse(tx_input);
15
19
  }
16
20
  export function assert_tx_output(tx_output) {
17
21
  Schema.tx.tx_output.parse(tx_output);
18
22
  }
19
- export function assert_vin_template(vin_template) {
20
- Schema.tx.vin_template.parse(vin_template);
23
+ export function assert_vin_template(vin) {
24
+ Schema.tx.vin_template.parse(vin);
25
+ }
26
+ export function assert_vout_template(vout) {
27
+ Schema.tx.vout_template.parse(vout);
21
28
  }