#javascript #node.js #heroku #websocket #web3
Вопрос:
У меня возникла проблема с запуском приложения web3, которое только и делает, что прослушивает события блокчейна, а затем обновляет подключенную базу данных. Вот фрагмент
const web3 = new Web3();
web3.setProvider(new web3.providers.WebsocketProvider(WSS_PROVIDER));
const delay = (secs) => new Promise ((resolve, reject) => setTimeout(resolve, secs*1000));
const getBlockCount = () => new Promise ( (resolve, reject) => web3.eth.getBlockNumber( (err, blockNumber) => {
if (typeof blockNumber ==='undefined') reject(err);
else resolve(blockNumber);
}));
const marketAddress = MARKET_CONTRACT.address || null;
if (marketAddress == null ) throw "Run source .env first";
const markety = new web3.eth.Contract(MARKET_CONTRACT.abi, marketAddress);
const checkLatestEvents = (blocks) => getBlockCount().then(count => {
console.log(`blocks of blocks ${blocks}`);
console.log(`count of blocks ${count}`);
markety.events.MarketMinted({
fromBlock: count-blocks
})
.on('data', async function(event){
console.log(event); // same results as the optional callback above
let {request_id, token_id} = event.returnValues;
let mintedToken = await TokenModel.findByPk("chkn" request_id);
await mintedToken.update({minted: true, tokenId: Number(token_id)});
})
.on('error', console.error);
}).catch(err => {
console.error(err);
runCheckLatestEventsLoop();
}) ;
const runCheckLatestEventsLoop = async () => {
while(true) {
checkLatestEvents(100);
await delay(10);
web3.eth.clearSubscriptions();
}
}
он работает без проблем на моем локальном компьютере, но всегда завершается в heroku даже до выполнения всего одного сканирования событий.
Я нахожусь на бесплатном уровне в Heroku, я ожидаю, что если я обновлю приложение, оно может работать без проблем, верно ?