Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/backend-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
matrix:
node: ["24.13.0"]
fail-fast: false
runs-on: mempool-ci
runs-on: ubuntu-latest

name: Backend Integration Tests - node ${{ matrix.node }}

Expand Down
13 changes: 7 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
node: ["24.13.0"]
flavor: ["dev", "prod"]
fail-fast: false
runs-on: mempool-ci
runs-on: ubuntu-latest

name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }}
steps:
Expand Down Expand Up @@ -100,7 +100,7 @@ jobs:
strategy:
matrix:
node: ["24.13.0"]
runs-on: mempool-ci
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down Expand Up @@ -211,7 +211,7 @@ jobs:
node: ["24.13.0"]
flavor: ["dev", "prod"]
fail-fast: false
runs-on: mempool-ci
runs-on: ubuntu-latest

name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }}
steps:
Expand Down Expand Up @@ -308,13 +308,14 @@ jobs:

e2e:
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
runs-on: mempool-ci
runs-on: ubuntu-latest
needs: frontend
strategy:
fail-fast: false
matrix:
node: ["24.13.0"]
module: ["mempool", "liquid", "testnet4"]
# liquid disabled for the ECX flavor
module: ["mempool", "testnet4"]

name: E2E tests for ${{ matrix.module }}
steps:
Expand Down Expand Up @@ -452,7 +453,7 @@ jobs:
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
validate_docker_json:
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
runs-on: mempool-ci
runs-on: ubuntu-latest
name: Validate generated backend Docker JSON

steps:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ permissions:
jobs:
test-images:
# Always run on tag pushes and all pull requests
runs-on: mempool-ci
runs-on: ubuntu-latest
timeout-minutes: 30
name: Test built Docker images
steps:
Expand Down Expand Up @@ -232,7 +232,7 @@ jobs:
service:
- frontend
- backend
runs-on: mempool-ci
runs-on: ubuntu-latest
timeout-minutes: 120
name: Build and push to DockerHub
outputs:
Expand Down Expand Up @@ -362,7 +362,7 @@ jobs:
needs: build
# Only for successful tag pushes (not PRs with docker-push label) and only for "plain" versions (no '-')
if: ${{ needs.build.result == 'success' && github.event_name == 'push' && !contains(github.ref_name, '-') }}
runs-on: mempool-ci
runs-on: ubuntu-latest
timeout-minutes: 30
name: Tag release build as latest
strategy:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/e2e_parameterized.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ on:
jobs:
cache:
name: "Cache assets for builds"
runs-on: mempool-ci
runs-on: ubuntu-latest
steps:
- name: Determine checkout ref
id: determine-ref
Expand Down Expand Up @@ -123,7 +123,7 @@ jobs:
key: promo-video-assets-cache

e2e:
runs-on: mempool-ci
runs-on: ubuntu-latest
needs: cache
strategy:
fail-fast: false
Expand Down
56 changes: 56 additions & 0 deletions .github/workflows/ecx-frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Builds the ECX frontend image and pushes it to GHCR. Kept separate from
# upstream's docker.yml so rebases never conflict here. Frontend only. The
# stack runs the upstream backend image.
name: ECX frontend

on:
push:
branches: [ecx]
tags: ['ecx-v*']
pull_request:
workflow_dispatch:

permissions:
contents: read
packages: write

jobs:
units:
name: Check ECX unit labels
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: No Bitcoin unit labels in rendered code paths
run: ./frontend/check-ecx-units.sh

image:
name: Build and push frontend
runs-on: ubuntu-latest
needs: units
steps:
- uses: actions/checkout@v4

- name: Add SHORT_SHA env property
run: echo "SHORT_SHA=${GITHUB_SHA:0:8}" >> "$GITHUB_ENV"

- name: Init repo for Dockerization
run: docker/init.sh "$SHORT_SHA"

- uses: docker/setup-buildx-action@v3

- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v6
with:
context: ./frontend
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64
build-args: commitHash=${{ env.SHORT_SHA }}
tags: |
ghcr.io/${{ github.repository_owner }}/mempool-frontend:sha-${{ env.SHORT_SHA }}
ghcr.io/${{ github.repository_owner }}/mempool-frontend:alphanet
2 changes: 1 addition & 1 deletion .github/workflows/get_backend_block_height.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: [workflow_dispatch]

jobs:
print-backend-sha:
runs-on: mempool-ci
runs-on: ubuntu-latest
name: Get block height
steps:
- name: Checkout
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/get_backend_hash.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: [workflow_dispatch]

jobs:
print-backend-sha:
runs-on: mempool-ci
runs-on: ubuntu-latest
name: Print backend hashes
steps:
- name: Checkout
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/get_image_digest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
type: string
jobs:
print-images-sha:
runs-on: mempool-ci
runs-on: ubuntu-latest
name: Print digest for images
steps:
- name: Checkout
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/project-review-status.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:

jobs:
manage-project-board:
runs-on: mempool-ci
runs-on: ubuntu-latest
steps:
- name: Update Project Board
uses: actions/github-script@v7
Expand Down
50 changes: 17 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,22 @@
# The Mempool Open Source Project® [![mempool](https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/simple/ry4br7/master&style=flat-square)](https://dashboard.cypress.io/projects/ry4br7/runs)
# mempool-ecx

https://user-images.githubusercontent.com/93150691/226236121-375ea64f-b4a1-4cc0-8fad-a6fb33226840.mp4
A fork of [mempool/mempool](https://github.com/mempool/mempool), the block
explorer for the eCash alphanet. See the upstream repo for general
documentation and installation instructions.

<br>
The `ecx` branch is a rebasable patch series on top of an upstream release
tag — currently **v3.3.1** — kept as one commit per change; see
`git log v3.3.1..ecx` for what and why.

Mempool is the fully-featured mempool visualizer, explorer, and API service running at [mempool.space](https://mempool.space/).
## Rebasing onto a new release

It is an open-source project developed and operated for the benefit of the Bitcoin community, with a focus on the emerging transaction fee market that is evolving Bitcoin into a multi-layer ecosystem.
```sh
git fetch upstream --tags
git rebase --onto v3.4.0 v3.3.1 ecx # old base -> new base
./frontend/check-ecx-units.sh
```

# Installation Methods

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 <a href="#one-click-installation">one-click install method</a>.

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 <a href="https://mempool.space/enterprise" target="_blank">Mempool Enterprise®</a>.

<a id="one-click-installation"></a>
## One-Click Installation

Mempool can be conveniently installed on the following full-node distros:
- [Umbrel](https://github.com/getumbrel/umbrel)
- [RaspiBlitz](https://github.com/rootzoll/raspiblitz)
- [RoninDojo](https://code.samourai.io/ronindojo/RoninDojo)
- [myNode](https://github.com/mynodebtc/mynode)
- [StartOS](https://github.com/Start9Labs/start-os)
- [nix-bitcoin](https://github.com/fort-nix/nix-bitcoin/blob/a1eacce6768ca4894f365af8f79be5bbd594e1c3/examples/configuration.nix#L129)

**We highly recommend you deploy your own Mempool instance this way.** No matter which option you pick, you'll be able to get your own fully-sovereign instance of Mempool up quickly without needing to fiddle with any settings.

## Advanced Installation Methods

Mempool can be installed in other ways too, but we only recommend doing so if you're a developer, have experience managing servers, or otherwise know what you're doing.

- See the [`docker/`](./docker/) directory for instructions on deploying Mempool with Docker.
- See the [`backend/`](./backend/) and [`frontend/`](./frontend/) directories for manual install instructions oriented for developers.
- See the [`production/`](./production/) directory for guidance on setting up a more serious Mempool instance designed for high performance at scale.
Then re-verify by hand: the meta tags in `src/index.mempool.html`, the fork
height in `app/app.constants.ts`, and the removed routes in
`app/master-page.module.ts` — then `npm run build` and walk a block, tx, and
address page.
135 changes: 1 addition & 134 deletions frontend/angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,140 +21,7 @@
"code": "en-US",
"baseHref": "/"
},
"locales": {
"ar": {
"translation": "src/locale/messages.ar.xlf",
"baseHref": "/ar/"
},
"ca": {
"translation": "src/locale/messages.ca.xlf",
"baseHref": "/ca/"
},
"cs": {
"translation": "src/locale/messages.cs.xlf",
"baseHref": "/cs/"
},
"de": {
"translation": "src/locale/messages.de.xlf",
"baseHref": "/de/"
},
"da": {
"translation": "src/locale/messages.da.xlf",
"baseHref": "/da/"
},
"es": {
"translation": "src/locale/messages.es.xlf",
"baseHref": "/es/"
},
"fa": {
"translation": "src/locale/messages.fa.xlf",
"baseHref": "/fa/"
},
"fr": {
"translation": "src/locale/messages.fr.xlf",
"baseHref": "/fr/"
},
"hr": {
"translation": "src/locale/messages.hr.xlf",
"baseHref": "/hr/"
},
"ja": {
"translation": "src/locale/messages.ja.xlf",
"baseHref": "/ja/"
},
"ka": {
"translation": "src/locale/messages.ka.xlf",
"baseHref": "/ka/"
},
"ko": {
"translation": "src/locale/messages.ko.xlf",
"baseHref": "/ko/"
},
"it": {
"translation": "src/locale/messages.it.xlf",
"baseHref": "/it/"
},
"he": {
"translation": "src/locale/messages.he.xlf",
"baseHref": "/he/"
},
"nl": {
"translation": "src/locale/messages.nl.xlf",
"baseHref": "/nl/"
},
"nb": {
"translation": "src/locale/messages.nb.xlf",
"baseHref": "/nb/"
},
"pl": {
"translation": "src/locale/messages.pl.xlf",
"baseHref": "/pl/"
},
"pt": {
"translation": "src/locale/messages.pt.xlf",
"baseHref": "/pt/"
},
"sl": {
"translation": "src/locale/messages.sl.xlf",
"baseHref": "/sl/"
},
"sv": {
"translation": "src/locale/messages.sv.xlf",
"baseHref": "/sv/"
},
"th": {
"translation": "src/locale/messages.th.xlf",
"baseHref": "/th/"
},
"tr": {
"translation": "src/locale/messages.tr.xlf",
"baseHref": "/tr/"
},
"uk": {
"translation": "src/locale/messages.uk.xlf",
"baseHref": "/uk/"
},
"fi": {
"translation": "src/locale/messages.fi.xlf",
"baseHref": "/fi/"
},
"vi": {
"translation": "src/locale/messages.vi.xlf",
"baseHref": "/vi/"
},
"hu": {
"translation": "src/locale/messages.hu.xlf",
"baseHref": "/hu/"
},
"mk": {
"translation": "src/locale/messages.mk.xlf",
"baseHref": "/mk/"
},
"zh": {
"translation": "src/locale/messages.zh.xlf",
"baseHref": "/zh/"
},
"ro": {
"translation": "src/locale/messages.ro.xlf",
"baseHref": "/ro/"
},
"ru": {
"translation": "src/locale/messages.ru.xlf",
"baseHref": "/ru/"
},
"hi": {
"translation": "src/locale/messages.hi.xlf",
"baseHref": "/hi/"
},
"ne": {
"translation": "src/locale/messages.ne.xlf",
"baseHref": "/ne/"
},
"lt": {
"translation": "src/locale/messages.lt.xlf",
"baseHref": "/lt/"
}
}
"locales": {}
},
"architect": {
"build": {
Expand Down
Loading
Loading