function random (length = 32) {
const bytes = crypto.getRandomValues(new Uint8Array(length))
return [...bytes].map(b => b.toString(16).padStart(2, '0')).join('')
- }
+ }
function average(times, type, effort) {
const averages = stats(times)
}
}
+ async function sequenceGenerateValidate (hash, api, debug, difficulty, effort) {
+ logger.isEnabled = debug
+ let start = 0, end = 0, work = null, valid = false
+
+ start = performance.now()
+ work = (await NanoPow.work_generate(hash, {api, debug, difficulty, effort})).work
+ valid = (await NanoPow.work_validate(work, hash, {api, debug, difficulty, effort})).valid
+ end = performance.now()
+
+ if (!valid) {
+ throw new Error(`invalid result\nblock hash: ${hash}\nwork: ${work}`)
+ }
+ if (!start || !end || start > end) {
+ throw new Error(`invalid timing\nstart: ${start}\nend: ${end}`)
+ }
+ return end - start
+ }
+
async function run(size, difficulty, effort, api, isOutputShown, isDebug, isSelfCheck) {
logger.isEnabled = isDebug
// Generate once on load to compile shaders and initialize buffers