Merge branch 'master' into nymkappa/feature/update-block-api
This commit is contained in:
		
						commit
						094257a9df
					
				@ -43,7 +43,7 @@ class FiatConversion {
 | 
			
		||||
          agentOptions: {
 | 
			
		||||
            keepAlive: true,
 | 
			
		||||
          },
 | 
			
		||||
          host: config.SOCKS5PROXY.HOST,
 | 
			
		||||
          hostname: config.SOCKS5PROXY.HOST,
 | 
			
		||||
          port: config.SOCKS5PROXY.PORT
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -426,18 +426,28 @@ class BlocksRepository {
 | 
			
		||||
      const [blocks]: any[] = await DB.query(`SELECT height, hash, previous_block_hash,
 | 
			
		||||
        UNIX_TIMESTAMP(blockTimestamp) as timestamp FROM blocks ORDER BY height`);
 | 
			
		||||
 | 
			
		||||
      let currentHeight = 1;
 | 
			
		||||
      while (currentHeight < blocks.length) {
 | 
			
		||||
        if (blocks[currentHeight].previous_block_hash !== blocks[currentHeight - 1].hash) {
 | 
			
		||||
          logger.warn(`Chain divergence detected at block ${blocks[currentHeight - 1].height}, re-indexing newer blocks and hashrates`);
 | 
			
		||||
          await this.$deleteBlocksFrom(blocks[currentHeight - 1].height);
 | 
			
		||||
          await HashratesRepository.$deleteHashratesFromTimestamp(blocks[currentHeight - 1].timestamp - 604800);
 | 
			
		||||
      let partialMsg = false;
 | 
			
		||||
      let idx = 1;
 | 
			
		||||
      while (idx < blocks.length) {
 | 
			
		||||
        if (blocks[idx].height - 1 !== blocks[idx - 1].height) {
 | 
			
		||||
          if (partialMsg === false) {
 | 
			
		||||
            logger.info('Some blocks are not indexed, skipping missing blocks during chain validation');
 | 
			
		||||
            partialMsg = true;
 | 
			
		||||
          }
 | 
			
		||||
          ++idx;
 | 
			
		||||
          continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (blocks[idx].previous_block_hash !== blocks[idx - 1].hash) {
 | 
			
		||||
          logger.warn(`Chain divergence detected at block ${blocks[idx - 1].height}, re-indexing newer blocks and hashrates`);
 | 
			
		||||
          await this.$deleteBlocksFrom(blocks[idx - 1].height);
 | 
			
		||||
          await HashratesRepository.$deleteHashratesFromTimestamp(blocks[idx - 1].timestamp - 604800);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
        ++currentHeight;
 | 
			
		||||
        ++idx;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      logger.info(`${currentHeight} blocks hash validated in ${new Date().getTime() - start} ms`);
 | 
			
		||||
      logger.info(`${idx} blocks hash validated in ${new Date().getTime() - start} ms`);
 | 
			
		||||
      return true;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      logger.err('Cannot validate chain of block hash. Reason: ' + (e instanceof Error ? e.message : e));
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ class SyncAssets {
 | 
			
		||||
            agentOptions: {
 | 
			
		||||
              keepAlive: true,
 | 
			
		||||
            },
 | 
			
		||||
            host: config.SOCKS5PROXY.HOST,
 | 
			
		||||
            hostname: config.SOCKS5PROXY.HOST,
 | 
			
		||||
            port: config.SOCKS5PROXY.PORT
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -155,7 +155,7 @@ Corresponding `docker-compose.yml` overrides:
 | 
			
		||||
    environment:
 | 
			
		||||
      ELECTRUM_HOST: ""
 | 
			
		||||
      ELECTRUM_PORT: ""
 | 
			
		||||
      ELECTRUM_TLS: ""
 | 
			
		||||
      ELECTRUM_TLS_ENABLED: ""
 | 
			
		||||
      ...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ __CORE_RPC_PASSWORD__=${CORE_RPC_PASSWORD:=mempool}
 | 
			
		||||
# ELECTRUM
 | 
			
		||||
__ELECTRUM_HOST__=${ELECTRUM_HOST:=127.0.0.1}
 | 
			
		||||
__ELECTRUM_PORT__=${ELECTRUM_PORT:=50002}
 | 
			
		||||
__ELECTRUM_TLS_ENABLED__=${ELECTRUM_TLS:=false}
 | 
			
		||||
__ELECTRUM_TLS_ENABLED__=${ELECTRUM_TLS_ENABLED:=false}
 | 
			
		||||
 | 
			
		||||
# ESPLORA
 | 
			
		||||
__ESPLORA_REST_API_URL__=${ESPLORA_REST_API_URL:=http://127.0.0.1:3000}
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@
 | 
			
		||||
            <div class="tooltip-custom">
 | 
			
		||||
              <a class="clear-link" [routerLink]="['/mining/pool' | relativeUrl, block.extras.pool.slug]">
 | 
			
		||||
                <img width="22" height="22" src="{{ block.extras.pool['logo'] }}"
 | 
			
		||||
                  onError="this.src = './resources/mining-pools/default.svg'">
 | 
			
		||||
                  onError="this.src = './resources/mining-pools/default.svg'" [alt]="'Logo of ' + block.extras.pool.name + ' mining pool'">
 | 
			
		||||
                <span class="pool-name">{{ block.extras.pool.name }}</span>
 | 
			
		||||
              </a>
 | 
			
		||||
              <span *ngIf="!widget" class="tooltiptext badge badge-secondary scriptmessage">{{ block.extras.coinbaseRaw | hex2ascii }}</span>
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
  <nav class="navbar navbar-expand-md navbar-dark bg-dark">
 | 
			
		||||
  <a class="navbar-brand" [routerLink]="['/' | relativeUrl]" style="position: relative;">
 | 
			
		||||
    <ng-container *ngIf="{ val: connectionState$ | async } as connectionState">
 | 
			
		||||
      <img [src]="officialMempoolSpace ? './resources/mempool-space-logo.png' : './resources/mempool-logo.png'" height="35" width="140" class="logo" [ngStyle]="{'opacity': connectionState.val === 2 ? 1 : 0.5 }">
 | 
			
		||||
      <img [src]="officialMempoolSpace ? './resources/mempool-space-logo.png' : './resources/mempool-logo.png'" height="35" width="140" class="logo" [ngStyle]="{'opacity': connectionState.val === 2 ? 1 : 0.5 }" alt="The Mempool Open Source Project logo">
 | 
			
		||||
      <div class="connection-badge">
 | 
			
		||||
        <div class="badge badge-warning" *ngIf="connectionState.val === 0" i18n="master-page.offline">Offline</div>
 | 
			
		||||
        <div class="badge badge-warning" *ngIf="connectionState.val === 1" i18n="master-page.reconnecting">Reconnecting...</div>
 | 
			
		||||
@ -13,16 +13,16 @@
 | 
			
		||||
 | 
			
		||||
  <div (window:resize)="onResize($event)" ngbDropdown class="dropdown-container" *ngIf="env.TESTNET_ENABLED || env.SIGNET_ENABLED || env.LIQUID_ENABLED || env.BISQ_ENABLED || env.LIQUID_TESTNET_ENABLED">
 | 
			
		||||
    <button ngbDropdownToggle type="button" class="btn btn-secondary dropdown-toggle-split" aria-haspopup="true">
 | 
			
		||||
      <img src="./resources/{{ network.val === '' ? 'bitcoin' : network.val }}-logo.png" style="width: 25px; height: 25px;" class="mr-1">
 | 
			
		||||
      <img src="./resources/{{ network.val === '' ? 'bitcoin' : network.val }}-logo.png" style="width: 25px; height: 25px;" class="mr-1" [alt]="(network.val === '' ? 'bitcoin' : network.val) + ' logo'">
 | 
			
		||||
    </button>
 | 
			
		||||
    <div ngbDropdownMenu [ngClass]="{'dropdown-menu-right' : isMobile}">
 | 
			
		||||
      <button ngbDropdownItem class="mainnet" routerLink="/"><img src="./resources/bitcoin-logo.png" style="width: 30px;" class="mr-1"> Mainnet</button>
 | 
			
		||||
      <button ngbDropdownItem *ngIf="env.SIGNET_ENABLED" class="signet" [class.active]="network.val === 'signet'" routerLink="/signet"><img src="./resources/signet-logo.png" style="width: 30px;" class="mr-1"> Signet</button>
 | 
			
		||||
      <button ngbDropdownItem *ngIf="env.TESTNET_ENABLED" class="testnet" [class.active]="network.val === 'testnet'" routerLink="/testnet"><img src="./resources/testnet-logo.png" style="width: 30px;" class="mr-1"> Testnet</button>
 | 
			
		||||
      <button ngbDropdownItem class="mainnet" routerLink="/"><img src="./resources/bitcoin-logo.png" style="width: 30px;" class="mr-1" alt="bitcoin logo"> Mainnet</button>
 | 
			
		||||
      <button ngbDropdownItem *ngIf="env.SIGNET_ENABLED" class="signet" [class.active]="network.val === 'signet'" routerLink="/signet"><img src="./resources/signet-logo.png" style="width: 30px;" class="mr-1" alt="signet logo"> Signet</button>
 | 
			
		||||
      <button ngbDropdownItem *ngIf="env.TESTNET_ENABLED" class="testnet" [class.active]="network.val === 'testnet'" routerLink="/testnet"><img src="./resources/testnet-logo.png" style="width: 30px;" class="mr-1" alt="testnet logo"> Testnet</button>
 | 
			
		||||
      <h6 *ngIf="env.LIQUID_ENABLED || env.BISQ_ENABLED" class="dropdown-header" i18n="master-page.layer2-networks-header">Layer 2 Networks</h6>
 | 
			
		||||
      <a [href]="env.BISQ_WEBSITE_URL + urlLanguage" ngbDropdownItem *ngIf="env.BISQ_ENABLED" class="bisq"><img src="./resources/bisq-logo.png" style="width: 30px;" class="mr-1"> Bisq</a>
 | 
			
		||||
      <a [href]="env.LIQUID_WEBSITE_URL + urlLanguage" ngbDropdownItem *ngIf="env.LIQUID_ENABLED" class="liquid" [class.active]="network.val === 'liquid'"><img src="./resources/liquid-logo.png" style="width: 30px;" class="mr-1"> Liquid</a>
 | 
			
		||||
      <a [href]="env.LIQUID_WEBSITE_URL + urlLanguage + '/testnet'" ngbDropdownItem *ngIf="env.LIQUID_TESTNET_ENABLED" class="liquidtestnet" [class.active]="network.val === 'liquid'"><img src="./resources/liquidtestnet-logo.png" style="width: 30px;" class="mr-1"> Liquid Testnet</a>
 | 
			
		||||
      <a [href]="env.BISQ_WEBSITE_URL + urlLanguage" ngbDropdownItem *ngIf="env.BISQ_ENABLED" class="bisq"><img src="./resources/bisq-logo.png" style="width: 30px;" class="mr-1" alt="bisq logo"> Bisq</a>
 | 
			
		||||
      <a [href]="env.LIQUID_WEBSITE_URL + urlLanguage" ngbDropdownItem *ngIf="env.LIQUID_ENABLED" class="liquid" [class.active]="network.val === 'liquid'"><img src="./resources/liquid-logo.png" style="width: 30px;" class="mr-1" alt="liquid mainnet logo"> Liquid</a>
 | 
			
		||||
      <a [href]="env.LIQUID_WEBSITE_URL + urlLanguage + '/testnet'" ngbDropdownItem *ngIf="env.LIQUID_TESTNET_ENABLED" class="liquidtestnet" [class.active]="network.val === 'liquid'"><img src="./resources/liquidtestnet-logo.png" style="width: 30px;" class="mr-1" alt="liquid testnet logo"> Liquid Testnet</a>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -93,8 +93,9 @@
 | 
			
		||||
      <tbody *ngIf="(miningStatsObservable$ | async) as miningStats">
 | 
			
		||||
        <tr *ngFor="let pool of miningStats.pools">
 | 
			
		||||
          <td class="d-none d-md-block">{{ pool.rank }}</td>
 | 
			
		||||
          <td class="text-right"><img width="25" height="25" src="{{ pool.logo }}"
 | 
			
		||||
              onError="this.src = './resources/mining-pools/default.svg'"></td>
 | 
			
		||||
          <td class="text-right">
 | 
			
		||||
            <img width="25" height="25" src="{{ pool.logo }}" [alt]="pool.name + ' mining pool logo'" onError="this.src = './resources/mining-pools/default.svg'">
 | 
			
		||||
          </td>
 | 
			
		||||
          <td class=""><a [routerLink]="[('/mining/pool/' + pool.slug) | relativeUrl]">{{ pool.name }}</a></td>
 | 
			
		||||
          <td class="" *ngIf="this.miningWindowPreference === '24h' && !isLoading">{{ pool.lastEstimatedHashrate }} {{
 | 
			
		||||
            miningStats.miningUnits.hashrateUnit }}</td>
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
  <!-- Pool overview -->
 | 
			
		||||
  <div *ngIf="poolStats$ | async as poolStats; else loadingMain">
 | 
			
		||||
    <div style="display:flex" class="mb-3">
 | 
			
		||||
      <img width="50" height="50" src="{{ poolStats['logo'] }}"
 | 
			
		||||
      <img width="50" height="50" src="{{ poolStats['logo'] }}" [alt]="poolStats.pool.name + ' mining pool logo'"
 | 
			
		||||
        onError="this.src = './resources/mining-pools/default.svg'" class="mr-3">
 | 
			
		||||
      <h1 class="m-0 pt-1 pt-md-0">{{ poolStats.pool.name }}</h1>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -2,10 +2,8 @@ datadir=/minfee
 | 
			
		||||
server=1
 | 
			
		||||
txindex=0
 | 
			
		||||
listen=1
 | 
			
		||||
discover=0
 | 
			
		||||
daemon=1
 | 
			
		||||
prune=1337
 | 
			
		||||
maxconnections=1
 | 
			
		||||
rpcallowip=127.0.0.1
 | 
			
		||||
rpcuser=__BITCOIN_RPC_USER__
 | 
			
		||||
rpcpassword=__BITCOIN_RPC_PASS__
 | 
			
		||||
@ -15,4 +13,4 @@ rpcpassword=__BITCOIN_RPC_PASS__
 | 
			
		||||
bind=127.0.0.1:8303
 | 
			
		||||
rpcbind=127.0.0.1:8302
 | 
			
		||||
rpcport=8302
 | 
			
		||||
connect=127.0.0.1:8333
 | 
			
		||||
addnode=127.0.0.1:8333
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user