733ecd2681
Add root Cargo workspace with 9 crates: salvium-crypto (extended), salvium-types, salvium-consensus, salvium-wallet, salvium-tx, salvium-rpc, salvium-miner (extended), salvium-cli, salvium-multisig. New modules: chain_state, block_weight, alt_chain, validation, offline signing, stake lifecycle, wallet sync/query/encryption/utxo, randomx utilities, and full multisig crate with CARROT support. Delete 188 JS test/helper/debug files; archive integration test scripts to test/legacy-js/ for live testnet use. Testnet integration tests (transfer, stake, burn, convert, sweep) remain as #[ignore]- gated Rust tests runnable with --ignored against a live daemon.
107 lines
3.0 KiB
JavaScript
107 lines
3.0 KiB
JavaScript
/**
|
|
* Test full mode worker directly
|
|
*/
|
|
|
|
import { Worker } from 'worker_threads';
|
|
import { fileURLToPath } from 'url';
|
|
import { dirname, join } from 'path';
|
|
import { randomx_init_cache, randomx_superscalarhash } from '../src/randomx/vendor/index.js';
|
|
import { RANDOMX_DATASET_ITEM_COUNT } from '../src/randomx/full-mode.js';
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const WORKER_PATH = join(__dirname, '../src/stratum/mining-worker-asm.js');
|
|
|
|
const TEST_SEED = '33d64e8899b07bcc1234567890abcdef1234567890abcdef1234567890abcdef';
|
|
|
|
async function main() {
|
|
console.log('=== Full Mode Worker Test ===\n');
|
|
|
|
// Generate a small test dataset
|
|
console.log('Generating small test dataset (1000 items)...');
|
|
const TEST_ITEMS = 1000;
|
|
|
|
const seedBytes = Buffer.from(TEST_SEED, 'hex');
|
|
const cache = randomx_init_cache(seedBytes);
|
|
const ssHash = randomx_superscalarhash(cache);
|
|
|
|
// Use SharedArrayBuffer
|
|
const datasetSize = RANDOMX_DATASET_ITEM_COUNT * 8 * 8;
|
|
console.log('Creating SharedArrayBuffer of size:', datasetSize);
|
|
|
|
try {
|
|
const sharedBuffer = new SharedArrayBuffer(datasetSize);
|
|
const datasetView = new BigInt64Array(sharedBuffer);
|
|
|
|
// Only fill first 1000 items for testing
|
|
for (let i = 0; i < TEST_ITEMS; i++) {
|
|
const item = ssHash(BigInt(i));
|
|
const offset = i * 8;
|
|
for (let j = 0; j < 8; j++) {
|
|
datasetView[offset + j] = item[j];
|
|
}
|
|
}
|
|
console.log('Test dataset ready\n');
|
|
|
|
// Create worker
|
|
console.log('Creating worker...');
|
|
const worker = new Worker(WORKER_PATH, {
|
|
workerData: { workerId: 0, mode: 'full' }
|
|
});
|
|
|
|
worker.on('message', (msg) => {
|
|
console.log('Worker message:', msg);
|
|
});
|
|
|
|
worker.on('error', (err) => {
|
|
console.error('Worker error:', err);
|
|
});
|
|
|
|
// Wait for ready
|
|
await new Promise(resolve => {
|
|
worker.once('message', (msg) => {
|
|
if (msg.type === 'ready') {
|
|
console.log('Worker ready');
|
|
resolve();
|
|
}
|
|
});
|
|
});
|
|
|
|
// Send job with dataset
|
|
console.log('\nSending job to worker...');
|
|
const testJob = {
|
|
job_id: 'test123',
|
|
blob: '0707a5e28db705ede4b8bef6e9dbf2f0d2e2d0d0e5d0d4b8e0d5d0c8c0d0d4b8e5e0c0d0d0c0b8e0e0d0d0b8c0e0d4d0b8',
|
|
target: 'ffffff00',
|
|
height: 12345
|
|
};
|
|
|
|
worker.postMessage({
|
|
type: 'job',
|
|
job: testJob,
|
|
seedHash: TEST_SEED,
|
|
startNonce: 0,
|
|
dataset: sharedBuffer
|
|
});
|
|
|
|
// Wait a bit and check hash count
|
|
console.log('Waiting 3 seconds for hashes...');
|
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
|
|
worker.postMessage({ type: 'getHashCount' });
|
|
|
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
|
|
// Stop worker
|
|
worker.postMessage({ type: 'stop' });
|
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
|
|
worker.terminate();
|
|
console.log('\nTest complete');
|
|
|
|
} catch (err) {
|
|
console.error('Error:', err);
|
|
}
|
|
}
|
|
|
|
main().catch(console.error);
|