Edit in JSFiddle

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

})
<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>