Merge branch 'master' into natsoni/fix-tooltip-timeline
This commit is contained in:
		
						commit
						510b4adcea
					
				| @ -28,7 +28,7 @@ | |||||||
|     "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", |     "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", | ||||||
|     "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", |     "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", | ||||||
|     "AUDIT": false, |     "AUDIT": false, | ||||||
|     "RUST_GBT": false, |     "RUST_GBT": true, | ||||||
|     "LIMIT_GBT": false, |     "LIMIT_GBT": false, | ||||||
|     "CPFP_INDEXING": false, |     "CPFP_INDEXING": false, | ||||||
|     "DISK_CACHE_BLOCK_INTERVAL": 6, |     "DISK_CACHE_BLOCK_INTERVAL": 6, | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ describe('Mempool Backend Config', () => { | |||||||
|         POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', |         POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', | ||||||
|         POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', |         POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', | ||||||
|         AUDIT: false, |         AUDIT: false, | ||||||
|         RUST_GBT: false, |         RUST_GBT: true, | ||||||
|         LIMIT_GBT: false, |         LIMIT_GBT: false, | ||||||
|         CPFP_INDEXING: false, |         CPFP_INDEXING: false, | ||||||
|         MAX_BLOCKS_BULK_QUERY: 0, |         MAX_BLOCKS_BULK_QUERY: 0, | ||||||
|  | |||||||
| @ -121,6 +121,7 @@ class TransactionUtils { | |||||||
|     const adjustedVsize = Math.max(fractionalVsize, sigops *  5); // adjusted vsize = Max(weight, sigops * bytes_per_sigop) / witness_scale_factor
 |     const adjustedVsize = Math.max(fractionalVsize, sigops *  5); // adjusted vsize = Max(weight, sigops * bytes_per_sigop) / witness_scale_factor
 | ||||||
|     const feePerVbytes = (transaction.fee || 0) / fractionalVsize; |     const feePerVbytes = (transaction.fee || 0) / fractionalVsize; | ||||||
|     const adjustedFeePerVsize = (transaction.fee || 0) / adjustedVsize; |     const adjustedFeePerVsize = (transaction.fee || 0) / adjustedVsize; | ||||||
|  |     const effectiveFeePerVsize = transaction['effectiveFeePerVsize'] || adjustedFeePerVsize || feePerVbytes; | ||||||
|     const transactionExtended: MempoolTransactionExtended = Object.assign(transaction, { |     const transactionExtended: MempoolTransactionExtended = Object.assign(transaction, { | ||||||
|       order: this.txidToOrdering(transaction.txid), |       order: this.txidToOrdering(transaction.txid), | ||||||
|       vsize, |       vsize, | ||||||
| @ -128,7 +129,7 @@ class TransactionUtils { | |||||||
|       sigops, |       sigops, | ||||||
|       feePerVsize: feePerVbytes, |       feePerVsize: feePerVbytes, | ||||||
|       adjustedFeePerVsize: adjustedFeePerVsize, |       adjustedFeePerVsize: adjustedFeePerVsize, | ||||||
|       effectiveFeePerVsize: adjustedFeePerVsize, |       effectiveFeePerVsize: effectiveFeePerVsize, | ||||||
|     }); |     }); | ||||||
|     if (!transactionExtended?.status?.confirmed && !transactionExtended.firstSeen) { |     if (!transactionExtended?.status?.confirmed && !transactionExtended.firstSeen) { | ||||||
|       transactionExtended.firstSeen = Math.round((Date.now() / 1000)); |       transactionExtended.firstSeen = Math.round((Date.now() / 1000)); | ||||||
|  | |||||||
| @ -193,7 +193,7 @@ const defaults: IConfig = { | |||||||
|     'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', |     'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', | ||||||
|     'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', |     'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', | ||||||
|     'AUDIT': false, |     'AUDIT': false, | ||||||
|     'RUST_GBT': false, |     'RUST_GBT': true, | ||||||
|     'LIMIT_GBT': false, |     'LIMIT_GBT': false, | ||||||
|     'CPFP_INDEXING': false, |     'CPFP_INDEXING': false, | ||||||
|     'MAX_BLOCKS_BULK_QUERY': 0, |     'MAX_BLOCKS_BULK_QUERY': 0, | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ __MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=false} | |||||||
| __MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json} | __MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json} | ||||||
| __MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master} | __MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master} | ||||||
| __MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false} | __MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false} | ||||||
| __MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=false} | __MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=true} | ||||||
| __MEMPOOL_LIMIT_GBT__=${MEMPOOL_LIMIT_GBT:=false} | __MEMPOOL_LIMIT_GBT__=${MEMPOOL_LIMIT_GBT:=false} | ||||||
| __MEMPOOL_CPFP_INDEXING__=${MEMPOOL_CPFP_INDEXING:=false} | __MEMPOOL_CPFP_INDEXING__=${MEMPOOL_CPFP_INDEXING:=false} | ||||||
| __MEMPOOL_MAX_BLOCKS_BULK_QUERY__=${MEMPOOL_MAX_BLOCKS_BULK_QUERY:=0} | __MEMPOOL_MAX_BLOCKS_BULK_QUERY__=${MEMPOOL_MAX_BLOCKS_BULK_QUERY:=0} | ||||||
|  | |||||||
| @ -219,9 +219,13 @@ export class AddressComponent implements OnInit, OnDestroy { | |||||||
|             address.is_pubkey |             address.is_pubkey | ||||||
|               ? this.electrsApiService.getScriptHashTransactions$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') |               ? this.electrsApiService.getScriptHashTransactions$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') | ||||||
|               : this.electrsApiService.getAddressTransactions$(address.address), |               : this.electrsApiService.getAddressTransactions$(address.address), | ||||||
|             utxoCount >= 2 && utxoCount <= 500 ? (address.is_pubkey |             (utxoCount >= 2 && utxoCount <= 500 ? (address.is_pubkey | ||||||
|               ? this.electrsApiService.getScriptHashUtxos$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') |               ? this.electrsApiService.getScriptHashUtxos$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') | ||||||
|               : this.electrsApiService.getAddressUtxos$(address.address)) : of([]) |               : this.electrsApiService.getAddressUtxos$(address.address)) : of([])).pipe( | ||||||
|  |                 catchError(() => { | ||||||
|  |                   return of([]); | ||||||
|  |                 }) | ||||||
|  |               ) | ||||||
|           ]); |           ]); | ||||||
|         }), |         }), | ||||||
|         switchMap(([transactions, utxos]) => { |         switchMap(([transactions, utxos]) => { | ||||||
|  | |||||||
| @ -85,7 +85,6 @@ | |||||||
|       <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-home" *ngIf="network.val === '' && stateService.env.ACCELERATOR"> |       <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-home" *ngIf="network.val === '' && stateService.env.ACCELERATOR"> | ||||||
|         <a class="nav-link" [routerLink]="['/acceleration' | relativeUrl]" (click)="collapse()"> |         <a class="nav-link" [routerLink]="['/acceleration' | relativeUrl]" (click)="collapse()"> | ||||||
|           <fa-icon [icon]="['fas', 'rocket']" [fixedWidth]="true" i18n-title="master-page.accelerator-dashboard" title="Accelerator Dashboard"></fa-icon> |           <fa-icon [icon]="['fas', 'rocket']" [fixedWidth]="true" i18n-title="master-page.accelerator-dashboard" title="Accelerator Dashboard"></fa-icon> | ||||||
|           <span class="badge badge-pill badge-warning beta" i18n="beta">beta</span> |  | ||||||
|         </a> |         </a> | ||||||
|       </li> |       </li> | ||||||
|       <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-pools" *ngIf="stateService.env.MINING_DASHBOARD"> |       <li class="nav-item" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}" id="btn-pools" *ngIf="stateService.env.MINING_DASHBOARD"> | ||||||
|  | |||||||
| @ -165,7 +165,7 @@ export class ServicesApiServices { | |||||||
|       return this.getAccelerationHistoryObserveResponse$({...params, page}).pipe( |       return this.getAccelerationHistoryObserveResponse$({...params, page}).pipe( | ||||||
|         map((response) => ({ |         map((response) => ({ | ||||||
|           page, |           page, | ||||||
|           total: parseInt(response.headers.get('X-Total-Count'), 10), |           total: parseInt(response.headers.get('X-Total-Count'), 10) || 0, | ||||||
|           accelerations: accelerations.concat(response.body || []), |           accelerations: accelerations.concat(response.body || []), | ||||||
|         })), |         })), | ||||||
|         switchMap(({page, total, accelerations}) => { |         switchMap(({page, total, accelerations}) => { | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ export class BitcoinsatoshisPipe implements PipeTransform { | |||||||
| 
 | 
 | ||||||
|   constructor(private sanitizer: DomSanitizer) { } |   constructor(private sanitizer: DomSanitizer) { } | ||||||
| 
 | 
 | ||||||
|   transform(value: string): SafeHtml { |   transform(value: string, firstPartClass?: string): SafeHtml { | ||||||
|     const newValue = this.insertSpaces(parseFloat(value || '0').toFixed(8)); |     const newValue = this.insertSpaces(parseFloat(value || '0').toFixed(8)); | ||||||
|     const position = (newValue || '0').search(/[1-9]/); |     const position = (newValue || '0').search(/[1-9]/); | ||||||
| 
 | 
 | ||||||
| @ -16,7 +16,7 @@ export class BitcoinsatoshisPipe implements PipeTransform { | |||||||
|     const secondPart = newValue.slice(position); |     const secondPart = newValue.slice(position); | ||||||
| 
 | 
 | ||||||
|     return this.sanitizer.bypassSecurityTrustHtml( |     return this.sanitizer.bypassSecurityTrustHtml( | ||||||
|       `<span class="text-secondary">${firstPart}</span>${secondPart}` |       `<span class="${firstPartClass ? firstPartClass : 'text-secondary'}">${firstPart}</span>${secondPart}` | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -365,6 +365,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir | |||||||
|     TwitterWidgetComponent, |     TwitterWidgetComponent, | ||||||
|     TwitterLogin, |     TwitterLogin, | ||||||
|     BitcoinInvoiceComponent, |     BitcoinInvoiceComponent, | ||||||
|  |     BitcoinsatoshisPipe, | ||||||
| 
 | 
 | ||||||
|     MempoolBlockOverviewComponent, |     MempoolBlockOverviewComponent, | ||||||
|     ClockchainComponent, |     ClockchainComponent, | ||||||
|  | |||||||
| @ -92,6 +92,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { | |||||||
| 	set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | 	set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | ||||||
| 	set $cors_origin 'https://mempool.space'; | 	set $cors_origin 'https://mempool.space'; | ||||||
| 	set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | 	set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | ||||||
|  | 	set $cors_expose_headers 'X-Total-Count'; | ||||||
| 	set $cors_credentials 'true'; | 	set $cors_credentials 'true'; | ||||||
| 
 | 
 | ||||||
| 	# set CORS for approved hostnames | 	# set CORS for approved hostnames | ||||||
| @ -100,6 +101,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { | |||||||
| 		set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | 		set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | ||||||
| 		set $cors_origin "$http_origin"; | 		set $cors_origin "$http_origin"; | ||||||
| 		set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | 		set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | ||||||
|  | 		set $cors_expose_headers 'X-Total-Count'; | ||||||
| 		set $cors_credentials 'true'; | 		set $cors_credentials 'true'; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -108,6 +110,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { | |||||||
| 	add_header Access-Control-Allow-Origin "$cors_origin" always; | 	add_header Access-Control-Allow-Origin "$cors_origin" always; | ||||||
| 	add_header Access-Control-Allow-Headers "$cors_headers" always; | 	add_header Access-Control-Allow-Headers "$cors_headers" always; | ||||||
| 	add_header Access-Control-Allow-Credentials "$cors_credentials" always; | 	add_header Access-Control-Allow-Credentials "$cors_credentials" always; | ||||||
|  | 	add_header Access-Control-Expose-Headers "$cors_expose_headers" always; | ||||||
| 
 | 
 | ||||||
| 	proxy_redirect off; | 	proxy_redirect off; | ||||||
| 	proxy_buffering off; | 	proxy_buffering off; | ||||||
| @ -172,6 +175,7 @@ location @mempool-api-v1-services-cache-short-addcors { | |||||||
| 	set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | 	set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | ||||||
| 	set $cors_origin 'https://mempool.space'; | 	set $cors_origin 'https://mempool.space'; | ||||||
| 	set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | 	set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | ||||||
|  | 	set $cors_expose_headers 'X-Total-Count'; | ||||||
| 	set $cors_credentials 'true'; | 	set $cors_credentials 'true'; | ||||||
| 
 | 
 | ||||||
| 	# set CORS for approved hostnames | 	# set CORS for approved hostnames | ||||||
| @ -180,6 +184,7 @@ location @mempool-api-v1-services-cache-short-addcors { | |||||||
| 		set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | 		set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; | ||||||
| 		set $cors_origin "$http_origin"; | 		set $cors_origin "$http_origin"; | ||||||
| 		set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | 		set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; | ||||||
|  | 		set $cors_expose_headers 'X-Total-Count'; | ||||||
| 		set $cors_credentials 'true'; | 		set $cors_credentials 'true'; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -188,6 +193,7 @@ location @mempool-api-v1-services-cache-short-addcors { | |||||||
| 	add_header Access-Control-Allow-Origin "$cors_origin" always; | 	add_header Access-Control-Allow-Origin "$cors_origin" always; | ||||||
| 	add_header Access-Control-Allow-Headers "$cors_headers" always; | 	add_header Access-Control-Allow-Headers "$cors_headers" always; | ||||||
| 	add_header Access-Control-Allow-Credentials "$cors_credentials" always; | 	add_header Access-Control-Allow-Credentials "$cors_credentials" always; | ||||||
|  | 	add_header Access-Control-Expose-Headers "$cors_expose_headers" always; | ||||||
| 
 | 
 | ||||||
| 	# add our own cache headers | 	# add our own cache headers | ||||||
| 	add_header 'Pragma' 'public'; | 	add_header 'Pragma' 'public'; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user