Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
5ed7ab3
add galexie service to quickstart
leighmcculloch Jan 6, 2026
f0bee43
add galexie integration test and configuration
leighmcculloch Jan 6, 2026
c5514e9
Add galexie image download step to build workflow
leighmcculloch Jan 6, 2026
2ecd82f
Fix execute permissions on galexie start script
leighmcculloch Jan 6, 2026
4367454
Add captive-core config for galexie
leighmcculloch Jan 6, 2026
5591db3
Add debug output for config response in galexie test
leighmcculloch Jan 6, 2026
8aea0e9
Fix JSON field names in ConfigFile struct to match actual response
leighmcculloch Jan 6, 2026
ecfaa32
Add more debug output to galexie test to diagnose file issues
leighmcculloch Jan 6, 2026
7f24e64
Add partition directory listing to debug galexie test
leighmcculloch Jan 6, 2026
7481313
Update galexie test to find any ledger file dynamically
leighmcculloch Jan 6, 2026
4e9aea8
Remove unused metadataFile variable
leighmcculloch Jan 6, 2026
cc97eb5
Fix galexie test file extension from .zstd to .zst
leighmcculloch Jan 6, 2026
e44bbd5
Fix metadata sidecar file test - use .metadata.json suffix
leighmcculloch Jan 6, 2026
e4a7a74
Clean up galexie test debug output
leighmcculloch Jan 6, 2026
31cb7d1
replace galexie version with image.json query
leighmcculloch Jan 6, 2026
2416ffb
Remove metadata sidecar test - filesystem datastore doesn't support m…
leighmcculloch Jan 6, 2026
487d6f1
Move galexie supervisor config to copy_defaults with other services
leighmcculloch Jan 6, 2026
faa9d31
remove galexie feature flag check
leighmcculloch Jan 6, 2026
d5016b2
Merge branch 'main' into galexie
leighmcculloch Jan 6, 2026
74e37a8
update meta-archive path to /opt/stellar/meta-archive/data
leighmcculloch Jan 7, 2026
7fe76f3
add meta-archive endpoint documentation
leighmcculloch Jan 7, 2026
79f4cda
add metaarchivehome variable and update directory setup
leighmcculloch Jan 7, 2026
8bd804d
reorder galexie initialization steps
leighmcculloch Jan 7, 2026
a952e65
add galexie to test matrix and remove duplicate configs
leighmcculloch Jan 7, 2026
9ea675a
rename meta-archive to ledger-meta-store
leighmcculloch Jan 8, 2026
c54a5a6
pin galexie to specific commit hash
leighmcculloch Jan 8, 2026
8dc55bd
Merge branch 'main' into galexie
leighmcculloch Jan 8, 2026
e4367f7
add galexie ledger meta exporter documentation
leighmcculloch Jan 8, 2026
51a9acd
add history-archive and ledger-meta-store ports
leighmcculloch Jan 8, 2026
1e38ba8
update galexie ref to v25.1.0
leighmcculloch Jan 8, 2026
3f5c906
update galexie ref to galexie-v25.1.0
leighmcculloch Jan 8, 2026
c67bb69
parameterize galexie captive core database path
leighmcculloch Jan 8, 2026
284da01
Merge branch 'main' into galexie
leighmcculloch Jan 8, 2026
ff4bdf8
Merge branch 'main' into galexie
leighmcculloch Jan 9, 2026
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
6 changes: 6 additions & 0 deletions .github/workflows/internal-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,12 @@ jobs:
pattern: image-lab-${{ steps.ids.outputs.lab }}-${{ matrix.arch }}.*
merge-multiple: true
path: /tmp/images
- name: Download Image Galexie
uses: actions/download-artifact@v4
with:
pattern: image-galexie-${{ steps.ids.outputs.galexie }}-${{ matrix.arch }}.*
merge-multiple: true
path: /tmp/images
- name: Load Image into Docker
run: |
ls -lah /tmp/images/
Expand Down
9 changes: 8 additions & 1 deletion .github/workflows/internal-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
image: ${{ fromJSON(inputs.images) }}
arch: ${{ fromJSON(inputs.archs) }}
network: ["local"]
enable: ["core","rpc","core,rpc,horizon"]
enable: ["core","rpc","core,rpc,horizon","galexie"]
options: [""]
include: ${{ fromJSON(needs.setup.outputs.additional-tests) }}
fail-fast: false
Expand Down Expand Up @@ -172,6 +172,13 @@ jobs:
docker logs stellar -f &
echo "supervisorctl tail -f stellar-rpc" | docker exec -i stellar sh &
go run tests/test_stellar_rpc_healthy.go
- name: Run galexie test
if: ${{ contains(matrix.enable, 'galexie') }}
timeout-minutes: ${{ fromJSON(steps.timeout.outputs.minutes) }}
run: |
docker logs stellar -f &
echo "supervisorctl tail -f galexie" | docker exec -i stellar sh &
go run tests/test_galexie.go
- name: Prepare Test Logs
if: always()
run: |
Expand Down
21 changes: 21 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ ARG HORIZON_IMAGE=stellar-horizon-stage
ARG FRIENDBOT_IMAGE=stellar-friendbot-stage
ARG RPC_IMAGE=stellar-rpc-stage
ARG LAB_IMAGE=stellar-lab-stage
ARG GALEXIE_IMAGE=stellar-galexie-stage

# xdr

Expand Down Expand Up @@ -187,6 +188,24 @@ COPY --from=stellar-lab-builder /lab/public /lab/public
COPY --from=stellar-lab-builder /lab/build/static /lab/public/_next/static
COPY --from=stellar-lab-builder /usr/local/bin/node /node

# galexie

FROM golang:1.24-trixie AS stellar-galexie-builder

ARG GALEXIE_REPO
ARG GALEXIE_REF

WORKDIR /src
RUN git clone https://github.com/${GALEXIE_REPO} /src
RUN git fetch origin ${GALEXIE_REF}
RUN git checkout ${GALEXIE_REF}
ENV CGO_ENABLED=0
RUN go build -o /galexie .

FROM scratch AS stellar-galexie-stage

COPY --from=stellar-galexie-builder /galexie /galexie

# quickstart

FROM $XDR_IMAGE AS xdr
Expand All @@ -195,6 +214,7 @@ FROM $HORIZON_IMAGE AS horizon
FROM $FRIENDBOT_IMAGE AS friendbot
FROM $RPC_IMAGE AS rpc
FROM $LAB_IMAGE AS lab
FROM $GALEXIE_IMAGE AS galexie

FROM ubuntu:24.04 AS quickstart

Expand All @@ -221,6 +241,7 @@ COPY --from=friendbot /friendbot /usr/local/bin/friendbot
COPY --from=rpc /stellar-rpc /usr/bin/stellar-rpc
COPY --from=lab /lab /opt/stellar/lab
COPY --from=lab /node /usr/bin/
COPY --from=galexie /galexie /usr/bin/galexie

RUN adduser --system --group --quiet --home /var/lib/stellar --disabled-password --shell /bin/bash stellar;

Expand Down
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ The image runs the following software:
- [stellar-horizon](https://github.com/stellar/stellar-horizon) - API server
- [stellar-friendbot](https://github.com/stellar/friendbot) - Faucet
- [stellar-lab](https://github.com/stellar/laboratory) - Web UI
- [galexie](https://github.com/stellar/galexie) - Ledger meta exporter
- [postgresql](https://www.postgresql.org) 12 is used for storing horizon data.
- [supervisord](http://supervisord.org) is used from managing the processes of the above services.

Expand All @@ -57,6 +58,7 @@ HTTP APIs and Tools are available at the following port and paths:
- RPC: `http://localhost:8000/rpc`
- Lab: `http://localhost:8000/lab`
- Friendbot: `http://localhost:8000/friendbot`
- Ledger Meta: `http://localhost:8000/ledger-meta` (available with `--local` and `--enable galexie`)
- History Archive: `http://localhost:8000/archive` (available with `--local` only)

## Tags
Expand Down Expand Up @@ -257,6 +259,27 @@ $ curl http://localhost:8000/friendbot?addr=G...

_Note: In local mode a local friendbot is running. In testnet and futurenet modes requests to the local `:8000/friendbot` endpoint will be proxied to the friendbot deployments for the respective network._

### Galexie (Ledger Meta Exporter)

Galexie is a ledger meta exporter that captures ledger close meta, which contains transaction meta, from the network and stores it locally. The exported ledger meta follows the [SEP-54](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0054.md) format and is served via a file server.

The ledger meta is only available in `--local` network mode. To enable it use the `--enable` option to specify all the services you wish to run and include `galexie`.

```
docker run -it -p 8000:8000 stellar/quickstart --local --enable core,rpc,galexie
```


The ledger meta is available at:

```
http://localhost:8000/ledger-meta
```

The ledger meta store includes:
- `.config.json` - Configuration file describing the data format
- Partition directories containing compressed XDR files compressed with zstd with one ledger per file (`.xdr.zst`)

### Using in GitHub Actions

The quickstart image can be run in GitHub Actions workflows using the provided action. This is useful for testing smart contracts, running integration tests, or any other CI/CD workflows that need a Stellar network.
Expand Down Expand Up @@ -443,6 +466,9 @@ The image also exposes a few other ports that most developers do not need, but a
| 5432 | postgresql | database access port |
| 6060 | horizon | admin port |
| 6061 | stellar-rpc | admin port |
| 6062 | galexie | admin port |
| 1570 | history-archive | file server port |
| 1571 | ledger-meta-store | file server port |
| 11625 | stellar-core | peer node port |
| 11626 | stellar-core | main http port |
| 11725 | stellar-core (horizon) | peer node port |
Expand Down
7 changes: 7 additions & 0 deletions common/galexie/bin/start
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#! /bin/bash

set -e
set -o pipefail

echo "starting galexie..."
exec /usr/bin/galexie append --start 2 --config-file /opt/stellar/galexie/etc/galexie.toml
25 changes: 25 additions & 0 deletions images.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@
"name": "lab",
"repo": "stellar/laboratory",
"ref": "main"
},
{
"name": "galexie",
"repo": "stellar/stellar-galexie",
"ref": "galexie-v25.1.0"
}
],
"tests": {
Expand Down Expand Up @@ -108,6 +113,11 @@
"name": "lab",
"repo": "stellar/laboratory",
"ref": "main"
},
{
"name": "galexie",
"repo": "stellar/stellar-galexie",
"ref": "galexie-v25.1.0"
}
],
"tests": {
Expand Down Expand Up @@ -175,6 +185,11 @@
"name": "lab",
"repo": "stellar/laboratory",
"ref": "21cc0d0b9080e664b9dbfae5713d9c7615613729"
},
{
"name": "galexie",
"repo": "stellar/stellar-galexie",
"ref": "galexie-v25.1.0"
}
],
"tests": {
Expand Down Expand Up @@ -230,6 +245,11 @@
"name": "lab",
"repo": "stellar/laboratory",
"ref": "main"
},
{
"name": "galexie",
"repo": "stellar/stellar-galexie",
"ref": "main"
}
],
"tests": {
Expand Down Expand Up @@ -286,6 +306,11 @@
"name": "lab",
"repo": "stellar/laboratory",
"ref": "main"
},
{
"name": "galexie",
"repo": "stellar/stellar-galexie",
"ref": "main"
}
],
"tests": {
Expand Down
22 changes: 22 additions & 0 deletions local/galexie/etc/galexie.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Galexie Configuration for Local Network

# Admin port configuration
admin_port = 6062

# Datastore Configuration
[datastore_config]
type = "Filesystem"

[datastore_config.params]
destination_path = "/opt/stellar/ledger-meta-store/data"

[datastore_config.schema]
ledgers_per_file = 1
files_per_partition = 64000

# Stellar-core Configuration
[stellar_core_config]
network_passphrase = "__NETWORK__"
history_archive_urls = ["http://localhost:1570"]
stellar_core_binary_path = "/usr/bin/stellar-core"
captive_core_toml_path = "/opt/stellar/galexie/etc/stellar-captive-core.cfg"
19 changes: 19 additions & 0 deletions local/galexie/etc/stellar-captive-core.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Captive core configuration for galexie on local network
NETWORK_PASSPHRASE="__NETWORK__"
HTTP_PORT=11926
PUBLIC_HTTP_PORT=false
PEER_PORT=11925
DATABASE="sqlite3://__DATABASE__"
ARTIFICIALLY_ACCELERATE_TIME_FOR_TESTING=true

UNSAFE_QUORUM=true
FAILURE_SAFETY=0

[[VALIDATORS]]
NAME="local_core"
HOME_DOMAIN="core.local"
# From "SDQVDISRYN2JXBS7ICL7QJAEKB3HWBJFP2QECXG7GZICAHBK4UNJCWK2"
PUBLIC_KEY="GCTI6HMWRH2QGMFKWVU5M5ZSOTKL7P7JAHZDMJJBKDHGWTEC4CJ7O3DU"
ADDRESS="localhost:11625"
QUALITY="MEDIUM"
HISTORY="curl -sf http://localhost:1570/{0} -o {1}"
5 changes: 5 additions & 0 deletions local/nginx/etc/conf.d/ledger-meta.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
location /ledger-meta {
rewrite /ledger-meta/(.*) /$1 break;
proxy_pass http://127.0.0.1:1571;
proxy_redirect off;
}
9 changes: 9 additions & 0 deletions local/supervisor/etc/supervisord.conf.d/galexie.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[program:galexie]
user=stellar
directory=/opt/stellar/galexie
command=/opt/stellar/galexie/bin/start
autostart=false
startretries=50
autorestart=true
priority=70
redirect_stderr=true
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[program:ledger-meta-store]
user=stellar
directory=/opt/stellar/ledger-meta-store/data
command=/usr/bin/python3 -m http.server 1571
autostart=true
autorestart=true
startretries=100
priority=10
redirect_stderr=true
Loading