Pickaw Seed Pool Emulator
This form allows you to emulate and verify a seed_pool on Pickaw.
by Pickaw
HTML
<script src="https://unpkg.com/base-62.js@0.9.9/index.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/1.1.2/tailwind.min.css">
<script src="https://unpkg.com/jsbi@3.1.0/dist/jsbi-umd.js"></script>
<div class="max-w-xl mx-auto font-sans p-8">
<h1 class="font-bold">
This form allows you to emulate and verify a seed_pool on Pick<u>a</u>w:
</h1>
<form id="form" class="flex flex-col mt-4">
<div class="flex flex-wrap items-center my-1">
<label for="start" class="mr-4">Start hash:</label><input type="text" id="start" maxlength="64" class="py-1 px-3 flex-grow rounded border">
</div>
<div class="flex flex-wrap items-center my-1">
<label for="end" class="mr-4">End hash*:</label><input type="text" id="end" maxlength="64" class="py-1 px-3 flex-grow rounded border">
</div>
<button type="submit" class="mt-4 bg-blue-500 text-white py-1 px-3 rounded">Compute!</button>
</form>
<div class="mt-8">
<b>Results:<span class="ml-2 font-normal text-sm">(hash, seed)</span></b>
<pre id="results" class="text-xs overflow-scroll mt-3 rounded border px-4 py-3" style="max-height: 500px;">Fill the fields to see results.</pre>
</div>
</div>
JavaScript
const BigInt = JSBI.BigInt
const BASE62_MOD = BigInt('47672401706823533450263330816')
let computing = false
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
function hexToSeed(hex) {
return base62.encode(JSBI.remainder(BigInt(`0x${hex}`), BASE62_MOD).toString()).padStart(16, '0')
}
document.querySelector('#form').addEventListener('submit', async (event) => {
event.preventDefault()
let resultsDiv = document.querySelector('#results')
let start = document.querySelector('#start').value.trim()
let end = document.querySelector('#end').value.trim()
if ([32, 64].includes(start.length))
return alert('Please enter a 32 or 64 characters start hash.')
if (end.length && end.length !== 64)
return alert('Please enter a 64 characters end hash.')
if (computing)
return alert('Already computing, please wait before retrying...')
computing = true
let nbIter = 0
let prev = start
let res = ` ${prev} ${prev.length === 64 ? ` → ${hexToSeed(prev)}` : ''}\n`
// Boucle d'itération où on génère les hashs de la seedpool, jusqu'au ending_hash
while (nbIter <= 5001) {
let hash = sha256(prev)
res = `↱ ${hash} → ${hexToSeed(hash)}\n` + res
prev = hash
nbIter++
if (nbIter % 250 === 0) {
resultsDiv.innerText = `Computing... ${nbIter}`
await sleep(1)
}
if (hash === end)
break
}
resultsDiv.innerText = res
computing = false
})