@bitgo-beta/utxo-ord 1.1.3-alpha.412 → 1.1.3-alpha.414

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 (57) 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/cjs/src/OutputLayout.d.ts.map +1 -0
  4. package/dist/cjs/src/OutputLayout.js +246 -0
  5. package/dist/cjs/src/SatPoint.d.ts.map +1 -0
  6. package/dist/cjs/src/SatPoint.js +48 -0
  7. package/dist/cjs/src/SatRange.d.ts.map +1 -0
  8. package/dist/cjs/src/SatRange.js +58 -0
  9. package/dist/cjs/src/combinations.d.ts.map +1 -0
  10. package/dist/cjs/src/combinations.js +13 -0
  11. package/dist/cjs/src/index.d.ts.map +1 -0
  12. package/dist/{src → cjs/src}/index.js +1 -1
  13. package/dist/cjs/src/inscriptions.d.ts.map +1 -0
  14. package/dist/cjs/src/inscriptions.js +202 -0
  15. package/dist/cjs/src/psbt.d.ts.map +1 -0
  16. package/dist/cjs/src/psbt.js +154 -0
  17. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  18. package/dist/esm/OrdOutput.d.ts +65 -0
  19. package/dist/esm/OrdOutput.js +192 -0
  20. package/dist/esm/OutputLayout.d.ts +47 -0
  21. package/dist/esm/OutputLayout.js +240 -0
  22. package/dist/esm/SatPoint.d.ts +13 -0
  23. package/dist/esm/SatPoint.js +43 -0
  24. package/dist/esm/SatRange.d.ts +26 -0
  25. package/dist/esm/SatRange.js +53 -0
  26. package/dist/esm/combinations.d.ts +2 -0
  27. package/dist/esm/combinations.js +10 -0
  28. package/dist/esm/index.d.ts +10 -0
  29. package/dist/esm/index.js +10 -0
  30. package/dist/esm/inscriptions.d.ts +31 -0
  31. package/dist/esm/inscriptions.js +164 -0
  32. package/dist/esm/psbt.d.ts +67 -0
  33. package/dist/{src → esm}/psbt.js +31 -38
  34. package/package.json +26 -9
  35. package/dist/src/OrdOutput.js +0 -197
  36. package/dist/src/OutputLayout.js +0 -246
  37. package/dist/src/SatPoint.js +0 -48
  38. package/dist/src/SatRange.js +0 -58
  39. package/dist/src/combinations.js +0 -13
  40. package/dist/src/inscriptions.js +0 -202
  41. package/dist/tsconfig.tsbuildinfo +0 -1
  42. /package/dist/{src → cjs/src}/OrdOutput.d.ts +0 -0
  43. /package/dist/{src → cjs/src}/OutputLayout.d.ts +0 -0
  44. /package/dist/{src → cjs/src}/SatPoint.d.ts +0 -0
  45. /package/dist/{src → cjs/src}/SatRange.d.ts +0 -0
  46. /package/dist/{src → cjs/src}/combinations.d.ts +0 -0
  47. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  48. /package/dist/{src → cjs/src}/inscriptions.d.ts +0 -0
  49. /package/dist/{src → cjs/src}/psbt.d.ts +0 -0
  50. /package/dist/{src → esm}/OrdOutput.d.ts.map +0 -0
  51. /package/dist/{src → esm}/OutputLayout.d.ts.map +0 -0
  52. /package/dist/{src → esm}/SatPoint.d.ts.map +0 -0
  53. /package/dist/{src → esm}/SatRange.d.ts.map +0 -0
  54. /package/dist/{src → esm}/combinations.d.ts.map +0 -0
  55. /package/dist/{src → esm}/index.d.ts.map +0 -0
  56. /package/dist/{src → esm}/inscriptions.d.ts.map +0 -0
  57. /package/dist/{src → esm}/psbt.d.ts.map +0 -0
@@ -0,0 +1,43 @@
1
+ /*
2
+
3
+ https://github.com/casey/ord/blob/master/bip.mediawiki#terminology-and-notation
4
+
5
+ > A satpoint may be used to indicate the location of a sat within an output.
6
+ > A satpoint consists of an outpoint, i.e., a transaction ID and output index, with the addition of
7
+ > the offset of the ordinal within that output. For example, if the sat in question is at offset 6
8
+ > in the first output of a transaction, its satpoint is:
9
+ > `680df1e4d43016571e504b0b142ee43c5c0b83398a97bdcfd94ea6f287322d22:0:6`
10
+
11
+ */
12
+ import { bitgo } from '@bitgo-beta/utxo-lib';
13
+ export function parseSatPoint(p) {
14
+ const parts = p.split(':');
15
+ if (parts.length !== 3) {
16
+ throw new Error(`expected format txid:vout:sat`);
17
+ }
18
+ const [txid, vout, offsetStr] = parts;
19
+ const offset = BigInt(offsetStr);
20
+ if (offset.toString() !== offsetStr) {
21
+ throw new Error(`SatPoint offset must be base-10`);
22
+ }
23
+ if (offset < 0) {
24
+ throw new Error(`SatPoint offset must be positive`);
25
+ }
26
+ return {
27
+ ...bitgo.parseOutputId([txid, vout].join(':')),
28
+ offset,
29
+ };
30
+ }
31
+ export function formatSatPoint(p) {
32
+ return `${p.txid}:${p.vout}:${p.offset}`;
33
+ }
34
+ export function isSatPoint(v) {
35
+ try {
36
+ parseSatPoint(v);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7RUFVRTtBQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUk3QyxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVc7SUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU87UUFDTCxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBaUQ7SUFDOUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFXLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBUztJQUNsQyxJQUFJLENBQUM7UUFDSCxhQUFhLENBQUMsQ0FBYSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbmh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi9tYXN0ZXIvYmlwLm1lZGlhd2lraSN0ZXJtaW5vbG9neS1hbmQtbm90YXRpb25cblxuPiBBIHNhdHBvaW50IG1heSBiZSB1c2VkIHRvIGluZGljYXRlIHRoZSBsb2NhdGlvbiBvZiBhIHNhdCB3aXRoaW4gYW4gb3V0cHV0LlxuPiBBIHNhdHBvaW50IGNvbnNpc3RzIG9mIGFuIG91dHBvaW50LCBpLmUuLCBhIHRyYW5zYWN0aW9uIElEIGFuZCBvdXRwdXQgaW5kZXgsIHdpdGggdGhlIGFkZGl0aW9uIG9mXG4+IHRoZSBvZmZzZXQgb2YgdGhlIG9yZGluYWwgd2l0aGluIHRoYXQgb3V0cHV0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHNhdCBpbiBxdWVzdGlvbiBpcyBhdCBvZmZzZXQgNlxuPiBpbiB0aGUgZmlyc3Qgb3V0cHV0IG9mIGEgdHJhbnNhY3Rpb24sIGl0cyBzYXRwb2ludCBpczpcbj4gYDY4MGRmMWU0ZDQzMDE2NTcxZTUwNGIwYjE0MmVlNDNjNWMwYjgzMzk4YTk3YmRjZmQ5NGVhNmYyODczMjJkMjI6MDo2YFxuXG4qL1xuaW1wb3J0IHsgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCB0eXBlIFNhdFBvaW50ID0gYCR7c3RyaW5nfToke251bWJlcn06JHtiaWdpbnR9YDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2F0UG9pbnQocDogU2F0UG9pbnQpOiB7IHR4aWQ6IHN0cmluZzsgdm91dDogbnVtYmVyOyBvZmZzZXQ6IGJpZ2ludCB9IHtcbiAgY29uc3QgcGFydHMgPSBwLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGZvcm1hdCB0eGlkOnZvdXQ6c2F0YCk7XG4gIH1cbiAgY29uc3QgW3R4aWQsIHZvdXQsIG9mZnNldFN0cl0gPSBwYXJ0cztcbiAgY29uc3Qgb2Zmc2V0ID0gQmlnSW50KG9mZnNldFN0cik7XG4gIGlmIChvZmZzZXQudG9TdHJpbmcoKSAhPT0gb2Zmc2V0U3RyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTYXRQb2ludCBvZmZzZXQgbXVzdCBiZSBiYXNlLTEwYCk7XG4gIH1cbiAgaWYgKG9mZnNldCA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNhdFBvaW50IG9mZnNldCBtdXN0IGJlIHBvc2l0aXZlYCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5iaXRnby5wYXJzZU91dHB1dElkKFt0eGlkLCB2b3V0XS5qb2luKCc6JykpLFxuICAgIG9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFNhdFBvaW50KHA6IHsgdHhpZDogc3RyaW5nOyB2b3V0OiBudW1iZXI7IG9mZnNldDogYmlnaW50IH0pOiBTYXRQb2ludCB7XG4gIHJldHVybiBgJHtwLnR4aWR9OiR7cC52b3V0fToke3Aub2Zmc2V0fWAgYXMgY29uc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdFBvaW50KHY6IHN0cmluZyk6IHYgaXMgU2F0UG9pbnQge1xuICB0cnkge1xuICAgIHBhcnNlU2F0UG9pbnQodiBhcyBTYXRQb2ludCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ export declare class InvalidSatRange extends Error {
2
+ start: bigint;
3
+ end: bigint;
4
+ constructor(message: string, start: bigint, end: bigint);
5
+ }
6
+ /**
7
+ * Range of satoshi, inclusive.
8
+ * Inscriptions have start === end.
9
+ */
10
+ export declare class SatRange {
11
+ start: bigint;
12
+ end: bigint;
13
+ constructor(start: bigint, end: bigint);
14
+ /**
15
+ * @param offset
16
+ * @return SatRange with start and end shifted by offset
17
+ */
18
+ shiftedBy(offset: bigint): SatRange;
19
+ /** @return true iff this intersects with _other_ */
20
+ intersectsWith(other: bigint | SatRange): boolean;
21
+ /** @return true iff this is superset of _other_. */
22
+ isSupersetOf(other: bigint | SatRange): boolean;
23
+ toString(): string;
24
+ size(): bigint;
25
+ }
26
+ //# sourceMappingURL=SatRange.d.ts.map
@@ -0,0 +1,53 @@
1
+ export class InvalidSatRange extends Error {
2
+ constructor(message, start, end) {
3
+ super(message);
4
+ this.start = start;
5
+ this.end = end;
6
+ }
7
+ }
8
+ function toRange(v) {
9
+ return typeof v === 'bigint' ? new SatRange(v, v) : v;
10
+ }
11
+ /**
12
+ * Range of satoshi, inclusive.
13
+ * Inscriptions have start === end.
14
+ */
15
+ export class SatRange {
16
+ constructor(start, end) {
17
+ this.start = start;
18
+ this.end = end;
19
+ if (start < 0 || end < 0 || end < start) {
20
+ throw new InvalidSatRange(`Invalid SatRange [${start}, ${end}]`, start, end);
21
+ }
22
+ }
23
+ /**
24
+ * @param offset
25
+ * @return SatRange with start and end shifted by offset
26
+ */
27
+ shiftedBy(offset) {
28
+ return new SatRange(this.start + offset, this.end + offset);
29
+ }
30
+ /** @return true iff this intersects with _other_ */
31
+ intersectsWith(other) {
32
+ other = toRange(other);
33
+ if (this.start <= other.start) {
34
+ return other.start <= this.end;
35
+ }
36
+ return other.intersectsWith(this);
37
+ }
38
+ /** @return true iff this is superset of _other_. */
39
+ isSupersetOf(other) {
40
+ other = toRange(other);
41
+ return this.start <= other.start && other.end <= this.end;
42
+ }
43
+ toString() {
44
+ if (this.start === this.end) {
45
+ return `[${this.start}]`;
46
+ }
47
+ return `[${this.start}..${this.end}]`;
48
+ }
49
+ size() {
50
+ return this.end - this.start + BigInt(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2F0UmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2F0UmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWUsRUFBUyxLQUFhLEVBQVMsR0FBVztRQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEbUIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQVE7SUFFckUsQ0FBQztDQUNGO0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBb0I7SUFDbkMsT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNuQixZQUFtQixLQUFhLEVBQVMsR0FBVztRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNsRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxxQkFBcUIsS0FBSyxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELGNBQWMsQ0FBQyxLQUF3QjtRQUNyQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELFlBQVksQ0FBQyxLQUF3QjtRQUNuQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBJbnZhbGlkU2F0UmFuZ2UgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIHN0YXJ0OiBiaWdpbnQsIHB1YmxpYyBlbmQ6IGJpZ2ludCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvUmFuZ2UodjogYmlnaW50IHwgU2F0UmFuZ2UpOiBTYXRSYW5nZSB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ2JpZ2ludCcgPyBuZXcgU2F0UmFuZ2UodiwgdikgOiB2O1xufVxuXG4vKipcbiAqIFJhbmdlIG9mIHNhdG9zaGksIGluY2x1c2l2ZS5cbiAqIEluc2NyaXB0aW9ucyBoYXZlIHN0YXJ0ID09PSBlbmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYXRSYW5nZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogYmlnaW50LCBwdWJsaWMgZW5kOiBiaWdpbnQpIHtcbiAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA8IDAgfHwgZW5kIDwgc3RhcnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkU2F0UmFuZ2UoYEludmFsaWQgU2F0UmFuZ2UgWyR7c3RhcnR9LCAke2VuZH1dYCwgc3RhcnQsIGVuZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvZmZzZXRcbiAgICogQHJldHVybiBTYXRSYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgc2hpZnRlZCBieSBvZmZzZXRcbiAgICovXG4gIHNoaWZ0ZWRCeShvZmZzZXQ6IGJpZ2ludCk6IFNhdFJhbmdlIHtcbiAgICByZXR1cm4gbmV3IFNhdFJhbmdlKHRoaXMuc3RhcnQgKyBvZmZzZXQsIHRoaXMuZW5kICsgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJuIHRydWUgaWZmIHRoaXMgaW50ZXJzZWN0cyB3aXRoIF9vdGhlcl8gKi9cbiAgaW50ZXJzZWN0c1dpdGgob3RoZXI6IGJpZ2ludCB8IFNhdFJhbmdlKTogYm9vbGVhbiB7XG4gICAgb3RoZXIgPSB0b1JhbmdlKG90aGVyKTtcbiAgICBpZiAodGhpcy5zdGFydCA8PSBvdGhlci5zdGFydCkge1xuICAgICAgcmV0dXJuIG90aGVyLnN0YXJ0IDw9IHRoaXMuZW5kO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXIuaW50ZXJzZWN0c1dpdGgodGhpcyk7XG4gIH1cblxuICAvKiogQHJldHVybiB0cnVlIGlmZiB0aGlzIGlzIHN1cGVyc2V0IG9mIF9vdGhlcl8uICovXG4gIGlzU3VwZXJzZXRPZihvdGhlcjogYmlnaW50IHwgU2F0UmFuZ2UpOiBib29sZWFuIHtcbiAgICBvdGhlciA9IHRvUmFuZ2Uob3RoZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0IDw9IG90aGVyLnN0YXJ0ICYmIG90aGVyLmVuZCA8PSB0aGlzLmVuZDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc3RhcnQgPT09IHRoaXMuZW5kKSB7XG4gICAgICByZXR1cm4gYFske3RoaXMuc3RhcnR9XWA7XG4gICAgfVxuICAgIHJldHVybiBgWyR7dGhpcy5zdGFydH0uLiR7dGhpcy5lbmR9XWA7XG4gIH1cblxuICBzaXplKCk6IGJpZ2ludCB7XG4gICAgcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5zdGFydCArIEJpZ0ludCgxKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export declare function powerset<T>(arr: T[]): T[][];
2
+ //# sourceMappingURL=combinations.d.ts.map
@@ -0,0 +1,10 @@
1
+ export function powerset(arr) {
2
+ if (arr.length === 0) {
3
+ return [[]];
4
+ }
5
+ else {
6
+ const [a, ...rest] = arr;
7
+ return powerset(rest).flatMap((s) => [[a, ...s], s]);
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbWJpbmF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFJLEdBQVE7SUFDbEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN6QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHBvd2Vyc2V0PFQ+KGFycjogVFtdKTogVFtdW10ge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbW11dO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFthLCAuLi5yZXN0XSA9IGFycjtcbiAgICByZXR1cm4gcG93ZXJzZXQocmVzdCkuZmxhdE1hcCgocykgPT4gW1thLCAuLi5zXSwgc10pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * https://github.com/casey/ord/blob/0.5.1/bip.mediawiki
3
+ */
4
+ export * from './SatRange';
5
+ export * from './OrdOutput';
6
+ export * from './OutputLayout';
7
+ export * from './SatPoint';
8
+ export * from './psbt';
9
+ export * as inscriptions from './inscriptions';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * https://github.com/casey/ord/blob/0.5.1/bip.mediawiki
3
+ */
4
+ export * from './SatRange';
5
+ export * from './OrdOutput';
6
+ export * from './OutputLayout';
7
+ export * from './SatPoint';
8
+ export * from './psbt';
9
+ export * as inscriptions from './inscriptions';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxZQUFZLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXNleS9vcmQvYmxvYi8wLjUuMS9iaXAubWVkaWF3aWtpXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9TYXRSYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL09yZE91dHB1dCc7XG5leHBvcnQgKiBmcm9tICcuL091dHB1dExheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL1NhdFBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHNidCc7XG5leHBvcnQgKiBhcyBpbnNjcmlwdGlvbnMgZnJvbSAnLi9pbnNjcmlwdGlvbnMnO1xuIl19
@@ -0,0 +1,31 @@
1
+ import { Network } from '@bitgo-beta/utxo-lib';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { PreparedInscriptionRevealData } from '@bitgo-beta/sdk-core';
4
+ /**
5
+ * @param pubkey
6
+ * @param contentType
7
+ * @param inscriptionData
8
+ * @param network
9
+ * @returns PreparedInscriptionRevealData
10
+ */
11
+ export declare function createInscriptionRevealData(pubkey: Buffer, contentType: string, inscriptionData: Buffer, network: Network): PreparedInscriptionRevealData;
12
+ /**
13
+ * @param pubkey
14
+ * @param contentType
15
+ * @param inscriptionData
16
+ * @returns inscription address
17
+ */
18
+ export declare function createOutputScriptForInscription(pubkey: Buffer, contentType: string, inscriptionData: Buffer): Buffer;
19
+ /**
20
+ *
21
+ * @param privateKey
22
+ * @param tapLeafScript
23
+ * @param commitAddress
24
+ * @param recipientAddress
25
+ * @param unsignedCommitTx
26
+ * @param network
27
+ *
28
+ * @return a fully signed reveal transaction
29
+ */
30
+ export declare function signRevealTransaction(privateKey: Buffer, tapLeafScript: utxolib.bitgo.TapLeafScript, commitAddress: string, recipientAddress: string, unsignedCommitTx: Buffer, network: Network): utxolib.bitgo.UtxoPsbt;
31
+ //# sourceMappingURL=inscriptions.d.ts.map
@@ -0,0 +1,164 @@
1
+ /*
2
+ Functions for dealing with inscriptions.
3
+
4
+ See https://docs.ordinals.com/inscriptions.html
5
+ */
6
+ import * as assert from 'assert';
7
+ import { p2trPayments as payments, ecc as eccLib, script as bscript, bitgo, address, taproot, ECPair, } from '@bitgo-beta/utxo-lib';
8
+ import * as utxolib from '@bitgo-beta/utxo-lib';
9
+ const OPS = bscript.OPS;
10
+ const MAX_LENGTH_TAP_DATA_PUSH = 520;
11
+ // default "postage" amount
12
+ // https://github.com/ordinals/ord/blob/0.24.2/src/lib.rs#L149
13
+ const DEFAULT_POSTAGE_AMOUNT = BigInt(10000);
14
+ /**
15
+ * The max size of an individual OP_PUSH in a Taproot script is 520 bytes. This
16
+ * function splits inscriptionData into an array buffer of 520 bytes length.
17
+ * https://docs.ordinals.com/inscriptions.html
18
+ * @param inscriptionData
19
+ * @param chunkSize
20
+ */
21
+ function splitBuffer(inscriptionData, chunkSize) {
22
+ const pushDataBuffers = [];
23
+ for (let i = 0; i < inscriptionData.length; i += chunkSize) {
24
+ pushDataBuffers.push(inscriptionData.slice(i, i + chunkSize));
25
+ }
26
+ return pushDataBuffers;
27
+ }
28
+ /**
29
+ *
30
+ * @returns inscription payment object
31
+ * @param pubkey
32
+ * @param contentType
33
+ * @param inscriptionData
34
+ */
35
+ function createPaymentForInscription(pubkey, contentType, inscriptionData) {
36
+ const dataPushBuffers = splitBuffer(inscriptionData, MAX_LENGTH_TAP_DATA_PUSH);
37
+ const uncompiledScript = [
38
+ pubkey,
39
+ OPS.OP_CHECKSIG,
40
+ OPS.OP_FALSE,
41
+ OPS.OP_IF,
42
+ Buffer.from('ord', 'ascii'),
43
+ 1, // these two lines should be combined as a single OPS.OP_1,
44
+ 1, // but `ord`'s decoder has a bug so it has to be like this
45
+ Buffer.from(contentType, 'ascii'),
46
+ OPS.OP_0,
47
+ ...dataPushBuffers,
48
+ OPS.OP_ENDIF,
49
+ ];
50
+ const compiledScript = bscript.compile(uncompiledScript);
51
+ const redeem = {
52
+ output: compiledScript,
53
+ depth: 0,
54
+ };
55
+ return payments.p2tr({ redeems: [redeem], redeemIndex: 0 }, { eccLib });
56
+ }
57
+ /**
58
+ * @param payment
59
+ * @param controlBlock
60
+ * @param commitOutput
61
+ * @param network
62
+ * @return virtual size of a transaction with a single inscription reveal input and a single commitOutput
63
+ */
64
+ function getInscriptionRevealSize(payment, controlBlock, commitOutput, network) {
65
+ const psbt = bitgo.createPsbtForNetwork({ network });
66
+ const parsedControlBlock = taproot.parseControlBlock(eccLib, controlBlock);
67
+ const leafHash = taproot.getTapleafHash(eccLib, parsedControlBlock, payment.redeem?.output);
68
+ psbt.addInput({
69
+ hash: Buffer.alloc(32),
70
+ index: 0,
71
+ witnessUtxo: { script: commitOutput, value: BigInt(100000) },
72
+ tapLeafScript: [
73
+ {
74
+ controlBlock,
75
+ script: payment.redeem?.output,
76
+ leafVersion: taproot.INITIAL_TAPSCRIPT_VERSION,
77
+ },
78
+ ],
79
+ });
80
+ psbt.addOutput({ script: commitOutput, value: DEFAULT_POSTAGE_AMOUNT });
81
+ psbt.signTaprootInput(0, {
82
+ publicKey: Buffer.alloc(32),
83
+ signSchnorr(hash) {
84
+ // dummy schnorr-sized signature
85
+ return Buffer.alloc(64);
86
+ },
87
+ }, [leafHash]);
88
+ psbt.finalizeTapInputWithSingleLeafScriptAndSignature(0);
89
+ return psbt.extractTransaction(/* disableFeeCheck */ true).virtualSize();
90
+ }
91
+ /**
92
+ * @param pubkey
93
+ * @param contentType
94
+ * @param inscriptionData
95
+ * @param network
96
+ * @returns PreparedInscriptionRevealData
97
+ */
98
+ export function createInscriptionRevealData(pubkey, contentType, inscriptionData, network) {
99
+ const payment = createPaymentForInscription(pubkey, contentType, inscriptionData);
100
+ const { output: commitOutput, controlBlock } = payment;
101
+ assert.ok(commitOutput);
102
+ assert.ok(controlBlock);
103
+ assert.ok(payment.redeem?.output);
104
+ const commitAddress = address.fromOutputScript(commitOutput, network);
105
+ const tapLeafScript = [
106
+ {
107
+ controlBlock,
108
+ script: payment.redeem?.output,
109
+ leafVersion: taproot.INITIAL_TAPSCRIPT_VERSION,
110
+ },
111
+ ];
112
+ const revealTransactionVSize = getInscriptionRevealSize(payment, controlBlock, commitOutput, network);
113
+ return {
114
+ address: commitAddress,
115
+ revealTransactionVSize,
116
+ tapLeafScript: tapLeafScript[0],
117
+ };
118
+ }
119
+ /**
120
+ * @param pubkey
121
+ * @param contentType
122
+ * @param inscriptionData
123
+ * @returns inscription address
124
+ */
125
+ export function createOutputScriptForInscription(pubkey, contentType, inscriptionData) {
126
+ const payment = createPaymentForInscription(pubkey, contentType, inscriptionData);
127
+ assert.ok(payment.output, 'Failed to create inscription output script');
128
+ return payment.output;
129
+ }
130
+ /**
131
+ *
132
+ * @param privateKey
133
+ * @param tapLeafScript
134
+ * @param commitAddress
135
+ * @param recipientAddress
136
+ * @param unsignedCommitTx
137
+ * @param network
138
+ *
139
+ * @return a fully signed reveal transaction
140
+ */
141
+ export function signRevealTransaction(privateKey, tapLeafScript, commitAddress, recipientAddress, unsignedCommitTx, network) {
142
+ const unserCommitTxn = utxolib.bitgo.createTransactionFromBuffer(unsignedCommitTx, network);
143
+ const hash = unserCommitTxn.getHash();
144
+ const commitOutput = utxolib.address.toOutputScript(commitAddress, network);
145
+ const vout = unserCommitTxn.outs.findIndex((out) => out.script.equals(commitOutput));
146
+ if (vout === -1) {
147
+ throw new Error('Invalid commit transaction');
148
+ }
149
+ const psbt = bitgo.createPsbtForNetwork({ network });
150
+ psbt.addInput({
151
+ hash,
152
+ index: vout,
153
+ witnessUtxo: { script: commitOutput, value: BigInt(unserCommitTxn.outs[vout].value) },
154
+ tapLeafScript: [tapLeafScript],
155
+ });
156
+ const recipientOutput = address.toOutputScript(recipientAddress, network);
157
+ psbt.addOutput({ script: recipientOutput, value: BigInt(10000) });
158
+ const signer = ECPair.fromPrivateKey(privateKey);
159
+ const parsedControlBlock = taproot.parseControlBlock(eccLib, tapLeafScript.controlBlock);
160
+ const leafHash = taproot.getTapleafHash(eccLib, parsedControlBlock, tapLeafScript.script);
161
+ psbt.signTaprootInput(0, signer, [leafHash]);
162
+ return psbt;
163
+ }
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zY3JpcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luc2NyaXB0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztFQUlFO0FBRUYsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUNMLFlBQVksSUFBSSxRQUFRLEVBQ3hCLEdBQUcsSUFBSSxNQUFNLEVBQ2IsTUFBTSxJQUFJLE9BQU8sRUFHakIsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsTUFBTSxHQUNQLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxLQUFLLE9BQU8sTUFBTSxzQkFBc0IsQ0FBQztBQUdoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3hCLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLDJCQUEyQjtBQUMzQiw4REFBOEQ7QUFDOUQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBTSxDQUFDLENBQUM7QUFFOUM7Ozs7OztHQU1HO0FBQ0gsU0FBUyxXQUFXLENBQUMsZUFBdUIsRUFBRSxTQUFpQjtJQUM3RCxNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzNELGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDJCQUEyQixDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLGVBQXVCO0lBQy9GLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxlQUFlLEVBQUUsd0JBQXdC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LENBQUMsQ0FBQztJQUNqRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxNQUFnQixDQUFDLENBQUM7SUFDcEcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5GdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBpbnNjcmlwdGlvbnMuXG5cblNlZSBodHRwczovL2RvY3Mub3JkaW5hbHMuY29tL2luc2NyaXB0aW9ucy5odG1sXG4qL1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gIHAydHJQYXltZW50cyBhcyBwYXltZW50cyxcbiAgZWNjIGFzIGVjY0xpYixcbiAgc2NyaXB0IGFzIGJzY3JpcHQsXG4gIFBheW1lbnQsXG4gIE5ldHdvcmssXG4gIGJpdGdvLFxuICBhZGRyZXNzLFxuICB0YXByb290LFxuICBFQ1BhaXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgUHJlcGFyZWRJbnNjcmlwdGlvblJldmVhbERhdGEgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmNvbnN0IE9QUyA9IGJzY3JpcHQuT1BTO1xuY29uc3QgTUFYX0xFTkdUSF9UQVBfREFUQV9QVVNIID0gNTIwO1xuLy8gZGVmYXVsdCBcInBvc3RhZ2VcIiBhbW91bnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcmRpbmFscy9vcmQvYmxvYi8wLjI0LjIvc3JjL2xpYi5ycyNMMTQ5XG5jb25zdCBERUZBVUxUX1BPU1RBR0VfQU1PVU5UID0gQmlnSW50KDEwXzAwMCk7XG5cbi8qKlxuICogVGhlIG1heCBzaXplIG9mIGFuIGluZGl2aWR1YWwgT1BfUFVTSCBpbiBhIFRhcHJvb3Qgc2NyaXB0IGlzIDUyMCBieXRlcy4gVGhpc1xuICogZnVuY3Rpb24gc3BsaXRzIGluc2NyaXB0aW9uRGF0YSBpbnRvIGFuIGFycmF5IGJ1ZmZlciBvZiA1MjAgYnl0ZXMgbGVuZ3RoLlxuICogaHR0cHM6Ly9kb2NzLm9yZGluYWxzLmNvbS9pbnNjcmlwdGlvbnMuaHRtbFxuICogQHBhcmFtIGluc2NyaXB0aW9uRGF0YVxuICogQHBhcmFtIGNodW5rU2l6ZVxuICovXG5mdW5jdGlvbiBzcGxpdEJ1ZmZlcihpbnNjcmlwdGlvbkRhdGE6IEJ1ZmZlciwgY2h1bmtTaXplOiBudW1iZXIpIHtcbiAgY29uc3QgcHVzaERhdGFCdWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGluc2NyaXB0aW9uRGF0YS5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgcHVzaERhdGFCdWZmZXJzLnB1c2goaW5zY3JpcHRpb25EYXRhLnNsaWNlKGksIGkgKyBjaHVua1NpemUpKTtcbiAgfVxuXG4gIHJldHVybiBwdXNoRGF0YUJ1ZmZlcnM7XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm5zIGluc2NyaXB0aW9uIHBheW1lbnQgb2JqZWN0XG4gKiBAcGFyYW0gcHVia2V5XG4gKiBAcGFyYW0gY29udGVudFR5cGVcbiAqIEBwYXJhbSBpbnNjcmlwdGlvbkRhdGFcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGF5bWVudEZvckluc2NyaXB0aW9uKHB1YmtleTogQnVmZmVyLCBjb250ZW50VHlwZTogc3RyaW5nLCBpbnNjcmlwdGlvbkRhdGE6IEJ1ZmZlcik6IFBheW1lbnQge1xuICBjb25zdCBkYXRhUHVzaEJ1ZmZlcnMgPSBzcGxpdEJ1ZmZlcihpbnNjcmlwdGlvbkRhdGEsIE1BWF9MRU5HVEhfVEFQX0RBVEFfUFVTSCk7XG5cbiAgY29uc3QgdW5jb21waWxlZFNjcmlwdCA9IFtcbiAgICBwdWJrZXksXG4gICAgT1BTLk9QX0NIRUNLU0lHLFxuICAgIE9QUy5PUF9GQUxTRSxcbiAgICBPUFMuT1BfSUYsXG4gICAgQnVmZmVyLmZyb20oJ29yZCcsICdhc2NpaScpLFxuICAgIDEsIC8vIHRoZXNlIHR3byBsaW5lcyBzaG91bGQgYmUgY29tYmluZWQgYXMgYSBzaW5nbGUgT1BTLk9QXzEsXG4gICAgMSwgLy8gYnV0IGBvcmRgJ3MgZGVjb2RlciBoYXMgYSBidWcgc28gaXQgaGFzIHRvIGJlIGxpa2UgdGhpc1xuICAgIEJ1ZmZlci5mcm9tKGNvbnRlbnRUeXBlLCAnYXNjaWknKSxcbiAgICBPUFMuT1BfMCxcbiAgICAuLi5kYXRhUHVzaEJ1ZmZlcnMsXG4gICAgT1BTLk9QX0VORElGLFxuICBdO1xuXG4gIGNvbnN0IGNvbXBpbGVkU2NyaXB0ID0gYnNjcmlwdC5jb21waWxlKHVuY29tcGlsZWRTY3JpcHQpO1xuICBjb25zdCByZWRlZW06IFBheW1lbnQgPSB7XG4gICAgb3V0cHV0OiBjb21waWxlZFNjcmlwdCxcbiAgICBkZXB0aDogMCxcbiAgfTtcblxuICByZXR1cm4gcGF5bWVudHMucDJ0cih7IHJlZGVlbXM6IFtyZWRlZW1dLCByZWRlZW1JbmRleDogMCB9LCB7IGVjY0xpYiB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcGF5bWVudFxuICogQHBhcmFtIGNvbnRyb2xCbG9ja1xuICogQHBhcmFtIGNvbW1pdE91dHB1dFxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm4gdmlydHVhbCBzaXplIG9mIGEgdHJhbnNhY3Rpb24gd2l0aCBhIHNpbmdsZSBpbnNjcmlwdGlvbiByZXZlYWwgaW5wdXQgYW5kIGEgc2luZ2xlIGNvbW1pdE91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRJbnNjcmlwdGlvblJldmVhbFNpemUoXG4gIHBheW1lbnQ6IFBheW1lbnQsXG4gIGNvbnRyb2xCbG9jazogQnVmZmVyLFxuICBjb21taXRPdXRwdXQ6IEJ1ZmZlcixcbiAgbmV0d29yazogTmV0d29ya1xuKTogbnVtYmVyIHtcbiAgY29uc3QgcHNidCA9IGJpdGdvLmNyZWF0ZVBzYnRGb3JOZXR3b3JrKHsgbmV0d29yayB9KTtcbiAgY29uc3QgcGFyc2VkQ29udHJvbEJsb2NrID0gdGFwcm9vdC5wYXJzZUNvbnRyb2xCbG9jayhlY2NMaWIsIGNvbnRyb2xCbG9jayk7XG4gIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIHBhcnNlZENvbnRyb2xCbG9jaywgcGF5bWVudC5yZWRlZW0/Lm91dHB1dCBhcyBCdWZmZXIpO1xuXG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMiksXG4gICAgaW5kZXg6IDAsXG4gICAgd2l0bmVzc1V0eG86IHsgc2NyaXB0OiBjb21taXRPdXRwdXQsIHZhbHVlOiBCaWdJbnQoMTAwXzAwMCkgfSxcbiAgICB0YXBMZWFmU2NyaXB0OiBbXG4gICAgICB7XG4gICAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgICAgc2NyaXB0OiBwYXltZW50LnJlZGVlbT8ub3V0cHV0IGFzIEJ1ZmZlcixcbiAgICAgICAgbGVhZlZlcnNpb246IHRhcHJvb3QuSU5JVElBTF9UQVBTQ1JJUFRfVkVSU0lPTixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG4gIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiBjb21taXRPdXRwdXQsIHZhbHVlOiBERUZBVUxUX1BPU1RBR0VfQU1PVU5UIH0pO1xuXG4gIHBzYnQuc2lnblRhcHJvb3RJbnB1dChcbiAgICAwLFxuICAgIHtcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmFsbG9jKDMyKSxcbiAgICAgIHNpZ25TY2hub3JyKGhhc2g6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgICAgIC8vIGR1bW15IHNjaG5vcnItc2l6ZWQgc2lnbmF0dXJlXG4gICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoNjQpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFtsZWFmSGFzaF1cbiAgKTtcblxuICBwc2J0LmZpbmFsaXplVGFwSW5wdXRXaXRoU2luZ2xlTGVhZlNjcmlwdEFuZFNpZ25hdHVyZSgwKTtcbiAgcmV0dXJuIHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKC8qIGRpc2FibGVGZWVDaGVjayAqLyB0cnVlKS52aXJ0dWFsU2l6ZSgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwdWJrZXlcbiAqIEBwYXJhbSBjb250ZW50VHlwZVxuICogQHBhcmFtIGluc2NyaXB0aW9uRGF0YVxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm5zIFByZXBhcmVkSW5zY3JpcHRpb25SZXZlYWxEYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnNjcmlwdGlvblJldmVhbERhdGEoXG4gIHB1YmtleTogQnVmZmVyLFxuICBjb250ZW50VHlwZTogc3RyaW5nLFxuICBpbnNjcmlwdGlvbkRhdGE6IEJ1ZmZlcixcbiAgbmV0d29yazogTmV0d29ya1xuKTogUHJlcGFyZWRJbnNjcmlwdGlvblJldmVhbERhdGEge1xuICBjb25zdCBwYXltZW50ID0gY3JlYXRlUGF5bWVudEZvckluc2NyaXB0aW9uKHB1YmtleSwgY29udGVudFR5cGUsIGluc2NyaXB0aW9uRGF0YSk7XG5cbiAgY29uc3QgeyBvdXRwdXQ6IGNvbW1pdE91dHB1dCwgY29udHJvbEJsb2NrIH0gPSBwYXltZW50O1xuICBhc3NlcnQub2soY29tbWl0T3V0cHV0KTtcbiAgYXNzZXJ0Lm9rKGNvbnRyb2xCbG9jayk7XG4gIGFzc2VydC5vayhwYXltZW50LnJlZGVlbT8ub3V0cHV0KTtcbiAgY29uc3QgY29tbWl0QWRkcmVzcyA9IGFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChjb21taXRPdXRwdXQsIG5ldHdvcmspO1xuXG4gIGNvbnN0IHRhcExlYWZTY3JpcHQ6IHV0eG9saWIuYml0Z28uVGFwTGVhZlNjcmlwdFtdID0gW1xuICAgIHtcbiAgICAgIGNvbnRyb2xCbG9jayxcbiAgICAgIHNjcmlwdDogcGF5bWVudC5yZWRlZW0/Lm91dHB1dCxcbiAgICAgIGxlYWZWZXJzaW9uOiB0YXByb290LklOSVRJQUxfVEFQU0NSSVBUX1ZFUlNJT04sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgcmV2ZWFsVHJhbnNhY3Rpb25WU2l6ZSA9IGdldEluc2NyaXB0aW9uUmV2ZWFsU2l6ZShwYXltZW50LCBjb250cm9sQmxvY2ssIGNvbW1pdE91dHB1dCwgbmV0d29yayk7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOiBjb21taXRBZGRyZXNzLFxuICAgIHJldmVhbFRyYW5zYWN0aW9uVlNpemUsXG4gICAgdGFwTGVhZlNjcmlwdDogdGFwTGVhZlNjcmlwdFswXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcHVia2V5XG4gKiBAcGFyYW0gY29udGVudFR5cGVcbiAqIEBwYXJhbSBpbnNjcmlwdGlvbkRhdGFcbiAqIEByZXR1cm5zIGluc2NyaXB0aW9uIGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU91dHB1dFNjcmlwdEZvckluc2NyaXB0aW9uKHB1YmtleTogQnVmZmVyLCBjb250ZW50VHlwZTogc3RyaW5nLCBpbnNjcmlwdGlvbkRhdGE6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IHBheW1lbnQgPSBjcmVhdGVQYXltZW50Rm9ySW5zY3JpcHRpb24ocHVia2V5LCBjb250ZW50VHlwZSwgaW5zY3JpcHRpb25EYXRhKTtcblxuICBhc3NlcnQub2socGF5bWVudC5vdXRwdXQsICdGYWlsZWQgdG8gY3JlYXRlIGluc2NyaXB0aW9uIG91dHB1dCBzY3JpcHQnKTtcbiAgcmV0dXJuIHBheW1lbnQub3V0cHV0O1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICogQHBhcmFtIHRhcExlYWZTY3JpcHRcbiAqIEBwYXJhbSBjb21taXRBZGRyZXNzXG4gKiBAcGFyYW0gcmVjaXBpZW50QWRkcmVzc1xuICogQHBhcmFtIHVuc2lnbmVkQ29tbWl0VHhcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKlxuICogQHJldHVybiBhIGZ1bGx5IHNpZ25lZCByZXZlYWwgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25SZXZlYWxUcmFuc2FjdGlvbihcbiAgcHJpdmF0ZUtleTogQnVmZmVyLFxuICB0YXBMZWFmU2NyaXB0OiB1dHhvbGliLmJpdGdvLlRhcExlYWZTY3JpcHQsXG4gIGNvbW1pdEFkZHJlc3M6IHN0cmluZyxcbiAgcmVjaXBpZW50QWRkcmVzczogc3RyaW5nLFxuICB1bnNpZ25lZENvbW1pdFR4OiBCdWZmZXIsXG4gIG5ldHdvcms6IE5ldHdvcmtcbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCB1bnNlckNvbW1pdFR4biA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKHVuc2lnbmVkQ29tbWl0VHgsIG5ldHdvcmspO1xuICBjb25zdCBoYXNoID0gdW5zZXJDb21taXRUeG4uZ2V0SGFzaCgpO1xuICBjb25zdCBjb21taXRPdXRwdXQgPSB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQoY29tbWl0QWRkcmVzcywgbmV0d29yayk7XG4gIGNvbnN0IHZvdXQgPSB1bnNlckNvbW1pdFR4bi5vdXRzLmZpbmRJbmRleCgob3V0KSA9PiBvdXQuc2NyaXB0LmVxdWFscyhjb21taXRPdXRwdXQpKTtcblxuICBpZiAodm91dCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tbWl0IHRyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBjb25zdCBwc2J0ID0gYml0Z28uY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrIH0pO1xuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHdpdG5lc3NVdHhvOiB7IHNjcmlwdDogY29tbWl0T3V0cHV0LCB2YWx1ZTogQmlnSW50KHVuc2VyQ29tbWl0VHhuLm91dHNbdm91dF0udmFsdWUpIH0sXG4gICAgdGFwTGVhZlNjcmlwdDogW3RhcExlYWZTY3JpcHRdLFxuICB9KTtcblxuICBjb25zdCByZWNpcGllbnRPdXRwdXQgPSBhZGRyZXNzLnRvT3V0cHV0U2NyaXB0KHJlY2lwaWVudEFkZHJlc3MsIG5ldHdvcmspO1xuICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogcmVjaXBpZW50T3V0cHV0LCB2YWx1ZTogQmlnSW50KDEwXzAwMCkgfSk7XG5cbiAgY29uc3Qgc2lnbmVyID0gRUNQYWlyLmZyb21Qcml2YXRlS2V5KHByaXZhdGVLZXkpO1xuICBjb25zdCBwYXJzZWRDb250cm9sQmxvY2sgPSB0YXByb290LnBhcnNlQ29udHJvbEJsb2NrKGVjY0xpYiwgdGFwTGVhZlNjcmlwdC5jb250cm9sQmxvY2spO1xuICBjb25zdCBsZWFmSGFzaCA9IHRhcHJvb3QuZ2V0VGFwbGVhZkhhc2goZWNjTGliLCBwYXJzZWRDb250cm9sQmxvY2ssIHRhcExlYWZTY3JpcHQuc2NyaXB0IGFzIEJ1ZmZlcik7XG4gIHBzYnQuc2lnblRhcHJvb3RJbnB1dCgwLCBzaWduZXIsIFtsZWFmSGFzaF0pO1xuXG4gIHJldHVybiBwc2J0O1xufVxuIl19
@@ -0,0 +1,67 @@
1
+ import { Network, bitgo } from '@bitgo-beta/utxo-lib';
2
+ import { SatPoint } from './SatPoint';
3
+ import { OutputLayout } from './OutputLayout';
4
+ type WalletUnspent = bitgo.WalletUnspent<bigint>;
5
+ export type WalletOutputPath = {
6
+ chain: bitgo.ChainCode;
7
+ index: number;
8
+ };
9
+ export type WalletInputBuilder = {
10
+ walletKeys: bitgo.RootWalletKeys;
11
+ signer: bitgo.KeyName;
12
+ cosigner: bitgo.KeyName;
13
+ };
14
+ /**
15
+ * Describes all outputs of an inscription transaction
16
+ */
17
+ export type InscriptionTransactionOutputs = {
18
+ inscriptionRecipient: string | Buffer;
19
+ changeOutputs: [WalletOutputPath, WalletOutputPath];
20
+ };
21
+ /** @deprecated */
22
+ export type InscriptionOutputs = InscriptionTransactionOutputs;
23
+ export type InscriptionTransactionConstraints = {
24
+ feeRateSatKB: number;
25
+ minChangeOutput?: bigint;
26
+ minInscriptionOutput?: bigint;
27
+ maxInscriptionOutput?: bigint;
28
+ };
29
+ export declare const DefaultInscriptionConstraints: {
30
+ minChangeOutput: bigint;
31
+ minInscriptionOutput: bigint;
32
+ maxInscriptionOutput: bigint;
33
+ };
34
+ export declare function createPsbtFromOutputLayout(network: Network, inputBuilder: WalletInputBuilder, unspents: WalletUnspent[], outputs: InscriptionTransactionOutputs, outputLayout: OutputLayout): bitgo.UtxoPsbt;
35
+ /**
36
+ * @param inputs - inscription input must come first
37
+ * @param satPoint - location of the inscription
38
+ * @param outputs
39
+ * @param constraints
40
+ * @param minimizeInputs
41
+ */
42
+ export declare function findOutputLayoutForWalletUnspents(inputs: WalletUnspent[], satPoint: SatPoint, outputs: InscriptionTransactionOutputs, constraints: InscriptionTransactionConstraints, { minimizeInputs }?: {
43
+ minimizeInputs?: boolean | undefined;
44
+ }): {
45
+ inputs: WalletUnspent[];
46
+ layout: OutputLayout;
47
+ } | undefined;
48
+ export declare const MAX_UNSPENTS_FOR_OUTPUT_LAYOUT = 5;
49
+ export declare class ErrorNoLayout extends Error {
50
+ constructor();
51
+ }
52
+ /**
53
+ * @param network
54
+ * @param inputBuilder
55
+ * @param unspent
56
+ * @param satPoint
57
+ * @param outputs
58
+ * @param constraints
59
+ * @param supplementaryUnspents - additional inputs to cover fee.
60
+ * @param [minimizeInputs=true] - try to find input combination with minimal fees. Limits supplementaryUnspents to 4.
61
+ */
62
+ export declare function createPsbtForSingleInscriptionPassingTransaction(network: Network, inputBuilder: WalletInputBuilder, unspent: WalletUnspent | WalletUnspent[], satPoint: SatPoint, outputs: InscriptionTransactionOutputs, constraints: InscriptionTransactionConstraints, { supplementaryUnspents, minimizeInputs, }?: {
63
+ supplementaryUnspents?: WalletUnspent[];
64
+ minimizeInputs?: boolean;
65
+ }): bitgo.UtxoPsbt;
66
+ export {};
67
+ //# sourceMappingURL=psbt.d.ts.map