Skip to content

Commit b50becc

Browse files
authored
Merge pull request #10 from FilOzone/feat/indexer
Implement ponder indexer
2 parents ba6ef41 + 811a74d commit b50becc

34 files changed

Lines changed: 13449 additions & 299 deletions

.dockerignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
**
2+
3+
!package.json
4+
!pnpm-lock.yaml
5+
!pnpm-workspace.yaml
6+
!tsconfig.json
7+
8+
!apps
9+
!apps/ponder
10+
!apps/ponder/**
11+
12+
!packages
13+
!packages/repair-db
14+
!packages/repair-db/**
15+
16+
**/node_modules
17+
**/dist
18+
**/.wireit
19+
**/.env
20+
**/*.log

.github/workflows/ponder-image.yml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: Ponder Image
2+
3+
on:
4+
push:
5+
branches: [master]
6+
tags: ["v*"]
7+
paths:
8+
- ".github/workflows/ponder-image.yml"
9+
- ".dockerignore"
10+
- "apps/ponder/**"
11+
- "packages/repair-db/**"
12+
- "package.json"
13+
- "pnpm-lock.yaml"
14+
- "pnpm-workspace.yaml"
15+
- "tsconfig.json"
16+
pull_request:
17+
paths:
18+
- ".github/workflows/ponder-image.yml"
19+
- ".dockerignore"
20+
- "apps/ponder/**"
21+
- "packages/repair-db/**"
22+
- "package.json"
23+
- "pnpm-lock.yaml"
24+
- "pnpm-workspace.yaml"
25+
- "tsconfig.json"
26+
workflow_dispatch:
27+
28+
permissions:
29+
contents: read
30+
packages: write
31+
32+
jobs:
33+
build:
34+
name: build ponder image
35+
runs-on: ubuntu-latest
36+
steps:
37+
- uses: actions/checkout@v6
38+
39+
- name: Set image name
40+
run: echo "IMAGE_NAME=ghcr.io/${GITHUB_REPOSITORY,,}-ponder" >> "$GITHUB_ENV"
41+
42+
- uses: docker/setup-buildx-action@v3
43+
44+
- uses: docker/login-action@v3
45+
if: github.event_name != 'pull_request'
46+
with:
47+
registry: ghcr.io
48+
username: ${{ github.actor }}
49+
password: ${{ secrets.GITHUB_TOKEN }}
50+
51+
- uses: docker/metadata-action@v5
52+
id: meta
53+
with:
54+
images: ${{ env.IMAGE_NAME }}
55+
tags: |
56+
type=ref,event=branch
57+
type=ref,event=pr
58+
type=ref,event=tag
59+
type=sha,prefix=sha-
60+
61+
- uses: docker/build-push-action@v6
62+
with:
63+
context: .
64+
file: apps/ponder/Dockerfile
65+
push: ${{ github.event_name != 'pull_request' }}
66+
tags: ${{ steps.meta.outputs.tags }}
67+
labels: ${{ steps.meta.outputs.labels }}
68+
cache-from: type=gha
69+
cache-to: type=gha,mode=max

apps/ponder/Dockerfile

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# syntax=docker/dockerfile:1.7
2+
3+
FROM node:24-slim
4+
5+
WORKDIR /app
6+
7+
ENV NO_COLOR=1
8+
9+
RUN corepack enable
10+
11+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.json ./
12+
COPY apps/ponder/package.json apps/ponder/package.json
13+
COPY packages/repair-db/package.json packages/repair-db/package.json
14+
15+
RUN pnpm install --frozen-lockfile --filter @filoz/repair-ponder...
16+
17+
COPY apps/ponder apps/ponder
18+
COPY packages/repair-db packages/repair-db
19+
20+
RUN pnpm --filter @filoz/repair-db build
21+
RUN chown -R node:node /app
22+
23+
USER node
24+
WORKDIR /app/apps/ponder
25+
26+
ENTRYPOINT ["./node_modules/.bin/ponder"]
27+
CMD ["start"]

apps/ponder/README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
2+
# Repair Ponder Indexer
3+
4+
Indexes FWSS repair inventory state for datasets, pieces, and storage providers.
5+
6+
The shared Drizzle schema used by downstream consumers lives in `packages/repair-db`.
7+
Ponder owns the on-chain write schema in `apps/ponder/ponder.schema.ts`, with table names imported from
8+
`@filoz/repair-db`.
9+
10+
## Tables
11+
12+
- `providers`: current ServiceProviderRegistry state, including provider name from block-scoped `eth_call`s and the
13+
PDP product `serviceURL`.
14+
- `data_sets`: current FWSS dataset state. `pdp_end_epoch != 0` means PDP payment termination has started.
15+
- `pieces`: current piece inventory keyed by `(data_set_id, piece_id)`, with a secondary CID index for finding alternate
16+
providers.
17+
18+
## Commands
19+
20+
```sh
21+
pnpm --filter @filoz/repair-ponder codegen:mainnet
22+
pnpm --filter @filoz/repair-ponder codegen:calibnet
23+
pnpm --filter @filoz/repair-ponder typecheck
24+
pnpm --filter @filoz/repair-ponder dev:mainnet
25+
pnpm --filter @filoz/repair-ponder dev:calibnet
26+
```
27+
28+
Set `DATABASE_URL` and `RPC_URL` to override the local defaults.
29+
30+
Environment variables:
31+
32+
| Variable | Values | Default | Strict mode |
33+
| --- | --- | --- | --- |
34+
| `PONDER_NETWORK` | `mainnet`, `calibnet` | `mainnet` | Required |
35+
| `DATABASE_URL` | PostgreSQL connection string | `postgres://ponder:ponder@localhost:17825/ponder` | Required |
36+
| `RPC_URL` | Filecoin JSON-RPC URL | `http://localhost:1234/rpc/v1` | Required |
37+
| `PONDER_STRICT_ENV` | `true`, `1` | unset | Enables strict mode |
38+
39+
Set `PONDER_STRICT_ENV=true` to require `PONDER_NETWORK`, `DATABASE_URL`, and `RPC_URL`, which is recommended for
40+
deployments.
41+
42+
## Networks
43+
44+
| Network | Goldsky slug | FWSS address | PDPVerifier address | Start block |
45+
| --- | --- | --- | --- | --- |
46+
| Filecoin mainnet | `filecoin` | `0x8408502033C418E1bbC97cE9ac48E5528F371A9f` | `0xBADd0B92C1c71d02E7d520f64c0876538fa2557F` | `5459607` |
47+
| Filecoin calibration | `filecoin-testnet` | `0x02925630df557F957f70E112bA06e50965417CA0` | `0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C` | `3141266` |
48+
49+
Start blocks are 10 blocks before FWSS proxy creation. Mainnet FWSS was created at block `5459617`; calibration FWSS was created at block `3141276`.

0 commit comments

Comments
 (0)