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.
- package/CHANGELOG.md +6 -0
- package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -1
- package/_cjs/tempo/VirtualMaster.js +192 -13
- package/_cjs/tempo/VirtualMaster.js.map +1 -1
- package/_cjs/tempo/index.js.map +1 -1
- package/_cjs/tempo/internal/mine.wasm.js +6 -0
- package/_cjs/tempo/internal/mine.wasm.js.map +1 -0
- package/_cjs/tempo/internal/virtualMasterPool.js +186 -0
- package/_cjs/tempo/internal/virtualMasterPool.js.map +1 -0
- package/_cjs/version.js +1 -1
- package/_esm/tempo/TxEnvelopeTempo.js +6 -3
- package/_esm/tempo/TxEnvelopeTempo.js.map +1 -1
- package/_esm/tempo/VirtualMaster.js +305 -22
- package/_esm/tempo/VirtualMaster.js.map +1 -1
- package/_esm/tempo/index.js +4 -2
- package/_esm/tempo/index.js.map +1 -1
- package/_esm/tempo/internal/mine.wasm.js +15 -0
- package/_esm/tempo/internal/mine.wasm.js.map +1 -0
- package/_esm/tempo/internal/virtualMasterPool.js +216 -0
- package/_esm/tempo/internal/virtualMasterPool.js.map +1 -0
- package/_esm/version.js +1 -1
- package/_types/tempo/TxEnvelopeTempo.d.ts +6 -3
- package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -1
- package/_types/tempo/VirtualMaster.d.ts +92 -10
- package/_types/tempo/VirtualMaster.d.ts.map +1 -1
- package/_types/tempo/index.d.ts +4 -2
- package/_types/tempo/index.d.ts.map +1 -1
- package/_types/tempo/internal/mine.wasm.d.ts +5 -0
- package/_types/tempo/internal/mine.wasm.d.ts.map +1 -0
- package/_types/tempo/internal/virtualMasterPool.d.ts +46 -0
- package/_types/tempo/internal/virtualMasterPool.d.ts.map +1 -0
- package/_types/version.d.ts +1 -1
- package/package.json +1 -1
- package/tempo/TxEnvelopeTempo.ts +6 -3
- package/tempo/VirtualMaster.test.ts +77 -0
- package/tempo/VirtualMaster.ts +431 -23
- package/tempo/index.ts +5 -2
- package/tempo/internal/mine.c +182 -0
- package/tempo/internal/mine.wasm.ts +17 -0
- package/tempo/internal/virtualMasterPool.ts +254 -0
- 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://
|
|
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
|
-
|
|
133
|
-
|
|
134
|
-
const addressBytes = Bytes.fromHex(address);
|
|
135
|
-
const
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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(
|
|
144
|
-
registrationHash: Hex.fromBytes(
|
|
145
|
-
salt: Hex.fromBytes(
|
|
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 <
|
|
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":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD,MAAM,WAAW,GAAG,4BAA4B,CAAA;AAChD,MAAM,WAAW,GAAG,4CAA4C,CAAA;AAKhE
|
|
1
|
+
{"version":3,"file":"VirtualMaster.js","sourceRoot":"","sources":["../../tempo/VirtualMaster.ts"],"names":[],"mappings":"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"}
|
package/_esm/tempo/index.js
CHANGED
|
@@ -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)
|
package/_esm/tempo/index.js.map
CHANGED
|
@@ -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
|
|
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 = 'AGFzbQEAAAABBgFgAX8BfwMCAQAFAwEAAgcRAgZtZW1vcnkCAARtaW5lAAAMAQEKjxABjBACA38ufgJAIABBAEwNAEGQCDEAAEGRCDEAAEIIhoRBkggxAABCEIaEQZMIMQAAQhiGhCEtQYgIMQAAQYkIMQAAQgiGhEGKCDEAAEIQhoRBiwgxAABCGIaEQYwIMQAAQiCGhEGNCDEAAEIohoRBjggxAABCMIaEQY8IMQAAQjiGhCEuQYAIMQAAQYEIMQAAQgiGhEGCCDEAAEIQhoRBgwgxAABCGIaEQYQIMQAAQiCGhEGFCDEAAEIohoRBhggxAABCMIaEQYcIMQAAQjiGhCEvA0BBsAg1AgBCgICAgBCEIQ9BlAg1AgBCIIYgLYQhB0GoCCkDACEQQaAIKQMAIRFBmAgpAwAhCkKAgICAgICAgIB/IRJCACETQcB+IQEgLiELQgAhFEIAIRVCACEWQgAhF0IAIRhCACEZQgAhGkIAIRtCACEcIC8hCUIAIR1CACEeQgAhDEIAIR9CACENQgAhIEIAIQ4DQCAJIBCFIB2FIB6FIAyFIgQgByAZhSAahSAbhSAchSIIQgGJhSIGIA+FIAogH4UgDYUgIIUgDoUiBSAEQgGJhSIEIBiFITEgBiAVhUICiSIjIAcgBUIBiSALIA+FIBSFIBKFIBWFIgWFIgeFQj6JIiFCf4UgCCARIBaFIBeFIBOFIBiFIg9CAYmFIgggH4VCN4kiIoOFIRggDyAFQgGJhSIFIB6FQimJIiUgBCAXhUIniSIkQn+FgyAihSEVIAYgFIVCCokiJyAIIA6FQjiJIg4gByAbhUIPiSImQn+Fg4UhGyAEIBGFQhuJIikgJyAFIBCFQiSJIihCf4WDhSEeIAUgDIVCEokiLCAHIBmFQgaJIisgBiALhUIBiSIqQn+Fg4UhFyAIIA2FQhmJIgxCf4UgBCAThUIIiSINgyArhSEUIAggCoVCHIkiC0J/hSAEIBaFQhSJIgqDIAcgHIVCPYkiBIUhFiAGIBKFQi2JIgYgCyAEQn+Fg4UhHyAEIAZCf4WDIAUgHYVCA4kiBIUhGSAKIAYgBEJ/hYOFIQ8gBCAKQn+FgyALhSEQIAUgCYUiBCAxQg6JIgZCf4WDIAggIIVCFYkiCYUhCiAHIBqFQiuJIgggBiAJQn+Fg4UhB0IsiSIFIAkgCEJ/hYOFIQsgAUHAgQRqKQMAIAggBUJ/hYOFIASFIQkgJiAnQn+FgyAohSESIAYgBSAEQn+Fg4UhESAoIClCf4WDIA6FIRMgLCANQn+FgyAMhSEaICQgIyAlQn+Fg4UhHCAMICtCf4WDICqFIR0gJCAiQn+FgyAhhSEMIA0gKiAsQn+Fg4UhDSApIA5Cf4WDICaFISAgISAjQn+FgyAlhSEOIAFBCGoiAQ0ACwJAAkACQCAJpwRAQbMILQAAIgFB/wFHBEBBswghAgwCC0GzCEEAOgAAQbIILQAAIgFB/wFHBEBBsgghAgwCC0GyCEEAOgAAQbEILQAAIgFB/wFHBEBBsQghAgwCC0GxCEEAOgAAQbAILQAAIgFB/wFHBEBBsAghAgwCC0GwCEEAOgAAQa8ILQAAIgFB/wFHBEBBrwghAgwCC0GvCEEAOgAAQa4ILQAAIgFB/wFHBEBBrgghAgwCC0GuCEEAOgAAQa0ILQAAIgFB/wFHBEBBrQghAgwCC0GtCEEAOgAAQawILQAAIgFB/wFHBEBBrAghAgwCC0GsCEEAOgAAQasILQAAIgFB/wFHBEBBqwghAgwCC0GrCEEAOgAAQaoILQAAIgFB/wFHBEBBqgghAgwCC0GqCEEAOgAAQakILQAAIgFB/wFHBEBBqQghAgwCC0GpCEEAOgAAQagILQAAIgFB/wFHBEBBqAghAgwCC0GoCEEAOgAAQacILQAAIgFB/wFHBEBBpwghAgwCC0GnCEEAOgAAQaYILQAAIgFB/wFHBEBBpgghAgwCC0GmCEEAOgAAQaUILQAAIgFB/wFHBEBBpQghAgwCC0GlCEEAOgAAQaQILQAAIgFB/wFHBEBBpAghAgwCC0GkCEEAOgAAQaMILQAAIgFB/wFHBEBBowghAgwCC0GjCEEAOgAAQaIILQAAIgFB/wFHBEBBogghAgwCC0GiCEEAOgAAQaEILQAAIgFB/wFHBEBBoQghAgwCC0GhCEEAOgAAQaAILQAAIgFB/wFHBEBBoAghAgwCC0GgCEEAOgAAQZ8ILQAAIgFB/wFHBEBBnwghAgwCC0GfCEEAOgAAQZ4ILQAAIgFB/wFHBEBBngghAgwCC0GeCEEAOgAAQZ0ILQAAIgFB/wFHBEBBnQghAgwCC0GdCEEAOgAAQZwILQAAIgFB/wFHBEBBnAghAgwCC0GcCEEAOgAAQZsILQAAIgFB/wFHBEBBmwghAgwCC0GbCEEAOgAAQZoILQAAIgFB/wFHBEBBmgghAgwCC0GaCEEAOgAAQZkILQAAIgFB/wFHBEBBmQghAgwCC0GZCEEAOgAAQZgILQAAIgFB/wFHBEBBmAghAgwCC0GYCEEAOgAAQZcILQAAIgFB/wFHBEBBlwghAgwCC0GXCEEAOgAAQZYILQAAIgFB/wFHBEBBlgghAgwCC0GWCEEAOgAAQZUILQAAIgFB/wFHBEBBlQghAgwCC0GVCEEAOgAAQZQILQAAIgFB/wFGDQJBlAghAgwBC0G0CCAJNwIAQbwIIAs3AgBBxAggBzcCAEHMCCAKNwIAQQEhAQwECyACIAFBAWo6AAAMAQtBlAhBADoAAAsgA0EBaiIDIABHDQALQQAPCyABCwvJAQEAQYCABAvAAQEAAAAAAAAAgoAAAAAAAACKgAAAAAAAgACAAIAAAACAi4AAAAAAAAABAACAAAAAAIGAAIAAAACACYAAAAAAAICKAAAAAAAAAIgAAAAAAAAACYAAgAAAAAAKAACAAAAAAIuAAIAAAAAAiwAAAAAAAICJgAAAAAAAgAOAAAAAAACAAoAAAAAAAICAAAAAAAAAgAqAAAAAAAAACgAAgAAAAICBgACAAAAAgICAAAAAAACAAQAAgAAAAAAIgACAAAAAgACUAQ90YXJnZXRfZmVhdHVyZXMIKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVlKw9idWxrLW1lbW9yeS1vcHQrFmNhbGwtaW5kaXJlY3Qtb3Zlcmxvbmc=';
|
|
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"}
|