cic-staff-client/src/assets/js/block-sync/head.js

43 lines
1.3 KiB
JavaScript

const window = self;
self.importScripts('driver.js', 'web3.min.js');
async function sync(driver) {
driver.hi = driver.lo;
let getBlockNumber = async function () {
while (true) {
const currentBlockNumber = await driver.w3.eth.getBlockNumber();
if (currentBlockNumber > driver.hi) {
for (let i = driver.hi + 1; i <= currentBlockNumber; i++) {
console.log(driver.hi, i, currentBlockNumber);
driver.w3.eth.getBlock(i).then(async (block) => {
console.log('current block', block);
const count = await driver.w3.eth.getBlockTransactionCount(block.number);
console.log('count', count);
for (let i = 0; i < count; i++) {
console.log('driver process ', block.number, i);
driver.process(block.number, i);
}
});
driver.hi++;
}
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
};
await getBlockNumber();
}
onmessage = function (o) {
const w3 = new Web3(o.data.w3_provider);
const callback = (o) => {
this.postMessage(o);
};
w3.eth.getBlockNumber().then(async function (blockNumber) {
const driver = new Driver(w3, blockNumber, undefined, undefined, callback);
await sync(driver);
});
};