multiple-headers-synced.js 1.31 KiB
Newer Older
const utils = require("./utils");

async function run(nodeName, networkInfo, args) {
    const {wsUri, userDefinedTypes} = networkInfo.nodesByName[nodeName];
    const api = await zombie.connect(wsUri, userDefinedTypes);

    // parse arguments
    const exitAfterSeconds = Number(args[0]);
    const bridgedChain = require("./chains/" + args[1]);

    // start listening to new blocks
    let totalGrandpaHeaders = 0;
    api.rpc.chain.subscribeNewHeads(async function (header) {
        const apiAtParent = await api.at(header.parentHash);
        const apiAtCurrent = await api.at(header.hash);
        const currentEvents = await apiAtCurrent.query.system.events();

        totalGrandpaHeaders += await utils.countGrandpaHeaderImports(bridgedChain, currentEvents);
        totalParachainHeaders += await utils.countParachainHeaderImports(bridgedChain, currentEvents);
    });

    // wait given time
    await new Promise(resolve => setTimeout(resolve, exitAfterSeconds * 1000));
    // if we haven't seen many (>1) new GRANDPA or parachain headers => fail
    if (totalGrandpaHeaders <= 1) {
        throw new Error("No bridged relay chain headers imported");
    }
        throw new Error("No bridged parachain headers imported");
    }
}

module.exports = { run }