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>