💾 Archived View for karelbilek.com › btcinputs › experiment.gmi captured on 2024-06-16 at 12:13:15. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-03-21)

-=-=-=-=-=-=-

// run cat /path/to/blocks/blk* | node experiment.js > out
// note: it appends stats for sanity checking every 10k blocks, see below

var BlockStream = require('blkdat-stream')
var blockStream = new BlockStream()
var bitcoin = require('bitcoinjs-lib')

var i = 0
var res = {}
process.stdin.pipe(new BlockStream()).on('data', function (blockBuffer) {
    i++
    const block = bitcoin.Block.fromBuffer(blockBuffer)
    const ydiff = (new Date() - new Date(block.timestamp*1000)) / (1000 * 60 * 60 * 24 * 365)

    if (ydiff <= 2) {

        block.transactions.forEach(tx => {
            if (!tx.isCoinbase()) {
                tx.ins.forEach(inp => {
                    const type = bitcoin.script.classifyInput(inp.script);
                    var scr = type + "," + inp.script.length
                    res[scr] = (res[scr] || 0) + 1
                })
            }
        })

        // I wrote it like this for sanity checking and because I don't know
        // how to detect the end of the blocks :)
        // It doesn't matter though, good enough
        if (i%10000 === 0) {
            console.log("---------------------")
            var types = Object.keys(res).sort((a, b) => (res[b] - res[a]))
            types.map(typ => typ + "," + res[typ]).forEach(k => console.log(k))
        }

    }
})