difftreelog
Wait new blocks with timeout
in: master
1 file changed
tests/src/util/playgrounds/unique.dev.tsdiffbeforeafterboth383 this.helper = helper;383 this.helper = helper;384 }384 }385386 sleep(milliseconds: number) {387 return new Promise((resolve) => setTimeout(resolve, milliseconds));388 }389390 private async waitWithTimeout(promise: Promise<any>, timeout: number) {391 let isBlock = false;392 promise.then(() => isBlock = true).catch(() => isBlock = true);393 let totalTime = 0;394 const step = 100;395 while(!isBlock) {396 console.log('Waiting...');397 await this.sleep(step);398 totalTime += step;399 if(totalTime >= timeout) throw Error('Blocks production failed');400 }401 return promise;402 }385403386 /**404 /**387 * Wait for specified number of blocks405 * Wait for specified number of blocks388 * @param blocksCount number of blocks to wait406 * @param blocksCount number of blocks to wait389 * @returns 407 * @returns 390 */408 */391 newBlocks(blocksCount = 1): Promise<void> {409 async newBlocks(blocksCount = 1, timeout?: number): Promise<void> {410 timeout = timeout ?? blocksCount * 60_000;392 // eslint-disable-next-line no-async-promise-executor411 // eslint-disable-next-line no-async-promise-executor393 const promise = new Promise<void>(async (resolve) => {412 const promise = new Promise<void>(async (resolve) => {394 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads(() => {413 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads(() => {400 }419 }401 });420 });402 });421 });422 await this.waitWithTimeout(promise, timeout);403 return promise;423 return promise;404 }424 }405425406 forParachainBlockNumber(blockNumber: bigint) {426 async forParachainBlockNumber(blockNumber: bigint, timeout?: number) {427 timeout = timeout ?? 300_000;407 // eslint-disable-next-line no-async-promise-executor428 // eslint-disable-next-line no-async-promise-executor408 return new Promise<void>(async (resolve) => {429 const promise = new Promise<void>(async (resolve) => {409 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads((data: any) => {430 const unsubscribe = await this.helper.getApi().rpc.chain.subscribeNewHeads((data: any) => {410 if (data.number.toNumber() >= blockNumber) {431 if (data.number.toNumber() >= blockNumber) {411 unsubscribe();432 unsubscribe();412 resolve();433 resolve();413 }434 }414 });435 });415 });436 });437 await this.waitWithTimeout(promise, timeout);438 return promise;416 }439 }417 440 418 forRelayBlockNumber(blockNumber: bigint) {441 async forRelayBlockNumber(blockNumber: bigint, timeout?: number) {442 timeout = timeout ?? 300_000;419 // eslint-disable-next-line no-async-promise-executor443 // eslint-disable-next-line no-async-promise-executor420 return new Promise<void>(async (resolve) => {444 const promise = new Promise<void>(async (resolve) => {421 const unsubscribe = await this.helper.getApi().query.parachainSystem.validationData((data: any) => {445 const unsubscribe = await this.helper.getApi().query.parachainSystem.validationData((data: any) => {422 if (data.value.relayParentNumber.toNumber() >= blockNumber) {446 if (data.value.relayParentNumber.toNumber() >= blockNumber) {423 // @ts-ignore447 // @ts-ignore426 }450 }427 });451 });428 });452 });453 await this.waitWithTimeout(promise, timeout);454 return promise;429 }455 }430456431 noScheduledTasks() {457 noScheduledTasks() {