ox 0.14.18 → 0.14.19

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 (41) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
  3. package/_cjs/tempo/VirtualMaster.js +192 -13
  4. package/_cjs/tempo/VirtualMaster.js.map +1 -1
  5. package/_cjs/tempo/index.js.map +1 -1
  6. package/_cjs/tempo/internal/mine.wasm.js +6 -0
  7. package/_cjs/tempo/internal/mine.wasm.js.map +1 -0
  8. package/_cjs/tempo/internal/virtualMasterPool.js +186 -0
  9. package/_cjs/tempo/internal/virtualMasterPool.js.map +1 -0
  10. package/_cjs/version.js +1 -1
  11. package/_esm/tempo/TxEnvelopeTempo.js +6 -3
  12. package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
  13. package/_esm/tempo/VirtualMaster.js +305 -22
  14. package/_esm/tempo/VirtualMaster.js.map +1 -1
  15. package/_esm/tempo/index.js +4 -2
  16. package/_esm/tempo/index.js.map +1 -1
  17. package/_esm/tempo/internal/mine.wasm.js +15 -0
  18. package/_esm/tempo/internal/mine.wasm.js.map +1 -0
  19. package/_esm/tempo/internal/virtualMasterPool.js +216 -0
  20. package/_esm/tempo/internal/virtualMasterPool.js.map +1 -0
  21. package/_esm/version.js +1 -1
  22. package/_types/tempo/TxEnvelopeTempo.d.ts +6 -3
  23. package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  24. package/_types/tempo/VirtualMaster.d.ts +92 -10
  25. package/_types/tempo/VirtualMaster.d.ts.map +1 -1
  26. package/_types/tempo/index.d.ts +4 -2
  27. package/_types/tempo/index.d.ts.map +1 -1
  28. package/_types/tempo/internal/mine.wasm.d.ts +5 -0
  29. package/_types/tempo/internal/mine.wasm.d.ts.map +1 -0
  30. package/_types/tempo/internal/virtualMasterPool.d.ts +46 -0
  31. package/_types/tempo/internal/virtualMasterPool.d.ts.map +1 -0
  32. package/_types/version.d.ts +1 -1
  33. package/package.json +1 -1
  34. package/tempo/TxEnvelopeTempo.ts +6 -3
  35. package/tempo/VirtualMaster.test.ts +77 -0
  36. package/tempo/VirtualMaster.ts +431 -23
  37. package/tempo/index.ts +5 -2
  38. package/tempo/internal/mine.c +182 -0
  39. package/tempo/internal/mine.wasm.ts +17 -0
  40. package/tempo/internal/virtualMasterPool.ts +254 -0
  41. package/version.ts +1 -1
@@ -1,8 +1,10 @@
1
+ import { keccak_256 } from '@noble/hashes/sha3';
1
2
  import * as Address from '../core/Address.js';
2
3
  import * as Bytes from '../core/Bytes.js';
3
4
  import * as Errors from '../core/Errors.js';
4
5
  import * as Hash from '../core/Hash.js';
5
6
  import * as Hex from '../core/Hex.js';
7
+ import * as VirtualMasterPool from './internal/virtualMasterPool.js';
6
8
  import * as TempoAddress from './TempoAddress.js';
7
9
  import * as VirtualAddress from './VirtualAddress.js';
8
10
  const tip20Prefix = '0x20c000000000000000000000';
@@ -20,11 +22,12 @@ const zeroAddress = '0x0000000000000000000000000000000000000000';
20
22
  *
21
23
  * @example
22
24
  * ```ts twoslash
25
+ * import { Address, Hex } from 'ox'
23
26
  * import { VirtualMaster } from 'ox/tempo'
24
27
  *
25
28
  * const hash = VirtualMaster.getRegistrationHash({
26
- * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
27
- * salt: '0x00000000000000000000000000000000000000000000000000000000abf52baf',
29
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
30
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
28
31
  * })
29
32
  *
30
33
  * hash
@@ -50,11 +53,12 @@ export function getRegistrationHash(value) {
50
53
  *
51
54
  * @example
52
55
  * ```ts twoslash
56
+ * import { Address, Hex } from 'ox'
53
57
  * import { VirtualMaster } from 'ox/tempo'
54
58
  *
55
59
  * const masterId = VirtualMaster.getMasterId({
56
- * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
57
- * salt: '0x00000000000000000000000000000000000000000000000000000000abf52baf',
60
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
61
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
58
62
  * })
59
63
  *
60
64
  * masterId
@@ -77,11 +81,12 @@ export function getMasterId(value) {
77
81
  *
78
82
  * @example
79
83
  * ```ts twoslash
84
+ * import { Address, Hex } from 'ox'
80
85
  * import { VirtualMaster } from 'ox/tempo'
81
86
  *
82
87
  * const valid = VirtualMaster.validateSalt({
83
- * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
84
- * salt: '0x00000000000000000000000000000000000000000000000000000000abf52baf',
88
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
89
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
85
90
  * })
86
91
  *
87
92
  * valid
@@ -102,7 +107,7 @@ export function validateSalt(value) {
102
107
  /**
103
108
  * Searches a bounded range of salts for the first value that satisfies TIP-1022 PoW.
104
109
  *
105
- * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
110
+ * [TIP-1022](https://tips.sh/1022)
106
111
  *
107
112
  * This is intentionally a small, deterministic primitive. It does not coordinate
108
113
  * workers or async execution. Callers that need large searches can shard ranges
@@ -111,14 +116,21 @@ export function validateSalt(value) {
111
116
  * Master addresses must satisfy TIP-1022 registration constraints: they cannot
112
117
  * be the zero address, another virtual address, or a TIP-20 token address.
113
118
  *
119
+ * :::warning
120
+ *
121
+ * It is strongly recommended to use {@link ox#VirtualMaster.(mineSaltAsync:function)} instead of this
122
+ * function. `mineSaltAsync` uses WASM-accelerated keccak256 with parallel
123
+ * workers and is a lot faster than the pure JS implementation used here.
124
+ *
125
+ * :::
126
+ *
114
127
  * @example
115
128
  * ```ts twoslash
129
+ * import { Address } from 'ox'
116
130
  * import { VirtualMaster } from 'ox/tempo'
117
131
  *
118
132
  * const result = VirtualMaster.mineSalt({
119
133
  * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
120
- * start: 0xabf52ba0n,
121
- * count: 16,
122
134
  * })
123
135
  *
124
136
  * result?.salt
@@ -129,35 +141,286 @@ export function validateSalt(value) {
129
141
  * @returns The first matching salt in the range, if any.
130
142
  */
131
143
  export function mineSalt(value) {
132
- assertCount(value.count);
133
- const address = resolveAddress(value.address);
134
- const addressBytes = Bytes.fromHex(address);
135
- const saltBytes = toFixedBytes(value.start ?? 0n, 32);
136
- const input = new Uint8Array(addressBytes.length + saltBytes.length);
144
+ const count = value.count ?? 2 ** 32;
145
+ assertCount(count);
146
+ const addressBytes = Bytes.fromHex(resolveAddress(value.address));
147
+ const input = new Uint8Array(addressBytes.length + 32);
137
148
  input.set(addressBytes);
138
- for (let i = 0; i < value.count; i++) {
139
- input.set(saltBytes, addressBytes.length);
140
- const registrationHash = Hash.keccak256(input, { as: 'Bytes' });
141
- if (hasProofOfWork(registrationHash)) {
149
+ // Salt is a view into input increment mutates input directly, no copy.
150
+ const saltView = input.subarray(addressBytes.length);
151
+ saltView.set(toFixedBytes(value.start ?? 0n, 32));
152
+ for (let i = 0; i < count; i++) {
153
+ const hash = keccak_256(input);
154
+ if (hash[0] === 0 && hash[1] === 0 && hash[2] === 0 && hash[3] === 0) {
142
155
  return {
143
- masterId: Hex.fromBytes(registrationHash.subarray(4, 8)),
144
- registrationHash: Hex.fromBytes(registrationHash),
145
- salt: Hex.fromBytes(saltBytes),
156
+ masterId: Hex.fromBytes(hash.subarray(4, 8)),
157
+ registrationHash: Hex.fromBytes(hash),
158
+ salt: Hex.fromBytes(saltView),
146
159
  };
147
160
  }
148
- if (i < value.count - 1 && !increment(saltBytes))
161
+ if (i < count - 1 && !increment(saltView))
149
162
  break;
150
163
  }
151
164
  return undefined;
152
165
  }
166
+ /**
167
+ * Searches for a salt that satisfies TIP-1022 PoW using parallel workers and
168
+ * WASM-accelerated keccak256.
169
+ *
170
+ * [TIP-1022](https://tips.sh/1022)
171
+ *
172
+ * Uses WASM-accelerated keccak256 with parallel
173
+ * workers when available. Falls back to chunked single-threaded mining in
174
+ * environments without worker support.
175
+ *
176
+ * - **Node.js / Bun / Deno**: Spawns `worker_threads` with inline WASM keccak256.
177
+ * - **Browsers**: Spawns Web Workers via Blob URLs with inline WASM keccak256.
178
+ *
179
+ * @example
180
+ * ```ts twoslash
181
+ * import { Address } from 'ox'
182
+ * import { VirtualMaster } from 'ox/tempo'
183
+ *
184
+ * const result = await VirtualMaster.mineSaltAsync({
185
+ * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
186
+ * })
187
+ * ```
188
+ *
189
+ * @param parameters - Search parameters.
190
+ * @returns The first matching salt, if any.
191
+ */
192
+ export async function mineSaltAsync(parameters) {
193
+ const { chunkSize = 100_000, count = 2 ** 32, onProgress, signal, start: start_ = 0n, workers = getDefaultWorkerCount(), } = parameters;
194
+ const address = resolveAddress(parameters.address);
195
+ const start = toFixedHex(start_, 32);
196
+ assertCount(count);
197
+ if (workers !== undefined)
198
+ assertWorkers(workers);
199
+ throwIfAborted(signal);
200
+ const workerCount = Math.max(1, Math.min(workers, Math.ceil(count / chunkSize)));
201
+ if (workerCount <= 1)
202
+ return mineSaltAsyncFallback({
203
+ address,
204
+ chunkSize,
205
+ count,
206
+ onProgress,
207
+ signal,
208
+ start,
209
+ });
210
+ const pool = await VirtualMasterPool.resolve();
211
+ if (!pool)
212
+ return mineSaltAsyncFallback({
213
+ address,
214
+ chunkSize,
215
+ count,
216
+ onProgress,
217
+ signal,
218
+ start,
219
+ });
220
+ return mineSaltWithWorkerPool({
221
+ address,
222
+ chunkSize,
223
+ count,
224
+ onProgress,
225
+ pool,
226
+ signal,
227
+ start,
228
+ workerCount,
229
+ });
230
+ }
231
+ /**
232
+ * Runs parallel salt mining across a worker pool.
233
+ *
234
+ * @internal
235
+ */
236
+ // biome-ignore lint/correctness/noUnusedVariables: _
237
+ function mineSaltWithWorkerPool(value) {
238
+ const startedAt = Date.now();
239
+ return new Promise((resolve, reject) => {
240
+ let settled = false;
241
+ let attempts = 0;
242
+ let completedWorkers = 0;
243
+ const handles = [];
244
+ const emitProgress = () => {
245
+ if (!value.onProgress)
246
+ return;
247
+ const elapsed = Date.now() - startedAt;
248
+ const seconds = elapsed / 1000;
249
+ value.onProgress({
250
+ attempts,
251
+ chunkSize: value.chunkSize,
252
+ count: value.count,
253
+ elapsed,
254
+ progress: Math.min(1, attempts / value.count),
255
+ rate: seconds === 0 ? 0 : attempts / seconds,
256
+ workers: value.workerCount,
257
+ });
258
+ };
259
+ const terminateAll = () => {
260
+ for (const h of handles)
261
+ h.terminate();
262
+ };
263
+ const succeed = (result) => {
264
+ if (settled)
265
+ return;
266
+ settled = true;
267
+ value.signal?.removeEventListener('abort', onAbort);
268
+ terminateAll();
269
+ resolve(result);
270
+ };
271
+ const fail = (error) => {
272
+ if (settled)
273
+ return;
274
+ settled = true;
275
+ value.signal?.removeEventListener('abort', onAbort);
276
+ terminateAll();
277
+ reject(error instanceof Error
278
+ ? error
279
+ : new Errors.BaseError('Failed to mine virtual master salt.'));
280
+ };
281
+ const onMessage = (msg) => {
282
+ if (settled)
283
+ return;
284
+ switch (msg.type) {
285
+ case 'found':
286
+ succeed(msg.result);
287
+ return;
288
+ case 'progress':
289
+ attempts += msg.attempts;
290
+ emitProgress();
291
+ return;
292
+ case 'done':
293
+ completedWorkers++;
294
+ if (completedWorkers === value.workerCount)
295
+ succeed(undefined);
296
+ return;
297
+ case 'error':
298
+ fail(new Errors.BaseError(msg.message));
299
+ return;
300
+ }
301
+ };
302
+ const onAbort = () => fail(getAbortError(value.signal));
303
+ value.signal?.addEventListener('abort', onAbort, { once: true });
304
+ for (let i = 0; i < value.workerCount; i++) {
305
+ const handle = value.pool.spawn(i, onMessage, fail);
306
+ handles.push(handle);
307
+ handle.postMessage({
308
+ type: 'start',
309
+ address: value.address,
310
+ chunkSize: value.chunkSize,
311
+ count: value.count,
312
+ start: value.start,
313
+ workerCount: value.workerCount,
314
+ workerIndex: i,
315
+ });
316
+ }
317
+ });
318
+ }
319
+ /**
320
+ * Single-threaded chunked fallback when no worker pool is available.
321
+ *
322
+ * @internal
323
+ */
324
+ // biome-ignore lint/correctness/noUnusedVariables: _
325
+ async function mineSaltAsyncFallback(value) {
326
+ const startedAt = Date.now();
327
+ const startBigInt = BigInt(value.start);
328
+ for (let offset = 0; offset < value.count; offset += value.chunkSize) {
329
+ throwIfAborted(value.signal);
330
+ const count = Math.min(value.chunkSize, value.count - offset);
331
+ const result = mineSalt({
332
+ address: value.address,
333
+ count,
334
+ start: startBigInt + BigInt(offset),
335
+ });
336
+ if (value.onProgress) {
337
+ const attempts = Math.min(value.count, offset + count);
338
+ const elapsed = Date.now() - startedAt;
339
+ const seconds = elapsed / 1000;
340
+ value.onProgress({
341
+ attempts,
342
+ chunkSize: value.chunkSize,
343
+ count: value.count,
344
+ elapsed,
345
+ progress: Math.min(1, attempts / value.count),
346
+ rate: seconds === 0 ? 0 : attempts / seconds,
347
+ workers: 1,
348
+ });
349
+ }
350
+ if (result)
351
+ return result;
352
+ // Yield to the event loop between chunks.
353
+ await new Promise((r) => setTimeout(r, 0));
354
+ }
355
+ return undefined;
356
+ }
357
+ /**
358
+ * Asserts that `workers` is a non-negative safe integer.
359
+ *
360
+ * @internal
361
+ */
362
+ function assertWorkers(workers) {
363
+ if (Number.isSafeInteger(workers) && workers >= 0)
364
+ return;
365
+ throw new Errors.BaseError(`Workers "${workers}" is invalid. Expected a non-negative safe integer.`);
366
+ }
367
+ /**
368
+ * Extracts or creates an error from an `AbortSignal`.
369
+ *
370
+ * @internal
371
+ */
372
+ function getAbortError(signal) {
373
+ const reason = signal?.reason;
374
+ if (reason instanceof Error)
375
+ return reason;
376
+ return new Errors.BaseError('The operation was aborted.');
377
+ }
378
+ /**
379
+ * Returns the default number of workers for the current platform.
380
+ *
381
+ * @internal
382
+ */
383
+ function getDefaultWorkerCount() {
384
+ if (typeof navigator !== 'undefined') {
385
+ const c = navigator.hardwareConcurrency;
386
+ if (c && c > 1)
387
+ return c - 1;
388
+ }
389
+ return 1;
390
+ }
391
+ /**
392
+ * Throws the signal's abort reason if the signal is aborted.
393
+ *
394
+ * @internal
395
+ */
396
+ function throwIfAborted(signal) {
397
+ if (!signal?.aborted)
398
+ return;
399
+ throw getAbortError(signal);
400
+ }
401
+ /**
402
+ * Returns `true` if the first 4 bytes of a hash are zero.
403
+ *
404
+ * @internal
405
+ */
153
406
  function hasProofOfWork(hash) {
154
407
  return hash[0] === 0 && hash[1] === 0 && hash[2] === 0 && hash[3] === 0;
155
408
  }
409
+ /**
410
+ * Asserts that `count` is a positive safe integer.
411
+ *
412
+ * @internal
413
+ */
156
414
  function assertCount(count) {
157
415
  if (Number.isSafeInteger(count) && count > 0)
158
416
  return;
159
417
  throw new Errors.BaseError(`Count "${count}" is invalid. Expected a positive safe integer.`);
160
418
  }
419
+ /**
420
+ * Increments a big-endian byte array by one. Returns `false` on overflow.
421
+ *
422
+ * @internal
423
+ */
161
424
  function increment(bytes) {
162
425
  for (let i = bytes.length - 1; i >= 0; i--) {
163
426
  const value = bytes[i];
@@ -170,12 +433,22 @@ function increment(bytes) {
170
433
  }
171
434
  return false;
172
435
  }
436
+ /**
437
+ * Resolves a Tempo or hex address, validates it as a valid master.
438
+ *
439
+ * @internal
440
+ */
173
441
  function resolveAddress(address) {
174
442
  const resolved = TempoAddress.resolve(address);
175
443
  Address.assert(resolved, { strict: false });
176
444
  assertValidMasterAddress(resolved);
177
445
  return resolved;
178
446
  }
447
+ /**
448
+ * Throws if the address is zero, virtual, or a TIP-20 token.
449
+ *
450
+ * @internal
451
+ */
179
452
  function assertValidMasterAddress(address) {
180
453
  const normalized = address.toLowerCase();
181
454
  if (normalized === zeroAddress)
@@ -185,9 +458,19 @@ function assertValidMasterAddress(address) {
185
458
  if (normalized.startsWith(tip20Prefix))
186
459
  throw new Errors.BaseError('Virtual master address cannot be a TIP-20 token address.');
187
460
  }
461
+ /**
462
+ * Converts a salt to a fixed-size byte array.
463
+ *
464
+ * @internal
465
+ */
188
466
  function toFixedBytes(value, size) {
189
467
  return Bytes.fromHex(toFixedHex(value, size));
190
468
  }
469
+ /**
470
+ * Converts a salt to a zero-padded hex string of the given size.
471
+ *
472
+ * @internal
473
+ */
191
474
  function toFixedHex(value, size) {
192
475
  if (typeof value === 'number' || typeof value === 'bigint')
193
476
  return Hex.fromNumber(value, { size });
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualMaster.js","sourceRoot":"","sources":["../../tempo/VirtualMaster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VirtualMaster.js","sourceRoot":"","sources":["../../tempo/VirtualMaster.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,7 @@ export * as PoolId from './PoolId.js';
126
126
  *
127
127
  * @example
128
128
  * ```ts twoslash
129
+ * import 'ox/window'
129
130
  * import { Provider, RpcSchema } from 'ox'
130
131
  * import { RpcSchemaTempo } from 'ox/tempo'
131
132
  *
@@ -401,11 +402,12 @@ export * as VirtualAddress from './VirtualAddress.js';
401
402
  *
402
403
  * @example
403
404
  * ```ts twoslash
405
+ * import { Address, Hex } from 'ox'
404
406
  * import { VirtualMaster } from 'ox/tempo'
405
407
  *
406
408
  * const registration = {
407
- * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
408
- * salt: '0x00000000000000000000000000000000000000000000000000000000abf52baf',
409
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
410
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
409
411
  * }
410
412
  *
411
413
  * const registrationHash = VirtualMaster.getRegistrationHash(registration) // keccak256(address || salt)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../tempo/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../tempo/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,15 @@
1
+ // Embedded TIP-1022 WASM keccak256 salt miner (compiled from mine.c).
2
+ //
3
+ // Memory layout at offset 1024:
4
+ // [0..19] address (20 bytes, set by JS)
5
+ // [20..51] salt (32 bytes, set/read by JS, incremented in-place)
6
+ // [52..83] hash out (32 bytes, written on match)
7
+ //
8
+ // Exported: mine(count: i32) -> i32 — returns 1 if found, 0 if not.
9
+ //
10
+ // Generated by: pnpm tsx scripts/build-mine-wasm.ts
11
+ /** Base64-encoded WASM binary for the TIP-1022 salt miner. */
12
+ export const wasmBase64 = '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';
13
+ /** Byte offset in WASM linear memory where mining I/O begins. */
14
+ export const dataOffset = 1024;
15
+ //# sourceMappingURL=mine.wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mine.wasm.js","sourceRoot":"","sources":["../../../tempo/internal/mine.wasm.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,gCAAgC;AAChC,8CAA8C;AAC9C,yEAAyE;AACzE,qDAAqD;AACrD,EAAE;AACF,oEAAoE;AACpE,EAAE;AACF,oDAAoD;AAEpD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,UAAU,GACrB,8tGAA8tG,CAAA;AAEhuG,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA"}