hDAO snapshot block selector

This example shows how to select the block level for the hDAO snapshot.

HTML

<p id="result"></p>

<script>
//
// These parameters will be filled with the multisig execute proposal transaction information.
// They are now filled with example values from the last executed proposal:
// https://tzkt.io/ooMZNj6tmB87nBf9AZyaVyuJpL9hYvhYVf4ovBspf5N4UYSp5Qz
//
let operationHash = "ooMZNj6tmB87nBf9AZyaVyuJpL9hYvhYVf4ovBspf5N4UYSp5Qz"
let operationBlock = 2436171

//
// Random number generator used by fxhash
//
let alphabet = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
var fxhash = operationHash
let b58dec = str=>[...str].reduce((p,c)=>p*alphabet.length+alphabet.indexOf(c)|0, 0)
let fxhashTrunc = fxhash.slice(2)
let regex = new RegExp(".{" + ((fxhash.length/4)|0) + "}", 'g')
let hashes = fxhashTrunc.match(regex).map(h => b58dec(h))
let sfc32 = (a, b, c, d) => {
    return () => {
        a |= 0; b |= 0; c |= 0; d |= 0
        var t = (a + b | 0) + d | 0
        d = d + 1 | 0
        a = b ^ b >>> 9
        b = c + (c << 3) | 0
        c = c << 21 | c >>> 11
        c = c + t | 0
        return (t >>> 0) / 4294967296
    }
}
var fxrand = sfc32(...hashes)

//
// Calculate the block level where the hDAO snapshot will take place
//
const hdaoSnapshotBlock = Math.round(operationBlock - 100000 * fxrand())
document.getElementById("result").innerHTML = "The hDAO snapshot will take place on block " + hdaoSnapshotBlock
</script>