From 125b9e4525132304ca11c24eca871bd392adbc05 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 24 May 2023 15:49:35 -0400 Subject: [PATCH 01/11] Restore liquid max block weight to defaults --- production/mempool-frontend-config.liquid.json | 1 - 1 file changed, 1 deletion(-) diff --git a/production/mempool-frontend-config.liquid.json b/production/mempool-frontend-config.liquid.json index 6a7c79d52..1a4fc2998 100644 --- a/production/mempool-frontend-config.liquid.json +++ b/production/mempool-frontend-config.liquid.json @@ -11,7 +11,6 @@ "LIQUID_WEBSITE_URL": "https://liquid.network", "BISQ_WEBSITE_URL": "https://bisq.markets", "ITEMS_PER_PAGE": 25, - "BLOCK_WEIGHT_UNITS": 300000, "MEMPOOL_BLOCKS_AMOUNT": 2, "KEEP_BLOCKS_AMOUNT": 16 } From b3f90e298127ad0199ca3c0312fb3022ecfd4a28 Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Sun, 13 Aug 2023 08:23:57 +0900 Subject: [PATCH 02/11] Add mempool enterprise note to top-level readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd2e62478..9bc988970 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,9 @@ It is an open-source project developed and operated for the benefit of the Bitco Mempool can be self-hosted on a wide variety of your own hardware, ranging from a simple one-click installation on a Raspberry Pi full-node distro all the way to a robust production instance on a powerful FreeBSD server. -**Most people should use a one-click install method.** Other install methods are meant for developers and others with experience managing servers. +Most people should use a one-click install method. + +Other install methods are meant for developers and others with experience managing servers. If you want support for your own production instance of Mempool, or if you'd like to have your own instance of Mempool run by the mempool.space team on their own global ISP infrastructure—check out Mempool Enterprise®. ## One-Click Installation From 102579baa972b80e08b637d034dfe54804cb7b9b Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Sun, 13 Aug 2023 13:00:47 +0900 Subject: [PATCH 03/11] Add enterprise note to production readme --- production/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/production/README.md b/production/README.md index 87b8bb0a1..8e325bb1b 100644 --- a/production/README.md +++ b/production/README.md @@ -2,7 +2,9 @@ These instructions are for setting up a serious production Mempool website for Bitcoin (mainnet, testnet, signet), Liquid (mainnet, testnet), and Bisq. -Again, this setup is no joke—home users should use [one of the other installation methods](../#installation-methods). Support is only provided to [enterprise sponsors](https://mempool.space/enterprise). +Again, this setup is no joke—home users should use [one of the other installation methods](../#installation-methods). Support is only provided to project sponsors through [Mempool Enterprise®](https://mempool.space/enterprise). + +You can also have the mempool.space team run a highly-performant and highly-available instance of Mempool for you on their own global ISP infrastructure. See Mempool Enterprise® for more details. ### Server Hardware From 0a918b8fa84270754ee3afa47c5dd9acca4c54e7 Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Sun, 13 Aug 2023 13:04:58 +0900 Subject: [PATCH 04/11] Add enterprise note to backend readme --- backend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/README.md b/backend/README.md index 6a0cb821c..0582aca8c 100644 --- a/backend/README.md +++ b/backend/README.md @@ -2,7 +2,7 @@ These instructions are mostly intended for developers. -If you choose to use these instructions for a production setup, be aware that you will still probably need to do additional configuration for your specific OS, environment, use-case, etc. We do our best here to provide a good starting point, but only proceed if you know what you're doing. Mempool only provides support for custom setups to [enterprise sponsors](https://mempool.space/enterprise). +If you choose to use these instructions for a production setup, be aware that you will still probably need to do additional configuration for your specific OS, environment, use-case, etc. We do our best here to provide a good starting point, but only proceed if you know what you're doing. Mempool only provides support for custom setups to project sponsors through [Mempool Enterprise®](https://mempool.space/enterprise). See other ways to set up Mempool on [the main README](/../../#installation-methods). From a4810b8be0438f512336a9ab93450f755d33fc09 Mon Sep 17 00:00:00 2001 From: Armin Sabouri Date: Fri, 17 Nov 2023 15:23:52 -0500 Subject: [PATCH 05/11] fix: incorrect `HTTP_PORT` docker compose field in docker README.md The override is [BACKEND_HTTP_PORT defined here](https://github.com/mempool/mempool/blob/59c513f2a52a96d125944b42230e1fb7b13b130e/docker/backend/start.sh#L7) --- docker/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/README.md b/docker/README.md index 8dc1f264a..444324af8 100644 --- a/docker/README.md +++ b/docker/README.md @@ -124,7 +124,7 @@ Corresponding `docker-compose.yml` overrides: environment: MEMPOOL_NETWORK: "" MEMPOOL_BACKEND: "" - MEMPOOL_HTTP_PORT: "" + BACKEND_HTTP_PORT: "" MEMPOOL_SPAWN_CLUSTER_PROCS: "" MEMPOOL_API_URL_PREFIX: "" MEMPOOL_POLL_RATE_MS: "" From 88d2a3a50d35418bf05ab555c92f361bdbe271f0 Mon Sep 17 00:00:00 2001 From: Armin Sabouri Date: Fri, 17 Nov 2023 15:31:39 -0500 Subject: [PATCH 06/11] sign CLA for 0xBEEFCAF3 --- contributors/0xBEEFCAF3.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 contributors/0xBEEFCAF3.txt diff --git a/contributors/0xBEEFCAF3.txt b/contributors/0xBEEFCAF3.txt new file mode 100644 index 000000000..e00999be1 --- /dev/null +++ b/contributors/0xBEEFCAF3.txt @@ -0,0 +1,3 @@ +I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of November 17, 2023. + +Signed: 0xBEEFCAF3 From b0c02b16ff22058779a525ba9a02c0c34093a6ca Mon Sep 17 00:00:00 2001 From: natsee Date: Wed, 13 Dec 2023 19:22:46 +0100 Subject: [PATCH 07/11] Search result: do not offer Go to block --- .../app/components/search-form/search-form.component.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/search-form/search-form.component.ts b/frontend/src/app/components/search-form/search-form.component.ts index a99dc084e..446d8be5a 100644 --- a/frontend/src/app/components/search-form/search-form.component.ts +++ b/frontend/src/app/components/search-form/search-form.component.ts @@ -174,7 +174,7 @@ export class SearchFormComponent implements OnInit { const addressPrefixSearchResults = result[0]; const lightningResults = result[1]; - const matchesBlockHeight = this.regexBlockheight.test(searchText); + const matchesBlockHeight = this.regexBlockheight.test(searchText) && parseInt(searchText) <= this.stateService.latestBlockHeight; const matchesDateTime = this.regexDate.test(searchText) && new Date(searchText).toString() !== 'Invalid Date'; const matchesUnixTimestamp = this.regexUnixTimestamp.test(searchText); const matchesTxId = this.regexTransaction.test(searchText) && !this.regexBlockhash.test(searchText); @@ -217,7 +217,7 @@ export class SearchFormComponent implements OnInit { selectedResult(result: any): void { if (typeof result === 'string') { this.search(result); - } else if (typeof result === 'number') { + } else if (typeof result === 'number' && result <= this.stateService.latestBlockHeight) { this.navigate('/block/', result.toString()); } else if (result.alias) { this.navigate('/lightning/node/', result.public_key); @@ -232,8 +232,10 @@ export class SearchFormComponent implements OnInit { this.isSearching = true; if (!this.regexTransaction.test(searchText) && this.regexAddress.test(searchText)) { this.navigate('/address/', searchText); - } else if (this.regexBlockhash.test(searchText) || this.regexBlockheight.test(searchText)) { + } else if (this.regexBlockhash.test(searchText)) { this.navigate('/block/', searchText); + } else if (this.regexBlockheight.test(searchText)) { + parseInt(searchText) <= this.stateService.latestBlockHeight ? this.navigate('/block/', searchText) : this.isSearching = false; } else if (this.regexTransaction.test(searchText)) { const matches = this.regexTransaction.exec(searchText); if (this.network === 'liquid' || this.network === 'liquidtestnet') { From eae044cf665ef3f5f3288298dbeae146b2a6506c Mon Sep 17 00:00:00 2001 From: natsee Date: Fri, 15 Dec 2023 15:38:02 +0100 Subject: [PATCH 08/11] Show blockhash copy button in block component --- frontend/src/app/components/block/block.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 8bcf23ace..e908d5b24 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -42,7 +42,7 @@ Hash - ‎{{ block.id | shortenString : 13 }} + ‎{{ block.id | shortenString : 13 }} Timestamp From bc89fd5b7c87ca8a1e5d05ce2d2ed8b87c5d7b95 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 15 Dec 2023 13:28:55 +0000 Subject: [PATCH 09/11] Goggles icon, beta tag and info tooltip --- .../block-filters.component.html | 8 +++-- .../block-filters.component.scss | 14 ++++++++ .../components/svg-icons/goggles.component.ts | 34 +++++++++++++++++++ frontend/src/app/shared/shared.module.ts | 6 +++- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 frontend/src/app/shared/components/svg-icons/goggles.component.ts diff --git a/frontend/src/app/components/block-filters/block-filters.component.html b/frontend/src/app/components/block-filters/block-filters.component.html index 90b66ddc3..876a72ad1 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.html +++ b/frontend/src/app/components/block-filters/block-filters.component.html @@ -1,7 +1,11 @@
+ + beta + +
-
diff --git a/frontend/src/app/components/block-filters/block-filters.component.scss b/frontend/src/app/components/block-filters/block-filters.component.scss index 20b565293..6406a1d93 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.scss +++ b/frontend/src/app/components/block-filters/block-filters.component.scss @@ -20,7 +20,21 @@ margin-left: 0.5em; } + .info-badges { + display: flex; + flex-direction: row; + align-items: center; + float: right; + + &:hover, &:active { + text-decoration: none; + } + } + .menu-toggle { + width: 2em; + height: 2em; + padding: 0px 1px; opacity: 0; cursor: pointer; color: white; diff --git a/frontend/src/app/shared/components/svg-icons/goggles.component.ts b/frontend/src/app/shared/components/svg-icons/goggles.component.ts new file mode 100644 index 000000000..b045e6acb --- /dev/null +++ b/frontend/src/app/shared/components/svg-icons/goggles.component.ts @@ -0,0 +1,34 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'app-goggles-icon', + template: ` + + + + + + + `, +}) +export class GogglesIconComponent { + @Input() width: string = '100%'; + @Input() height: string = '100%'; +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 9bcfb932c..f772c3fd3 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -5,6 +5,7 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck } from '@fortawesome/free-solid-svg-icons'; +import { GogglesIconComponent } from './components/svg-icons/goggles.component'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '../components/menu/menu.component'; import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; @@ -200,6 +201,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir AccelerationsListComponent, AccelerationStatsComponent, PendingStatsComponent, + GogglesIconComponent, ], imports: [ CommonModule, @@ -322,7 +324,9 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir ClockFaceComponent, OnlyVsizeDirective, - OnlyWeightDirective + OnlyWeightDirective, + + GogglesIconComponent, ] }) export class SharedModule { From 8dbf879c37fc593531b2aa6d198fb611ebe6ba45 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 15 Dec 2023 13:29:29 +0000 Subject: [PATCH 10/11] Add Goggles FAQ entry --- .../src/app/docs/api-docs/api-docs-data.ts | 7 ++ .../app/docs/api-docs/api-docs.component.html | 89 +++++++++++++++++++ .../app/docs/api-docs/api-docs.component.scss | 41 +++++++++ 3 files changed, 137 insertions(+) diff --git a/frontend/src/app/docs/api-docs/api-docs-data.ts b/frontend/src/app/docs/api-docs/api-docs-data.ts index ce0b7eaef..97be0c2b1 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -8911,6 +8911,13 @@ export const faqData = [ fragment: "what-is-block-health", title: "What is block health?", }, + { + type: "endpoint", + category: "advanced", + showConditions: bitcoinNetworks, + fragment: "how-do-mempool-goggles-work", + title: "How do Mempool Goggles work?", + }, { type: "category", category: "self-hosting", diff --git a/frontend/src/app/docs/api-docs/api-docs.component.html b/frontend/src/app/docs/api-docs/api-docs.component.html index 49493d210..49b11ad7b 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.html +++ b/frontend/src/app/docs/api-docs/api-docs.component.html @@ -279,6 +279,95 @@

Because of this feature's resource usage and availability requirements, it is only supported on official mempool.space instances.

+ +

Mempool Goggles are a set of filters that can be applied to the mempool block visualizations to highlight different types of transactions.

+

There are currently 25 different Mempool Goggles filters, grouped into six categories:

+
+
Features
+
+
+
RBF enabled
+
The transaction opts-in to BIP-125 replaceability.
+
RBF disabled
+
The transaction does not opt-in to BIP-125 replaceability.
+
Version 1
+
The default version for most transactions.
+
Version 2
+
Required for transactions which use OP_CHECKSEQUENCEVERIFY relative timelocks.
+
+
+ +
Address Types
+
+
+
P2PK
+
Pay-to-public-key. A legacy output format most commonly found in old coinbase transactions.
+
Bare multisig
+
A legacy form of multisig, most commonly used for data embedding schemes (see also "Fake pubkey").
+
P2PKH
+
Pay-to-public-key-hash. A legacy address type that locks outputs to a public key.
+
P2SH
+
Pay-to-script-hash. A legacy address type that locks outputs to a redeem script.
+
P2WPKH
+
Pay-to-witness-public-key-hash. The SegWit version of P2PKH.
+
P2WSH
+
Pay-to-witness-script-hash. The SegWit version of P2SH.
+
Taproot
+
Addresses using the SegWit V1 format added in the Taproot upgrade.
+
+
+ +
Behavior
+
+
+
Paid for by child
+
The transaction's effective fee rate has been increased by a higher rate CPFP child.
+
Pays for parent
+
The transaction bumps the effective fee rate of a lower rate CPFP ancestor.
+
Replacement
+
The transaction replaced a prior version via RBF.
+
+
+ +
Data
+
+ Different methods of embedding arbitrary data in a Bitcoin transaction. +
+
OP_RETURN
+
Fake pubkey
+
Data may be embedded in an invalid public key in a P2PK or Bare multisig output. This is a heuristic filter and can be prone to false positives and false negatives.
+
Inscription
+
Data is embedded in the witness script of a taproot input.
+
+
+ +
Heuristics
+
+ These filters match common types of transactions according to subjective criteria. +
+
Coinjoin
+
A type of collaborative privacy-improving transaction.
+
Consolidation
+
The transaction condenses many inputs into a few outputs.
+
Batch payment
+
The transaction sends coins from a few inputs to many outputs.
+
+
+ +
Sighash Flags
+
+ Different ways of signing inputs to Bitcoin transactions. Note that selecting multiple sighash filters will highlight transactions in which each sighash flag is used, but not necessarily in the same input. +
+
sighash_all
+
sighash_none
+
sighash_single
+
sighash_default
+
sighash_anyonecanpay
+
+
+
+
+ The official mempool.space website is operated by The Mempool Open Source Project. See more information on our About page. There are also many unofficial instances of this website operated by individual members of the Bitcoin community. diff --git a/frontend/src/app/docs/api-docs/api-docs.component.scss b/frontend/src/app/docs/api-docs/api-docs.component.scss index f90274046..8a4150262 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.scss +++ b/frontend/src/app/docs/api-docs/api-docs.component.scss @@ -389,3 +389,44 @@ h3 { margin-bottom: 4rem; } } + +/* styles for nested definition lists */ +dl { + margin: 0; + padding: 0; +} + +dt { + font-weight: bold; + color: #4a68b9; + padding: 5px 0; +} + +dd { + padding: 2px 0; + + & > dl { + padding-left: 1em; + border-left: 2px solid #4a68b9; + margin-left: 1em; + margin-top: 5px; + } + + & > dl > dt { + display: inline; + font-weight: normal; + color: #e83e8c; + font-family: Consolas, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New; + text-transform: uppercase; + + &:before { + content: ""; + display: block; + } + } + + & > dl > dd { + display: inline; + margin-left: 1em; + } +} From 78857102f8cdaea05411e5cdfc38d8a7aeb7588e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 17 Dec 2023 10:56:11 +0000 Subject: [PATCH 11/11] Move goggles icon inside generic svg-images component --- .../block-filters.component.html | 2 +- .../svg-images/svg-images.component.html | 8 +++++ .../components/svg-icons/goggles.component.ts | 34 ------------------- frontend/src/app/shared/shared.module.ts | 4 --- 4 files changed, 9 insertions(+), 39 deletions(-) delete mode 100644 frontend/src/app/shared/components/svg-icons/goggles.component.ts diff --git a/frontend/src/app/components/block-filters/block-filters.component.html b/frontend/src/app/components/block-filters/block-filters.component.html index 876a72ad1..7b1c2f9e5 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.html +++ b/frontend/src/app/components/block-filters/block-filters.component.html @@ -5,7 +5,7 @@
diff --git a/frontend/src/app/components/svg-images/svg-images.component.html b/frontend/src/app/components/svg-images/svg-images.component.html index 5e8d7d29f..11dfe1d79 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -84,6 +84,14 @@ + + + + + + + + diff --git a/frontend/src/app/shared/components/svg-icons/goggles.component.ts b/frontend/src/app/shared/components/svg-icons/goggles.component.ts deleted file mode 100644 index b045e6acb..000000000 --- a/frontend/src/app/shared/components/svg-icons/goggles.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'app-goggles-icon', - template: ` - - - - - - - `, -}) -export class GogglesIconComponent { - @Input() width: string = '100%'; - @Input() height: string = '100%'; -} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index f772c3fd3..f092e81bc 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -5,7 +5,6 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck } from '@fortawesome/free-solid-svg-icons'; -import { GogglesIconComponent } from './components/svg-icons/goggles.component'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '../components/menu/menu.component'; import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; @@ -201,7 +200,6 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir AccelerationsListComponent, AccelerationStatsComponent, PendingStatsComponent, - GogglesIconComponent, ], imports: [ CommonModule, @@ -325,8 +323,6 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir OnlyVsizeDirective, OnlyWeightDirective, - - GogglesIconComponent, ] }) export class SharedModule {