commit
						9dbfd96249
					
				@ -41,7 +41,9 @@ class BitcoinApi implements AbstractBitcoinApi {
 | 
			
		||||
 | 
			
		||||
  $getBlockHeightTip(): Promise<number> {
 | 
			
		||||
    return this.bitcoindClient.getChainTips()
 | 
			
		||||
      .then((result: IBitcoinApi.ChainTips[]) => result[0].height);
 | 
			
		||||
      .then((result: IBitcoinApi.ChainTips[]) => {
 | 
			
		||||
        return result.find(tip => tip.status === 'active')!.height;
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  $getTxIdsForBlock(hash: string): Promise<string[]> {
 | 
			
		||||
 | 
			
		||||
@ -252,7 +252,7 @@ class Blocks {
 | 
			
		||||
    const blockHeightTip = await bitcoinApi.$getBlockHeightTip();
 | 
			
		||||
 | 
			
		||||
    if (this.blocks.length === 0) {
 | 
			
		||||
      this.currentBlockHeight = blockHeightTip - config.MEMPOOL.INITIAL_BLOCKS_AMOUNT;
 | 
			
		||||
      this.currentBlockHeight = Math.max(blockHeightTip - config.MEMPOOL.INITIAL_BLOCKS_AMOUNT, -1);
 | 
			
		||||
    } else {
 | 
			
		||||
      this.currentBlockHeight = this.blocks[this.blocks.length - 1].height;
 | 
			
		||||
    }
 | 
			
		||||
@ -271,17 +271,19 @@ class Blocks {
 | 
			
		||||
        this.lastDifficultyAdjustmentTime = block.timestamp;
 | 
			
		||||
        this.currentDifficulty = block.difficulty;
 | 
			
		||||
 | 
			
		||||
        const previousPeriodBlockHash = await bitcoinApi.$getBlockHash(blockHeightTip - heightDiff - 2016);
 | 
			
		||||
        const previousPeriodBlock = await bitcoinApi.$getBlock(previousPeriodBlockHash);
 | 
			
		||||
        this.previousDifficultyRetarget = (block.difficulty - previousPeriodBlock.difficulty) / previousPeriodBlock.difficulty * 100;
 | 
			
		||||
        logger.debug(`Initial difficulty adjustment data set.`);
 | 
			
		||||
        if (blockHeightTip >= 2016) {
 | 
			
		||||
          const previousPeriodBlockHash = await bitcoinApi.$getBlockHash(blockHeightTip - heightDiff - 2016);
 | 
			
		||||
          const previousPeriodBlock = await bitcoinApi.$getBlock(previousPeriodBlockHash);
 | 
			
		||||
          this.previousDifficultyRetarget = (block.difficulty - previousPeriodBlock.difficulty) / previousPeriodBlock.difficulty * 100;
 | 
			
		||||
          logger.debug(`Initial difficulty adjustment data set.`);
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        logger.debug(`Blockchain headers (${blockchainInfo.headers}) and blocks (${blockchainInfo.blocks}) not in sync. Waiting...`);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while (this.currentBlockHeight < blockHeightTip) {
 | 
			
		||||
      if (this.currentBlockHeight === 0) {
 | 
			
		||||
      if (this.currentBlockHeight < blockHeightTip - config.MEMPOOL.INITIAL_BLOCKS_AMOUNT) {
 | 
			
		||||
        this.currentBlockHeight = blockHeightTip;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.currentBlockHeight++;
 | 
			
		||||
 | 
			
		||||
@ -681,7 +681,7 @@ class Routes {
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      let nextHash = startFromHash;
 | 
			
		||||
      for (let i = 0; i < 10; i++) {
 | 
			
		||||
      for (let i = 0; i < 10 && nextHash; i++) {
 | 
			
		||||
        const localBlock = blocks.getBlocks().find((b) => b.id === nextHash);
 | 
			
		||||
        if (localBlock) {
 | 
			
		||||
          returnBlocks.push(localBlock);
 | 
			
		||||
 | 
			
		||||
@ -217,12 +217,8 @@ export class BlockComponent implements OnInit, OnDestroy {
 | 
			
		||||
      this.blockSubsidy = 0;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    this.blockSubsidy = 50;
 | 
			
		||||
    let halvenings = Math.floor(this.block.height / 210000);
 | 
			
		||||
    while (halvenings > 0) {
 | 
			
		||||
      this.blockSubsidy = this.blockSubsidy / 2;
 | 
			
		||||
      halvenings--;
 | 
			
		||||
    }
 | 
			
		||||
    const halvings = Math.floor(this.block.height / 210000);
 | 
			
		||||
    this.blockSubsidy = 50 * 2 ** -halvings;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  pageChange(page: number, target: HTMLElement) {
 | 
			
		||||
 | 
			
		||||
@ -110,7 +110,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
 | 
			
		||||
    this.markBlockSubscription = this.stateService.markBlock$
 | 
			
		||||
      .subscribe((state) => {
 | 
			
		||||
        this.markHeight = undefined;
 | 
			
		||||
        if (state.blockHeight) {
 | 
			
		||||
        if (state.blockHeight !== undefined) {
 | 
			
		||||
          this.markHeight = state.blockHeight;
 | 
			
		||||
        }
 | 
			
		||||
        this.moveArrowToPosition(false);
 | 
			
		||||
@ -127,7 +127,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  moveArrowToPosition(animate: boolean, newBlockFromLeft = false) {
 | 
			
		||||
    if (!this.markHeight) {
 | 
			
		||||
    if (this.markHeight === undefined) {
 | 
			
		||||
      this.arrowVisible = false;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -109,8 +109,12 @@ export class LatestBlocksComponent implements OnInit, OnDestroy {
 | 
			
		||||
    if (this.isLoading) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    const height = this.blocks[this.blocks.length - 1].height - 1;
 | 
			
		||||
    if (height < 0) {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    this.isLoading = true;
 | 
			
		||||
    this.electrsApiService.listBlocks$(this.blocks[this.blocks.length - 1].height - 1)
 | 
			
		||||
    this.electrsApiService.listBlocks$(height)
 | 
			
		||||
      .subscribe((blocks) => {
 | 
			
		||||
        this.blocks = this.blocks.concat(blocks);
 | 
			
		||||
        this.isLoading = false;
 | 
			
		||||
 | 
			
		||||
@ -144,6 +144,9 @@ export class DashboardComponent implements OnInit {
 | 
			
		||||
          this.latestBlockHeight = block.height;
 | 
			
		||||
        }),
 | 
			
		||||
        scan((acc, [block]) => {
 | 
			
		||||
          if (acc.find((b) => b.height == block.height)) {
 | 
			
		||||
            return acc;
 | 
			
		||||
          }
 | 
			
		||||
          acc.unshift(block);
 | 
			
		||||
          acc = acc.slice(0, 6);
 | 
			
		||||
          return acc;
 | 
			
		||||
@ -153,6 +156,9 @@ export class DashboardComponent implements OnInit {
 | 
			
		||||
    this.transactions$ = this.stateService.transactions$
 | 
			
		||||
      .pipe(
 | 
			
		||||
        scan((acc, tx) => {
 | 
			
		||||
          if (acc.find((t) => t.txid == tx.txid)) {
 | 
			
		||||
            return acc;
 | 
			
		||||
          }
 | 
			
		||||
          acc.unshift(tx);
 | 
			
		||||
          acc = acc.slice(0, 6);
 | 
			
		||||
          return acc;
 | 
			
		||||
 | 
			
		||||
@ -71,7 +71,7 @@ export class StateService {
 | 
			
		||||
  network = '';
 | 
			
		||||
  blockVSize: number;
 | 
			
		||||
  env: Env;
 | 
			
		||||
  latestBlockHeight = 0;
 | 
			
		||||
  latestBlockHeight = -1;
 | 
			
		||||
 | 
			
		||||
  networkChanged$ = new ReplaySubject<string>(1);
 | 
			
		||||
  blocks$: ReplaySubject<[BlockExtended, boolean]>;
 | 
			
		||||
 | 
			
		||||
@ -68,7 +68,7 @@ export class WebsocketService {
 | 
			
		||||
        clearTimeout(this.onlineCheckTimeout);
 | 
			
		||||
        clearTimeout(this.onlineCheckTimeoutTwo);
 | 
			
		||||
 | 
			
		||||
        this.stateService.latestBlockHeight = 0;
 | 
			
		||||
        this.stateService.latestBlockHeight = -1;
 | 
			
		||||
 | 
			
		||||
        this.websocketSubject.complete();
 | 
			
		||||
        this.subscription.unsubscribe();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user