@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.
- package/dist/cjs/src/OrdOutput.d.ts.map +1 -0
- package/dist/cjs/src/OrdOutput.js +197 -0
- package/dist/cjs/src/OutputLayout.d.ts.map +1 -0
- package/dist/cjs/src/OutputLayout.js +246 -0
- package/dist/cjs/src/SatPoint.d.ts.map +1 -0
- package/dist/cjs/src/SatPoint.js +48 -0
- package/dist/cjs/src/SatRange.d.ts.map +1 -0
- package/dist/cjs/src/SatRange.js +58 -0
- package/dist/cjs/src/combinations.d.ts.map +1 -0
- package/dist/cjs/src/combinations.js +13 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/cjs/src/inscriptions.d.ts.map +1 -0
- package/dist/cjs/src/inscriptions.js +202 -0
- package/dist/cjs/src/psbt.d.ts.map +1 -0
- package/dist/cjs/src/psbt.js +154 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/OrdOutput.d.ts +65 -0
- package/dist/esm/OrdOutput.js +192 -0
- package/dist/esm/OutputLayout.d.ts +47 -0
- package/dist/esm/OutputLayout.js +240 -0
- package/dist/esm/SatPoint.d.ts +13 -0
- package/dist/esm/SatPoint.js +43 -0
- package/dist/esm/SatRange.d.ts +26 -0
- package/dist/esm/SatRange.js +53 -0
- package/dist/esm/combinations.d.ts +2 -0
- package/dist/esm/combinations.js +10 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/inscriptions.d.ts +31 -0
- package/dist/esm/inscriptions.js +164 -0
- package/dist/esm/psbt.d.ts +67 -0
- package/dist/{src → esm}/psbt.js +31 -38
- package/package.json +26 -9
- package/dist/src/OrdOutput.js +0 -197
- package/dist/src/OutputLayout.js +0 -246
- package/dist/src/SatPoint.js +0 -48
- package/dist/src/SatRange.js +0 -58
- package/dist/src/combinations.js +0 -13
- package/dist/src/inscriptions.js +0 -202
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/OrdOutput.d.ts +0 -0
- /package/dist/{src → cjs/src}/OutputLayout.d.ts +0 -0
- /package/dist/{src → cjs/src}/SatPoint.d.ts +0 -0
- /package/dist/{src → cjs/src}/SatRange.d.ts +0 -0
- /package/dist/{src → cjs/src}/combinations.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/inscriptions.d.ts +0 -0
- /package/dist/{src → cjs/src}/psbt.d.ts +0 -0
- /package/dist/{src → esm}/OrdOutput.d.ts.map +0 -0
- /package/dist/{src → esm}/OutputLayout.d.ts.map +0 -0
- /package/dist/{src → esm}/SatPoint.d.ts.map +0 -0
- /package/dist/{src → esm}/SatRange.d.ts.map +0 -0
- /package/dist/{src → esm}/combinations.d.ts.map +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/inscriptions.d.ts.map +0 -0
- /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,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
|