ox 0.14.17 → 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 (56) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
  3. package/_cjs/tempo/VirtualAddress.js +70 -0
  4. package/_cjs/tempo/VirtualAddress.js.map +1 -0
  5. package/_cjs/tempo/VirtualMaster.js +278 -0
  6. package/_cjs/tempo/VirtualMaster.js.map +1 -0
  7. package/_cjs/tempo/index.js +3 -1
  8. package/_cjs/tempo/index.js.map +1 -1
  9. package/_cjs/tempo/internal/mine.wasm.js +6 -0
  10. package/_cjs/tempo/internal/mine.wasm.js.map +1 -0
  11. package/_cjs/tempo/internal/virtualMasterPool.js +186 -0
  12. package/_cjs/tempo/internal/virtualMasterPool.js.map +1 -0
  13. package/_cjs/version.js +1 -1
  14. package/_esm/tempo/TxEnvelopeTempo.js +6 -3
  15. package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
  16. package/_esm/tempo/VirtualAddress.js +154 -0
  17. package/_esm/tempo/VirtualAddress.js.map +1 -0
  18. package/_esm/tempo/VirtualMaster.js +483 -0
  19. package/_esm/tempo/VirtualMaster.js.map +1 -0
  20. package/_esm/tempo/index.js +54 -0
  21. package/_esm/tempo/index.js.map +1 -1
  22. package/_esm/tempo/internal/mine.wasm.js +15 -0
  23. package/_esm/tempo/internal/mine.wasm.js.map +1 -0
  24. package/_esm/tempo/internal/virtualMasterPool.js +216 -0
  25. package/_esm/tempo/internal/virtualMasterPool.js.map +1 -0
  26. package/_esm/version.js +1 -1
  27. package/_types/core/RpcSchema.d.ts +0 -2
  28. package/_types/core/RpcSchema.d.ts.map +1 -1
  29. package/_types/tempo/TxEnvelopeTempo.d.ts +6 -3
  30. package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
  31. package/_types/tempo/VirtualAddress.d.ts +129 -0
  32. package/_types/tempo/VirtualAddress.d.ts.map +1 -0
  33. package/_types/tempo/VirtualMaster.d.ts +237 -0
  34. package/_types/tempo/VirtualMaster.d.ts.map +1 -0
  35. package/_types/tempo/index.d.ts +54 -0
  36. package/_types/tempo/index.d.ts.map +1 -1
  37. package/_types/tempo/internal/mine.wasm.d.ts +5 -0
  38. package/_types/tempo/internal/mine.wasm.d.ts.map +1 -0
  39. package/_types/tempo/internal/virtualMasterPool.d.ts +46 -0
  40. package/_types/tempo/internal/virtualMasterPool.d.ts.map +1 -0
  41. package/_types/version.d.ts +1 -1
  42. package/core/RpcSchema.ts +0 -2
  43. package/package.json +11 -1
  44. package/tempo/TxEnvelopeTempo.ts +6 -3
  45. package/tempo/VirtualAddress/package.json +6 -0
  46. package/tempo/VirtualAddress.test.ts +88 -0
  47. package/tempo/VirtualAddress.ts +201 -0
  48. package/tempo/VirtualMaster/package.json +6 -0
  49. package/tempo/VirtualMaster.test.ts +204 -0
  50. package/tempo/VirtualMaster.ts +711 -0
  51. package/tempo/e2e.test.ts +0 -2
  52. package/tempo/index.ts +55 -0
  53. package/tempo/internal/mine.c +182 -0
  54. package/tempo/internal/mine.wasm.ts +17 -0
  55. package/tempo/internal/virtualMasterPool.ts +254 -0
  56. package/version.ts +1 -1
@@ -0,0 +1,483 @@
1
+ import { keccak_256 } from '@noble/hashes/sha3';
2
+ import * as Address from '../core/Address.js';
3
+ import * as Bytes from '../core/Bytes.js';
4
+ import * as Errors from '../core/Errors.js';
5
+ import * as Hash from '../core/Hash.js';
6
+ import * as Hex from '../core/Hex.js';
7
+ import * as VirtualMasterPool from './internal/virtualMasterPool.js';
8
+ import * as TempoAddress from './TempoAddress.js';
9
+ import * as VirtualAddress from './VirtualAddress.js';
10
+ const tip20Prefix = '0x20c000000000000000000000';
11
+ const zeroAddress = '0x0000000000000000000000000000000000000000';
12
+ /**
13
+ * Computes the TIP-1022 registration hash for a master address and salt.
14
+ *
15
+ * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
16
+ *
17
+ * The registration hash is `keccak256(masterAddress || salt)` where `salt`
18
+ * is encoded as a 32-byte value.
19
+ *
20
+ * Master addresses must satisfy TIP-1022 registration constraints: they cannot
21
+ * be the zero address, another virtual address, or a TIP-20 token address.
22
+ *
23
+ * @example
24
+ * ```ts twoslash
25
+ * import { Address, Hex } from 'ox'
26
+ * import { VirtualMaster } from 'ox/tempo'
27
+ *
28
+ * const hash = VirtualMaster.getRegistrationHash({
29
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
30
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
31
+ * })
32
+ *
33
+ * hash
34
+ * // @log: '0x0000000058e21090d8f4bee424b90cddc2378aefa1bbbfa1443631a929ae966d'
35
+ * ```
36
+ *
37
+ * @param value - Master address and salt.
38
+ * @returns The registration hash.
39
+ */
40
+ export function getRegistrationHash(value) {
41
+ return Hash.keccak256(Hex.concat(resolveAddress(value.address), toFixedHex(value.salt, 32)));
42
+ }
43
+ /**
44
+ * Derives the 4-byte TIP-1022 `masterId` from a master address and salt.
45
+ *
46
+ * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
47
+ *
48
+ * This returns bytes `[4:8]` of the registration hash, regardless of whether the
49
+ * salt satisfies the proof-of-work requirement.
50
+ *
51
+ * Master addresses must satisfy TIP-1022 registration constraints: they cannot
52
+ * be the zero address, another virtual address, or a TIP-20 token address.
53
+ *
54
+ * @example
55
+ * ```ts twoslash
56
+ * import { Address, Hex } from 'ox'
57
+ * import { VirtualMaster } from 'ox/tempo'
58
+ *
59
+ * const masterId = VirtualMaster.getMasterId({
60
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
61
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
62
+ * })
63
+ *
64
+ * masterId
65
+ * // @log: '0x58e21090'
66
+ * ```
67
+ *
68
+ * @param value - Master address and salt.
69
+ * @returns The derived master identifier.
70
+ */
71
+ export function getMasterId(value) {
72
+ return Hex.slice(getRegistrationHash(value), 4, 8);
73
+ }
74
+ /**
75
+ * Validates that a salt satisfies the TIP-1022 32-bit proof-of-work requirement.
76
+ *
77
+ * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
78
+ *
79
+ * Returns `false` for invalid master addresses, including the zero address,
80
+ * virtual addresses, and TIP-20 token addresses.
81
+ *
82
+ * @example
83
+ * ```ts twoslash
84
+ * import { Address, Hex } from 'ox'
85
+ * import { VirtualMaster } from 'ox/tempo'
86
+ *
87
+ * const valid = VirtualMaster.validateSalt({
88
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
89
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
90
+ * })
91
+ *
92
+ * valid
93
+ * // @log: true
94
+ * ```
95
+ *
96
+ * @param value - Master address and salt.
97
+ * @returns `true` if the first 4 bytes of the registration hash are zero.
98
+ */
99
+ export function validateSalt(value) {
100
+ try {
101
+ return hasProofOfWork(Hash.keccak256(Hex.concat(resolveAddress(value.address), toFixedHex(value.salt, 32)), { as: 'Bytes' }));
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ /**
108
+ * Searches a bounded range of salts for the first value that satisfies TIP-1022 PoW.
109
+ *
110
+ * [TIP-1022](https://tips.sh/1022)
111
+ *
112
+ * This is intentionally a small, deterministic primitive. It does not coordinate
113
+ * workers or async execution. Callers that need large searches can shard ranges
114
+ * externally.
115
+ *
116
+ * Master addresses must satisfy TIP-1022 registration constraints: they cannot
117
+ * be the zero address, another virtual address, or a TIP-20 token address.
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
+ *
127
+ * @example
128
+ * ```ts twoslash
129
+ * import { Address } from 'ox'
130
+ * import { VirtualMaster } from 'ox/tempo'
131
+ *
132
+ * const result = VirtualMaster.mineSalt({
133
+ * address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
134
+ * })
135
+ *
136
+ * result?.salt
137
+ * // @log: '0x00000000000000000000000000000000000000000000000000000000abf52baf'
138
+ * ```
139
+ *
140
+ * @param value - Search range parameters.
141
+ * @returns The first matching salt in the range, if any.
142
+ */
143
+ export function mineSalt(value) {
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);
148
+ input.set(addressBytes);
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) {
155
+ return {
156
+ masterId: Hex.fromBytes(hash.subarray(4, 8)),
157
+ registrationHash: Hex.fromBytes(hash),
158
+ salt: Hex.fromBytes(saltView),
159
+ };
160
+ }
161
+ if (i < count - 1 && !increment(saltView))
162
+ break;
163
+ }
164
+ return undefined;
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
+ */
406
+ function hasProofOfWork(hash) {
407
+ return hash[0] === 0 && hash[1] === 0 && hash[2] === 0 && hash[3] === 0;
408
+ }
409
+ /**
410
+ * Asserts that `count` is a positive safe integer.
411
+ *
412
+ * @internal
413
+ */
414
+ function assertCount(count) {
415
+ if (Number.isSafeInteger(count) && count > 0)
416
+ return;
417
+ throw new Errors.BaseError(`Count "${count}" is invalid. Expected a positive safe integer.`);
418
+ }
419
+ /**
420
+ * Increments a big-endian byte array by one. Returns `false` on overflow.
421
+ *
422
+ * @internal
423
+ */
424
+ function increment(bytes) {
425
+ for (let i = bytes.length - 1; i >= 0; i--) {
426
+ const value = bytes[i];
427
+ if (value === 0xff) {
428
+ bytes[i] = 0;
429
+ continue;
430
+ }
431
+ bytes[i] = value + 1;
432
+ return true;
433
+ }
434
+ return false;
435
+ }
436
+ /**
437
+ * Resolves a Tempo or hex address, validates it as a valid master.
438
+ *
439
+ * @internal
440
+ */
441
+ function resolveAddress(address) {
442
+ const resolved = TempoAddress.resolve(address);
443
+ Address.assert(resolved, { strict: false });
444
+ assertValidMasterAddress(resolved);
445
+ return resolved;
446
+ }
447
+ /**
448
+ * Throws if the address is zero, virtual, or a TIP-20 token.
449
+ *
450
+ * @internal
451
+ */
452
+ function assertValidMasterAddress(address) {
453
+ const normalized = address.toLowerCase();
454
+ if (normalized === zeroAddress)
455
+ throw new Errors.BaseError('Virtual master address cannot be the zero address.');
456
+ if (VirtualAddress.isVirtual(address))
457
+ throw new Errors.BaseError('Virtual master address cannot itself be a virtual address.');
458
+ if (normalized.startsWith(tip20Prefix))
459
+ throw new Errors.BaseError('Virtual master address cannot be a TIP-20 token address.');
460
+ }
461
+ /**
462
+ * Converts a salt to a fixed-size byte array.
463
+ *
464
+ * @internal
465
+ */
466
+ function toFixedBytes(value, size) {
467
+ return Bytes.fromHex(toFixedHex(value, size));
468
+ }
469
+ /**
470
+ * Converts a salt to a zero-padded hex string of the given size.
471
+ *
472
+ * @internal
473
+ */
474
+ function toFixedHex(value, size) {
475
+ if (typeof value === 'number' || typeof value === 'bigint')
476
+ return Hex.fromNumber(value, { size });
477
+ if (typeof value === 'string') {
478
+ Hex.assert(value, { strict: true });
479
+ return Hex.padLeft(value, size);
480
+ }
481
+ return Hex.fromBytes(Bytes.padLeft(value, size));
482
+ }
483
+ //# sourceMappingURL=VirtualMaster.js.map
@@ -0,0 +1 @@
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
  *
@@ -363,6 +364,59 @@ export * as TransactionRequest from './TransactionRequest.js';
363
364
  * @category Reference
364
365
  */
365
366
  export * as TxEnvelopeTempo from './TxEnvelopeTempo.js';
367
+ /**
368
+ * TIP-1022 virtual address encoding and parsing utilities.
369
+ *
370
+ * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
371
+ *
372
+ * Virtual addresses reserve the following 20-byte layout:
373
+ * `[4-byte masterId][10-byte VIRTUAL_MAGIC][6-byte userTag]`.
374
+ * These helpers only operate on the reserved byte layout and do not query
375
+ * onchain registration state.
376
+ *
377
+ * @example
378
+ * ```ts twoslash
379
+ * import { TempoAddress, VirtualAddress } from 'ox/tempo'
380
+ *
381
+ * const masterId = '0x58e21090' // derived when the master registers
382
+ * const userTag = '0x010203040506' // operator-defined deposit identifier
383
+ *
384
+ * const address = VirtualAddress.from({
385
+ * masterId,
386
+ * userTag,
387
+ * })
388
+ *
389
+ * const tempoAddress = TempoAddress.format(address) // optional display format
390
+ * ```
391
+ *
392
+ * @category Reference
393
+ */
394
+ export * as VirtualAddress from './VirtualAddress.js';
395
+ /**
396
+ * TIP-1022 master registration utilities.
397
+ *
398
+ * [TIP-1022](https://docs.tempo.xyz/protocol/tips/tip-1022)
399
+ *
400
+ * These utilities expose deterministic hashing and bounded salt mining helpers for
401
+ * `registerVirtualMaster(bytes32 salt)` without introducing any extra hashing dependency.
402
+ *
403
+ * @example
404
+ * ```ts twoslash
405
+ * import { Address, Hex } from 'ox'
406
+ * import { VirtualMaster } from 'ox/tempo'
407
+ *
408
+ * const registration = {
409
+ * address: Address.from('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'),
410
+ * salt: Hex.from('0x00000000000000000000000000000000000000000000000000000000abf52baf'),
411
+ * }
412
+ *
413
+ * const registrationHash = VirtualMaster.getRegistrationHash(registration) // keccak256(address || salt)
414
+ * const masterId = VirtualMaster.getMasterId(registration) // bytes [4:8] of the hash
415
+ * ```
416
+ *
417
+ * @category Reference
418
+ */
419
+ export * as VirtualMaster from './VirtualMaster.js';
366
420
  /**
367
421
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
368
422
  *
@@ -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;;;;;;;;;;;;;;;;;;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"}