@bitgo-beta/unspents 0.13.2-beta.9 → 0.13.2-beta.91

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 (56) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/bin/generate_tables.ts +94 -0
  3. package/dist/bin/generate_tables.d.ts +2 -0
  4. package/dist/bin/generate_tables.d.ts.map +1 -0
  5. package/dist/bin/generate_tables.js +94 -0
  6. package/dist/{codes.d.ts → src/codes.d.ts} +1 -0
  7. package/dist/src/codes.d.ts.map +1 -0
  8. package/dist/src/codes.js +168 -0
  9. package/dist/{dimensions.d.ts → src/dimensions.d.ts} +6 -7
  10. package/dist/src/dimensions.d.ts.map +1 -0
  11. package/dist/src/dimensions.js +485 -0
  12. package/dist/{index.d.ts → src/index.d.ts} +1 -0
  13. package/dist/src/index.d.ts.map +1 -0
  14. package/dist/{index.js → src/index.js} +1 -1
  15. package/dist/{inputWeights.d.ts → src/inputWeights.d.ts} +1 -0
  16. package/dist/src/inputWeights.d.ts.map +1 -0
  17. package/dist/src/inputWeights.js +97 -0
  18. package/dist/{scriptSizes.d.ts → src/scriptSizes.d.ts} +1 -0
  19. package/dist/src/scriptSizes.d.ts.map +1 -0
  20. package/dist/src/scriptSizes.js +51 -0
  21. package/dist/{types.d.ts → src/types.d.ts} +1 -0
  22. package/dist/src/types.d.ts.map +1 -0
  23. package/dist/{types.js → src/types.js} +1 -1
  24. package/dist/{virtualSizes.d.ts → src/virtualSizes.d.ts} +1 -0
  25. package/dist/src/virtualSizes.d.ts.map +1 -0
  26. package/dist/src/virtualSizes.js +114 -0
  27. package/dist/test/chain.d.ts +2 -0
  28. package/dist/test/chain.d.ts.map +1 -0
  29. package/dist/test/chain.js +92 -0
  30. package/dist/test/dimensions.d.ts +2 -0
  31. package/dist/test/dimensions.d.ts.map +1 -0
  32. package/dist/test/dimensions.js +211 -0
  33. package/dist/test/signedTx/inputWeights.d.ts +2 -0
  34. package/dist/test/signedTx/inputWeights.d.ts.map +1 -0
  35. package/dist/test/signedTx/inputWeights.js +113 -0
  36. package/dist/test/signedTx/txCombinations.d.ts +3 -0
  37. package/dist/test/signedTx/txCombinations.d.ts.map +1 -0
  38. package/dist/test/signedTx/txCombinations.js +116 -0
  39. package/dist/test/signedTx/txGen.d.ts +75 -0
  40. package/dist/test/signedTx/txGen.d.ts.map +1 -0
  41. package/dist/test/signedTx/txGen.js +219 -0
  42. package/dist/test/testutils.d.ts +36 -0
  43. package/dist/test/testutils.d.ts.map +1 -0
  44. package/dist/test/testutils.js +176 -0
  45. package/dist/test/virtualSizes.d.ts +2 -0
  46. package/dist/test/virtualSizes.d.ts.map +1 -0
  47. package/dist/test/virtualSizes.js +18 -0
  48. package/dist/tsconfig.build.tsbuildinfo +1 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -0
  50. package/docs/input-costs.md +13 -0
  51. package/package.json +5 -5
  52. package/dist/codes.js +0 -168
  53. package/dist/dimensions.js +0 -490
  54. package/dist/inputWeights.js +0 -97
  55. package/dist/scriptSizes.js +0 -51
  56. package/dist/virtualSizes.js +0 -114
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * Defines input sizes for BitGo signature scripts.
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.inputComponentsP2shP2pk = exports.inputComponentsP2trScriptSpendLevel2 = exports.inputComponentsP2trScriptSpendLevel1 = exports.inputComponentsP2trKeySpend = exports.inputComponentsP2wsh = exports.inputComponentsP2shP2wsh = exports.inputComponentsP2sh = exports.getInputComponentsWeight = exports.getInputWeight = exports.getInputByteLength = exports.varSliceSize = void 0;
10
+ const varuint_bitcoin_1 = __importDefault(require("varuint-bitcoin"));
11
+ function varSliceSize(someScript) {
12
+ const length = someScript.length;
13
+ return varuint_bitcoin_1.default.encodingLength(length) + length;
14
+ }
15
+ exports.varSliceSize = varSliceSize;
16
+ function vectorSize(someVector) {
17
+ const length = someVector.length;
18
+ return (varuint_bitcoin_1.default.encodingLength(length) +
19
+ someVector.reduce((sum, witness) => {
20
+ return sum + varSliceSize(witness);
21
+ }, 0));
22
+ }
23
+ function getInputByteLength(input, allowWitness) {
24
+ return (40 /* inputId(32), index(4), nSequence(4) */ +
25
+ varSliceSize(input.script) +
26
+ (allowWitness ? vectorSize(input.witness) : 0));
27
+ }
28
+ exports.getInputByteLength = getInputByteLength;
29
+ function getInputWeight(input) {
30
+ return 3 * getInputByteLength(input, false) + getInputByteLength(input, true);
31
+ }
32
+ exports.getInputWeight = getInputWeight;
33
+ function getInputComponentsWeight(c) {
34
+ const scriptSize = c.script.reduce((a, b) => a + b, 0);
35
+ return getInputWeight({
36
+ script: { length: scriptSize },
37
+ witness: c.witness.map((v) => ({ length: v })),
38
+ });
39
+ }
40
+ exports.getInputComponentsWeight = getInputComponentsWeight;
41
+ const opSize = 1;
42
+ const op0Size = opSize;
43
+ const opPushSize = opSize;
44
+ const opCheckSigVerifySize = opSize;
45
+ const opCheckSigSize = opSize;
46
+ const ecdsaSignatureSize = 72;
47
+ const schnorrPubkeySize = 32;
48
+ const schnorrSignatureNoSighashSize = 64;
49
+ const p2msPubScriptSize = 105;
50
+ const p2wshPubScriptSize = 34;
51
+ const p2pkPubScriptSize = 35;
52
+ function p2trScriptSpend(level) {
53
+ return [
54
+ schnorrSignatureNoSighashSize,
55
+ schnorrSignatureNoSighashSize,
56
+ opPushSize + schnorrPubkeySize + opCheckSigSize + opPushSize + schnorrPubkeySize + opCheckSigVerifySize,
57
+ /* header byte */ 1 + /* inner key */ 32 + /* inner leaf */ 32 * level,
58
+ ];
59
+ }
60
+ function p2msSigScriptSize(witness) {
61
+ return [
62
+ witness ? 0 : op0Size,
63
+ (witness ? 0 : opPushSize) + ecdsaSignatureSize,
64
+ (witness ? 0 : opPushSize) + ecdsaSignatureSize,
65
+ (witness ? 0 : /* OP_PUSHDATA2 */ opPushSize + 1) + p2msPubScriptSize,
66
+ ];
67
+ }
68
+ exports.inputComponentsP2sh = {
69
+ script: p2msSigScriptSize(false),
70
+ witness: [],
71
+ };
72
+ exports.inputComponentsP2shP2wsh = {
73
+ script: [opSize + p2wshPubScriptSize],
74
+ witness: p2msSigScriptSize(true),
75
+ };
76
+ exports.inputComponentsP2wsh = {
77
+ script: [],
78
+ witness: p2msSigScriptSize(true),
79
+ };
80
+ // See: https://murchandamus.medium.com/2-of-3-multisig-inputs-using-pay-to-taproot-d5faf2312ba3
81
+ exports.inputComponentsP2trKeySpend = {
82
+ script: [],
83
+ witness: [schnorrSignatureNoSighashSize],
84
+ };
85
+ exports.inputComponentsP2trScriptSpendLevel1 = {
86
+ script: [],
87
+ witness: p2trScriptSpend(1),
88
+ };
89
+ exports.inputComponentsP2trScriptSpendLevel2 = {
90
+ script: [],
91
+ witness: p2trScriptSpend(2),
92
+ };
93
+ exports.inputComponentsP2shP2pk = {
94
+ script: [opPushSize + ecdsaSignatureSize, opPushSize + p2pkPubScriptSize],
95
+ witness: [],
96
+ };
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRXZWlnaHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lucHV0V2VpZ2h0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7OztBQUVILHNFQUFzQztBQUV0QyxTQUFnQixZQUFZLENBQUMsVUFBaUI7SUFDNUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUVqQyxPQUFPLHlCQUFPLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxDQUFDO0FBSkQsb0NBSUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUFtQjtJQUNyQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBRWpDLE9BQU8sQ0FDTCx5QkFBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNqQyxPQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNOLENBQUM7QUFDSixDQUFDO0FBV0QsU0FBZ0Isa0JBQWtCLENBQUMsS0FBWSxFQUFFLFlBQXFCO0lBQ3BFLE9BQU8sQ0FDTCxFQUFFLENBQUMseUNBQXlDO1FBQzVDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzFCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0MsQ0FBQztBQUNKLENBQUM7QUFORCxnREFNQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFZO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENB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QUFDO0FBRVcsUUFBQSxvQ0FBb0MsR0FBb0I7SUFDbkUsTUFBTSxFQUFFLEVBQUU7SUFDVixPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztDQUM1QixDQUFDO0FBRVcsUUFBQSx1QkFBdUIsR0FBb0I7SUFDdEQsTUFBTSxFQUFFLENBQUMsVUFBVSxHQUFHLGtCQUFrQixFQUFFLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQztJQUN6RSxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluZXMgaW5wdXQgc2l6ZXMgZm9yIEJpdEdvIHNpZ25hdHVyZSBzY3JpcHRzLlxuICovXG5cbmltcG9ydCB2YXJ1aW50IGZyb20gJ3ZhcnVpbnQtYml0Y29pbic7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJTbGljZVNpemUoc29tZVNjcmlwdDogU2l6ZWQpOiBudW1iZXIge1xuICBjb25zdCBsZW5ndGggPSBzb21lU2NyaXB0Lmxlbmd0aDtcblxuICByZXR1cm4gdmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICsgbGVuZ3RoO1xufVxuXG5mdW5jdGlvbiB2ZWN0b3JTaXplKHNvbWVWZWN0b3I6IFNpemVkW10pOiBudW1iZXIge1xuICBjb25zdCBsZW5ndGggPSBzb21lVmVjdG9yLmxlbmd0aDtcblxuICByZXR1cm4gKFxuICAgIHZhcnVpbnQuZW5jb2RpbmdMZW5ndGgobGVuZ3RoKSArXG4gICAgc29tZVZlY3Rvci5yZWR1Y2UoKHN1bSwgd2l0bmVzcykgPT4ge1xuICAgICAgcmV0dXJuIHN1bSArIHZhclNsaWNlU2l6ZSh3aXRuZXNzKTtcbiAgICB9LCAwKVxuICApO1xufVxuXG5leHBvcnQgdHlwZSBTaXplZCA9IHtcbiAgbGVuZ3RoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJbnB1dCA9IHtcbiAgc2NyaXB0OiBTaXplZDtcbiAgd2l0bmVzczogU2l6ZWRbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dEJ5dGVMZW5ndGgoaW5wdXQ6IElucHV0LCBhbGxvd1dpdG5lc3M6IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIDQwIC8qIGlucHV0SWQoMzIpLCBpbmRleCg0KSwgblNlcXVlbmNlKDQpICovICtcbiAgICB2YXJTbGljZVNpemUoaW5wdXQuc2NyaXB0KSArXG4gICAgKGFsbG93V2l0bmVzcyA/IHZlY3RvclNpemUoaW5wdXQud2l0bmVzcykgOiAwKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRXZWlnaHQoaW5wdXQ6IElucHV0KTogbnVtYmVyIHtcbiAgcmV0dXJuIDMgKiBnZXRJbnB1dEJ5dGVMZW5ndGgoaW5wdXQsIGZhbHNlKSArIGdldElucHV0Qnl0ZUxlbmd0aChpbnB1dCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCB0eXBlIElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBudW1iZXJbXTtcbiAgd2l0bmVzczogbnVtYmVyW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRDb21wb25lbnRzV2VpZ2h0KGM6IElucHV0Q29tcG9uZW50cyk6IG51bWJlciB7XG4gIGNvbnN0IHNjcmlwdFNpemUgPSBjLnNjcmlwdC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgcmV0dXJuIGdldElucHV0V2VpZ2h0KHtcbiAgICBzY3JpcHQ6IHsgbGVuZ3RoOiBzY3JpcHRTaXplIH0sXG4gICAgd2l0bmVzczogYy53aXRuZXNzLm1hcCgodikgPT4gKHsgbGVuZ3RoOiB2IH0pKSxcbiAgfSk7XG59XG5cbmNvbnN0IG9wU2l6ZSA9IDE7XG5jb25zdCBvcDBTaXplID0gb3BTaXplO1xuY29uc3Qgb3BQdXNoU2l6ZSA9IG9wU2l6ZTtcbmNvbnN0IG9wQ2hlY2tTaWdWZXJpZnlTaXplID0gb3BTaXplO1xuY29uc3Qgb3BDaGVja1NpZ1NpemUgPSBvcFNpemU7XG5jb25zdCBlY2RzYVNpZ25hdHVyZVNpemUgPSA3MjtcbmNvbnN0IHNjaG5vcnJQdWJrZXlTaXplID0gMzI7XG5jb25zdCBzY2hub3JyU2lnbmF0dXJlTm9TaWdoYXNoU2l6ZSA9IDY0O1xuY29uc3QgcDJtc1B1YlNjcmlwdFNpemUgPSAxMDU7XG5jb25zdCBwMndzaFB1YlNjcmlwdFNpemUgPSAzNDtcbmNvbnN0IHAycGtQdWJTY3JpcHRTaXplID0gMzU7XG5cbmZ1bmN0aW9uIHAydHJTY3JpcHRTcGVuZChsZXZlbDogMSB8IDIpOiBudW1iZXJbXSB7XG4gIHJldHVybiBbXG4gICAgc2Nobm9yclNpZ25hdHVyZU5vU2lnaGFzaFNpemUsXG4gICAgc2Nobm9yclNpZ25hdHVyZU5vU2lnaGFzaFNpemUsXG4gICAgb3BQdXNoU2l6ZSArIHNjaG5vcnJQdWJrZXlTaXplICsgb3BDaGVja1NpZ1NpemUgKyBvcFB1c2hTaXplICsgc2Nobm9yclB1YmtleVNpemUgKyBvcENoZWNrU2lnVmVyaWZ5U2l6ZSxcbiAgICAvKiBoZWFkZXIgYnl0ZSAqLyAxICsgLyogaW5uZXIga2V5ICovIDMyICsgLyogaW5uZXIgbGVhZiAqLyAzMiAqIGxldmVsLFxuICBdO1xufVxuXG5mdW5jdGlvbiBwMm1zU2lnU2NyaXB0U2l6ZSh3aXRuZXNzOiBib29sZWFuKSB7XG4gIHJldHVybiBbXG4gICAgd2l0bmVzcyA/IDAgOiBvcDBTaXplLFxuICAgICh3aXRuZXNzID8gMCA6IG9wUHVzaFNpemUpICsgZWNkc2FTaWduYXR1cmVTaXplLFxuICAgICh3aXRuZXNzID8gMCA6IG9wUHVzaFNpemUpICsgZWNkc2FTaWduYXR1cmVTaXplLFxuICAgICh3aXRuZXNzID8gMCA6IC8qIE9QX1BVU0hEQVRBMiAqLyBvcFB1c2hTaXplICsgMSkgKyBwMm1zUHViU2NyaXB0U2l6ZSxcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1Ayc2g6IElucHV0Q29tcG9uZW50cyA9IHtcbiAgc2NyaXB0OiBwMm1zU2lnU2NyaXB0U2l6ZShmYWxzZSksXG4gIHdpdG5lc3M6IFtdLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1Ayc2hQMndzaDogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtvcFNpemUgKyBwMndzaFB1YlNjcmlwdFNpemVdLFxuICB3aXRuZXNzOiBwMm1zU2lnU2NyaXB0U2l6ZSh0cnVlKSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMndzaDogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtdLFxuICB3aXRuZXNzOiBwMm1zU2lnU2NyaXB0U2l6ZSh0cnVlKSxcbn07XG5cbi8vIFNlZTogaHR0cHM6Ly9tdXJjaGFuZGFtdXMubWVkaXVtLmNvbS8yLW9mLTMtbXVsdGlzaWctaW5wdXRzLXVzaW5nLXBheS10by10YXByb290LWQ1ZmFmMjMxMmJhM1xuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1AydHJLZXlTcGVuZDogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtdLFxuICB3aXRuZXNzOiBbc2Nobm9yclNpZ25hdHVyZU5vU2lnaGFzaFNpemVdLFxufTtcblxuZXhwb3J0IGNvbnN0IGlucHV0Q29tcG9uZW50c1AydHJTY3JpcHRTcGVuZExldmVsMTogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtdLFxuICB3aXRuZXNzOiBwMnRyU2NyaXB0U3BlbmQoMSksXG59O1xuXG5leHBvcnQgY29uc3QgaW5wdXRDb21wb25lbnRzUDJ0clNjcmlwdFNwZW5kTGV2ZWwyOiBJbnB1dENvbXBvbmVudHMgPSB7XG4gIHNjcmlwdDogW10sXG4gIHdpdG5lc3M6IHAydHJTY3JpcHRTcGVuZCgyKSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnB1dENvbXBvbmVudHNQMnNoUDJwazogSW5wdXRDb21wb25lbnRzID0ge1xuICBzY3JpcHQ6IFtvcFB1c2hTaXplICsgZWNkc2FTaWduYXR1cmVTaXplLCBvcFB1c2hTaXplICsgcDJwa1B1YlNjcmlwdFNpemVdLFxuICB3aXRuZXNzOiBbXSxcbn07XG4iXX0=
@@ -10,3 +10,4 @@ export declare function pushdataEncodingLength(i: number): number;
10
10
  * @return {number} - The compact size the integer requires when serialized in a transaction
11
11
  */
12
12
  export declare function compactSize(integer: number): number;
13
+ //# sourceMappingURL=scriptSizes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptSizes.d.ts","sourceRoot":"","sources":["../../src/scriptSizes.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBxD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcnD"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compactSize = exports.pushdataEncodingLength = void 0;
4
+ const types_1 = require("./types");
5
+ /**
6
+ * Overhead size for a pushdata element in a script
7
+ * @param i
8
+ */
9
+ function pushdataEncodingLength(i) {
10
+ /*
11
+ * https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#push-operators
12
+ * Pushing any other byte sequence up to 75 bytes must use the normal data push (opcode byte n, with n the number of bytes, followed n bytes of data being pushed).
13
+ * Pushing 76 to 255 bytes must use OP_PUSHDATA1.
14
+ * Pushing 256 to 520 bytes must use OP_PUSHDATA2.
15
+ * OP_PUSHDATA4 can never be used, as pushes over 520 bytes are not allowed, and those below can be done using other operators.
16
+ */
17
+ if (i < 76) {
18
+ return 1;
19
+ }
20
+ if (i < 255) {
21
+ return 2;
22
+ }
23
+ if (i < 520) {
24
+ return 3;
25
+ }
26
+ throw new Error(`invalid pushdata size`);
27
+ }
28
+ exports.pushdataEncodingLength = pushdataEncodingLength;
29
+ /**
30
+ * https://developer.bitcoin.org/reference/transactions.html#compactsize-unsigned-integers
31
+ * https://github.com/bitcoinjs/varuint-bitcoin/blob/1d5b253/index.js#L79
32
+ * @param integer
33
+ * @return {number} - The compact size the integer requires when serialized in a transaction
34
+ */
35
+ function compactSize(integer) {
36
+ if (!types_1.PositiveInteger.is(integer)) {
37
+ throw new TypeError(`expected positive integer`);
38
+ }
39
+ if (integer <= 252) {
40
+ return 1;
41
+ }
42
+ if (integer <= 0xffff) {
43
+ return 3;
44
+ }
45
+ if (integer <= 0xffffffff) {
46
+ return 5;
47
+ }
48
+ return 9;
49
+ }
50
+ exports.compactSize = compactSize;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0U2l6ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0U2l6ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTBDO0FBRTFDOzs7R0FHRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLENBQVM7SUFDOUM7Ozs7OztPQU1HO0lBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ1YsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUNYLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7UUFDWCxPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFsQkQsd0RBa0JDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBZTtJQUN6QyxJQUFJLENBQUMsdUJBQWUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTSxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7SUFDRCxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUU7UUFDckIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtRQUN6QixPQUFPLENBQUMsQ0FBQztLQUNWO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBZEQsa0NBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3NpdGl2ZUludGVnZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPdmVyaGVhZCBzaXplIGZvciBhIHB1c2hkYXRhIGVsZW1lbnQgaW4gYSBzY3JpcHRcbiAqIEBwYXJhbSBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoZGF0YUVuY29kaW5nTGVuZ3RoKGk6IG51bWJlcik6IG51bWJlciB7XG4gIC8qXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAwNjIubWVkaWF3aWtpI3B1c2gtb3BlcmF0b3JzXG4gICAqIFB1c2hpbmcgYW55IG90aGVyIGJ5dGUgc2VxdWVuY2UgdXAgdG8gNzUgYnl0ZXMgbXVzdCB1c2UgdGhlIG5vcm1hbCBkYXRhIHB1c2ggKG9wY29kZSBieXRlIG4sIHdpdGggbiB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBmb2xsb3dlZCBuIGJ5dGVzIG9mIGRhdGEgYmVpbmcgcHVzaGVkKS5cbiAgICogUHVzaGluZyA3NiB0byAyNTUgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEExLlxuICAgKiBQdXNoaW5nIDI1NiB0byA1MjAgYnl0ZXMgbXVzdCB1c2UgT1BfUFVTSERBVEEyLlxuICAgKiBPUF9QVVNIREFUQTQgY2FuIG5ldmVyIGJlIHVzZWQsIGFzIHB1c2hlcyBvdmVyIDUyMCBieXRlcyBhcmUgbm90IGFsbG93ZWQsIGFuZCB0aG9zZSBiZWxvdyBjYW4gYmUgZG9uZSB1c2luZyBvdGhlciBvcGVyYXRvcnMuXG4gICAqL1xuICBpZiAoaSA8IDc2KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGkgPCAyNTUpIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuICBpZiAoaSA8IDUyMCkge1xuICAgIHJldHVybiAzO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdXNoZGF0YSBzaXplYCk7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYml0Y29pbi5vcmcvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy5odG1sI2NvbXBhY3RzaXplLXVuc2lnbmVkLWludGVnZXJzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL3ZhcnVpbnQtYml0Y29pbi9ibG9iLzFkNWIyNTMvaW5kZXguanMjTDc5XG4gKiBAcGFyYW0gaW50ZWdlclxuICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBjb21wYWN0IHNpemUgdGhlIGludGVnZXIgcmVxdWlyZXMgd2hlbiBzZXJpYWxpemVkIGluIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RTaXplKGludGVnZXI6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghUG9zaXRpdmVJbnRlZ2VyLmlzKGludGVnZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgZXhwZWN0ZWQgcG9zaXRpdmUgaW50ZWdlcmApO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDI1Mikge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZikge1xuICAgIHJldHVybiAzO1xuICB9XG4gIGlmIChpbnRlZ2VyIDw9IDB4ZmZmZmZmZmYpIHtcbiAgICByZXR1cm4gNTtcbiAgfVxuICByZXR1cm4gOTtcbn1cbiJdfQ==
@@ -1,2 +1,3 @@
1
1
  import * as t from 'tcomb';
2
2
  export declare const PositiveInteger: t.Refinement<number>;
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,eAAe,sBAA4D,CAAC"}
@@ -22,4 +22,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.PositiveInteger = void 0;
23
23
  const t = __importStar(require("tcomb"));
24
24
  exports.PositiveInteger = t.refinement(t.Integer, (n) => n >= 0, 'PositiveInteger');
25
- //# sourceMappingURL=types.js.map
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUVkLFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdCBmcm9tICd0Y29tYic7XG5cbmV4cG9ydCBjb25zdCBQb3NpdGl2ZUludGVnZXIgPSB0LnJlZmluZW1lbnQodC5JbnRlZ2VyLCAobikgPT4gbiA+PSAwLCAnUG9zaXRpdmVJbnRlZ2VyJyk7XG4iXX0=
@@ -22,3 +22,4 @@ export declare const VirtualSizes: Readonly<{
22
22
  txOverheadSize: number;
23
23
  txSegOverheadVSize: number;
24
24
  }>;
25
+ //# sourceMappingURL=virtualSizes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualSizes.d.ts","sourceRoot":"","sources":["../../src/virtualSizes.ts"],"names":[],"mappings":"AA0EA,eAAO,MAAM,YAAY;IAIvB,kBAAkB;;IAElB,kBAAkB;;;;;;;;;;;;;;;;IAwClB,kDAAkD;;;;EAWlD,CAAC"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /*
3
+ This is a reference implementation for calculating weights and vSizes from bitcoinjs-lib 3.3.2.
4
+ https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/src/transaction.js#L194-L219
5
+
6
+ ```
7
+ function encodingLength (number) {
8
+ checkUInt53(number)
9
+
10
+ return (
11
+ number < 0xfd ? 1
12
+ : number <= 0xffff ? 3
13
+ : number <= 0xffffffff ? 5
14
+ : 9
15
+ )
16
+ }
17
+
18
+ function varSliceSize (someScript) {
19
+ var length = someScript.length
20
+
21
+ return encodingLength(length) + length
22
+ }
23
+
24
+ function vectorSize (someVector) {
25
+ var length = someVector.length
26
+
27
+ return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
28
+ return sum + varSliceSize(witness)
29
+ }, 0)
30
+ }
31
+
32
+ Transaction.prototype.__byteLength = function (__allowWitness) {
33
+ var hasWitnesses = __allowWitness && this.hasWitnesses()
34
+
35
+ return (
36
+ (hasWitnesses ? 10 : 8) +
37
+ varuint.encodingLength(this.ins.length) +
38
+ varuint.encodingLength(this.outs.length) +
39
+ this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
40
+ this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
41
+ (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
42
+ )
43
+ }
44
+
45
+ Transaction.prototype.weight = function () {
46
+ var base = this.__byteLength(false)
47
+ var total = this.__byteLength(true)
48
+ return base * 3 + total
49
+ }
50
+
51
+ Transaction.prototype.virtualSize = function () {
52
+ return Math.ceil(this.weight() / 4)
53
+ }
54
+ ```
55
+ */
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.VirtualSizes = void 0;
58
+ const inputWeights_1 = require("./inputWeights");
59
+ function getVirtualInputSizeFromComponents(components) {
60
+ return Math.ceil(inputWeights_1.getInputComponentsWeight(components) / 4);
61
+ }
62
+ // Constants for signed TX input and output vsizes.
63
+ // See https://bitcoincore.org/en/segwit_wallet_dev/#transaction-serialization for full description
64
+ // FIXME(BG-9233): use weight units instead
65
+ exports.VirtualSizes = Object.freeze({
66
+ // FIXME(BG-7873): add support for signature grinding
67
+ // Size of a P2PKH input with (un)compressed key
68
+ /** @deprecated */
69
+ txP2pkhInputSizeCompressedKey: 148,
70
+ /** @deprecated */
71
+ txP2pkhInputSizeUncompressedKey: 180,
72
+ // Input sizes
73
+ txP2shInputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2sh),
74
+ txP2shP2wshInputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2shP2wsh),
75
+ txP2wshInputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2wsh),
76
+ txP2trKeypathInputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2trKeySpend),
77
+ txP2shP2pkInputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2shP2pk),
78
+ txP2trScriptPathLevel1InputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2trScriptSpendLevel1),
79
+ txP2trScriptPathLevel2InputSize: getVirtualInputSizeFromComponents(inputWeights_1.inputComponentsP2trScriptSpendLevel2),
80
+ //
81
+ // Output sizes
82
+ //
83
+ // The size is calculated as
84
+ //
85
+ // scriptLength + compactSize(scriptLength) + txOutputAmountSize
86
+ //
87
+ // Since compactSize(scriptLength) is 1 for all scripts considered here, we can simplify this to
88
+ //
89
+ // scriptLength + 9
90
+ //
91
+ // Size of single output amount
92
+ txOutputAmountSize: 8,
93
+ // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v4.0.2/src/templates/scripthash/output.js#L9
94
+ txP2shOutputSize: 32,
95
+ txP2shP2wshOutputSize: 32,
96
+ // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v4.0.2/src/templates/witnessscripthash/output.js#L9
97
+ txP2wshOutputSize: 43,
98
+ // OP_1 OP_PUSH32 <schnorr_public_key>
99
+ txP2trOutputSize: 43,
100
+ // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v4.0.2/src/templates/pubkeyhash/output.js#L9
101
+ txP2pkhOutputSize: 34,
102
+ // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v4.0.2/src/templates/witnesspubkeyhash/output.js#L9
103
+ txP2wpkhOutputSize: 31,
104
+ /** @deprecated - use txP2pkhOutputSize instead */
105
+ txOutputSize: 34,
106
+ //
107
+ // General tx size constants
108
+ //
109
+ txOverheadSize: 10,
110
+ // Segwit adds one byte each for marker and flag to the witness section.
111
+ // Thus, the vsize is only increased by one.
112
+ txSegOverheadVSize: 11,
113
+ });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbFNpemVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZpcnR1YWxTaXplcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcURFOzs7QUFFRixpREFVd0I7QUFFeEIsU0FBUyxpQ0FBaUMsQ0FBQyxVQUEyQjtJQUNwRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsdUNBQXdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELG1EQUFtRDtBQUNuRCxtR0FBbUc7QUFDbkcsMkNBQTJDO0FBQzlCLFFBQUEsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEMscURBQXFEO0lBRXJELGdEQUFnRDtJQUNoRCxrQkFBa0I7SUFDbEIsNkJBQTZCLEVBQUUsR0FBRztJQUNsQyxrQkFBa0I7SUFDbEIsK0JBQStCLEVBQUUsR0FBRztJQUVwQyxjQUFjO0lBQ2QsZUFBZSxFQUFFLGlDQUFpQyxDQUFDLGtDQUFtQixDQUFDO0lBQ3ZFLG9CQUFvQixFQUFFLGlDQUFpQyxDQUFDLHVDQUF3QixDQUFDO0lBQ2pGLGdCQUFnQixFQUFFLGlDQUFpQyxDQUFDLG1DQUFvQixDQUFDO0lBQ3pFLHNCQUFzQixFQUFFLGlDQUFpQyxDQUFDLDBDQUEyQixDQUFDO0lBQ3RGLG1CQUFtQixFQUFFLGlDQUFpQyxDQUFDLHNDQUF1QixDQUFDO0lBQy9FLCtCQUErQixFQUFFLGlDQUFpQyxDQUFDLG1EQUFvQyxDQUFDO0lBQ3hHLCtCQUErQixFQUFFLGlDQUFpQyxDQUFDLG1EQUFvQyxDQUFDO0lBRXhHLEVBQUU7SUFDRixlQUFlO0lBQ2YsRUFBRTtJQUVGLDRCQUE0QjtJQUM1QixFQUFFO0lBQ0YsbUVBQW1FO0lBQ25FLEVBQUU7SUFDRixnR0FBZ0c7SUFDaEcsRUFBRTtJQUNGLHNCQUFzQjtJQUN0QixFQUFFO0lBRUYsK0JBQStCO0lBQy9CLGtCQUFrQixFQUFFLENBQUM7SUFFckIsK0ZBQStGO0lBQy9GLGdCQUFnQixFQUFFLEVBQUU7SUFDcEIscUJBQXFCLEVBQUUsRUFBRTtJQUN6QixzR0FBc0c7SUFDdEcsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixzQ0FBc0M7SUFDdEMsZ0JBQWdCLEVBQUUsRUFBRTtJQUNwQiwrRkFBK0Y7SUFDL0YsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixzR0FBc0c7SUFDdEcsa0JBQWtCLEVBQUUsRUFBRTtJQUV0QixrREFBa0Q7SUFDbEQsWUFBWSxFQUFFLEVBQUU7SUFFaEIsRUFBRTtJQUNGLDRCQUE0QjtJQUM1QixFQUFFO0lBRUYsY0FBYyxFQUFFLEVBQUU7SUFDbEIsd0VBQXdFO0lBQ3hFLDRDQUE0QztJQUM1QyxrQkFBa0IsRUFBRSxFQUFFO0NBQ3ZCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5UaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGZvciBjYWxjdWxhdGluZyB3ZWlnaHRzIGFuZCB2U2l6ZXMgZnJvbSBiaXRjb2luanMtbGliIDMuMy4yLlxuaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iaXRjb2luanMtbGliL2Jsb2IvdjMuMy4yL3NyYy90cmFuc2FjdGlvbi5qcyNMMTk0LUwyMTlcblxuYGBgXG4gIGZ1bmN0aW9uIGVuY29kaW5nTGVuZ3RoIChudW1iZXIpIHtcbiAgICBjaGVja1VJbnQ1MyhudW1iZXIpXG5cbiAgICByZXR1cm4gKFxuICAgICAgbnVtYmVyIDwgMHhmZCA/IDFcbiAgICA6IG51bWJlciA8PSAweGZmZmYgPyAzXG4gICAgOiBudW1iZXIgPD0gMHhmZmZmZmZmZiA/IDVcbiAgICA6IDlcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiB2YXJTbGljZVNpemUgKHNvbWVTY3JpcHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gc29tZVNjcmlwdC5sZW5ndGhcblxuICAgIHJldHVybiBlbmNvZGluZ0xlbmd0aChsZW5ndGgpICsgbGVuZ3RoXG4gIH1cblxuICBmdW5jdGlvbiB2ZWN0b3JTaXplIChzb21lVmVjdG9yKSB7XG4gICAgdmFyIGxlbmd0aCA9IHNvbWVWZWN0b3IubGVuZ3RoXG5cbiAgICByZXR1cm4gdmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICsgc29tZVZlY3Rvci5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgd2l0bmVzcykge1xuICAgICAgcmV0dXJuIHN1bSArIHZhclNsaWNlU2l6ZSh3aXRuZXNzKVxuICAgIH0sIDApXG4gIH1cblxuICBUcmFuc2FjdGlvbi5wcm90b3R5cGUuX19ieXRlTGVuZ3RoID0gZnVuY3Rpb24gKF9fYWxsb3dXaXRuZXNzKSB7XG4gICAgdmFyIGhhc1dpdG5lc3NlcyA9IF9fYWxsb3dXaXRuZXNzICYmIHRoaXMuaGFzV2l0bmVzc2VzKClcblxuICAgIHJldHVybiAoXG4gICAgICAoaGFzV2l0bmVzc2VzID8gMTAgOiA4KSArXG4gICAgICB2YXJ1aW50LmVuY29kaW5nTGVuZ3RoKHRoaXMuaW5zLmxlbmd0aCkgK1xuICAgICAgdmFydWludC5lbmNvZGluZ0xlbmd0aCh0aGlzLm91dHMubGVuZ3RoKSArXG4gICAgICB0aGlzLmlucy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgaW5wdXQpIHsgcmV0dXJuIHN1bSArIDQwICsgdmFyU2xpY2VTaXplKGlucHV0LnNjcmlwdCkgfSwgMCkgK1xuICAgICAgdGhpcy5vdXRzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBvdXRwdXQpIHsgcmV0dXJuIHN1bSArIDggKyB2YXJTbGljZVNpemUob3V0cHV0LnNjcmlwdCkgfSwgMCkgK1xuICAgICAgKGhhc1dpdG5lc3NlcyA/IHRoaXMuaW5zLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBpbnB1dCkgeyByZXR1cm4gc3VtICsgdmVjdG9yU2l6ZShpbnB1dC53aXRuZXNzKSB9LCAwKSA6IDApXG4gICAgKVxuICB9XG5cbiAgVHJhbnNhY3Rpb24ucHJvdG90eXBlLndlaWdodCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYmFzZSA9IHRoaXMuX19ieXRlTGVuZ3RoKGZhbHNlKVxuICAgIHZhciB0b3RhbCA9IHRoaXMuX19ieXRlTGVuZ3RoKHRydWUpXG4gICAgcmV0dXJuIGJhc2UgKiAzICsgdG90YWxcbiAgfVxuXG4gIFRyYW5zYWN0aW9uLnByb3RvdHlwZS52aXJ0dWFsU2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMud2VpZ2h0KCkgLyA0KVxuICB9XG5gYGBcbiovXG5cbmltcG9ydCB7XG4gIGdldElucHV0Q29tcG9uZW50c1dlaWdodCxcbiAgSW5wdXRDb21wb25lbnRzLFxuICBpbnB1dENvbXBvbmVudHNQMnNoLFxuICBpbnB1dENvbXBvbmVudHNQMnNoUDJwayxcbiAgaW5wdXRDb21wb25lbnRzUDJzaFAyd3NoLFxuICBpbnB1dENvbXBvbmVudHNQMnRyS2V5U3BlbmQsXG4gIGlucHV0Q29tcG9uZW50c1AydHJTY3JpcHRTcGVuZExldmVsMSxcbiAgaW5wdXRDb21wb25lbnRzUDJ0clNjcmlwdFNwZW5kTGV2ZWwyLFxuICBpbnB1dENvbXBvbmVudHNQMndzaCxcbn0gZnJvbSAnLi9pbnB1dFdlaWdodHMnO1xuXG5mdW5jdGlvbiBnZXRWaXJ0dWFsSW5wdXRTaXplRnJvbUNvbXBvbmVudHMoY29tcG9uZW50czogSW5wdXRDb21wb25lbnRzKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguY2VpbChnZXRJbnB1dENvbXBvbmVudHNXZWlnaHQoY29tcG9uZW50cykgLyA0KTtcbn1cblxuLy8gQ29uc3RhbnRzIGZvciBzaWduZWQgVFggaW5wdXQgYW5kIG91dHB1dCB2c2l6ZXMuXG4vLyBTZWUgaHR0cHM6Ly9iaXRjb2luY29yZS5vcmcvZW4vc2Vnd2l0X3dhbGxldF9kZXYvI3RyYW5zYWN0aW9uLXNlcmlhbGl6YXRpb24gZm9yIGZ1bGwgZGVzY3JpcHRpb25cbi8vIEZJWE1FKEJHLTkyMzMpOiB1c2Ugd2VpZ2h0IHVuaXRzIGluc3RlYWRcbmV4cG9ydCBjb25zdCBWaXJ0dWFsU2l6ZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgLy8gRklYTUUoQkctNzg3Myk6IGFkZCBzdXBwb3J0IGZvciBzaWduYXR1cmUgZ3JpbmRpbmdcblxuICAvLyBTaXplIG9mIGEgUDJQS0ggaW5wdXQgd2l0aCAodW4pY29tcHJlc3NlZCBrZXlcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHR4UDJwa2hJbnB1dFNpemVDb21wcmVzc2VkS2V5OiAxNDgsXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICB0eFAycGtoSW5wdXRTaXplVW5jb21wcmVzc2VkS2V5OiAxODAsXG5cbiAgLy8gSW5wdXQgc2l6ZXNcbiAgdHhQMnNoSW5wdXRTaXplOiBnZXRWaXJ0dWFsSW5wdXRTaXplRnJvbUNvbXBvbmVudHMoaW5wdXRDb21wb25lbnRzUDJzaCksXG4gIHR4UDJzaFAyd3NoSW5wdXRTaXplOiBnZXRWaXJ0dWFsSW5wdXRTaXplRnJvbUNvbXBvbmVudHMoaW5wdXRDb21wb25lbnRzUDJzaFAyd3NoKSxcbiAgdHhQMndzaElucHV0U2l6ZTogZ2V0VmlydHVhbElucHV0U2l6ZUZyb21Db21wb25lbnRzKGlucHV0Q29tcG9uZW50c1Ayd3NoKSxcbiAgdHhQMnRyS2V5cGF0aElucHV0U2l6ZTogZ2V0VmlydHVhbElucHV0U2l6ZUZyb21Db21wb25lbnRzKGlucHV0Q29tcG9uZW50c1AydHJLZXlTcGVuZCksXG4gIHR4UDJzaFAycGtJbnB1dFNpemU6IGdldFZpcnR1YWxJbnB1dFNpemVGcm9tQ29tcG9uZW50cyhpbnB1dENvbXBvbmVudHNQMnNoUDJwayksXG4gIHR4UDJ0clNjcmlwdFBhdGhMZXZlbDFJbnB1dFNpemU6IGdldFZpcnR1YWxJbnB1dFNpemVGcm9tQ29tcG9uZW50cyhpbnB1dENvbXBvbmVudHNQMnRyU2NyaXB0U3BlbmRMZXZlbDEpLFxuICB0eFAydHJTY3JpcHRQYXRoTGV2ZWwySW5wdXRTaXplOiBnZXRWaXJ0dWFsSW5wdXRTaXplRnJvbUNvbXBvbmVudHMoaW5wdXRDb21wb25lbnRzUDJ0clNjcmlwdFNwZW5kTGV2ZWwyKSxcblxuICAvL1xuICAvLyBPdXRwdXQgc2l6ZXNcbiAgLy9cblxuICAvLyBUaGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzXG4gIC8vXG4gIC8vICAgIHNjcmlwdExlbmd0aCArIGNvbXBhY3RTaXplKHNjcmlwdExlbmd0aCkgKyB0eE91dHB1dEFtb3VudFNpemVcbiAgLy9cbiAgLy8gU2luY2UgY29tcGFjdFNpemUoc2NyaXB0TGVuZ3RoKSBpcyAxIGZvciBhbGwgc2NyaXB0cyBjb25zaWRlcmVkIGhlcmUsIHdlIGNhbiBzaW1wbGlmeSB0aGlzIHRvXG4gIC8vXG4gIC8vICAgIHNjcmlwdExlbmd0aCArIDlcbiAgLy9cblxuICAvLyBTaXplIG9mIHNpbmdsZSBvdXRwdXQgYW1vdW50XG4gIHR4T3V0cHV0QW1vdW50U2l6ZTogOCxcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL2JpdGNvaW5qcy1saWIvYmxvYi92NC4wLjIvc3JjL3RlbXBsYXRlcy9zY3JpcHRoYXNoL291dHB1dC5qcyNMOVxuICB0eFAyc2hPdXRwdXRTaXplOiAzMixcbiAgdHhQMnNoUDJ3c2hPdXRwdXRTaXplOiAzMixcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iaXRjb2luanMtbGliL2Jsb2IvdjQuMC4yL3NyYy90ZW1wbGF0ZXMvd2l0bmVzc3NjcmlwdGhhc2gvb3V0cHV0LmpzI0w5XG4gIHR4UDJ3c2hPdXRwdXRTaXplOiA0MyxcbiAgLy8gT1BfMSBPUF9QVVNIMzIgPHNjaG5vcnJfcHVibGljX2tleT5cbiAgdHhQMnRyT3V0cHV0U2l6ZTogNDMsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luanMvYml0Y29pbmpzLWxpYi9ibG9iL3Y0LjAuMi9zcmMvdGVtcGxhdGVzL3B1YmtleWhhc2gvb3V0cHV0LmpzI0w5XG4gIHR4UDJwa2hPdXRwdXRTaXplOiAzNCxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy9iaXRjb2luanMtbGliL2Jsb2IvdjQuMC4yL3NyYy90ZW1wbGF0ZXMvd2l0bmVzc3B1YmtleWhhc2gvb3V0cHV0LmpzI0w5XG4gIHR4UDJ3cGtoT3V0cHV0U2l6ZTogMzEsXG5cbiAgLyoqIEBkZXByZWNhdGVkIC0gdXNlIHR4UDJwa2hPdXRwdXRTaXplIGluc3RlYWQgKi9cbiAgdHhPdXRwdXRTaXplOiAzNCxcblxuICAvL1xuICAvLyBHZW5lcmFsIHR4IHNpemUgY29uc3RhbnRzXG4gIC8vXG5cbiAgdHhPdmVyaGVhZFNpemU6IDEwLFxuICAvLyBTZWd3aXQgYWRkcyBvbmUgYnl0ZSBlYWNoIGZvciBtYXJrZXIgYW5kIGZsYWcgdG8gdGhlIHdpdG5lc3Mgc2VjdGlvbi5cbiAgLy8gVGh1cywgdGhlIHZzaXplIGlzIG9ubHkgaW5jcmVhc2VkIGJ5IG9uZS5cbiAgdHhTZWdPdmVyaGVhZFZTaXplOiAxMSxcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../test/chain.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
7
+ const should_1 = __importDefault(require("should"));
8
+ const src_1 = require("../src");
9
+ describe('chain codes', function () {
10
+ const externalList = [src_1.Codes.external.p2sh, src_1.Codes.external.p2shP2wsh, src_1.Codes.external.p2wsh, src_1.Codes.external.p2tr];
11
+ const internalList = [src_1.Codes.internal.p2sh, src_1.Codes.internal.p2shP2wsh, src_1.Codes.internal.p2wsh, src_1.Codes.internal.p2tr];
12
+ const purposeByScriptTypeList = [src_1.Codes.p2sh, src_1.Codes.p2shP2wsh, src_1.Codes.p2wsh, src_1.Codes.p2tr];
13
+ const supportedUnspentTypeList = [
14
+ src_1.CodesTypes.UnspentType.p2sh,
15
+ src_1.CodesTypes.UnspentType.p2shP2wsh,
16
+ src_1.CodesTypes.UnspentType.p2wsh,
17
+ src_1.CodesTypes.UnspentType.p2tr,
18
+ ];
19
+ const unsupportedUnspentTypeList = [src_1.CodesTypes.UnspentType.p2pkh, src_1.CodesTypes.UnspentType.p2wpkh];
20
+ it(`is immutable`, function () {
21
+ const p2sh = src_1.Codes.internal.p2sh;
22
+ should_1.default.throws(() => {
23
+ // @ts-ignore
24
+ src_1.Codes.internal.p2sh = -1;
25
+ }, TypeError);
26
+ src_1.Codes.internal.p2sh.should.eql(p2sh);
27
+ should_1.default.throws(() => {
28
+ // @ts-ignore
29
+ src_1.Codes.internal.values.push(-1);
30
+ }, TypeError);
31
+ should_1.default.throws(() => {
32
+ // @ts-ignore
33
+ src_1.Codes.internal.values = [];
34
+ }, TypeError);
35
+ src_1.Codes.internal.values.should.eql([1, 11, 21, 31]);
36
+ should_1.default.throws(() => {
37
+ // @ts-ignore
38
+ src_1.Codes.all = [];
39
+ });
40
+ src_1.Codes.all.should.not.be.empty();
41
+ });
42
+ it('matches expected values', function () {
43
+ externalList.should.eql([src_1.Codes.p2sh.external, src_1.Codes.p2shP2wsh.external, src_1.Codes.p2wsh.external, src_1.Codes.p2tr.external]);
44
+ externalList.should.eql([0, 10, 20, 30]);
45
+ externalList.should.eql([...src_1.Codes.external.values]);
46
+ src_1.Codes.all.should.eql([...externalList, ...internalList]);
47
+ internalList.should.eql([src_1.Codes.p2sh.internal, src_1.Codes.p2shP2wsh.internal, src_1.Codes.p2wsh.internal, src_1.Codes.p2tr.internal]);
48
+ internalList.should.eql([1, 11, 21, 31]);
49
+ internalList.should.eql([...src_1.Codes.internal.values]);
50
+ });
51
+ it('are grouped correctly', function () {
52
+ internalList.should.matchEach(src_1.Codes.isInternal);
53
+ externalList.should.matchEach(src_1.Codes.isExternal);
54
+ // all are either internal or external, never none or both
55
+ src_1.Codes.all.should.matchEach((code) => !!(src_1.Codes.isExternal(code) !== src_1.Codes.isInternal(code)));
56
+ src_1.Codes.p2sh.values.should.matchEach(src_1.Codes.isP2sh);
57
+ src_1.Codes.p2shP2wsh.values.should.matchEach(src_1.Codes.isP2shP2wsh);
58
+ src_1.Codes.p2wsh.values.should.matchEach(src_1.Codes.isP2wsh);
59
+ src_1.Codes.p2tr.values.should.matchEach(src_1.Codes.isP2tr);
60
+ // every code has exactly one address type
61
+ src_1.Codes.all.should.matchEach((code) => 1 ===
62
+ [src_1.Codes.isP2sh(code), src_1.Codes.isP2wsh(code), src_1.Codes.isP2shP2wsh(code), src_1.Codes.isP2tr(code)].reduce((sum, v) => sum + Number(v), 0));
63
+ src_1.Codes.all.should.matchEach(src_1.Codes.isValid);
64
+ });
65
+ const invalidInputs = [undefined, null, 'lol', -1, 42];
66
+ it('throws correct error for invalid input', function () {
67
+ [
68
+ src_1.Codes.isInternal,
69
+ src_1.Codes.isExternal,
70
+ src_1.Codes.isP2sh,
71
+ src_1.Codes.isP2shP2wsh,
72
+ src_1.Codes.isP2wsh,
73
+ src_1.Codes.isP2tr,
74
+ src_1.Codes.typeForCode,
75
+ ].forEach((func) =>
76
+ // @ts-ignore
77
+ invalidInputs.forEach((input) => should_1.default.throws(() => func(input), src_1.Codes.ErrorInvalidCode)));
78
+ invalidInputs.should.matchEach((input) => !src_1.Codes.isValid(input));
79
+ });
80
+ it('map to unspent types', function () {
81
+ [...externalList, ...internalList].forEach((code, index) => src_1.Codes.typeForCode(code).should.equal([...supportedUnspentTypeList, ...supportedUnspentTypeList][index]));
82
+ });
83
+ it('map from unspent types', function () {
84
+ supportedUnspentTypeList.forEach((type, index) => src_1.Codes.forType(type).should.eql(purposeByScriptTypeList[index]));
85
+ unsupportedUnspentTypeList.forEach((type) => should_1.default.throws(() => src_1.Codes.forType(type)));
86
+ });
87
+ it(`has chain type`, function () {
88
+ src_1.Codes.all.should.matchEach((code) => src_1.Codes.ChainCodeTcomb(code) === code && src_1.Codes.ChainCodeTcomb.is(code));
89
+ invalidInputs.forEach((code) => should_1.default.throws(() => src_1.Codes.ChainCodeTcomb(code)));
90
+ });
91
+ });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELG9EQUE0QjtBQUM1QixnQ0FBMkM7QUFFM0MsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLFdBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWhILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxXQUFLLENBQUMsSUFBSSxFQUFFLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBSyxDQUFDLEtBQUssRUFBRSxXQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkYsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1FBQzNCLGdCQUFVLENBQUMsV0FBVyxDQUFDLFNBQVM7UUFDaEMsZ0JBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSztRQUM1QixnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJO0tBQzVCLENBQUM7SUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsZ0JBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGdCQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpHLEVBQUUsQ0FBQyxjQUFjLEVBQUU7UUFDakIsTUFBTSxJQUFJLEdBQUcsV0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDZCxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixhQUFhO1lBQ2IsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2QsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUJBQXlCLEVBQUU7UUFDNUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEgsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFcEQsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3pELFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BILFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFO1FBQzFCLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsMERBQTBEO1FBQzFELFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixXQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxXQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxXQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxXQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCwwQ0FBMEM7UUFDMUMsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUN4QixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQztZQUNELENBQUMsV0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDM0YsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUMzQixDQUFDLENBQ0YsQ0FDSixDQUFDO1FBRUYsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkQsRUFBRSxDQUFDLHdDQUF3QyxFQUFFO1FBQzNDO1lBQ0UsV0FBSyxDQUFDLFVBQVU7WUFDaEIsV0FBSyxDQUFDLFVBQVU7WUFDaEIsV0FBSyxDQUFDLE1BQU07WUFDWixXQUFLLENBQUMsV0FBVztZQUNqQixXQUFLLENBQUMsT0FBTztZQUNiLFdBQUssQ0FBQyxNQUFNO1lBQ1osV0FBSyxDQUFDLFdBQVc7U0FDbEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNqQixhQUFhO1FBQ2IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQzNGLENBQUM7UUFFRixhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUN6RCxXQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0JBQXdCLEVBQUU7UUFDM0Isd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsSCwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdCQUFnQixFQUFFO1FBQ25CLFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksV0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBDb2RlcywgQ29kZXNUeXBlcyB9IGZyb20gJy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdjaGFpbiBjb2RlcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZXh0ZXJuYWxMaXN0ID0gW0NvZGVzLmV4dGVybmFsLnAyc2gsIENvZGVzLmV4dGVybmFsLnAyc2hQMndzaCwgQ29kZXMuZXh0ZXJuYWwucDJ3c2gsIENvZGVzLmV4dGVybmFsLnAydHJdO1xuXG4gIGNvbnN0IGludGVybmFsTGlzdCA9IFtDb2Rlcy5pbnRlcm5hbC5wMnNoLCBDb2Rlcy5pbnRlcm5hbC5wMnNoUDJ3c2gsIENvZGVzLmludGVybmFsLnAyd3NoLCBDb2Rlcy5pbnRlcm5hbC5wMnRyXTtcblxuICBjb25zdCBwdXJwb3NlQnlTY3JpcHRUeXBlTGlzdCA9IFtDb2Rlcy5wMnNoLCBDb2Rlcy5wMnNoUDJ3c2gsIENvZGVzLnAyd3NoLCBDb2Rlcy5wMnRyXTtcblxuICBjb25zdCBzdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QgPSBbXG4gICAgQ29kZXNUeXBlcy5VbnNwZW50VHlwZS5wMnNoLFxuICAgIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJzaFAyd3NoLFxuICAgIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJ3c2gsXG4gICAgQ29kZXNUeXBlcy5VbnNwZW50VHlwZS5wMnRyLFxuICBdO1xuXG4gIGNvbnN0IHVuc3VwcG9ydGVkVW5zcGVudFR5cGVMaXN0ID0gW0NvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJwa2gsIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJ3cGtoXTtcblxuICBpdChgaXMgaW1tdXRhYmxlYCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHAyc2ggPSBDb2Rlcy5pbnRlcm5hbC5wMnNoO1xuICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgQ29kZXMuaW50ZXJuYWwucDJzaCA9IC0xO1xuICAgIH0sIFR5cGVFcnJvcik7XG4gICAgQ29kZXMuaW50ZXJuYWwucDJzaC5zaG91bGQuZXFsKHAyc2gpO1xuXG4gICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBDb2Rlcy5pbnRlcm5hbC52YWx1ZXMucHVzaCgtMSk7XG4gICAgfSwgVHlwZUVycm9yKTtcblxuICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgQ29kZXMuaW50ZXJuYWwudmFsdWVzID0gW107XG4gICAgfSwgVHlwZUVycm9yKTtcbiAgICBDb2Rlcy5pbnRlcm5hbC52YWx1ZXMuc2hvdWxkLmVxbChbMSwgMTEsIDIxLCAzMV0pO1xuXG4gICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBDb2Rlcy5hbGwgPSBbXTtcbiAgICB9KTtcbiAgICBDb2Rlcy5hbGwuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICB9KTtcblxuICBpdCgnbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZXh0ZXJuYWxMaXN0LnNob3VsZC5lcWwoW0NvZGVzLnAyc2guZXh0ZXJuYWwsIENvZGVzLnAyc2hQMndzaC5leHRlcm5hbCwgQ29kZXMucDJ3c2guZXh0ZXJuYWwsIENvZGVzLnAydHIuZXh0ZXJuYWxdKTtcbiAgICBleHRlcm5hbExpc3Quc2hvdWxkLmVxbChbMCwgMTAsIDIwLCAzMF0pO1xuICAgIGV4dGVybmFsTGlzdC5zaG91bGQuZXFsKFsuLi5Db2Rlcy5leHRlcm5hbC52YWx1ZXNdKTtcblxuICAgIENvZGVzLmFsbC5zaG91bGQuZXFsKFsuLi5leHRlcm5hbExpc3QsIC4uLmludGVybmFsTGlzdF0pO1xuICAgIGludGVybmFsTGlzdC5zaG91bGQuZXFsKFtDb2Rlcy5wMnNoLmludGVybmFsLCBDb2Rlcy5wMnNoUDJ3c2guaW50ZXJuYWwsIENvZGVzLnAyd3NoLmludGVybmFsLCBDb2Rlcy5wMnRyLmludGVybmFsXSk7XG4gICAgaW50ZXJuYWxMaXN0LnNob3VsZC5lcWwoWzEsIDExLCAyMSwgMzFdKTtcbiAgICBpbnRlcm5hbExpc3Quc2hvdWxkLmVxbChbLi4uQ29kZXMuaW50ZXJuYWwudmFsdWVzXSk7XG4gIH0pO1xuXG4gIGl0KCdhcmUgZ3JvdXBlZCBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJuYWxMaXN0LnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNJbnRlcm5hbCk7XG4gICAgZXh0ZXJuYWxMaXN0LnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNFeHRlcm5hbCk7XG5cbiAgICAvLyBhbGwgYXJlIGVpdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCwgbmV2ZXIgbm9uZSBvciBib3RoXG4gICAgQ29kZXMuYWxsLnNob3VsZC5tYXRjaEVhY2goKGNvZGUpID0+ICEhKENvZGVzLmlzRXh0ZXJuYWwoY29kZSkgIT09IENvZGVzLmlzSW50ZXJuYWwoY29kZSkpKTtcblxuICAgIENvZGVzLnAyc2gudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnNoKTtcbiAgICBDb2Rlcy5wMnNoUDJ3c2gudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnNoUDJ3c2gpO1xuICAgIENvZGVzLnAyd3NoLnZhbHVlcy5zaG91bGQubWF0Y2hFYWNoKENvZGVzLmlzUDJ3c2gpO1xuICAgIENvZGVzLnAydHIudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnRyKTtcblxuICAgIC8vIGV2ZXJ5IGNvZGUgaGFzIGV4YWN0bHkgb25lIGFkZHJlc3MgdHlwZVxuICAgIENvZGVzLmFsbC5zaG91bGQubWF0Y2hFYWNoKFxuICAgICAgKGNvZGUpID0+XG4gICAgICAgIDEgPT09XG4gICAgICAgIFtDb2Rlcy5pc1Ayc2goY29kZSksIENvZGVzLmlzUDJ3c2goY29kZSksIENvZGVzLmlzUDJzaFAyd3NoKGNvZGUpLCBDb2Rlcy5pc1AydHIoY29kZSldLnJlZHVjZShcbiAgICAgICAgICAoc3VtLCB2KSA9PiBzdW0gKyBOdW1iZXIodiksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgKTtcblxuICAgIENvZGVzLmFsbC5zaG91bGQubWF0Y2hFYWNoKENvZGVzLmlzVmFsaWQpO1xuICB9KTtcblxuICBjb25zdCBpbnZhbGlkSW5wdXRzID0gW3VuZGVmaW5lZCwgbnVsbCwgJ2xvbCcsIC0xLCA0Ml07XG5cbiAgaXQoJ3Rocm93cyBjb3JyZWN0IGVycm9yIGZvciBpbnZhbGlkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgIFtcbiAgICAgIENvZGVzLmlzSW50ZXJuYWwsXG4gICAgICBDb2Rlcy5pc0V4dGVybmFsLFxuICAgICAgQ29kZXMuaXNQMnNoLFxuICAgICAgQ29kZXMuaXNQMnNoUDJ3c2gsXG4gICAgICBDb2Rlcy5pc1Ayd3NoLFxuICAgICAgQ29kZXMuaXNQMnRyLFxuICAgICAgQ29kZXMudHlwZUZvckNvZGUsXG4gICAgXS5mb3JFYWNoKChmdW5jKSA9PlxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW52YWxpZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gc2hvdWxkLnRocm93cygoKSA9PiBmdW5jKGlucHV0KSwgQ29kZXMuRXJyb3JJbnZhbGlkQ29kZSkpXG4gICAgKTtcblxuICAgIGludmFsaWRJbnB1dHMuc2hvdWxkLm1hdGNoRWFjaCgoaW5wdXQpID0+ICFDb2Rlcy5pc1ZhbGlkKGlucHV0KSk7XG4gIH0pO1xuXG4gIGl0KCdtYXAgdG8gdW5zcGVudCB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBbLi4uZXh0ZXJuYWxMaXN0LCAuLi5pbnRlcm5hbExpc3RdLmZvckVhY2goKGNvZGUsIGluZGV4KSA9PlxuICAgICAgQ29kZXMudHlwZUZvckNvZGUoY29kZSkuc2hvdWxkLmVxdWFsKFsuLi5zdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QsIC4uLnN1cHBvcnRlZFVuc3BlbnRUeXBlTGlzdF1baW5kZXhdKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdtYXAgZnJvbSB1bnNwZW50IHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgIHN1cHBvcnRlZFVuc3BlbnRUeXBlTGlzdC5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4gQ29kZXMuZm9yVHlwZSh0eXBlKS5zaG91bGQuZXFsKHB1cnBvc2VCeVNjcmlwdFR5cGVMaXN0W2luZGV4XSkpO1xuXG4gICAgdW5zdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QuZm9yRWFjaCgodHlwZSkgPT4gc2hvdWxkLnRocm93cygoKSA9PiBDb2Rlcy5mb3JUeXBlKHR5cGUpKSk7XG4gIH0pO1xuXG4gIGl0KGBoYXMgY2hhaW4gdHlwZWAsIGZ1bmN0aW9uICgpIHtcbiAgICBDb2Rlcy5hbGwuc2hvdWxkLm1hdGNoRWFjaCgoY29kZSkgPT4gQ29kZXMuQ2hhaW5Db2RlVGNvbWIoY29kZSkgPT09IGNvZGUgJiYgQ29kZXMuQ2hhaW5Db2RlVGNvbWIuaXMoY29kZSkpO1xuICAgIGludmFsaWRJbnB1dHMuZm9yRWFjaCgoY29kZTogYW55KSA9PiBzaG91bGQudGhyb3dzKCgpID0+IENvZGVzLkNoYWluQ29kZVRjb21iKGNvZGUpKSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dimensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../test/dimensions.ts"],"names":[],"mappings":""}