MCPcopy Index your code
hub / github.com/tiagozip/cap / solve

Function solve

solver/index.js:69–158  ·  view source on GitHub ↗
(challenge, config = {})

Source from the content-addressed store, hash-verified

67const workerUrl = URL.createObjectURL(workerBlob);
68
69export default function solve(challenge, config = {}) {
70 let challenges = challenge;
71
72 if (!Array.isArray(challenges)) {
73 let i = 0;
74
75 challenges = Array.from({ length: config.c }, () => {
76 i = i + 1;
77
78 return [
79 prng(`${challenges}${i}`, config.s),
80 prng(`${challenges}${i}d`, config.d),
81 ];
82 });
83 }
84
85 const totalChallenges = challenges.length;
86 const numWorkers =
87 config?.workerCount || Math.min(totalChallenges, os.cpus().length);
88
89 let challengesProcessed = 0;
90 let nextChallengeIndex = 0;
91 let activeWorkers = 0;
92 const results = new Array(totalChallenges);
93
94 if (totalChallenges === 0) {
95 resolve([]);
96 }
97
98 return new Promise((resolve, reject) => {
99 function startWorker() {
100 if (nextChallengeIndex < totalChallenges && activeWorkers < numWorkers) {
101 const currentChallengeIndex = nextChallengeIndex;
102 const [salt, target] = challenges[currentChallengeIndex];
103 nextChallengeIndex++;
104 activeWorkers++;
105
106 const worker = new Worker(workerUrl, {
107 workerData: { salt, target, challengeIndex: currentChallengeIndex },
108 });
109
110 worker.on("message", (result) => {
111 worker.terminate();
112 activeWorkers--;
113
114 if (result.error) {
115 console.error(
116 `Error in worker for challenge ${currentChallengeIndex}:`,
117 result.error,
118 );
119 reject(new Error(`Worker error: ${result.error}`));
120 return;
121 }
122
123 results[result.challengeIndex] = result.nonce;
124 challengesProcessed++;
125
126 if (config?.onProgress) {

Callers

nothing calls this directly

Calls 2

startWorkerFunction · 0.85
prngFunction · 0.70

Tested by

no test coverage detected