@secondlayer/stacks 6.0.0 → 6.1.0
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/shared/{stacks-qt8ehebn.js → stacks-esm-0rdxcta7.js} +2 -2
- package/dist/shared/{stacks-qt8ehebn.js.map → stacks-esm-0rdxcta7.js.map} +1 -1
- package/dist/shared/{stacks-4hs8r4q2.js → stacks-esm-1jae0a3r.js} +2 -2
- package/dist/shared/{stacks-xjkn3en1.cjs.map → stacks-esm-1jae0a3r.js.map} +1 -1
- package/dist/shared/{stacks-4d7c3x27.js → stacks-esm-2mc7ebrm.js} +3 -3
- package/dist/shared/{stacks-4d7c3x27.js.map → stacks-esm-2mc7ebrm.js.map} +1 -1
- package/dist/shared/{stacks-8brgfvqx.js → stacks-esm-3g33bqsm.js} +4 -4
- package/dist/shared/{stacks-8brgfvqx.js.map → stacks-esm-3g33bqsm.js.map} +1 -1
- package/dist/shared/{stacks-gjz26k6b.js → stacks-esm-3pv5avgr.js} +59 -15
- package/dist/shared/stacks-esm-3pv5avgr.js.map +12 -0
- package/dist/shared/{stacks-qex691bh.js → stacks-esm-743jfh10.js} +6 -6
- package/dist/shared/{stacks-qex691bh.js.map → stacks-esm-743jfh10.js.map} +1 -1
- package/dist/shared/{stacks-wxfd6r4b.js → stacks-esm-7fpqgtyx.js} +3 -3
- package/dist/shared/{stacks-wxfd6r4b.js.map → stacks-esm-7fpqgtyx.js.map} +1 -1
- package/dist/shared/{stacks-71k0vmct.js → stacks-esm-9rnx0zxr.js} +5 -5
- package/dist/shared/{stacks-71k0vmct.js.map → stacks-esm-9rnx0zxr.js.map} +1 -1
- package/dist/shared/{stacks-fd4rx56e.js → stacks-esm-aw2mj3sj.js} +7 -7
- package/dist/shared/{stacks-fd4rx56e.js.map → stacks-esm-aw2mj3sj.js.map} +1 -1
- package/dist/shared/{stacks-qs5fzts5.js → stacks-esm-cvhazvhd.js} +2 -2
- package/dist/shared/{stacks-qs5fzts5.js.map → stacks-esm-cvhazvhd.js.map} +1 -1
- package/dist/shared/{stacks-69nq48jp.js → stacks-esm-fcfdn2zx.js} +5 -5
- package/dist/shared/{stacks-69nq48jp.js.map → stacks-esm-fcfdn2zx.js.map} +1 -1
- package/dist/shared/{stacks-x0qqwrev.js → stacks-esm-hr7fpxtj.js} +4 -4
- package/dist/shared/{stacks-x0qqwrev.js.map → stacks-esm-hr7fpxtj.js.map} +1 -1
- package/dist/shared/{stacks-mbt36bzt.js → stacks-esm-kds4n82p.js} +11 -11
- package/dist/shared/{stacks-mbt36bzt.js.map → stacks-esm-kds4n82p.js.map} +1 -1
- package/dist/shared/{stacks-kg1npstf.js → stacks-esm-n53kvwmt.js} +2 -2
- package/dist/shared/{stacks-kg1npstf.js.map → stacks-esm-n53kvwmt.js.map} +1 -1
- package/dist/shared/{stacks-v2rfr46a.js → stacks-esm-pxhfqfff.js} +4 -4
- package/dist/shared/{stacks-v2rfr46a.js.map → stacks-esm-pxhfqfff.js.map} +1 -1
- package/dist/shared/{stacks-yajyej2y.js → stacks-esm-q19a17fd.js} +3 -3
- package/dist/shared/{stacks-yajyej2y.js.map → stacks-esm-q19a17fd.js.map} +1 -1
- package/dist/shared/{stacks-v03zef3g.js → stacks-esm-qk0p9fr6.js} +9 -9
- package/dist/shared/{stacks-v03zef3g.js.map → stacks-esm-qk0p9fr6.js.map} +1 -1
- package/dist/shared/{stacks-qcae5852.js → stacks-esm-qkj67g80.js} +2 -2
- package/dist/shared/{stacks-qcae5852.js.map → stacks-esm-qkj67g80.js.map} +1 -1
- package/dist/shared/{stacks-mftyrc60.js → stacks-esm-r6dejrgr.js} +4 -4
- package/dist/shared/{stacks-mftyrc60.js.map → stacks-esm-r6dejrgr.js.map} +1 -1
- package/dist/shared/{stacks-9c1yam8b.js → stacks-esm-r9q4wnyw.js} +5 -5
- package/dist/shared/{stacks-9c1yam8b.js.map → stacks-esm-r9q4wnyw.js.map} +1 -1
- package/dist/shared/{stacks-51ybf135.js → stacks-esm-skmcf5n2.js} +5 -5
- package/dist/shared/{stacks-51ybf135.js.map → stacks-esm-skmcf5n2.js.map} +1 -1
- package/dist/shared/{stacks-yvb7rvwk.js → stacks-esm-v45990hx.js} +2 -2
- package/dist/shared/{stacks-8vzxax5e.cjs.map → stacks-esm-v45990hx.js.map} +1 -1
- package/dist/shared/{stacks-z90xdr1x.js → stacks-esm-wv67m4g6.js} +3 -3
- package/dist/shared/{stacks-z90xdr1x.js.map → stacks-esm-wv67m4g6.js.map} +1 -1
- package/dist/shared/{stacks-1m3m1agc.js → stacks-esm-x1r01353.js} +5 -5
- package/dist/shared/{stacks-1m3m1agc.js.map → stacks-esm-x1r01353.js.map} +1 -1
- package/dist/src/accounts/index.cjs +558 -4
- package/dist/src/accounts/index.cjs.map +10 -4
- package/dist/src/accounts/index.js +3 -3
- package/dist/src/actions/index.cjs +3815 -1
- package/dist/src/actions/index.cjs.map +65 -3
- package/dist/src/actions/index.js +14 -14
- package/dist/src/bitcoin/index.cjs +2477 -1
- package/dist/src/bitcoin/index.cjs.map +31 -3
- package/dist/src/bitcoin/index.js +11 -11
- package/dist/src/bns/index.cjs +4439 -17
- package/dist/src/bns/index.cjs.map +50 -3
- package/dist/src/bns/index.js +14 -14
- package/dist/src/chains/index.cjs +135 -1
- package/dist/src/chains/index.cjs.map +5 -3
- package/dist/src/chains/index.js +1 -1
- package/dist/src/clarity/index.cjs +2019 -1
- package/dist/src/clarity/index.cjs.map +24 -3
- package/dist/src/clarity/index.js +8 -8
- package/dist/src/filters/index.cjs +725 -1
- package/dist/src/filters/index.cjs.map +11 -3
- package/dist/src/filters/index.d.cts +76 -13
- package/dist/src/filters/index.d.ts +76 -13
- package/dist/src/filters/index.js +8 -4
- package/dist/src/filters/index.js.map +1 -1
- package/dist/src/index.cjs +3935 -62
- package/dist/src/index.cjs.map +69 -4
- package/dist/src/index.d.cts +62 -11
- package/dist/src/index.d.ts +62 -11
- package/dist/src/index.js +16 -16
- package/dist/src/postconditions/index.cjs +1726 -1
- package/dist/src/postconditions/index.cjs.map +20 -3
- package/dist/src/postconditions/index.js +6 -6
- package/dist/src/pox/index.cjs +3855 -1
- package/dist/src/pox/index.cjs.map +48 -3
- package/dist/src/pox/index.js +13 -13
- package/dist/src/pox5/index.cjs +4054 -29
- package/dist/src/pox5/index.cjs.map +54 -3
- package/dist/src/pox5/index.js +15 -15
- package/dist/src/sbtc/index.cjs +3705 -4
- package/dist/src/sbtc/index.cjs.map +47 -3
- package/dist/src/sbtc/index.js +12 -12
- package/dist/src/stackingdao/index.cjs +3751 -8
- package/dist/src/stackingdao/index.cjs.map +45 -3
- package/dist/src/stackingdao/index.js +12 -12
- package/dist/src/subscriptions/index.cjs +153 -1
- package/dist/src/subscriptions/index.cjs.map +6 -3
- package/dist/src/subscriptions/index.js +2 -2
- package/dist/src/transactions/index.cjs +2139 -1
- package/dist/src/transactions/index.cjs.map +23 -3
- package/dist/src/transactions/index.js +6 -6
- package/dist/src/utils/index.cjs +435 -3
- package/dist/src/utils/index.cjs.map +9 -3
- package/dist/src/utils/index.js +3 -3
- package/package.json +1 -1
- package/dist/shared/stacks-02actsrx.cjs +0 -17
- package/dist/shared/stacks-02actsrx.cjs.map +0 -10
- package/dist/shared/stacks-03vfm21t.cjs +0 -222
- package/dist/shared/stacks-03vfm21t.cjs.map +0 -12
- package/dist/shared/stacks-24h5k94q.cjs +0 -74
- package/dist/shared/stacks-24h5k94q.cjs.map +0 -11
- package/dist/shared/stacks-37kz5t9f.cjs +0 -764
- package/dist/shared/stacks-37kz5t9f.cjs.map +0 -23
- package/dist/shared/stacks-3mt2q2na.cjs +0 -65
- package/dist/shared/stacks-3mt2q2na.cjs.map +0 -9
- package/dist/shared/stacks-4hs8r4q2.js.map +0 -10
- package/dist/shared/stacks-8vzxax5e.cjs +0 -45
- package/dist/shared/stacks-agk106zs.cjs +0 -267
- package/dist/shared/stacks-agk106zs.cjs.map +0 -12
- package/dist/shared/stacks-bdgh9n83.cjs +0 -212
- package/dist/shared/stacks-bdgh9n83.cjs.map +0 -11
- package/dist/shared/stacks-dpxnxhqb.cjs +0 -51
- package/dist/shared/stacks-dpxnxhqb.cjs.map +0 -11
- package/dist/shared/stacks-ee53k9j2.cjs +0 -651
- package/dist/shared/stacks-ee53k9j2.cjs.map +0 -13
- package/dist/shared/stacks-enpj9krt.cjs +0 -38
- package/dist/shared/stacks-enpj9krt.cjs.map +0 -10
- package/dist/shared/stacks-f35mnrmg.cjs +0 -164
- package/dist/shared/stacks-f35mnrmg.cjs.map +0 -10
- package/dist/shared/stacks-fhzwsn5d.cjs +0 -261
- package/dist/shared/stacks-fhzwsn5d.cjs.map +0 -12
- package/dist/shared/stacks-gjz26k6b.js.map +0 -12
- package/dist/shared/stacks-gza2n1zs.cjs +0 -73
- package/dist/shared/stacks-gza2n1zs.cjs.map +0 -11
- package/dist/shared/stacks-kem68d80.cjs +0 -156
- package/dist/shared/stacks-kem68d80.cjs.map +0 -10
- package/dist/shared/stacks-n98w7g57.cjs +0 -234
- package/dist/shared/stacks-n98w7g57.cjs.map +0 -10
- package/dist/shared/stacks-p337hp6m.cjs +0 -336
- package/dist/shared/stacks-p337hp6m.cjs.map +0 -25
- package/dist/shared/stacks-q34k4vnc.cjs +0 -286
- package/dist/shared/stacks-q34k4vnc.cjs.map +0 -12
- package/dist/shared/stacks-rryme9bv.cjs +0 -569
- package/dist/shared/stacks-rryme9bv.cjs.map +0 -13
- package/dist/shared/stacks-s5vej5z6.cjs +0 -410
- package/dist/shared/stacks-s5vej5z6.cjs.map +0 -15
- package/dist/shared/stacks-sdqkapct.cjs +0 -67
- package/dist/shared/stacks-sdqkapct.cjs.map +0 -12
- package/dist/shared/stacks-vea7nde7.cjs +0 -731
- package/dist/shared/stacks-vea7nde7.cjs.map +0 -13
- package/dist/shared/stacks-wk8yp13j.cjs +0 -33
- package/dist/shared/stacks-wk8yp13j.cjs.map +0 -11
- package/dist/shared/stacks-xjkn3en1.cjs +0 -42
- package/dist/shared/stacks-xnrywjf1.cjs +0 -131
- package/dist/shared/stacks-xnrywjf1.cjs.map +0 -11
- package/dist/shared/stacks-yvb7rvwk.js.map +0 -10
|
@@ -1,3 +1,66 @@
|
|
|
1
|
+
var import_node_module = require("node:module");
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
function __accessProp(key) {
|
|
9
|
+
return this[key];
|
|
10
|
+
}
|
|
11
|
+
var __toESMCache_node;
|
|
12
|
+
var __toESMCache_esm;
|
|
13
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
14
|
+
var canCache = mod != null && typeof mod === "object";
|
|
15
|
+
if (canCache) {
|
|
16
|
+
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
17
|
+
var cached = cache.get(mod);
|
|
18
|
+
if (cached)
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
21
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
22
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
23
|
+
for (let key of __getOwnPropNames(mod))
|
|
24
|
+
if (!__hasOwnProp.call(to, key))
|
|
25
|
+
__defProp(to, key, {
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
27
|
+
enumerable: true
|
|
28
|
+
});
|
|
29
|
+
if (canCache)
|
|
30
|
+
cache.set(mod, to);
|
|
31
|
+
return to;
|
|
32
|
+
};
|
|
33
|
+
var __toCommonJS = (from) => {
|
|
34
|
+
var entry = (__moduleCache ??= new WeakMap).get(from), desc;
|
|
35
|
+
if (entry)
|
|
36
|
+
return entry;
|
|
37
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
38
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
39
|
+
for (var key of __getOwnPropNames(from))
|
|
40
|
+
if (!__hasOwnProp.call(entry, key))
|
|
41
|
+
__defProp(entry, key, {
|
|
42
|
+
get: __accessProp.bind(from, key),
|
|
43
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
__moduleCache.set(from, entry);
|
|
47
|
+
return entry;
|
|
48
|
+
};
|
|
49
|
+
var __moduleCache;
|
|
50
|
+
var __returnValue = (v) => v;
|
|
51
|
+
function __exportSetter(name, newValue) {
|
|
52
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
53
|
+
}
|
|
54
|
+
var __export = (target, all) => {
|
|
55
|
+
for (var name in all)
|
|
56
|
+
__defProp(target, name, {
|
|
57
|
+
get: all[name],
|
|
58
|
+
enumerable: true,
|
|
59
|
+
configurable: true,
|
|
60
|
+
set: __exportSetter.bind(all, name)
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
|
|
1
64
|
// src/accounts/index.ts
|
|
2
65
|
var exports_accounts = {};
|
|
3
66
|
__export(exports_accounts, {
|
|
@@ -12,12 +75,275 @@ module.exports = __toCommonJS(exports_accounts);
|
|
|
12
75
|
|
|
13
76
|
// src/accounts/privateKeyToAccount.ts
|
|
14
77
|
var import_hmac = require("@noble/hashes/hmac.js");
|
|
15
|
-
var
|
|
78
|
+
var import_sha24 = require("@noble/hashes/sha2.js");
|
|
16
79
|
var import_secp256k1 = require("@noble/secp256k1");
|
|
80
|
+
|
|
81
|
+
// src/utils/c32.ts
|
|
82
|
+
var import_sha2 = require("@noble/hashes/sha2.js");
|
|
83
|
+
|
|
84
|
+
// src/utils/encoding.ts
|
|
85
|
+
var hexes = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
|
|
86
|
+
function bytesToHex(bytes) {
|
|
87
|
+
let hex = "";
|
|
88
|
+
for (const b of bytes) {
|
|
89
|
+
hex += hexes[b];
|
|
90
|
+
}
|
|
91
|
+
return hex;
|
|
92
|
+
}
|
|
93
|
+
function hexToBytes(hex) {
|
|
94
|
+
let h = without0x(hex);
|
|
95
|
+
if (h.length % 2)
|
|
96
|
+
h = `0${h}`;
|
|
97
|
+
const array = new Uint8Array(h.length / 2);
|
|
98
|
+
for (let i = 0;i < array.length; i++) {
|
|
99
|
+
const j = i * 2;
|
|
100
|
+
const byte = Number.parseInt(h.slice(j, j + 2), 16);
|
|
101
|
+
if (Number.isNaN(byte) || byte < 0)
|
|
102
|
+
throw new Error("Invalid byte sequence");
|
|
103
|
+
array[i] = byte;
|
|
104
|
+
}
|
|
105
|
+
return array;
|
|
106
|
+
}
|
|
107
|
+
function with0x(value) {
|
|
108
|
+
return /^0x/i.test(value) ? value : `0x${value}`;
|
|
109
|
+
}
|
|
110
|
+
function without0x(value) {
|
|
111
|
+
return /^0x/i.test(value) ? value.slice(2) : value;
|
|
112
|
+
}
|
|
113
|
+
function utf8ToBytes(str) {
|
|
114
|
+
return new TextEncoder().encode(str);
|
|
115
|
+
}
|
|
116
|
+
function bytesToUtf8(bytes) {
|
|
117
|
+
return new TextDecoder().decode(bytes);
|
|
118
|
+
}
|
|
119
|
+
function asciiToBytes(str) {
|
|
120
|
+
const bytes = new Uint8Array(str.length);
|
|
121
|
+
for (let i = 0;i < str.length; i++) {
|
|
122
|
+
bytes[i] = str.charCodeAt(i) & 255;
|
|
123
|
+
}
|
|
124
|
+
return bytes;
|
|
125
|
+
}
|
|
126
|
+
function bytesToAscii(bytes) {
|
|
127
|
+
return String.fromCharCode(...bytes);
|
|
128
|
+
}
|
|
129
|
+
function concatBytes(...arrays) {
|
|
130
|
+
if (arrays.length === 1)
|
|
131
|
+
return arrays[0];
|
|
132
|
+
const length = arrays.reduce((a, arr) => a + arr.length, 0);
|
|
133
|
+
const result = new Uint8Array(length);
|
|
134
|
+
let pad = 0;
|
|
135
|
+
for (const arr of arrays) {
|
|
136
|
+
result.set(arr, pad);
|
|
137
|
+
pad += arr.length;
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
function intToBigInt(value) {
|
|
142
|
+
if (typeof value === "bigint")
|
|
143
|
+
return value;
|
|
144
|
+
if (typeof value === "string")
|
|
145
|
+
return BigInt(value);
|
|
146
|
+
if (typeof value === "number") {
|
|
147
|
+
if (!Number.isInteger(value))
|
|
148
|
+
throw new RangeError("Values of type 'number' must be an integer.");
|
|
149
|
+
if (value > Number.MAX_SAFE_INTEGER)
|
|
150
|
+
throw new RangeError(`Values of type 'number' must be <= ${Number.MAX_SAFE_INTEGER}. Use BigInt instead.`);
|
|
151
|
+
return BigInt(value);
|
|
152
|
+
}
|
|
153
|
+
if (value instanceof Uint8Array)
|
|
154
|
+
return BigInt(`0x${bytesToHex(value)}`);
|
|
155
|
+
throw new TypeError("Must be a number, bigint, string, or Uint8Array.");
|
|
156
|
+
}
|
|
157
|
+
function intToBytes(value, byteLength) {
|
|
158
|
+
return bigIntToBytes(intToBigInt(value), byteLength);
|
|
159
|
+
}
|
|
160
|
+
function bigIntToBytes(value, length = 16) {
|
|
161
|
+
const hex = value.toString(16).padStart(length * 2, "0");
|
|
162
|
+
return hexToBytes(hex);
|
|
163
|
+
}
|
|
164
|
+
function intToHex(integer, byteLength = 8) {
|
|
165
|
+
const value = typeof integer === "bigint" ? integer : intToBigInt(integer);
|
|
166
|
+
return value.toString(16).padStart(byteLength * 2, "0");
|
|
167
|
+
}
|
|
168
|
+
function toTwos(value, width) {
|
|
169
|
+
const limit = BigInt(1) << width - BigInt(1);
|
|
170
|
+
if (value < -limit || value > limit - BigInt(1)) {
|
|
171
|
+
throw new Error(`Unable to represent integer in width: ${width}`);
|
|
172
|
+
}
|
|
173
|
+
if (value >= BigInt(0))
|
|
174
|
+
return value;
|
|
175
|
+
return value + (BigInt(1) << width);
|
|
176
|
+
}
|
|
177
|
+
function fromTwos(value, width) {
|
|
178
|
+
if (value & BigInt(1) << width - BigInt(1)) {
|
|
179
|
+
return value - (BigInt(1) << width);
|
|
180
|
+
}
|
|
181
|
+
return value;
|
|
182
|
+
}
|
|
183
|
+
function bytesToTwosBigInt(bytes) {
|
|
184
|
+
if (bytes.length === 0)
|
|
185
|
+
return 0n;
|
|
186
|
+
const hex = bytesToHex(bytes);
|
|
187
|
+
if (hex.length === 0)
|
|
188
|
+
return 0n;
|
|
189
|
+
return fromTwos(BigInt(`0x${hex}`), BigInt(bytes.byteLength * 8));
|
|
190
|
+
}
|
|
191
|
+
function writeUInt32BE(value) {
|
|
192
|
+
const buf = new Uint8Array(4);
|
|
193
|
+
buf[0] = value >>> 24 & 255;
|
|
194
|
+
buf[1] = value >>> 16 & 255;
|
|
195
|
+
buf[2] = value >>> 8 & 255;
|
|
196
|
+
buf[3] = value & 255;
|
|
197
|
+
return buf;
|
|
198
|
+
}
|
|
199
|
+
function readUInt32BE(bytes, offset = 0) {
|
|
200
|
+
return (bytes[offset] << 24 | bytes[offset + 1] << 16 | bytes[offset + 2] << 8 | bytes[offset + 3]) >>> 0;
|
|
201
|
+
}
|
|
202
|
+
function writeUInt16BE(value) {
|
|
203
|
+
const buf = new Uint8Array(2);
|
|
204
|
+
buf[0] = value >>> 8 & 255;
|
|
205
|
+
buf[1] = value & 255;
|
|
206
|
+
return buf;
|
|
207
|
+
}
|
|
208
|
+
function readUInt16BE(bytes, offset = 0) {
|
|
209
|
+
return (bytes[offset] << 8 | bytes[offset + 1]) >>> 0;
|
|
210
|
+
}
|
|
211
|
+
function writeUInt8(value) {
|
|
212
|
+
return new Uint8Array([value & 255]);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// src/utils/c32.ts
|
|
216
|
+
var C32 = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
217
|
+
var HEX = "0123456789abcdef";
|
|
218
|
+
function c32normalize(input) {
|
|
219
|
+
return input.toUpperCase().replace(/O/g, "0").replace(/L|I/g, "1");
|
|
220
|
+
}
|
|
221
|
+
function c32encode(inputHex) {
|
|
222
|
+
let hex = inputHex;
|
|
223
|
+
if (hex.length % 2 !== 0)
|
|
224
|
+
hex = `0${hex}`;
|
|
225
|
+
hex = hex.toLowerCase();
|
|
226
|
+
const res = [];
|
|
227
|
+
let carry = 0;
|
|
228
|
+
for (let i = hex.length - 1;i >= 0; i--) {
|
|
229
|
+
if (carry < 4) {
|
|
230
|
+
const currentCode = HEX.indexOf(hex[i]) >> carry;
|
|
231
|
+
const nextCode = i !== 0 ? HEX.indexOf(hex[i - 1]) : 0;
|
|
232
|
+
const nextBits = 1 + carry;
|
|
233
|
+
const nextLowBits = nextCode % (1 << nextBits) << 5 - nextBits;
|
|
234
|
+
res.unshift(C32[currentCode + nextLowBits]);
|
|
235
|
+
carry = nextBits;
|
|
236
|
+
} else {
|
|
237
|
+
carry = 0;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
let leadingZeros = 0;
|
|
241
|
+
while (leadingZeros < res.length && res[leadingZeros] === "0")
|
|
242
|
+
leadingZeros++;
|
|
243
|
+
const stripped = res.slice(leadingZeros);
|
|
244
|
+
const bytes = hexToBytes(hex);
|
|
245
|
+
let zeroBytesCount = 0;
|
|
246
|
+
while (zeroBytesCount < bytes.length && bytes[zeroBytesCount] === 0)
|
|
247
|
+
zeroBytesCount++;
|
|
248
|
+
const prefix = Array(zeroBytesCount).fill(C32[0]);
|
|
249
|
+
return [...prefix, ...stripped].join("");
|
|
250
|
+
}
|
|
251
|
+
function c32decode(c32input) {
|
|
252
|
+
const input = c32normalize(c32input);
|
|
253
|
+
if (!input.match(`^[${C32}]*$`))
|
|
254
|
+
throw new Error("Not a c32-encoded string");
|
|
255
|
+
const zeroPrefix = input.match(`^${C32[0]}*`);
|
|
256
|
+
const numLeadingZeroBytes = zeroPrefix ? zeroPrefix[0]?.length : 0;
|
|
257
|
+
const res = [];
|
|
258
|
+
let carry = 0;
|
|
259
|
+
let carryBits = 0;
|
|
260
|
+
for (let i = input.length - 1;i >= 0; i--) {
|
|
261
|
+
if (carryBits === 4) {
|
|
262
|
+
res.unshift(HEX[carry]);
|
|
263
|
+
carryBits = 0;
|
|
264
|
+
carry = 0;
|
|
265
|
+
}
|
|
266
|
+
const currentValue = (C32.indexOf(input[i]) << carryBits) + carry;
|
|
267
|
+
res.unshift(HEX[currentValue % 16]);
|
|
268
|
+
carryBits += 1;
|
|
269
|
+
carry = currentValue >> 4;
|
|
270
|
+
if (carry > 1 << carryBits)
|
|
271
|
+
throw new Error("Panic error in c32 decoding");
|
|
272
|
+
}
|
|
273
|
+
res.unshift(HEX[carry]);
|
|
274
|
+
if (res.length % 2 === 1)
|
|
275
|
+
res.unshift("0");
|
|
276
|
+
let hexLeadingZeros = 0;
|
|
277
|
+
while (hexLeadingZeros < res.length && res[hexLeadingZeros] === "0")
|
|
278
|
+
hexLeadingZeros++;
|
|
279
|
+
let hexStr = res.slice(hexLeadingZeros - hexLeadingZeros % 2).join("");
|
|
280
|
+
for (let i = 0;i < numLeadingZeroBytes; i++)
|
|
281
|
+
hexStr = `00${hexStr}`;
|
|
282
|
+
return hexStr;
|
|
283
|
+
}
|
|
284
|
+
function c32checksum(dataHex) {
|
|
285
|
+
return bytesToHex(import_sha2.sha256(import_sha2.sha256(hexToBytes(dataHex))).slice(0, 4));
|
|
286
|
+
}
|
|
287
|
+
function c32checkEncode(version, data) {
|
|
288
|
+
if (version < 0 || version >= 32)
|
|
289
|
+
throw new Error("Invalid version (must be between 0 and 31)");
|
|
290
|
+
if (!data.match(/^[0-9a-fA-F]*$/))
|
|
291
|
+
throw new Error("Invalid data (not a hex string)");
|
|
292
|
+
let d = data.toLowerCase();
|
|
293
|
+
if (d.length % 2 !== 0)
|
|
294
|
+
d = `0${d}`;
|
|
295
|
+
let versionHex = version.toString(16);
|
|
296
|
+
if (versionHex.length === 1)
|
|
297
|
+
versionHex = `0${versionHex}`;
|
|
298
|
+
const checksumHex = c32checksum(`${versionHex}${d}`);
|
|
299
|
+
return `${C32[version]}${c32encode(`${d}${checksumHex}`)}`;
|
|
300
|
+
}
|
|
301
|
+
function c32checkDecode(c32data) {
|
|
302
|
+
const normalized = c32normalize(c32data);
|
|
303
|
+
const dataHex = c32decode(normalized.slice(1));
|
|
304
|
+
const version = C32.indexOf(normalized[0]);
|
|
305
|
+
const checksum = dataHex.slice(-8);
|
|
306
|
+
let versionHex = version.toString(16);
|
|
307
|
+
if (versionHex.length === 1)
|
|
308
|
+
versionHex = `0${versionHex}`;
|
|
309
|
+
if (c32checksum(`${versionHex}${dataHex.substring(0, dataHex.length - 8)}`) !== checksum) {
|
|
310
|
+
throw new Error("Invalid c32check string: checksum mismatch");
|
|
311
|
+
}
|
|
312
|
+
return [version, dataHex.substring(0, dataHex.length - 8)];
|
|
313
|
+
}
|
|
314
|
+
function c32address(version, hash160hex) {
|
|
315
|
+
if (!hash160hex.match(/^[0-9a-fA-F]{40}$/)) {
|
|
316
|
+
throw new Error("Invalid argument: not a hash160 hex string");
|
|
317
|
+
}
|
|
318
|
+
return `S${c32checkEncode(version, hash160hex)}`;
|
|
319
|
+
}
|
|
320
|
+
function c32addressDecode(c32addr) {
|
|
321
|
+
if (c32addr.length <= 5)
|
|
322
|
+
throw new Error("Invalid c32 address: invalid length");
|
|
323
|
+
if (c32addr[0] !== "S")
|
|
324
|
+
throw new Error('Invalid c32 address: must start with "S"');
|
|
325
|
+
return c32checkDecode(c32addr.slice(1));
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// src/utils/hash.ts
|
|
329
|
+
var import_legacy = require("@noble/hashes/legacy.js");
|
|
330
|
+
var import_sha22 = require("@noble/hashes/sha2.js");
|
|
331
|
+
var import_sha23 = require("@noble/hashes/sha2.js");
|
|
332
|
+
function hash160(input) {
|
|
333
|
+
return import_legacy.ripemd160(import_sha22.sha256(input));
|
|
334
|
+
}
|
|
335
|
+
function txidFromBytes(data) {
|
|
336
|
+
return bytesToHex(import_sha23.sha512_256(data));
|
|
337
|
+
}
|
|
338
|
+
function hashP2PKH(input) {
|
|
339
|
+
return bytesToHex(hash160(input));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// src/accounts/privateKeyToAccount.ts
|
|
17
343
|
function ensureSyncSigning() {
|
|
18
344
|
if (!import_secp256k1.etc.hmacSha256Sync) {
|
|
19
345
|
import_secp256k1.etc.hmacSha256Sync = (key, ...msgs) => {
|
|
20
|
-
const h = import_hmac.hmac.create(
|
|
346
|
+
const h = import_hmac.hmac.create(import_sha24.sha256, key);
|
|
21
347
|
for (const msg of msgs)
|
|
22
348
|
h.update(msg);
|
|
23
349
|
return h.digest();
|
|
@@ -46,7 +372,7 @@ function privateKeyToAccount(privateKey, options) {
|
|
|
46
372
|
},
|
|
47
373
|
signMessage(message) {
|
|
48
374
|
const msgBytes = typeof message === "string" ? new TextEncoder().encode(message) : message;
|
|
49
|
-
const msgHash =
|
|
375
|
+
const msgHash = import_sha24.sha256(msgBytes);
|
|
50
376
|
const sigBytes = this.sign(msgHash);
|
|
51
377
|
return bytesToHex(sigBytes);
|
|
52
378
|
}
|
|
@@ -81,6 +407,220 @@ function mnemonicToAccount(mnemonic, options) {
|
|
|
81
407
|
// src/accounts/mnemonicToBitcoinKeys.ts
|
|
82
408
|
var import_bip322 = require("@scure/bip32");
|
|
83
409
|
var import_bip392 = require("@scure/bip39");
|
|
410
|
+
|
|
411
|
+
// src/bitcoin/address.ts
|
|
412
|
+
var import_secp256k12 = require("@noble/curves/secp256k1.js");
|
|
413
|
+
var import_base = require("@scure/base");
|
|
414
|
+
|
|
415
|
+
// src/bitcoin/serialize.ts
|
|
416
|
+
function doubleSha256(bytes) {
|
|
417
|
+
return import_sha22.sha256(import_sha22.sha256(bytes));
|
|
418
|
+
}
|
|
419
|
+
function reverseBytes(bytes) {
|
|
420
|
+
const out = new Uint8Array(bytes.length);
|
|
421
|
+
for (let i = 0;i < bytes.length; i++) {
|
|
422
|
+
out[i] = bytes[bytes.length - 1 - i];
|
|
423
|
+
}
|
|
424
|
+
return out;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
class BtcReader {
|
|
428
|
+
data;
|
|
429
|
+
view;
|
|
430
|
+
offset = 0;
|
|
431
|
+
constructor(data) {
|
|
432
|
+
this.data = data;
|
|
433
|
+
this.view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
434
|
+
}
|
|
435
|
+
get length() {
|
|
436
|
+
return this.data.length;
|
|
437
|
+
}
|
|
438
|
+
readUInt8() {
|
|
439
|
+
const v = this.view.getUint8(this.offset);
|
|
440
|
+
this.offset += 1;
|
|
441
|
+
return v;
|
|
442
|
+
}
|
|
443
|
+
peekUInt8() {
|
|
444
|
+
return this.view.getUint8(this.offset);
|
|
445
|
+
}
|
|
446
|
+
readUInt32LE() {
|
|
447
|
+
const v = this.view.getUint32(this.offset, true);
|
|
448
|
+
this.offset += 4;
|
|
449
|
+
return v;
|
|
450
|
+
}
|
|
451
|
+
readUInt64LE() {
|
|
452
|
+
const v = this.view.getBigUint64(this.offset, true);
|
|
453
|
+
this.offset += 8;
|
|
454
|
+
return v;
|
|
455
|
+
}
|
|
456
|
+
readBytes(n) {
|
|
457
|
+
if (this.offset + n > this.data.length) {
|
|
458
|
+
throw new Error(`Bitcoin tx underflow: need ${n} bytes at offset ${this.offset}, have ${this.data.length}`);
|
|
459
|
+
}
|
|
460
|
+
const slice = this.data.slice(this.offset, this.offset + n);
|
|
461
|
+
this.offset += n;
|
|
462
|
+
return slice;
|
|
463
|
+
}
|
|
464
|
+
readVarInt() {
|
|
465
|
+
const first = this.readUInt8();
|
|
466
|
+
if (first < 253)
|
|
467
|
+
return first;
|
|
468
|
+
if (first === 253) {
|
|
469
|
+
const v = this.view.getUint16(this.offset, true);
|
|
470
|
+
this.offset += 2;
|
|
471
|
+
return v;
|
|
472
|
+
}
|
|
473
|
+
if (first === 254) {
|
|
474
|
+
return this.readUInt32LE();
|
|
475
|
+
}
|
|
476
|
+
const big = this.readUInt64LE();
|
|
477
|
+
if (big > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
478
|
+
throw new Error("Bitcoin varint exceeds safe integer range");
|
|
479
|
+
}
|
|
480
|
+
return Number(big);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
function scanTx(rawTx) {
|
|
484
|
+
const r = new BtcReader(rawTx);
|
|
485
|
+
const version = r.readUInt32LE();
|
|
486
|
+
let hasWitness = false;
|
|
487
|
+
if (r.peekUInt8() === 0) {
|
|
488
|
+
r.readUInt8();
|
|
489
|
+
const flag = r.readUInt8();
|
|
490
|
+
if (flag !== 1) {
|
|
491
|
+
throw new Error(`Unexpected SegWit flag 0x${flag.toString(16)}`);
|
|
492
|
+
}
|
|
493
|
+
hasWitness = true;
|
|
494
|
+
}
|
|
495
|
+
const bodyStart = r.offset;
|
|
496
|
+
const inputCount = r.readVarInt();
|
|
497
|
+
const inputs = [];
|
|
498
|
+
for (let i = 0;i < inputCount; i++) {
|
|
499
|
+
const prevTxid = r.readBytes(32);
|
|
500
|
+
const vout = r.readUInt32LE();
|
|
501
|
+
const scriptSig = r.readBytes(r.readVarInt());
|
|
502
|
+
const sequence = r.readUInt32LE();
|
|
503
|
+
inputs.push({ prevTxid, vout, scriptSig, sequence });
|
|
504
|
+
}
|
|
505
|
+
const outputCount = r.readVarInt();
|
|
506
|
+
const outputs = [];
|
|
507
|
+
for (let i = 0;i < outputCount; i++) {
|
|
508
|
+
const value = r.readUInt64LE();
|
|
509
|
+
const scriptPubKey = r.readBytes(r.readVarInt());
|
|
510
|
+
outputs.push({ value, scriptPubKey });
|
|
511
|
+
}
|
|
512
|
+
const bodyEnd = r.offset;
|
|
513
|
+
if (hasWitness) {
|
|
514
|
+
for (let i = 0;i < inputCount; i++) {
|
|
515
|
+
const itemCount = r.readVarInt();
|
|
516
|
+
for (let j = 0;j < itemCount; j++) {
|
|
517
|
+
r.readBytes(r.readVarInt());
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
const locktime = r.readUInt32LE();
|
|
522
|
+
const legacy = concatBytes(rawTx.slice(0, 4), rawTx.slice(bodyStart, bodyEnd), rawTx.slice(r.offset - 4, r.offset));
|
|
523
|
+
return { version, hasWitness, inputs, outputs, locktime, legacy };
|
|
524
|
+
}
|
|
525
|
+
function parseBitcoinTx(rawTx) {
|
|
526
|
+
const s = scanTx(rawTx);
|
|
527
|
+
return {
|
|
528
|
+
version: s.version,
|
|
529
|
+
hasWitness: s.hasWitness,
|
|
530
|
+
inputs: s.inputs,
|
|
531
|
+
outputs: s.outputs,
|
|
532
|
+
locktime: s.locktime,
|
|
533
|
+
txidInternal: doubleSha256(s.legacy)
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
function stripWitness(rawTx) {
|
|
537
|
+
return scanTx(rawTx).legacy;
|
|
538
|
+
}
|
|
539
|
+
function bitcoinTxid(rawTx, { display = false } = {}) {
|
|
540
|
+
const txid = doubleSha256(scanTx(rawTx).legacy);
|
|
541
|
+
return display ? reverseBytes(txid) : txid;
|
|
542
|
+
}
|
|
543
|
+
function parseBlockHeader(header) {
|
|
544
|
+
if (header.length !== 80) {
|
|
545
|
+
throw new Error(`Bitcoin block header must be 80 bytes, got ${header.length}`);
|
|
546
|
+
}
|
|
547
|
+
const r = new BtcReader(header);
|
|
548
|
+
const version = r.readUInt32LE();
|
|
549
|
+
const prevBlock = r.readBytes(32);
|
|
550
|
+
const merkleRoot = r.readBytes(32);
|
|
551
|
+
const timestamp = r.readUInt32LE();
|
|
552
|
+
const bits = r.readUInt32LE();
|
|
553
|
+
const nonce = r.readUInt32LE();
|
|
554
|
+
return { version, prevBlock, merkleRoot, timestamp, bits, nonce };
|
|
555
|
+
}
|
|
556
|
+
function blockHash(header, { display = false } = {}) {
|
|
557
|
+
const hash = doubleSha256(header);
|
|
558
|
+
return display ? reverseBytes(hash) : hash;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
// src/bitcoin/address.ts
|
|
562
|
+
var BITCOIN_NETWORK_PARAMS = {
|
|
563
|
+
mainnet: { p2pkh: 0, p2sh: 5, hrp: "bc" },
|
|
564
|
+
testnet: { p2pkh: 111, p2sh: 196, hrp: "tb" },
|
|
565
|
+
regtest: { p2pkh: 111, p2sh: 196, hrp: "bcrt" }
|
|
566
|
+
};
|
|
567
|
+
var NETWORK_PARAMS = BITCOIN_NETWORK_PARAMS;
|
|
568
|
+
function base58CheckEncode(version, payload) {
|
|
569
|
+
const data = concatBytes(Uint8Array.of(version), payload);
|
|
570
|
+
const checksum = doubleSha256(data).slice(0, 4);
|
|
571
|
+
return import_base.base58.encode(concatBytes(data, checksum));
|
|
572
|
+
}
|
|
573
|
+
function formatBitcoinAddress(parsed, network = "mainnet") {
|
|
574
|
+
const params = NETWORK_PARAMS[network];
|
|
575
|
+
const hash = parsed.hash;
|
|
576
|
+
if (!hash)
|
|
577
|
+
return;
|
|
578
|
+
switch (parsed.type) {
|
|
579
|
+
case "p2pkh":
|
|
580
|
+
return base58CheckEncode(params.p2pkh, hash);
|
|
581
|
+
case "p2sh":
|
|
582
|
+
return base58CheckEncode(params.p2sh, hash);
|
|
583
|
+
case "p2wpkh":
|
|
584
|
+
case "p2wsh":
|
|
585
|
+
return import_base.bech32.encode(params.hrp, [0, ...import_base.bech32.toWords(hash)]);
|
|
586
|
+
case "p2tr":
|
|
587
|
+
return import_base.bech32m.encode(params.hrp, [1, ...import_base.bech32m.toWords(hash)]);
|
|
588
|
+
default:
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
function toPubkeyBytes(publicKey) {
|
|
593
|
+
return typeof publicKey === "string" ? hexToBytes(publicKey) : publicKey;
|
|
594
|
+
}
|
|
595
|
+
function taprootTweakPubkey(xonly) {
|
|
596
|
+
if (xonly.length !== 32)
|
|
597
|
+
throw new Error(`Expected 32-byte x-only pubkey, got ${xonly.length}`);
|
|
598
|
+
const tweak = import_secp256k12.schnorr.utils.taggedHash("TapTweak", xonly);
|
|
599
|
+
const t = BigInt(`0x${Array.from(tweak, (b) => b.toString(16).padStart(2, "0")).join("")}`);
|
|
600
|
+
if (t >= import_secp256k12.secp256k1.Point.Fn.ORDER)
|
|
601
|
+
throw new Error("Invalid tap tweak (exceeds curve order)");
|
|
602
|
+
const internal = import_secp256k12.secp256k1.Point.fromBytes(concatBytes(Uint8Array.of(2), xonly));
|
|
603
|
+
const output = internal.add(import_secp256k12.secp256k1.Point.BASE.multiply(t));
|
|
604
|
+
return output.toBytes(true).slice(1);
|
|
605
|
+
}
|
|
606
|
+
function publicKeyToP2wpkhAddress(publicKey, network = "mainnet") {
|
|
607
|
+
const pubkey = toPubkeyBytes(publicKey);
|
|
608
|
+
if (pubkey.length !== 33)
|
|
609
|
+
throw new Error(`Expected 33-byte compressed pubkey, got ${pubkey.length}`);
|
|
610
|
+
const params = NETWORK_PARAMS[network];
|
|
611
|
+
return import_base.bech32.encode(params.hrp, [0, ...import_base.bech32.toWords(hash160(pubkey))]);
|
|
612
|
+
}
|
|
613
|
+
function publicKeyToP2trAddress(publicKey, network = "mainnet") {
|
|
614
|
+
const pubkey = toPubkeyBytes(publicKey);
|
|
615
|
+
const xonly = pubkey.length === 33 ? pubkey.slice(1) : pubkey.length === 32 ? pubkey : undefined;
|
|
616
|
+
if (!xonly)
|
|
617
|
+
throw new Error(`Expected 33-byte compressed or 32-byte x-only pubkey, got ${pubkey.length}`);
|
|
618
|
+
const params = NETWORK_PARAMS[network];
|
|
619
|
+
const outputKey = taprootTweakPubkey(xonly);
|
|
620
|
+
return import_base.bech32m.encode(params.hrp, [1, ...import_base.bech32m.toWords(outputKey)]);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// src/accounts/mnemonicToBitcoinKeys.ts
|
|
84
624
|
var PURPOSE = { p2wpkh: 84, p2tr: 86 };
|
|
85
625
|
function mnemonicToBitcoinKeys(mnemonic, options) {
|
|
86
626
|
const {
|
|
@@ -113,6 +653,20 @@ function toAccount(source) {
|
|
|
113
653
|
sign: source.sign
|
|
114
654
|
};
|
|
115
655
|
}
|
|
656
|
+
// src/accounts/providerToAccount.ts
|
|
657
|
+
async function providerToAccount(provider) {
|
|
658
|
+
const result = await provider.request("stx_getAddresses");
|
|
659
|
+
const entry = result?.addresses?.[0];
|
|
660
|
+
if (!entry?.address || !entry?.publicKey) {
|
|
661
|
+
throw new Error("Provider did not return a valid address");
|
|
662
|
+
}
|
|
663
|
+
return {
|
|
664
|
+
type: "provider",
|
|
665
|
+
address: entry.address,
|
|
666
|
+
publicKey: entry.publicKey,
|
|
667
|
+
provider
|
|
668
|
+
};
|
|
669
|
+
}
|
|
116
670
|
|
|
117
|
-
//# debugId=
|
|
671
|
+
//# debugId=078576ECB761A90064756E2164756E21
|
|
118
672
|
//# sourceMappingURL=index.cjs.map
|