@bitgo-beta/utxo-ord 1.1.3-alpha.44 → 1.1.3-alpha.440

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 (64) hide show
  1. package/dist/cjs/src/OrdOutput.d.ts.map +1 -0
  2. package/dist/cjs/src/OrdOutput.js +197 -0
  3. package/dist/{src → cjs/src}/OutputLayout.d.ts +3 -3
  4. package/dist/cjs/src/OutputLayout.d.ts.map +1 -0
  5. package/dist/cjs/src/OutputLayout.js +246 -0
  6. package/dist/{src → cjs/src}/SatPoint.d.ts +8 -1
  7. package/dist/cjs/src/SatPoint.d.ts.map +1 -0
  8. package/dist/cjs/src/SatPoint.js +67 -0
  9. package/dist/cjs/src/SatRange.d.ts.map +1 -0
  10. package/dist/cjs/src/SatRange.js +58 -0
  11. package/dist/cjs/src/combinations.d.ts.map +1 -0
  12. package/dist/cjs/src/combinations.js +13 -0
  13. package/dist/{src → cjs/src}/index.d.ts +2 -0
  14. package/dist/cjs/src/index.d.ts.map +1 -0
  15. package/dist/cjs/src/index.js +49 -0
  16. package/dist/cjs/src/inscriptions.d.ts +58 -0
  17. package/dist/cjs/src/inscriptions.d.ts.map +1 -0
  18. package/dist/cjs/src/inscriptions.js +94 -0
  19. package/dist/{src → cjs/src}/psbt.d.ts +33 -17
  20. package/dist/cjs/src/psbt.d.ts.map +1 -0
  21. package/dist/cjs/src/psbt.js +193 -0
  22. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  23. package/dist/esm/OrdOutput.d.ts +65 -0
  24. package/dist/esm/OrdOutput.js +192 -0
  25. package/dist/esm/OutputLayout.d.ts +47 -0
  26. package/dist/esm/OutputLayout.d.ts.map +1 -0
  27. package/dist/esm/OutputLayout.js +240 -0
  28. package/dist/esm/SatPoint.d.ts +20 -0
  29. package/dist/esm/SatPoint.d.ts.map +1 -0
  30. package/dist/esm/SatPoint.js +61 -0
  31. package/dist/esm/SatRange.d.ts +26 -0
  32. package/dist/esm/SatRange.js +53 -0
  33. package/dist/esm/combinations.d.ts +2 -0
  34. package/dist/esm/combinations.js +10 -0
  35. package/dist/esm/index.d.ts +12 -0
  36. package/dist/{src → esm}/index.d.ts.map +1 -1
  37. package/dist/esm/index.js +10 -0
  38. package/dist/esm/inscriptions.d.ts +58 -0
  39. package/dist/esm/inscriptions.d.ts.map +1 -0
  40. package/dist/esm/inscriptions.js +89 -0
  41. package/dist/esm/psbt.d.ts +84 -0
  42. package/dist/esm/psbt.d.ts.map +1 -0
  43. package/dist/esm/psbt.js +186 -0
  44. package/package.json +27 -9
  45. package/dist/src/OrdOutput.js +0 -197
  46. package/dist/src/OutputLayout.d.ts.map +0 -1
  47. package/dist/src/OutputLayout.js +0 -248
  48. package/dist/src/SatPoint.d.ts.map +0 -1
  49. package/dist/src/SatPoint.js +0 -49
  50. package/dist/src/SatRange.js +0 -58
  51. package/dist/src/combinations.js +0 -14
  52. package/dist/src/index.js +0 -23
  53. package/dist/src/inscriptions.d.ts +0 -32
  54. package/dist/src/inscriptions.d.ts.map +0 -1
  55. package/dist/src/inscriptions.js +0 -169
  56. package/dist/src/psbt.d.ts.map +0 -1
  57. package/dist/src/psbt.js +0 -150
  58. package/dist/tsconfig.tsbuildinfo +0 -1
  59. /package/dist/{src → cjs/src}/OrdOutput.d.ts +0 -0
  60. /package/dist/{src → cjs/src}/SatRange.d.ts +0 -0
  61. /package/dist/{src → cjs/src}/combinations.d.ts +0 -0
  62. /package/dist/{src → esm}/OrdOutput.d.ts.map +0 -0
  63. /package/dist/{src → esm}/SatRange.d.ts.map +0 -0
  64. /package/dist/{src → esm}/combinations.d.ts.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrdOutput.d.ts","sourceRoot":"","sources":["../../../src/OrdOutput.ts"],"names":[],"mappings":"AAoDA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,gBAAiB,SAAQ,KAAK;IACL,KAAK,EAAE,MAAM;IAAS,QAAQ,EAAE,QAAQ,EAAE;gBAAlE,OAAO,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAS,QAAQ,EAAE,QAAQ,EAAE;CAG/E;AAED;;GAEG;AACH,qBAAa,SAAS;IAOD,KAAK,EAAE,MAAM;IAAS,QAAQ,EAAE,QAAQ,EAAE;IAN7D;;;;;OAKG;gBACgB,KAAK,EAAE,MAAM,EAAS,QAAQ,GAAE,QAAQ,EAAO;IAelE;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS;IAOvC;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS;IAO5C,UAAU,IAAI,QAAQ;IAItB;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS;IAepC;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;IAU9C;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAUrE;;;;;;OAMG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EAAE,EAChB,EAAE,KAAa,EAAE,SAAiB,EAAE,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7E,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE;IAwBvB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE;CAGxC"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /*
3
+
4
+ Classes used for tracking sats across transactions.
5
+
6
+ https://github.com/casey/ord/blob/master/bip.mediawiki#design
7
+
8
+ > The ordinal numbers of sats in transaction inputs are transferred to output sats in
9
+ > first-in-first-out order, according to the size and order of the transactions inputs and outputs.
10
+
11
+
12
+ Sample scenario:
13
+ inputs i0, i1, i2
14
+ outputs u0, u1
15
+ inscriptions r0, r1, r2, r3, r4
16
+
17
+
18
+ createOutputs(
19
+ [i0, i1],
20
+ [
21
+ [u0, [r0, r1]],
22
+ [u1, [r2, r3]],
23
+ ]
24
+ );
25
+
26
+ r4 is donated to the miner
27
+
28
+ ┌────────┬────────┐
29
+ │ i0 │ u0 │
30
+ │ │ │
31
+ │ r0 ┼ │
32
+ │ │ │
33
+ ├────────┤ │
34
+ │ i1 │ │
35
+ │ r1 ┼ │
36
+ │ │ │
37
+ │ ├────────┤
38
+ │ │ u1 │
39
+ │ r2 ┼ │
40
+ │ │ │
41
+ ├────────┤ │
42
+ │ i2 │ │
43
+ │ r3 ┼ │
44
+ │ │ │
45
+ │ │ │
46
+ │ ├────────┘
47
+ │ │
48
+ │ r4 ┼
49
+ │ │
50
+ └────────┘
51
+
52
+ */
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.OrdOutput = exports.InvalidOrdOutput = void 0;
55
+ const SatRange_1 = require("./SatRange");
56
+ class InvalidOrdOutput extends Error {
57
+ constructor(message, value, ordinals) {
58
+ super(message);
59
+ this.value = value;
60
+ this.ordinals = ordinals;
61
+ }
62
+ }
63
+ exports.InvalidOrdOutput = InvalidOrdOutput;
64
+ /**
65
+ * The ordinal metadata for an output
66
+ */
67
+ class OrdOutput {
68
+ /**
69
+ * @param value - the input value
70
+ * @param ordinals - The ordinal ranges of an output, relative to the first satoshi.
71
+ * Required to be ordered and non-overlapping.
72
+ * Not required to be exhaustive.
73
+ */
74
+ constructor(value, ordinals = []) {
75
+ this.value = value;
76
+ this.ordinals = ordinals;
77
+ const maxRange = this.asSatRange();
78
+ ordinals.forEach((r, i) => {
79
+ if (!maxRange.isSupersetOf(r)) {
80
+ throw new InvalidOrdOutput(`range ${r} outside output maxRange ${maxRange}`, value, ordinals);
81
+ }
82
+ if (0 < i) {
83
+ const prevRange = ordinals[i - 1];
84
+ if (r.start <= prevRange.end) {
85
+ throw new InvalidOrdOutput(`SatRange #${i - 1} ${prevRange} overlaps SatRange #${i} ${r}`, value, ordinals);
86
+ }
87
+ }
88
+ });
89
+ }
90
+ /**
91
+ * @param other
92
+ * @return OrdOutput extended by other.value and SatRanges shifted by this.value
93
+ */
94
+ joinedWith(other) {
95
+ return new OrdOutput(this.value + other.value, [
96
+ ...this.ordinals,
97
+ ...other.ordinals.map((r) => r.shiftedBy(this.value)),
98
+ ]);
99
+ }
100
+ /**
101
+ * @param ords
102
+ * @return single OrdOutput containing all SatRanges, shifted by preceding output values
103
+ */
104
+ static joinAll(ords) {
105
+ if (ords.length === 0) {
106
+ throw new TypeError(`empty input`);
107
+ }
108
+ return ords.reduce((a, b) => a.joinedWith(b));
109
+ }
110
+ asSatRange() {
111
+ return new SatRange_1.SatRange(BigInt(0), this.value - BigInt(1));
112
+ }
113
+ /**
114
+ * @param r
115
+ * @return new OrdOutput with all ranges fully contained in _r_. SatRanges are aligned to new start.
116
+ */
117
+ fromSatRange(r) {
118
+ return new OrdOutput(r.size(), this.ordinals.flatMap((s) => {
119
+ if (r.intersectsWith(s)) {
120
+ if (!r.isSupersetOf(s)) {
121
+ throw new Error(`partial overlap in ${r} and ${s}`);
122
+ }
123
+ return s.shiftedBy(-r.start);
124
+ }
125
+ return [];
126
+ }));
127
+ }
128
+ /**
129
+ * @param value
130
+ * @return first OrdOutput with value `value`, second OrdOutput with remaining value.
131
+ * With respective SatRanges
132
+ */
133
+ splitAt(value) {
134
+ if (this.value < value) {
135
+ throw new Error(`must split at value inside range`);
136
+ }
137
+ return [
138
+ this.fromSatRange(new SatRange_1.SatRange(BigInt(0), value - BigInt(1))),
139
+ this.fromSatRange(new SatRange_1.SatRange(value, this.value - BigInt(1))),
140
+ ];
141
+ }
142
+ /**
143
+ * Like splitAt but returns _null_ where a zero-sized OrdOutput would be
144
+ * @param value
145
+ */
146
+ splitAtAllowZero(value) {
147
+ if (value === BigInt(0)) {
148
+ return [null, this.fromSatRange(this.asSatRange())];
149
+ }
150
+ if (value === this.value) {
151
+ return [this.fromSatRange(this.asSatRange()), null];
152
+ }
153
+ return this.splitAt(value);
154
+ }
155
+ /**
156
+ * Split output successively at values.
157
+ * @param values
158
+ * @param exact - when set, ensure that value sum matches _this.value_
159
+ * @param allowZero - when set, return _null_ for zero-sized values
160
+ * @return (OrdOutput | null)[]. Zero-sized outputs are substituted with _null_.
161
+ */
162
+ splitAllWithParams(values, { exact = false, allowZero = false }) {
163
+ if (values.length === 0) {
164
+ throw new Error(`invalid argument`);
165
+ }
166
+ if (exact) {
167
+ const valueSum = values.reduce((a, b) => a + b, BigInt(0));
168
+ if (this.value !== valueSum) {
169
+ throw new Error(`value sum ${valueSum} does not match this.value ${this.value}`);
170
+ }
171
+ return this.splitAllWithParams(values.slice(0, -1), { allowZero, exact: false });
172
+ }
173
+ const [v, ...rest] = values;
174
+ const [a, b] = allowZero ? this.splitAtAllowZero(v) : this.splitAt(v);
175
+ if (rest.length) {
176
+ if (b === null) {
177
+ throw new Error(`invalid remainder`);
178
+ }
179
+ else {
180
+ return [a, ...b.splitAllWithParams(rest, { exact, allowZero })];
181
+ }
182
+ }
183
+ else {
184
+ return [a, b];
185
+ }
186
+ }
187
+ /**
188
+ * Split output successively at values.
189
+ * @param values
190
+ * @return OrdOutput[] with length _values.length + 1_
191
+ */
192
+ splitAll(values) {
193
+ return this.splitAllWithParams(values, { exact: false, allowZero: false });
194
+ }
195
+ }
196
+ exports.OrdOutput = OrdOutput;
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL09yZE91dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHOzs7QUFFSCx5Q0FBc0M7QUFFdEMsTUFBYSxnQkFBaUIsU0FBUSxLQUFLO0lBQ3pDLFlBQVksT0FBZSxFQUFTLEtBQWEsRUFBUyxRQUFvQjtRQUM1RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLGFBQVEsR0FBUixRQUFRLENBQVk7SUFFOUUsQ0FBQztDQUNGO0FBSkQsNENBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsU0FBUztJQUNwQjs7Ozs7T0FLRztJQUNILFlBQW1CLEtBQWEsRUFBUyxXQUF1QixFQUFFO1FBQS9DLFVBQUssR0FBTCxLQUFLLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNoRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLDRCQUE0QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEcsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzdCLE1B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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxNQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUExSUQsOEJBMElDIiwic291cmNlc0NvbnRlbnQiOlsiLypcblxuQ2xhc3NlcyB1c2VkIGZvciB0cmFja2luZyBzYXRzIGFjcm9zcyB0cmFuc2FjdGlvbnMuXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi9tYXN0ZXIvYmlwLm1lZGlhd2lraSNkZXNpZ25cblxuPiBUaGUgb3JkaW5hbCBudW1iZXJzIG9mIHNhdHMgaW4gdHJhbnNhY3Rpb24gaW5wdXRzIGFyZSB0cmFuc2ZlcnJlZCB0byBvdXRwdXQgc2F0cyBpblxuPiBmaXJzdC1pbi1maXJzdC1vdXQgb3JkZXIsIGFjY29yZGluZyB0byB0aGUgc2l6ZSBhbmQgb3JkZXIgb2YgdGhlIHRyYW5zYWN0aW9ucyBpbnB1dHMgYW5kIG91dHB1dHMuXG5cblxuU2FtcGxlIHNjZW5hcmlvOlxuICAgaW5wdXRzICAgICAgICAgaTAsIGkxLCBpMlxuICAgb3V0cHV0cyAgICAgICAgdTAsIHUxXG4gICBpbnNjcmlwdGlvbnMgICByMCwgcjEsIHIyLCByMywgcjRcblxuXG5jcmVhdGVPdXRwdXRzKFxuICBbaTAsIGkxXSxcbiAgW1xuICAgIFt1MCwgW3IwLCByMV1dLFxuICAgIFt1MSwgW3IyLCByM11dLFxuICBdXG4pO1xuXG4gIHI0IGlzIGRvbmF0ZWQgdG8gdGhlIG1pbmVyXG5cbiAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIOKUgiBpMCAgICAg4pSCIHUwICAgICDilIJcbiAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIwIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICDilIJcbiAg4pSCIGkxICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIxIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAg4pSCICAgICAgICDilIIgdTEgICAgIOKUglxuICDilIIgICAgIHIyIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICDilIJcbiAg4pSCIGkyICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHIzIOKUvCAgICAgICAg4pSCXG4gIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICDilIIgICAgICAgIOKUglxuICDilIIgICAgIHI0IOKUvFxuICDilIIgICAgICAgIOKUglxuICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilJhcblxuICovXG5cbmltcG9ydCB7IFNhdFJhbmdlIH0gZnJvbSAnLi9TYXRSYW5nZSc7XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkT3JkT3V0cHV0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyB2YWx1ZTogYmlnaW50LCBwdWJsaWMgb3JkaW5hbHM6IFNhdFJhbmdlW10pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBvcmRpbmFsIG1ldGFkYXRhIGZvciBhbiBvdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZE91dHB1dCB7XG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgLSB0aGUgaW5wdXQgdmFsdWVcbiAgICogQHBhcmFtIG9yZGluYWxzIC0gVGhlIG9yZGluYWwgcmFuZ2VzIG9mIGFuIG91dHB1dCwgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHNhdG9zaGkuXG4gICAqICAgICAgICAgICAgICAgICAgIFJlcXVpcmVkIHRvIGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy5cbiAgICogICAgICAgICAgICAgICAgICAgTm90IHJlcXVpcmVkIHRvIGJlIGV4aGF1c3RpdmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWU6IGJpZ2ludCwgcHVibGljIG9yZGluYWxzOiBTYXRSYW5nZVtdID0gW10pIHtcbiAgICBjb25zdCBtYXhSYW5nZSA9IHRoaXMuYXNTYXRSYW5nZSgpO1xuICAgIG9yZGluYWxzLmZvckVhY2goKHIsIGkpID0+IHtcbiAgICAgIGlmICghbWF4UmFuZ2UuaXNTdXBlcnNldE9mKHIpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3JkT3V0cHV0KGByYW5nZSAke3J9IG91dHNpZGUgb3V0cHV0IG1heFJhbmdlICR7bWF4UmFuZ2V9YCwgdmFsdWUsIG9yZGluYWxzKTtcbiAgICAgIH1cbiAgICAgIGlmICgwIDwgaSkge1xuICAgICAgICBjb25zdCBwcmV2UmFuZ2UgPSBvcmRpbmFsc1tpIC0gMV07XG4gICAgICAgIGlmIChyLnN0YXJ0IDw9IHByZXZSYW5nZS5lbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9yZE91dHB1dChgU2F0UmFuZ2UgIyR7aSAtIDF9ICR7cHJldlJhbmdlfSBvdmVybGFwcyBTYXRSYW5nZSAjJHtpfSAke3J9YCwgdmFsdWUsIG9yZGluYWxzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvdGhlclxuICAgKiBAcmV0dXJuIE9yZE91dHB1dCBleHRlbmRlZCBieSBvdGhlci52YWx1ZSBhbmQgU2F0UmFuZ2VzIHNoaWZ0ZWQgYnkgdGhpcy52YWx1ZVxuICAgKi9cbiAgam9pbmVkV2l0aChvdGhlcjogT3JkT3V0cHV0KTogT3JkT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IE9yZE91dHB1dCh0aGlzLnZhbHVlICsgb3RoZXIudmFsdWUsIFtcbiAgICAgIC4uLnRoaXMub3JkaW5hbHMsXG4gICAgICAuLi5vdGhlci5vcmRpbmFscy5tYXAoKHIpID0+IHIuc2hpZnRlZEJ5KHRoaXMudmFsdWUpKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3Jkc1xuICAgKiBAcmV0dXJuIHNpbmdsZSBPcmRPdXRwdXQgY29udGFpbmluZyBhbGwgU2F0UmFuZ2VzLCBzaGlmdGVkIGJ5IHByZWNlZGluZyBvdXRwdXQgdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgam9pbkFsbChvcmRzOiBPcmRPdXRwdXRbXSk6IE9yZE91dHB1dCB7XG4gICAgaWYgKG9yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBlbXB0eSBpbnB1dGApO1xuICAgIH1cbiAgICByZXR1cm4gb3Jkcy5yZWR1Y2UoKGEsIGIpID0+IGEuam9pbmVkV2l0aChiKSk7XG4gIH1cblxuICBhc1NhdFJhbmdlKCk6IFNhdFJhbmdlIHtcbiAgICByZXR1cm4gbmV3IFNhdFJhbmdlKEJpZ0ludCgwKSwgdGhpcy52YWx1ZSAtIEJpZ0ludCgxKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHJcbiAgICogQHJldHVybiBuZXcgT3JkT3V0cHV0IHdpdGggYWxsIHJhbmdlcyBmdWxseSBjb250YWluZWQgaW4gX3JfLiBTYXRSYW5nZXMgYXJlIGFsaWduZWQgdG8gbmV3IHN0YXJ0LlxuICAgKi9cbiAgZnJvbVNhdFJhbmdlKHI6IFNhdFJhbmdlKTogT3JkT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IE9yZE91dHB1dChcbiAgICAgIHIuc2l6ZSgpLFxuICAgICAgdGhpcy5vcmRpbmFscy5mbGF0TWFwKChzKSA9PiB7XG4gICAgICAgIGlmIChyLmludGVyc2VjdHNXaXRoKHMpKSB7XG4gICAgICAgICAgaWYgKCFyLmlzU3VwZXJzZXRPZihzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXJ0aWFsIG92ZXJsYXAgaW4gJHtyfSBhbmQgJHtzfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5zaGlmdGVkQnkoLXIuc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHJldHVybiBmaXJzdCBPcmRPdXRwdXQgd2l0aCB2YWx1ZSBgdmFsdWVgLCBzZWNvbmQgT3JkT3V0cHV0IHdpdGggcmVtYWluaW5nIHZhbHVlLlxuICAgKiAgICAgICAgIFdpdGggcmVzcGVjdGl2ZSBTYXRSYW5nZXNcbiAgICovXG4gIHNwbGl0QXQodmFsdWU6IGJpZ2ludCk6IFtPcmRPdXRwdXQsIE9yZE91dHB1dF0ge1xuICAgIGlmICh0aGlzLnZhbHVlIDwgdmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbXVzdCBzcGxpdCBhdCB2YWx1ZSBpbnNpZGUgcmFuZ2VgKTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuZnJvbVNhdFJhbmdlKG5ldyBTYXRSYW5nZShCaWdJbnQoMCksIHZhbHVlIC0gQmlnSW50KDEpKSksXG4gICAgICB0aGlzLmZyb21TYXRSYW5nZShuZXcgU2F0UmFuZ2UodmFsdWUsIHRoaXMudmFsdWUgLSBCaWdJbnQoMSkpKSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIExpa2Ugc3BsaXRBdCBidXQgcmV0dXJucyBfbnVsbF8gd2hlcmUgYSB6ZXJvLXNpemVkIE9yZE91dHB1dCB3b3VsZCBiZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHNwbGl0QXRBbGxvd1plcm8odmFsdWU6IGJpZ2ludCk6IFtPcmRPdXRwdXQgfCBudWxsLCBPcmRPdXRwdXQgfCBudWxsXSB7XG4gICAgaWYgKHZhbHVlID09PSBCaWdJbnQoMCkpIHtcbiAgICAgIHJldHVybiBbbnVsbCwgdGhpcy5mcm9tU2F0UmFuZ2UodGhpcy5hc1NhdFJhbmdlKCkpXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnZhbHVlKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZnJvbVNhdFJhbmdlKHRoaXMuYXNTYXRSYW5nZSgpKSwgbnVsbF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNwbGl0QXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IG91dHB1dCBzdWNjZXNzaXZlbHkgYXQgdmFsdWVzLlxuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBleGFjdCAtIHdoZW4gc2V0LCBlbnN1cmUgdGhhdCB2YWx1ZSBzdW0gbWF0Y2hlcyBfdGhpcy52YWx1ZV9cbiAgICogQHBhcmFtIGFsbG93WmVybyAtIHdoZW4gc2V0LCByZXR1cm4gX251bGxfIGZvciB6ZXJvLXNpemVkIHZhbHVlc1xuICAgKiBAcmV0dXJuIChPcmRPdXRwdXQgfCBudWxsKVtdLiBaZXJvLXNpemVkIG91dHB1dHMgYXJlIHN1YnN0aXR1dGVkIHdpdGggX251bGxfLlxuICAgKi9cbiAgc3BsaXRBbGxXaXRoUGFyYW1zKFxuICAgIHZhbHVlczogYmlnaW50W10sXG4gICAgeyBleGFjdCA9IGZhbHNlLCBhbGxvd1plcm8gPSBmYWxzZSB9OiB7IGFsbG93WmVybz86IGJvb2xlYW47IGV4YWN0PzogYm9vbGVhbiB9XG4gICk6IChPcmRPdXRwdXQgfCBudWxsKVtdIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFyZ3VtZW50YCk7XG4gICAgfVxuICAgIGlmIChleGFjdCkge1xuICAgICAgY29uc3QgdmFsdWVTdW0gPSB2YWx1ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgQmlnSW50KDApKTtcbiAgICAgIGlmICh0aGlzLnZhbHVlICE9PSB2YWx1ZVN1bSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlIHN1bSAke3ZhbHVlU3VtfSBkb2VzIG5vdCBtYXRjaCB0aGlzLnZhbHVlICR7dGhpcy52YWx1ZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNwbGl0QWxsV2l0aFBhcmFtcyh2YWx1ZXMuc2xpY2UoMCwgLTEpLCB7IGFsbG93WmVybywgZXhhY3Q6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBjb25zdCBbdiwgLi4ucmVzdF0gPSB2YWx1ZXM7XG4gICAgY29uc3QgW2EsIGJdID0gYWxsb3daZXJvID8gdGhpcy5zcGxpdEF0QWxsb3daZXJvKHYpIDogdGhpcy5zcGxpdEF0KHYpO1xuICAgIGlmIChyZXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHJlbWFpbmRlcmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFthLCAuLi5iLnNwbGl0QWxsV2l0aFBhcmFtcyhyZXN0LCB7IGV4YWN0LCBhbGxvd1plcm8gfSldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW2EsIGJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBvdXRwdXQgc3VjY2Vzc2l2ZWx5IGF0IHZhbHVlcy5cbiAgICogQHBhcmFtIHZhbHVlc1xuICAgKiBAcmV0dXJuIE9yZE91dHB1dFtdIHdpdGggbGVuZ3RoIF92YWx1ZXMubGVuZ3RoICsgMV9cbiAgICovXG4gIHNwbGl0QWxsKHZhbHVlczogYmlnaW50W10pOiBPcmRPdXRwdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3BsaXRBbGxXaXRoUGFyYW1zKHZhbHVlcywgeyBleGFjdDogZmFsc2UsIGFsbG93WmVybzogZmFsc2UgfSkgYXMgT3JkT3V0cHV0W107XG4gIH1cbn1cbiJdfQ==
@@ -2,7 +2,7 @@ import { OrdOutput } from './OrdOutput';
2
2
  /**
3
3
  * A range constraint
4
4
  */
5
- declare type Parameters<T> = {
5
+ type Parameters<T> = {
6
6
  /** Padding preceding the inscription output */
7
7
  firstChangeOutput: T;
8
8
  /** The inscription output that will inherit the input inscription */
@@ -16,7 +16,7 @@ declare type Parameters<T> = {
16
16
  export declare function toArray<T>(p: Parameters<T>): [T, T, T, T];
17
17
  export declare function toParameters<T>(firstChangeOutput: T, inscriptionOutput: T, secondChangeOutput: T, feeOutput: T): Parameters<T>;
18
18
  /** A finished output layout */
19
- export declare type OutputLayout = Parameters<bigint>;
19
+ export type OutputLayout = Parameters<bigint>;
20
20
  /**
21
21
  * Translates a layout into OrdOutputs. Absent outputs are set to `null`.
22
22
  *
@@ -28,7 +28,7 @@ export declare function getOrdOutputsForLayout(inscriptionInput: OrdOutput, layo
28
28
  /**
29
29
  * High-level constraints for output layout
30
30
  */
31
- export declare type Constraints = {
31
+ export type Constraints = {
32
32
  minChangeOutput: bigint;
33
33
  minInscriptionOutput: bigint;
34
34
  maxInscriptionOutput: bigint;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputLayout.d.ts","sourceRoot":"","sources":["../../../src/OutputLayout.ts"],"names":[],"mappings":"AAkGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAiBxC;;GAEG;AACH,KAAK,UAAU,CAAC,CAAC,IAAI;IACnB,+CAA+C;IAC/C,iBAAiB,EAAE,CAAC,CAAC;IACrB,qEAAqE;IACrE,iBAAiB,EAAE,CAAC,CAAC;IACrB,+CAA+C;IAC/C,kBAAkB,EAAE,CAAC,CAAC;IACtB,4DAA4D;IAC5D,SAAS,EAAE,CAAC,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAEzD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,iBAAiB,EAAE,CAAC,EACpB,iBAAiB,EAAE,CAAC,EACpB,kBAAkB,EAAE,CAAC,EACrB,SAAS,EAAE,CAAC,GACX,UAAU,CAAC,CAAC,CAAC,CAOf;AAED,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,YAAY,GACnB,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,CAO9B;AA0BD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA2DF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,GAC5C,YAAY,GAAG,SAAS,CAkC1B"}
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ /*
3
+
4
+ This file contains code for creating an output layouts for transactions that pass on inscriptions.
5
+
6
+ When passing on an inscription, we want to satisfy a few constraints:
7
+
8
+ * All outputs should be larger than a minimal value (dust limit)
9
+ * The sum of all output values needs to be less than the input to cover the transaction fee.
10
+ * The output containing the inscription should be as small as possible, but large enough to
11
+ contain the inscription.
12
+
13
+ To keep the inscription output small, we can pad the satoshi range preceding and following the range
14
+ with change outputs, which have a minimal size and incur a fee cost.
15
+
16
+
17
+ Broadly speaking, there are four scenarios:
18
+
19
+ (1) Small inscription input that has just enough value to pay for fee and a single inscription
20
+ output (u0). No padding outputs.
21
+ ┌────────┬────────┐
22
+ │ │ u0 │
23
+ │ r ┼ │
24
+ │ ├────────┘
25
+ │ │ fee
26
+ └────────┘
27
+
28
+
29
+ (2) Large inscription input with inscription close to start of input.
30
+ Inscription output followed by change output (u1) padding the remaining value.
31
+
32
+ ┌────────┬────────┐
33
+ │ │ u0 │
34
+ │ r ┼ │
35
+ │ ├────────┤
36
+ │ │ u1 │
37
+ │ │ │
38
+ │ │ │
39
+ │ │ │
40
+ │ │ │
41
+ │ │ │
42
+ │ │ │
43
+ │ │ │
44
+ │ │ │
45
+ │ │ │
46
+ │ ├────────┘
47
+ │ │
48
+ │ │ fee
49
+ │ │
50
+ └────────┘
51
+
52
+
53
+ (3) Large inscription input with inscription close to end of input.
54
+ Change output padding start followed by inscription output.
55
+
56
+ ┌────────┬────────┐
57
+ │ │ u0 │
58
+ │ │ │
59
+ │ │ │
60
+ │ │ │
61
+ │ │ │
62
+ │ │ │
63
+ │ │ │
64
+ │ │ │
65
+ │ │ │
66
+ │ ├────────┤
67
+ │ r ┼ │
68
+ │ │ u1 │
69
+ │ ├────────┘
70
+ │ │
71
+ │ │ fee
72
+ │ │
73
+ └────────┘
74
+
75
+
76
+ (4) Large inscription input with inscription in the middle.
77
+ Inscription input (u1) with padding on both sides (u0 and u2)
78
+
79
+ ┌────────┬────────┐
80
+ │ │ u0 │
81
+ │ │ │
82
+ │ │ │
83
+ │ │ │
84
+ │ │ │
85
+ │ ├────────┤
86
+ │ │ u1 │
87
+ │ r ┼ │
88
+ │ ├────────┤
89
+ │ │ u2 │
90
+ │ │ │
91
+ │ │ │
92
+ │ │ │
93
+ │ ├────────┘
94
+ │ │
95
+ │ │ fee
96
+ │ │
97
+ └────────┘
98
+ */
99
+ Object.defineProperty(exports, "__esModule", { value: true });
100
+ exports.toArray = toArray;
101
+ exports.toParameters = toParameters;
102
+ exports.getOrdOutputsForLayout = getOrdOutputsForLayout;
103
+ exports.findOutputLayout = findOutputLayout;
104
+ const ZERO = BigInt(0);
105
+ const ONE = BigInt(1);
106
+ function max(a, b) {
107
+ return a < b ? b : a;
108
+ }
109
+ function min(a, b) {
110
+ return a < b ? a : b;
111
+ }
112
+ function sum(arr) {
113
+ return arr.reduce((a, b) => a + b, ZERO);
114
+ }
115
+ /** @return canonical sequence of parameters */
116
+ function toArray(p) {
117
+ return [p.firstChangeOutput, p.inscriptionOutput, p.secondChangeOutput, p.feeOutput];
118
+ }
119
+ function toParameters(firstChangeOutput, inscriptionOutput, secondChangeOutput, feeOutput) {
120
+ return {
121
+ firstChangeOutput,
122
+ inscriptionOutput,
123
+ secondChangeOutput,
124
+ feeOutput,
125
+ };
126
+ }
127
+ /**
128
+ * Translates a layout into OrdOutputs. Absent outputs are set to `null`.
129
+ *
130
+ * @param inscriptionInput
131
+ * @param layout
132
+ * @return OrdOutputs for layout
133
+ */
134
+ function getOrdOutputsForLayout(inscriptionInput, layout) {
135
+ const outputs = inscriptionInput.splitAllWithParams(toArray(layout), { exact: true, allowZero: true });
136
+ if (outputs.length !== 4) {
137
+ throw new Error(`unexpected result`);
138
+ }
139
+ return toParameters(...outputs);
140
+ }
141
+ /**
142
+ * @param constraints
143
+ * @param inscriptionInput
144
+ * @param layout
145
+ * @return true iff layout satisfies constraints
146
+ */
147
+ function check(constraints, inscriptionInput, layout) {
148
+ if ((layout.firstChangeOutput === ZERO || constraints.minChangeOutput <= layout.firstChangeOutput) &&
149
+ (layout.secondChangeOutput === ZERO || constraints.minChangeOutput <= layout.secondChangeOutput) &&
150
+ constraints.minInscriptionOutput <= layout.inscriptionOutput &&
151
+ layout.inscriptionOutput <= constraints.maxInscriptionOutput &&
152
+ getFeeForOutputs(constraints, [layout.firstChangeOutput, layout.inscriptionOutput, layout.secondChangeOutput]) <=
153
+ layout.feeOutput &&
154
+ sum(toArray(layout)) === inscriptionInput.value) {
155
+ /* make sure inscription actually lies on the inscriptionOutput */
156
+ const outputs = getOrdOutputsForLayout(inscriptionInput, layout);
157
+ return outputs.inscriptionOutput?.ordinals.length === 1;
158
+ }
159
+ return false;
160
+ }
161
+ function getFeeForOutputs(p, outputs) {
162
+ return outputs.reduce((sum, oValue) => sum + (oValue === ZERO ? ZERO : p.feePerOutput), p.feeFixed);
163
+ }
164
+ function getStartChangeOutput(c) {
165
+ // we don't need a change padding output
166
+ if (c.satPos < c.maxInscriptionOutput) {
167
+ return ZERO;
168
+ }
169
+ if (c.minChangeOutput <= c.satPos) {
170
+ return c.satPos;
171
+ }
172
+ return null;
173
+ }
174
+ function getInscriptionOutput(c, startChangeOutput) {
175
+ const result = min(c.maxInscriptionOutput, max(c.minInscriptionOutput, c.satPos - startChangeOutput + ONE));
176
+ if (c.satPos < startChangeOutput || startChangeOutput + result < c.satPos) {
177
+ return null;
178
+ }
179
+ // if is not worth creating an end change output, let's maximize the inscription output
180
+ if (getEndChangeOutput(c, startChangeOutput, result) === ZERO) {
181
+ const remainder = c.total - startChangeOutput - getFeeForOutputs(c, [startChangeOutput, result]);
182
+ return min(remainder, c.maxInscriptionOutput);
183
+ }
184
+ return result;
185
+ }
186
+ function getEndChangeOutput(c, startChangeOutput, inscriptionOutput) {
187
+ const remainder = c.total - sum([startChangeOutput, inscriptionOutput]);
188
+ const minFeeWithoutSecondOutput = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput]);
189
+ const minFeeWithSecondOutput = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput, c.minChangeOutput]);
190
+ if (remainder < minFeeWithoutSecondOutput) {
191
+ // We cannot even pay the fee for the output(s) we have so far.
192
+ return null;
193
+ }
194
+ if (remainder - minFeeWithSecondOutput < c.minChangeOutput) {
195
+ // The remainder is too small to pay for the end change output. Let's skip it and pay a higher fee.
196
+ return ZERO;
197
+ }
198
+ // let's use as much as we can for fee while leaving enough for fee
199
+ return remainder - minFeeWithSecondOutput;
200
+ }
201
+ function getFeeOutput(c, startChangeOutput, inscriptionOutput, endChangeOutput) {
202
+ const minFee = getFeeForOutputs(c, [startChangeOutput, inscriptionOutput, endChangeOutput]);
203
+ const remainder = c.total - sum([startChangeOutput, inscriptionOutput, endChangeOutput]);
204
+ if (remainder < minFee) {
205
+ return null;
206
+ }
207
+ return remainder;
208
+ }
209
+ /**
210
+ * @param inscriptionInput
211
+ * @param search
212
+ * @return a solution that satisfies constraints. If no solution can be found, return `undefined`.
213
+ */
214
+ function findOutputLayout(inscriptionInput, search) {
215
+ if (inscriptionInput.ordinals.length !== 1) {
216
+ throw new Error(`unexpected ordinal count ${inscriptionInput.ordinals.length}`);
217
+ }
218
+ if (inscriptionInput.ordinals[0].size() !== ONE) {
219
+ throw new Error(`only single-satoshi inscriptions are supported`);
220
+ }
221
+ const satPos = inscriptionInput.ordinals[0].start;
222
+ const total = inscriptionInput.value;
223
+ const constraints = { ...search, satPos, total };
224
+ const startChangeOutput = getStartChangeOutput(constraints);
225
+ if (startChangeOutput === null) {
226
+ return;
227
+ }
228
+ const inscriptionOutput = getInscriptionOutput(constraints, startChangeOutput);
229
+ if (inscriptionOutput === null) {
230
+ return;
231
+ }
232
+ const endChangeOutput = getEndChangeOutput(constraints, startChangeOutput, inscriptionOutput);
233
+ if (endChangeOutput === null) {
234
+ return;
235
+ }
236
+ const feeOutput = getFeeOutput(constraints, startChangeOutput, inscriptionOutput, endChangeOutput);
237
+ if (feeOutput === null) {
238
+ return;
239
+ }
240
+ const result = toParameters(startChangeOutput, inscriptionOutput, endChangeOutput, feeOutput);
241
+ if (!check(constraints, inscriptionInput, result)) {
242
+ throw new Error(`invalid result`);
243
+ }
244
+ return result;
245
+ }
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0TGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL091dHB1dExheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdHRzs7QUFrQ0gsMEJBRUM7QUFFRCxvQ0FZQztBQVlELHdEQVVDO0FBcUdELDRDQXFDQztBQTlNRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRCLFNBQVMsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLEdBQWE7SUFDeEIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBZ0JELCtDQUErQztBQUMvQyxTQUFnQixPQUFPLENBQUksQ0FBZ0I7SUFDekMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RixDQUFDO0FB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QUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUVyQyxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFOUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxJQUFJLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMvRSxJQUFJLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDOUYsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDN0IsT0FBTztJQUNULENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ25HLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cblRoaXMgZmlsZSBjb250YWlucyBjb2RlIGZvciBjcmVhdGluZyBhbiBvdXRwdXQgbGF5b3V0cyBmb3IgdHJhbnNhY3Rpb25zIHRoYXQgcGFzcyBvbiBpbnNjcmlwdGlvbnMuXG5cbldoZW4gcGFzc2luZyBvbiBhbiBpbnNjcmlwdGlvbiwgd2Ugd2FudCB0byBzYXRpc2Z5IGEgZmV3IGNvbnN0cmFpbnRzOlxuXG4qIEFsbCBvdXRwdXRzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiBhIG1pbmltYWwgdmFsdWUgKGR1c3QgbGltaXQpXG4qIFRoZSBzdW0gb2YgYWxsIG91dHB1dCB2YWx1ZXMgbmVlZHMgdG8gYmUgbGVzcyB0aGFuIHRoZSBpbnB1dCB0byBjb3ZlciB0aGUgdHJhbnNhY3Rpb24gZmVlLlxuKiBUaGUgb3V0cHV0IGNvbnRhaW5pbmcgdGhlIGluc2NyaXB0aW9uIHNob3VsZCBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSwgYnV0IGxhcmdlIGVub3VnaCB0b1xuICBjb250YWluIHRoZSBpbnNjcmlwdGlvbi5cblxuVG8ga2VlcCB0aGUgaW5zY3JpcHRpb24gb3V0cHV0IHNtYWxsLCB3ZSBjYW4gcGFkIHRoZSBzYXRvc2hpIHJhbmdlIHByZWNlZGluZyBhbmQgZm9sbG93aW5nIHRoZSByYW5nZVxud2l0aCBjaGFuZ2Ugb3V0cHV0cywgd2hpY2ggaGF2ZSBhIG1pbmltYWwgc2l6ZSBhbmQgaW5jdXIgYSBmZWUgY29zdC5cblxuXG5Ccm9hZGx5IHNwZWFraW5nLCB0aGVyZSBhcmUgZm91ciBzY2VuYXJpb3M6XG5cbigxKSBTbWFsbCBpbnNjcmlwdGlvbiBpbnB1dCB0aGF0IGhhcyBqdXN0IGVub3VnaCB2YWx1ZSB0byBwYXkgZm9yIGZlZSBhbmQgYSBzaW5nbGUgaW5zY3JpcHRpb25cbiAgICBvdXRwdXQgKHUwKS4gTm8gcGFkZGluZyBvdXRwdXRzLlxuICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgIOKUgiAgICAgICAg4pSCIHUwICAgICDilIJcbiAgICDilIIgICAgICByIOKUvCAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICDilIIgICAgICAgIOKUgiBmZWVcbiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilJhcblxuXG4oMikgTGFyZ2UgaW5zY3JpcHRpb24gaW5wdXQgd2l0aCBpbnNjcmlwdGlvbiBjbG9zZSB0byBzdGFydCBvZiBpbnB1dC5cbiAgICBJbnNjcmlwdGlvbiBvdXRwdXQgZm9sbG93ZWQgYnkgY2hhbmdlIG91dHB1dCAodTEpIHBhZGRpbmcgdGhlIHJlbWFpbmluZyB2YWx1ZS5cblxuICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgIOKUgiAgICAgICAg4pSCIHUwICAgICDilIJcbiAgICDilIIgICAgICByIOKUvCAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilKRcbiAgICDilIIgICAgICAgIOKUgiB1MSAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCIGZlZVxuICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5cblxuKDMpIExhcmdlIGluc2NyaXB0aW9uIGlucHV0IHdpdGggaW5zY3JpcHRpb24gY2xvc2UgdG8gZW5kIG9mIGlucHV0LlxuICAgIENoYW5nZSBvdXRwdXQgcGFkZGluZyBzdGFydCBmb2xsb3dlZCBieSBpbnNjcmlwdGlvbiBvdXRwdXQuXG5cbiAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICDilIIgICAgICAgIOKUgiB1MCAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAgIOKUgiAgICAgIHIg4pS8ICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiB1MSAgICAg4pSCXG4gICAg4pSCICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCIGZlZVxuICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG5cblxuKDQpIExhcmdlIGluc2NyaXB0aW9uIGlucHV0IHdpdGggaW5zY3JpcHRpb24gaW4gdGhlIG1pZGRsZS5cbiAgICBJbnNjcmlwdGlvbiBpbnB1dCAodTEpIHdpdGggcGFkZGluZyBvbiBib3RoIHNpZGVzICh1MCBhbmQgdTIpXG5cbiAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICDilIIgICAgICAgIOKUgiB1MCAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkXG4gICAg4pSCICAgICAgICDilIIgdTEgICAgIOKUglxuICAgIOKUgiAgICAgIHIg4pS8ICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpFxuICAgIOKUgiAgICAgICAg4pSCIHUyICAgICDilIJcbiAgICDilIIgICAgICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgICAgICAgIOKUglxuICAgIOKUgiAgICAgICAg4pSCICAgICAgICDilIJcbiAgICDilIIgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgIOKUgiAgICAgICAg4pSCXG4gICAg4pSCICAgICAgICDilIIgZmVlXG4gICAg4pSCICAgICAgICDilIJcbiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAqL1xuXG5pbXBvcnQgeyBPcmRPdXRwdXQgfSBmcm9tICcuL09yZE91dHB1dCc7XG5cbmNvbnN0IFpFUk8gPSBCaWdJbnQoMCk7XG5jb25zdCBPTkUgPSBCaWdJbnQoMSk7XG5cbmZ1bmN0aW9uIG1heChhOiBiaWdpbnQsIGI6IGJpZ2ludCk6IGJpZ2ludCB7XG4gIHJldHVybiBhIDwgYiA/IGIgOiBhO1xufVxuXG5mdW5jdGlvbiBtaW4oYTogYmlnaW50LCBiOiBiaWdpbnQpOiBiaWdpbnQge1xuICByZXR1cm4gYSA8IGIgPyBhIDogYjtcbn1cblxuZnVuY3Rpb24gc3VtKGFycjogYmlnaW50W10pOiBiaWdpbnQge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIFpFUk8pO1xufVxuXG4vKipcbiAqIEEgcmFuZ2UgY29uc3RyYWludFxuICovXG50eXBlIFBhcmFtZXRlcnM8VD4gPSB7XG4gIC8qKiBQYWRkaW5nIHByZWNlZGluZyB0aGUgaW5zY3JpcHRpb24gb3V0cHV0ICovXG4gIGZpcnN0Q2hhbmdlT3V0cHV0OiBUO1xuICAvKiogVGhlIGluc2NyaXB0aW9uIG91dHB1dCB0aGF0IHdpbGwgaW5oZXJpdCB0aGUgaW5wdXQgaW5zY3JpcHRpb24gKi9cbiAgaW5zY3JpcHRpb25PdXRwdXQ6IFQ7XG4gIC8qKiBQYWRkaW5nIGZvbGxvd2luZyB0aGUgaW5zY3JpcHRpb24gb3V0cHV0ICovXG4gIHNlY29uZENoYW5nZU91dHB1dDogVDtcbiAgLyoqIE5vdCBhIHJlYWwgb3V0cHV0LCB1c2VkIG9ubHkgdG8gc2ltcGxpZnkgY2FsY3VsYXRpb25zICovXG4gIGZlZU91dHB1dDogVDtcbn07XG5cbi8qKiBAcmV0dXJuIGNhbm9uaWNhbCBzZXF1ZW5jZSBvZiBwYXJhbWV0ZXJzICovXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheTxUPihwOiBQYXJhbWV0ZXJzPFQ+KTogW1QsIFQsIFQsIFRdIHtcbiAgcmV0dXJuIFtwLmZpcnN0Q2hhbmdlT3V0cHV0LCBwLmluc2NyaXB0aW9uT3V0cHV0LCBwLnNlY29uZENoYW5nZU91dHB1dCwgcC5mZWVPdXRwdXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9QYXJhbWV0ZXJzPFQ+KFxuICBmaXJzdENoYW5nZU91dHB1dDogVCxcbiAgaW5zY3JpcHRpb25PdXRwdXQ6IFQsXG4gIHNlY29uZENoYW5nZU91dHB1dDogVCxcbiAgZmVlT3V0cHV0OiBUXG4pOiBQYXJhbWV0ZXJzPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdENoYW5nZU91dHB1dCxcbiAgICBpbnNjcmlwdGlvbk91dHB1dCxcbiAgICBzZWNvbmRDaGFuZ2VPdXRwdXQsXG4gICAgZmVlT3V0cHV0LFxuICB9O1xufVxuXG4vKiogQSBmaW5pc2hlZCBvdXRwdXQgbGF5b3V0ICovXG5leHBvcnQgdHlwZSBPdXRwdXRMYXlvdXQgPSBQYXJhbWV0ZXJzPGJpZ2ludD47XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIGxheW91dCBpbnRvIE9yZE91dHB1dHMuIEFic2VudCBvdXRwdXRzIGFyZSBzZXQgdG8gYG51bGxgLlxuICpcbiAqIEBwYXJhbSBpbnNjcmlwdGlvbklucHV0XG4gKiBAcGFyYW0gbGF5b3V0XG4gKiBAcmV0dXJuIE9yZE91dHB1dHMgZm9yIGxheW91dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JkT3V0cHV0c0ZvckxheW91dChcbiAgaW5zY3JpcHRpb25JbnB1dDogT3JkT3V0cHV0LFxuICBsYXlvdXQ6IE91dHB1dExheW91dFxuKTogUGFyYW1ldGVyczxPcmRPdXRwdXQgfCBudWxsPiB7XG4gIGNvbnN0IG91dHB1dHMgPSBpbnNjcmlwdGlvbklucHV0LnNwbGl0QWxsV2l0aFBhcmFtcyh0b0FycmF5KGxheW91dCksIHsgZXhhY3Q6IHRydWUsIGFsbG93WmVybzogdHJ1ZSB9KTtcbiAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHJlc3VsdGApO1xuICB9XG4gIHR5cGUgVCA9IE9yZE91dHB1dCB8IG51bGw7XG4gIHJldHVybiB0b1BhcmFtZXRlcnMoLi4uKG91dHB1dHMgYXMgW1QsIFQsIFQsIFRdKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0gaW5zY3JpcHRpb25JbnB1dFxuICogQHBhcmFtIGxheW91dFxuICogQHJldHVybiB0cnVlIGlmZiBsYXlvdXQgc2F0aXNmaWVzIGNvbnN0cmFpbnRzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrKGNvbnN0cmFpbnRzOiBDb25zdHJhaW50cywgaW5zY3JpcHRpb25JbnB1dDogT3JkT3V0cHV0LCBsYXlvdXQ6IE91dHB1dExheW91dCk6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgKGxheW91dC5maXJzdENoYW5nZU91dHB1dCA9PT0gWkVSTyB8fCBjb25zdHJhaW50cy5taW5DaGFuZ2VPdXRwdXQgPD0gbGF5b3V0LmZpcnN0Q2hhbmdlT3V0cHV0KSAmJlxuICAgIChsYXlvdXQuc2Vjb25kQ2hhbmdlT3V0cHV0ID09PSBaRVJPIHx8IGNvbnN0cmFpbnRzLm1pbkNoYW5nZU91dHB1dCA8PSBsYXlvdXQuc2Vjb25kQ2hhbmdlT3V0cHV0KSAmJlxuICAgIGNvbnN0cmFpbnRzLm1pbkluc2NyaXB0aW9uT3V0cHV0IDw9IGxheW91dC5pbnNjcmlwdGlvbk91dHB1dCAmJlxuICAgIGxheW91dC5pbnNjcmlwdGlvbk91dHB1dCA8PSBjb25zdHJhaW50cy5tYXhJbnNjcmlwdGlvbk91dHB1dCAmJlxuICAgIGdldEZlZUZvck91dHB1dHMoY29uc3RyYWludHMsIFtsYXlvdXQuZmlyc3RDaGFuZ2VPdXRwdXQsIGxheW91dC5pbnNjcmlwdGlvbk91dHB1dCwgbGF5b3V0LnNlY29uZENoYW5nZU91dHB1dF0pIDw9XG4gICAgICBsYXlvdXQuZmVlT3V0cHV0ICYmXG4gICAgc3VtKHRvQXJyYXkobGF5b3V0KSkgPT09IGluc2NyaXB0aW9uSW5wdXQudmFsdWVcbiAgKSB7XG4gICAgLyogbWFrZSBzdXJlIGluc2NyaXB0aW9uIGFjdHVhbGx5IGxpZXMgb24gdGhlIGluc2NyaXB0aW9uT3V0cHV0ICovXG4gICAgY29uc3Qgb3V0cHV0cyA9IGdldE9yZE91dHB1dHNGb3JMYXlvdXQoaW5zY3JpcHRpb25JbnB1dCwgbGF5b3V0KTtcbiAgICByZXR1cm4gb3V0cHV0cy5pbnNjcmlwdGlvbk91dHB1dD8ub3JkaW5hbHMubGVuZ3RoID09PSAxO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEhpZ2gtbGV2ZWwgY29uc3RyYWludHMgZm9yIG91dHB1dCBsYXlvdXRcbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RyYWludHMgPSB7XG4gIG1pbkNoYW5nZU91dHB1dDogYmlnaW50O1xuICBtaW5JbnNjcmlwdGlvbk91dHB1dDogYmlnaW50O1xuICBtYXhJbnNjcmlwdGlvbk91dHB1dDogYmlnaW50O1xuICBmZWVGaXhlZDogYmlnaW50O1xuICBmZWVQZXJPdXRwdXQ6IGJpZ2ludDtcbiAgc2F0UG9zOiBiaWdpbnQ7XG4gIHRvdGFsOiBiaWdpbnQ7XG59O1xuXG5mdW5jdGlvbiBnZXRGZWVGb3JPdXRwdXRzKHA6IHsgZmVlUGVyT3V0cHV0OiBiaWdpbnQ7IGZlZUZpeGVkOiBiaWdpbnQgfSwgb3V0cHV0czogYmlnaW50W10pOiBiaWdpbnQge1xuICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoKHN1bSwgb1ZhbHVlKTogYmlnaW50ID0+IHN1bSArIChvVmFsdWUgPT09IFpFUk8gPyBaRVJPIDogcC5mZWVQZXJPdXRwdXQpLCBwLmZlZUZpeGVkKTtcbn1cbmZ1bmN0aW9uIGdldFN0YXJ0Q2hhbmdlT3V0cHV0KGM6IENvbnN0cmFpbnRzKTogYmlnaW50IHwgbnVsbCB7XG4gIC8vIHdlIGRvbid0IG5lZWQgYSBjaGFuZ2UgcGFkZGluZyBvdXRwdXRcbiAgaWYgKGMuc2F0UG9zIDwgYy5tYXhJbnNjcmlwdGlvbk91dHB1dCkge1xuICAgIHJldHVybiBaRVJPO1xuICB9XG4gIGlmIChjLm1pbkNoYW5nZU91dHB1dCA8PSBjLnNhdFBvcykge1xuICAgIHJldHVybiBjLnNhdFBvcztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zY3JpcHRpb25PdXRwdXQoYzogQ29uc3RyYWludHMsIHN0YXJ0Q2hhbmdlT3V0cHV0OiBiaWdpbnQpOiBiaWdpbnQgfCBudWxsIHtcbiAgY29uc3QgcmVzdWx0ID0gbWluKGMubWF4SW5zY3JpcHRpb25PdXRwdXQsIG1heChjLm1pbkluc2NyaXB0aW9uT3V0cHV0LCBjLnNhdFBvcyAtIHN0YXJ0Q2hhbmdlT3V0cHV0ICsgT05FKSk7XG4gIGlmIChjLnNhdFBvcyA8IHN0YXJ0Q2hhbmdlT3V0cHV0IHx8IHN0YXJ0Q2hhbmdlT3V0cHV0ICsgcmVzdWx0IDwgYy5zYXRQb3MpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBpZiBpcyBub3Qgd29ydGggY3JlYXRpbmcgYW4gZW5kIGNoYW5nZSBvdXRwdXQsIGxldCdzIG1heGltaXplIHRoZSBpbnNjcmlwdGlvbiBvdXRwdXRcbiAgaWYgKGdldEVuZENoYW5nZU91dHB1dChjLCBzdGFydENoYW5nZU91dHB1dCwgcmVzdWx0KSA9PT0gWkVSTykge1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IGMudG90YWwgLSBzdGFydENoYW5nZU91dHB1dCAtIGdldEZlZUZvck91dHB1dHMoYywgW3N0YXJ0Q2hhbmdlT3V0cHV0LCByZXN1bHRdKTtcbiAgICByZXR1cm4gbWluKHJlbWFpbmRlciwgYy5tYXhJbnNjcmlwdGlvbk91dHB1dCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0RW5kQ2hhbmdlT3V0cHV0KGM6IENvbnN0cmFpbnRzLCBzdGFydENoYW5nZU91dHB1dDogYmlnaW50LCBpbnNjcmlwdGlvbk91dHB1dDogYmlnaW50KTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IHJlbWFpbmRlciA9IGMudG90YWwgLSBzdW0oW3N0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dF0pO1xuICBjb25zdCBtaW5GZWVXaXRob3V0U2Vjb25kT3V0cHV0ID0gZ2V0RmVlRm9yT3V0cHV0cyhjLCBbc3RhcnRDaGFuZ2VPdXRwdXQsIGluc2NyaXB0aW9uT3V0cHV0XSk7XG4gIGNvbnN0IG1pbkZlZVdpdGhTZWNvbmRPdXRwdXQgPSBnZXRGZWVGb3JPdXRwdXRzKGMsIFtzdGFydENoYW5nZU91dHB1dCwgaW5zY3JpcHRpb25PdXRwdXQsIGMubWluQ2hhbmdlT3V0cHV0XSk7XG4gIGlmIChyZW1haW5kZXIgPCBtaW5GZWVXaXRob3V0U2Vjb25kT3V0cHV0KSB7XG4gICAgLy8gV2UgY2Fubm90IGV2ZW4gcGF5IHRoZSBmZWUgZm9yIHRoZSBvdXRwdXQocykgd2UgaGF2ZSBzbyBmYXIuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHJlbWFpbmRlciAtIG1pbkZlZVdpdGhTZWNvbmRPdXRwdXQgPCBjLm1pbkNoYW5nZU91dHB1dCkge1xuICAgIC8vIFRoZSByZW1haW5kZXIgaXMgdG9vIHNtYWxsIHRvIHBheSBmb3IgdGhlIGVuZCBjaGFuZ2Ugb3V0cHV0LiBMZXQncyBza2lwIGl0IGFuZCBwYXkgYSBoaWdoZXIgZmVlLlxuICAgIHJldHVybiBaRVJPO1xuICB9XG4gIC8vIGxldCdzIHVzZSBhcyBtdWNoIGFzIHdlIGNhbiBmb3IgZmVlIHdoaWxlIGxlYXZpbmcgZW5vdWdoIGZvciBmZWVcbiAgcmV0dXJuIHJlbWFpbmRlciAtIG1pbkZlZVdpdGhTZWNvbmRPdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGdldEZlZU91dHB1dChcbiAgYzogQ29uc3RyYWludHMsXG4gIHN0YXJ0Q2hhbmdlT3V0cHV0OiBiaWdpbnQsXG4gIGluc2NyaXB0aW9uT3V0cHV0OiBiaWdpbnQsXG4gIGVuZENoYW5nZU91dHB1dDogYmlnaW50XG4pOiBiaWdpbnQgfCBudWxsIHtcbiAgY29uc3QgbWluRmVlID0gZ2V0RmVlRm9yT3V0cHV0cyhjLCBbc3RhcnRDaGFuZ2VPdXRwdXQsIGluc2NyaXB0aW9uT3V0cHV0LCBlbmRDaGFuZ2VPdXRwdXRdKTtcbiAgY29uc3QgcmVtYWluZGVyID0gYy50b3RhbCAtIHN1bShbc3RhcnRDaGFuZ2VPdXRwdXQsIGluc2NyaXB0aW9uT3V0cHV0LCBlbmRDaGFuZ2VPdXRwdXRdKTtcbiAgaWYgKHJlbWFpbmRlciA8IG1pbkZlZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiByZW1haW5kZXI7XG59XG5cbi8qKlxuICogQHBhcmFtIGluc2NyaXB0aW9uSW5wdXRcbiAqIEBwYXJhbSBzZWFyY2hcbiAqIEByZXR1cm4gYSBzb2x1dGlvbiB0aGF0IHNhdGlzZmllcyBjb25zdHJhaW50cy4gSWYgbm8gc29sdXRpb24gY2FuIGJlIGZvdW5kLCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3V0cHV0TGF5b3V0KFxuICBpbnNjcmlwdGlvbklucHV0OiBPcmRPdXRwdXQsXG4gIHNlYXJjaDogT21pdDxDb25zdHJhaW50cywgJ3NhdFBvcycgfCAndG90YWwnPlxuKTogT3V0cHV0TGF5b3V0IHwgdW5kZWZpbmVkIHtcbiAgaWYgKGluc2NyaXB0aW9uSW5wdXQub3JkaW5hbHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIG9yZGluYWwgY291bnQgJHtpbnNjcmlwdGlvbklucHV0Lm9yZGluYWxzLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAoaW5zY3JpcHRpb25JbnB1dC5vcmRpbmFsc1swXS5zaXplKCkgIT09IE9ORSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgb25seSBzaW5nbGUtc2F0b3NoaSBpbnNjcmlwdGlvbnMgYXJlIHN1cHBvcnRlZGApO1xuICB9XG5cbiAgY29uc3Qgc2F0UG9zID0gaW5zY3JpcHRpb25JbnB1dC5vcmRpbmFsc1swXS5zdGFydDtcbiAgY29uc3QgdG90YWwgPSBpbnNjcmlwdGlvbklucHV0LnZhbHVlO1xuXG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBDb25zdHJhaW50cyA9IHsgLi4uc2VhcmNoLCBzYXRQb3MsIHRvdGFsIH07XG5cbiAgY29uc3Qgc3RhcnRDaGFuZ2VPdXRwdXQgPSBnZXRTdGFydENoYW5nZU91dHB1dChjb25zdHJhaW50cyk7XG4gIGlmIChzdGFydENoYW5nZU91dHB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbnNjcmlwdGlvbk91dHB1dCA9IGdldEluc2NyaXB0aW9uT3V0cHV0KGNvbnN0cmFpbnRzLCBzdGFydENoYW5nZU91dHB1dCk7XG4gIGlmIChpbnNjcmlwdGlvbk91dHB1dCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbmRDaGFuZ2VPdXRwdXQgPSBnZXRFbmRDaGFuZ2VPdXRwdXQoY29uc3RyYWludHMsIHN0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dCk7XG4gIGlmIChlbmRDaGFuZ2VPdXRwdXQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZmVlT3V0cHV0ID0gZ2V0RmVlT3V0cHV0KGNvbnN0cmFpbnRzLCBzdGFydENoYW5nZU91dHB1dCwgaW5zY3JpcHRpb25PdXRwdXQsIGVuZENoYW5nZU91dHB1dCk7XG4gIGlmIChmZWVPdXRwdXQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gdG9QYXJhbWV0ZXJzKHN0YXJ0Q2hhbmdlT3V0cHV0LCBpbnNjcmlwdGlvbk91dHB1dCwgZW5kQ2hhbmdlT3V0cHV0LCBmZWVPdXRwdXQpO1xuICBpZiAoIWNoZWNrKGNvbnN0cmFpbnRzLCBpbnNjcmlwdGlvbklucHV0LCByZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHJlc3VsdGApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -1,4 +1,11 @@
1
- export declare type SatPoint = `${string}:${number}:${bigint}`;
1
+ export type SatPoint = `${string}:${number}:${bigint}`;
2
+ /**
3
+ * Parse an output ID (txid:vout) into its components.
4
+ */
5
+ export declare function parseOutputId(outputId: string): {
6
+ txid: string;
7
+ vout: number;
8
+ };
2
9
  export declare function parseSatPoint(p: SatPoint): {
3
10
  txid: string;
4
11
  vout: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SatPoint.d.ts","sourceRoot":"","sources":["../../../src/SatPoint.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAe9E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiBzF;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAE1F;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,QAAQ,CAOnD"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /*
3
+
4
+ https://github.com/casey/ord/blob/master/bip.mediawiki#terminology-and-notation
5
+
6
+ > A satpoint may be used to indicate the location of a sat within an output.
7
+ > A satpoint consists of an outpoint, i.e., a transaction ID and output index, with the addition of
8
+ > the offset of the ordinal within that output. For example, if the sat in question is at offset 6
9
+ > in the first output of a transaction, its satpoint is:
10
+ > `680df1e4d43016571e504b0b142ee43c5c0b83398a97bdcfd94ea6f287322d22:0:6`
11
+
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.parseOutputId = parseOutputId;
15
+ exports.parseSatPoint = parseSatPoint;
16
+ exports.formatSatPoint = formatSatPoint;
17
+ exports.isSatPoint = isSatPoint;
18
+ /**
19
+ * Parse an output ID (txid:vout) into its components.
20
+ */
21
+ function parseOutputId(outputId) {
22
+ const colonIndex = outputId.lastIndexOf(':');
23
+ if (colonIndex === -1) {
24
+ throw new Error(`Invalid output id format: missing colon`);
25
+ }
26
+ const txid = outputId.slice(0, colonIndex);
27
+ const voutStr = outputId.slice(colonIndex + 1);
28
+ if (txid.length !== 64 || !/^[0-9a-fA-F]+$/.test(txid)) {
29
+ throw new Error(`Invalid txid: must be 64 hex characters`);
30
+ }
31
+ const vout = parseInt(voutStr, 10);
32
+ if (isNaN(vout) || vout < 0) {
33
+ throw new Error(`Invalid vout: must be non-negative integer`);
34
+ }
35
+ return { txid, vout };
36
+ }
37
+ function parseSatPoint(p) {
38
+ const parts = p.split(':');
39
+ if (parts.length !== 3) {
40
+ throw new Error(`expected format txid:vout:sat`);
41
+ }
42
+ const [txid, vout, offsetStr] = parts;
43
+ const offset = BigInt(offsetStr);
44
+ if (offset.toString() !== offsetStr) {
45
+ throw new Error(`SatPoint offset must be base-10`);
46
+ }
47
+ if (offset < 0) {
48
+ throw new Error(`SatPoint offset must be positive`);
49
+ }
50
+ return {
51
+ ...parseOutputId([txid, vout].join(':')),
52
+ offset,
53
+ };
54
+ }
55
+ function formatSatPoint(p) {
56
+ return `${p.txid}:${p.vout}:${p.offset}`;
57
+ }
58
+ function isSatPoint(v) {
59
+ try {
60
+ parseSatPoint(v);
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvU2F0UG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0VBVUU7O0FBT0Ysc0NBZUM7QUFFRCxzQ0FpQkM7QUFFRCx3Q0FFQztBQUVELGdDQU9DO0FBbEREOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFFBQWdCO0lBQzVDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLENBQVc7SUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU87UUFDTCxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLENBQWlEO0lBQzlFLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBVyxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsQ0FBUztJQUNsQyxJQUFJLENBQUM7UUFDSCxhQUFhLENBQUMsQ0FBYSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi9tYXN0ZXIvYmlwLm1lZGlhd2lraSN0ZXJtaW5vbG9neS1hbmQtbm90YXRpb25cblxuPiBBIHNhdHBvaW50IG1heSBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBsb2NhdGlvbiBvZiBhIHNhdCB3aXRoaW4gYW4gb3V0cHV0LlxuPiBBIHNhdHBvaW50IGNvbnNpc3RzIG9mIGFuIG91dHBvaW50LCBpLmUuLCBhIHRyYW5zYWN0aW9uIElEIGFuZCBvdXRwdXQgaW5kZXgsIHdpdGggdGhlIGFkZGl0aW9uIG9mXG4+IHRoZSBvZmZzZXQgb2YgdGhlIG9yZGluYWwgd2l0aGluIHRoYXQgb3V0cHV0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHNhdCBpbiBxdWVzdGlvbiBpcyBhdCBvZmZzZXQgNlxuPiBpbiB0aGUgZmlyc3Qgb3V0cHV0IG9mIGEgdHJhbnNhY3Rpb24sIGl0cyBzYXRwb2ludCBpczpcbj4gYDY4MGRmMWU0ZDQzMDE2NTcxZTUwNGIwYjE0MmVlNDNjNWMwYjgzMzk4YTk3YmRjZmQ5NGVhNmYyODczMjJkMjI6MDo2YFxuXG4qL1xuXG5leHBvcnQgdHlwZSBTYXRQb2ludCA9IGAke3N0cmluZ306JHtudW1iZXJ9OiR7YmlnaW50fWA7XG5cbi8qKlxuICogUGFyc2UgYW4gb3V0cHV0IElEICh0eGlkOnZvdXQpIGludG8gaXRzIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU91dHB1dElkKG91dHB1dElkOiBzdHJpbmcpOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyIH0ge1xuICBjb25zdCBjb2xvbkluZGV4ID0gb3V0cHV0SWQubGFzdEluZGV4T2YoJzonKTtcbiAgaWYgKGNvbG9uSW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG91dHB1dCBpZCBmb3JtYXQ6IG1pc3NpbmcgY29sb25gKTtcbiAgfVxuICBjb25zdCB0eGlkID0gb3V0cHV0SWQuc2xpY2UoMCwgY29sb25JbmRleCk7XG4gIGNvbnN0IHZvdXRTdHIgPSBvdXRwdXRJZC5zbGljZShjb2xvbkluZGV4ICsgMSk7XG4gIGlmICh0eGlkLmxlbmd0aCAhPT0gNjQgfHwgIS9eWzAtOWEtZkEtRl0rJC8udGVzdCh0eGlkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eGlkOiBtdXN0IGJlIDY0IGhleCBjaGFyYWN0ZXJzYCk7XG4gIH1cbiAgY29uc3Qgdm91dCA9IHBhcnNlSW50KHZvdXRTdHIsIDEwKTtcbiAgaWYgKGlzTmFOKHZvdXQpIHx8IHZvdXQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZvdXQ6IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJgKTtcbiAgfVxuICByZXR1cm4geyB0eGlkLCB2b3V0IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhdFBvaW50KHA6IFNhdFBvaW50KTogeyB0eGlkOiBzdHJpbmc7IHZvdXQ6IG51bWJlcjsgb2Zmc2V0OiBiaWdpbnQgfSB7XG4gIGNvbnN0IHBhcnRzID0gcC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCBmb3JtYXQgdHhpZDp2b3V0OnNhdGApO1xuICB9XG4gIGNvbnN0IFt0eGlkLCB2b3V0LCBvZmZzZXRTdHJdID0gcGFydHM7XG4gIGNvbnN0IG9mZnNldCA9IEJpZ0ludChvZmZzZXRTdHIpO1xuICBpZiAob2Zmc2V0LnRvU3RyaW5nKCkgIT09IG9mZnNldFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2F0UG9pbnQgb2Zmc2V0IG11c3QgYmUgYmFzZS0xMGApO1xuICB9XG4gIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYXRQb2ludCBvZmZzZXQgbXVzdCBiZSBwb3NpdGl2ZWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ucGFyc2VPdXRwdXRJZChbdHhpZCwgdm91dF0uam9pbignOicpKSxcbiAgICBvZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTYXRQb2ludChwOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyOyBvZmZzZXQ6IGJpZ2ludCB9KTogU2F0UG9pbnQge1xuICByZXR1cm4gYCR7cC50eGlkfToke3Audm91dH06JHtwLm9mZnNldH1gIGFzIGNvbnN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXRQb2ludCh2OiBzdHJpbmcpOiB2IGlzIFNhdFBvaW50IHtcbiAgdHJ5IHtcbiAgICBwYXJzZVNhdFBvaW50KHYgYXMgU2F0UG9pbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SatRange.d.ts","sourceRoot":"","sources":["../../../src/SatRange.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACJ,KAAK,EAAE,MAAM;IAAS,GAAG,EAAE,MAAM;gBAAzD,OAAO,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAS,GAAG,EAAE,MAAM;CAGtE;AAMD;;;GAGG;AACH,qBAAa,QAAQ;IACA,KAAK,EAAE,MAAM;IAAS,GAAG,EAAE,MAAM;gBAAjC,KAAK,EAAE,MAAM,EAAS,GAAG,EAAE,MAAM;IAMpD;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAInC,oDAAoD;IACpD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO;IAQjD,oDAAoD;IACpD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO;IAK/C,QAAQ,IAAI,MAAM;IAOlB,IAAI,IAAI,MAAM;CAGf"}