|
|
|
@@ -1,72 +1,152 @@
|
|
|
|
|
# Upstream: `trezor/trezor-suite-sync` en Evolu Relay
|
|
|
|
|
|
|
|
|
|
Naslag, geen plan. Wat er over de bovenstroomse repo bekend is, plus per feit hoe hard het is. Dat
|
|
|
|
|
onderscheid staat er expres in: **alles hieronder komt uit het vooronderzoek van 25-08-2026 en is in deze
|
|
|
|
|
repo nog niet nagetrokken tegen de bron.** Het plan **Proefopstelling** doet precies dat, en de eerste
|
|
|
|
|
sessie die daar iets van bevestigt of weerlegt, werkt dit document bij met de datum erbij.
|
|
|
|
|
Naslag, geen plan. **Nagetrokken tegen de bron op 25-08-2026**, met de URL's onderaan. Dat is een andere
|
|
|
|
|
status dan de eerste versie van dit document had: die leunde op vooronderzoek van dezelfde dag en meldde
|
|
|
|
|
per regel dat het niet geverifieerd was. Wat hieronder staat komt uit de bestanden zelf.
|
|
|
|
|
|
|
|
|
|
Op drie punten week de werkelijkheid af van het vooronderzoek, en alle drie raken het pakket. Ze staan in
|
|
|
|
|
§2, §3 en §4.
|
|
|
|
|
|
|
|
|
|
## 1. Wat het is
|
|
|
|
|
|
|
|
|
|
Trezor Suite kan labels en accountnamen synchroniseren tussen apparaten. De server die dat doet heet in de
|
|
|
|
|
interface "custom sync server"; het onderdeel zelf heet **Evolu Relay** en staat in de repo
|
|
|
|
|
`trezor/trezor-suite-sync`.
|
|
|
|
|
`trezor/trezor-suite-sync` (standaardbranch `main`, licentie in `LICENSE.md`, door GitHub geclassificeerd
|
|
|
|
|
als "other").
|
|
|
|
|
|
|
|
|
|
Evolu is een local-first synchronisatielaag: de client houdt zijn eigen kopie bij en de relay is een
|
|
|
|
|
doorgeefluik voor versleutelde wijzigingen. Dat is ook waarom zelf hosten hier kán zonder dat je iets aan
|
|
|
|
|
de beveiliging opgeeft: volgens Trezor is de data client-side end-to-end versleuteld, dus de relay ziet
|
|
|
|
|
niets leesbaars. **Zelf hosten haalt Trezor uit de vergelijking, het verandert de privacygaranties niet.**
|
|
|
|
|
doorgeefluik voor versleutelde wijzigingen. Volgens Trezor is de data client-side end-to-end versleuteld,
|
|
|
|
|
dus de relay ziet niets leesbaars. **Zelf hosten haalt Trezor uit de vergelijking, het verandert de
|
|
|
|
|
privacygaranties niet.**
|
|
|
|
|
|
|
|
|
|
## 2. Wat de repo bevat
|
|
|
|
|
## 2. Eén codebase, vier processen, en een compose die de app niet draait
|
|
|
|
|
|
|
|
|
|
| Onderdeel | Poort | Waarvoor | Hardheid |
|
|
|
|
|
|-|-|-|-|
|
|
|
|
|
| `evolu-relay` | 4000 | de eigenlijke sync-relay, dit is wat we nodig hebben | onderzocht 25-08-2026 |
|
|
|
|
|
| `quota-manager` | 4001 | quota- en betaalserver, noemt een "Payment Server" en een Notion API-spec | onderzocht 25-08-2026 |
|
|
|
|
|
| Postgres | standaard | opslag achter de relay | onderzocht 25-08-2026 |
|
|
|
|
|
| `Dockerfile` en `docker-compose.yaml` | | Trezor containeriseert zelf al | onderzocht 25-08-2026 |
|
|
|
|
|
| `.k8s/` | | Kubernetes-configuratie, voor Umbrel niet relevant | onderzocht 25-08-2026 |
|
|
|
|
|
**Correctie op het vooronderzoek.** Daar stond dat er een `Dockerfile` en een `docker-compose.yaml` in de
|
|
|
|
|
repo staan en dat containeriseren dus "al gedeeltelijk gedaan is door Trezor zelf". Het eerste klopt, het
|
|
|
|
|
tweede niet: **de compose van Trezor draait de relay niet.** Er staan precies twee diensten in, en dat is
|
|
|
|
|
een ontwikkelopstelling:
|
|
|
|
|
|
|
|
|
|
Laatste release genoemd in het vooronderzoek: **v0.1.8, april 2026**. Dat maakt het een jong en actief
|
|
|
|
|
project, en dat is een risico dat verder gaat dan een versienummer: de architectuur kan nog schuiven.
|
|
|
|
|
- `db`: `image: postgres`, ongepind, met `PGDATA: /data/postgres` en `5432:5432` naar buiten;
|
|
|
|
|
- `prometheus`: `network_mode: host`, die `localhost:4003` afloopt.
|
|
|
|
|
|
|
|
|
|
## 3. De vraag die alles bepaalt
|
|
|
|
|
De README bevestigt de bedoeling: `docker compose up` in de ene terminal voor de database, en in de andere
|
|
|
|
|
`yarn start-quota-manager`, `yarn start-evolu-relay` en `yarn start-metrics`. Wat Trezor zélf uitrolt staat
|
|
|
|
|
niet in de compose maar in `.k8s/`, met Kustomize-overlays voor dev en prod.
|
|
|
|
|
|
|
|
|
|
**Is de quota-manager verplicht?** De naam en de beschrijving wijzen op Trezor's eigen gehoste,
|
|
|
|
|
quota-gebaseerde dienst, en voor privégebruik op één Umbrel is dat niet iets wat je wilt draaien. Maar
|
|
|
|
|
"bedoeld voor" is geen "optioneel": als de relay bij het starten een verbinding met de quota-manager
|
|
|
|
|
verwacht, moet hij mee in het pakket.
|
|
|
|
|
**Alle processen komen uit dezelfde codebase en dus uit dezelfde image.** Dat is de belangrijkste
|
|
|
|
|
pakketteerwinst van dit hele onderzoek: je hebt geen drie images nodig, maar één image met per service een
|
|
|
|
|
ander `command`. De `Dockerfile` is `node:24-alpine`, twee fasen, Yarn 4.12.0, met `EXPOSE 4000 4001` en
|
|
|
|
|
`CMD ["yarn", "start"]`. Bij dat `CMD` staat bovenstrooms zelf een commentaar dat het misschien
|
|
|
|
|
`start-quota-manager` of `start-evolu-relay` had moeten zijn, dus reken er niet op dat `yarn start` het
|
|
|
|
|
juiste doet; zet het commando expliciet.
|
|
|
|
|
|
|
|
|
|
Het verschil in uitkomst is groot genoeg om het als eerste te beantwoorden:
|
|
|
|
|
De poorten, met hun standaardwaarde uit `src/config.ts`:
|
|
|
|
|
|
|
|
|
|
- **niet verplicht** → een pakket van twee containers, relay plus Postgres;
|
|
|
|
|
- **wel verplicht** → drie containers, plus de vraag wat de quota-manager zelf nodig heeft. Als dat een
|
|
|
|
|
Notion-sleutel of een betaalprovider is, is dat geen pakketteerprobleem meer maar een blokkade.
|
|
|
|
|
| Proces | Poort | Waarvoor |
|
|
|
|
|
|-|-|-|
|
|
|
|
|
| evolu-relay | 4000 | de sync-relay, dit is wat we nodig hebben |
|
|
|
|
|
| quota-manager | 4001 | quota- en betaalserver |
|
|
|
|
|
| health | 4002 | statuscontrole |
|
|
|
|
|
| metrics | 4003 | Prometheus |
|
|
|
|
|
|
|
|
|
|
Waar je het antwoord vindt zonder te draaien: `.env.sample`, de compose van Trezor zelf, en de plek in de
|
|
|
|
|
broncode van de relay waar de quota-manager wordt aangeroepen. Waar je het antwoord bewijst: hem starten
|
|
|
|
|
zonder.
|
|
|
|
|
In `.env.sample` staan ze alle vier uitgecommentarieerd, dus de standaardwaarden gelden tenzij je ze zet.
|
|
|
|
|
`DATA_DIR` heeft standaard de waarde `data`.
|
|
|
|
|
|
|
|
|
|
## 4. Wat er nog helemaal niet uitgezocht is
|
|
|
|
|
## 3. Is de quota-manager verplicht? Ja, in de praktijk wel
|
|
|
|
|
|
|
|
|
|
Deze vier staan hier omdat ze het pakket bepalen en omdat het vooronderzoek er niets over zegt. Ze zijn
|
|
|
|
|
geen taak (dat zijn ze in **Proefopstelling** en **Umbrelapp**), maar een lezer moet niet denken dat de
|
|
|
|
|
tabel hierboven het hele plaatje is.
|
|
|
|
|
**Dit is de vraag waar het vooronderzoek op hoopte dat het antwoord nee zou zijn.** Dat is het niet, en de
|
|
|
|
|
reden is preciezer dan "de relay heeft de quota-manager nodig".
|
|
|
|
|
|
|
|
|
|
1. **Publiceert Trezor een image in een registry, of is er alleen een Dockerfile?** Dit is de vraag met de
|
|
|
|
|
grootste gevolgen na de quota-manager. Umbrel wil een image gepind op
|
|
|
|
|
`repo:versie@sha256:<digest>`, met `linux/amd64` én `linux/arm64` erin. Alleen een Dockerfile betekent
|
|
|
|
|
dat je zelf bouwt en zelf publiceert, en dan ben je onderhouder van een image geworden.
|
|
|
|
|
2. **Draait het op arm64?** De helft van de Umbrels is een Raspberry Pi. Een image die alleen amd64 kent,
|
|
|
|
|
valt daar om, en dat merk je pas op het apparaat.
|
|
|
|
|
3. **Hoe authenticeert Trezor Suite zich tegen de relay, en over welk protocol praat het?** Dit bepaalt of
|
|
|
|
|
de app achter de inlog van umbrelOS kan staan. Zie het masterplan **Umbrelapp**, §4b.
|
|
|
|
|
4. **Accepteert Trezor Suite een `http://`-adres, of eist het TLS?** Daar hangt het masterplan
|
|
|
|
|
De relay bevat twee controles, in `src/evoluRelay/createEvoluRelay.ts`:
|
|
|
|
|
|
|
|
|
|
- **`isOwnerAllowed()`** vraagt `getLimitsForOwner({ ownerId })` op en staat de eigenaar alleen toe als daar
|
|
|
|
|
iets terugkomt dat niet leeg is;
|
|
|
|
|
- **`isOwnerWithinQuota()`** controleert bij schrijven of `usedBytes + requiredBytes` binnen de limiet
|
|
|
|
|
blijft.
|
|
|
|
|
|
|
|
|
|
De strekking: **een eigenaar zonder rij in de limietentabel wordt geweigerd.** En de quota-manager is
|
|
|
|
|
precies het onderdeel dat die rijen aanmaakt. Zonder hem is de relay dus niet "open", maar dicht voor
|
|
|
|
|
iedereen.
|
|
|
|
|
|
|
|
|
|
Twee dingen die dit relativeren en die het pakket bepalen:
|
|
|
|
|
|
|
|
|
|
- **er is geen HTTP-koppeling tussen de twee.** In `src/config.ts` staat geen URL of hostnaam voor de
|
|
|
|
|
quota-manager, alleen een poort waarop hij zelf luistert. Ze delen de Postgres. Praktisch gevolg: de
|
|
|
|
|
relay hoeft de quota-manager niet te kunnen bereiken, alleen de tabel moet gevuld zijn;
|
|
|
|
|
- **daarmee zijn er twee wegen**, en ze zijn allebei legitiem: de quota-manager meepakketteren en er één
|
|
|
|
|
eigenaar in registreren, of de limietenrij één keer zelf in de database zetten. Het tweede is minder
|
|
|
|
|
bewegende delen, maar het is wél zelf in andermans schema schrijven, en dat breekt bij een migratie.
|
|
|
|
|
|
|
|
|
|
**Wat hier niet is uitgezocht**, en het is de eerste vraag voor wie hier verder gaat: hoe je bij de
|
|
|
|
|
quota-manager een eigenaar registreert, en of daar iets extern voor nodig is. De README verwijst voor de
|
|
|
|
|
API-specificatie naar Notion en voor het uitproberen naar Bruno; er zit een `bruno-collection/` in de repo
|
|
|
|
|
die dat waarschijnlijk laat zien.
|
|
|
|
|
|
|
|
|
|
### De onopgeloste tegenspraak rond dev en prod
|
|
|
|
|
|
|
|
|
|
In `.env.sample` staat `SERVER_ENV="dev" # dev | prod (PROD enables evolu relay authentication)`. Dat
|
|
|
|
|
suggereert dat de controles in dev uit staan, en dat zou een self-hosted relay eenvoudig maken.
|
|
|
|
|
|
|
|
|
|
**Dat is niet terug te vinden in de code die ik gelezen heb.** In `src/config.ts` wordt
|
|
|
|
|
`isDevServer = SERVER_ENV === 'dev'` gezet, en in `createEvoluRelay.ts` bepaalt die vlag alleen het
|
|
|
|
|
logniveau (`debug` tegenover `info`). `createEvoluRelayCompositionRoot.ts` hangt `getLimitsForOwner`
|
|
|
|
|
onvoorwaardelijk in, zonder tak voor dev.
|
|
|
|
|
|
|
|
|
|
Dus: óf het commentaar in `.env.sample` gaat over iets anders dan deze twee controles, óf het is
|
|
|
|
|
achterhaald. **Ga er niet van uit dat `SERVER_ENV=dev` de deur opent**, en ga er ook niet van uit dat hij
|
|
|
|
|
dicht is: dit is precies het soort aanname waar een middag in gaat zitten. Het is met één keer starten te
|
|
|
|
|
meten en dat hoort in **Proefopstelling** fase 2.
|
|
|
|
|
|
|
|
|
|
## 4. Er is geen publieke image, en dat is de grootste consequentie
|
|
|
|
|
|
|
|
|
|
**Tweede correctie op het vooronderzoek**, en de duurste. Trezor bouwt wel een image, maar publiceert hem
|
|
|
|
|
niet ergens waar jij hem kunt halen.
|
|
|
|
|
|
|
|
|
|
Uit `.github/workflows/build-and-push-image.yml`: de image gaat via `aws-actions/amazon-ecr-login` naar een
|
|
|
|
|
**Amazon ECR in eu-central-1**, met de registry-hostnaam als uitvoer van die stap en de naam als
|
|
|
|
|
invoerparameter. Er is geen Docker Hub en geen ghcr in dat werkproces. Onder de namespace `trezor` op
|
|
|
|
|
Docker Hub staat niets dat hierop lijkt.
|
|
|
|
|
|
|
|
|
|
Wat daaruit volgt voor dit project:
|
|
|
|
|
|
|
|
|
|
- **je bouwt en publiceert de image zelf**, of er is geen Umbrel-app. Dat is geen eenmalige handeling maar
|
|
|
|
|
een doorlopende verplichting: bij elke nieuwe versie van Trezor bouw je opnieuw;
|
|
|
|
|
- **`linux/arm64` is geen risico meer.** Datzelfde werkproces bouwt `platforms: linux/amd64,linux/arm64`
|
|
|
|
|
met QEMU, dus de Dockerfile is bovenstrooms bewezen op arm64. Dat was punt 2 van de oude versie van dit
|
|
|
|
|
document en die vraag is hiermee weg;
|
|
|
|
|
- **de licentie wordt nu wél een vraag.** GitHub classificeert `LICENSE.md` als "other". Zolang je alleen
|
|
|
|
|
zelf draait is dat academisch; zodra je een image publiceert, distribueer je hun software. Lees dat
|
|
|
|
|
bestand voordat er iets in een openbaar register komt.
|
|
|
|
|
|
|
|
|
|
## 5. Wat er nog helemaal niet uitgezocht is
|
|
|
|
|
|
|
|
|
|
Deze staan hier omdat ze het pakket bepalen en omdat er in deze ronde geen antwoord op kwam. Ze zijn geen
|
|
|
|
|
taak (dat zijn ze in **Proefopstelling** en **Umbrelapp**).
|
|
|
|
|
|
|
|
|
|
1. **Kan Trezor Suite überhaupt naar een eigen sync-server wijzen, en op welk platform?** Onveranderd de
|
|
|
|
|
goedkoopste weerlegging van het hele project, en niets in deze repo zegt er iets over: dit is de
|
|
|
|
|
serverkant.
|
|
|
|
|
2. **Accepteert Trezor Suite een `http://`-adres, of eist het TLS?** Daar hangt het masterplan
|
|
|
|
|
**Bereikbaarheid** aan.
|
|
|
|
|
3. **Hoe registreer je een eigenaar bij de quota-manager**, en heeft die daarvoor iets extern nodig? Zie
|
|
|
|
|
§3. Begin bij `bruno-collection/`.
|
|
|
|
|
4. **Wat doet `SERVER_ENV=prod` dat `dev` niet doet?** Zie de tegenspraak in §3.
|
|
|
|
|
5. **Wat staat er in `LICENSE.md`?** Zie §4.
|
|
|
|
|
|
|
|
|
|
## 5. Bronnen
|
|
|
|
|
## 6. Bronnen
|
|
|
|
|
|
|
|
|
|
Het vooronderzoek van 25-08-2026 staat ongewijzigd in
|
|
|
|
|
[Vooronderzoek.PLAN.md](../Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md); daar is elke regel
|
|
|
|
|
hierboven vandaan gekomen. De onderliggende bronnen (de repo van Trezor zelf, de release-pagina) zijn nog
|
|
|
|
|
niet opnieuw geraadpleegd; zet de URL erbij zodra dat gebeurt, zoals de andere referenties in deze map dat
|
|
|
|
|
doen.
|
|
|
|
|
Alles hierboven komt uit deze bestanden, geraadpleegd op 25-08-2026:
|
|
|
|
|
|
|
|
|
|
- [`docker-compose.yaml`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/docker-compose.yaml)
|
|
|
|
|
- [`.env.sample`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/.env.sample)
|
|
|
|
|
- [`Dockerfile`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/Dockerfile)
|
|
|
|
|
- [`README.md`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/README.md)
|
|
|
|
|
- [`src/config.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/config.ts)
|
|
|
|
|
- [`src/evoluRelay/createEvoluRelay.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/evoluRelay/createEvoluRelay.ts)
|
|
|
|
|
- [`src/evoluRelay/createEvoluRelayCompositionRoot.ts`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/src/evoluRelay/createEvoluRelayCompositionRoot.ts)
|
|
|
|
|
- [`.github/workflows/build-and-push-image.yml`](https://raw.githubusercontent.com/trezor/trezor-suite-sync/main/.github/workflows/build-and-push-image.yml)
|
|
|
|
|
- Docker Hub, namespace `trezor`: geen image die hierop lijkt
|
|
|
|
|
|
|
|
|
|
Het oorspronkelijke vooronderzoek van 25-08-2026 staat ongewijzigd in
|
|
|
|
|
[Vooronderzoek.PLAN.md](../Plannen/Masterplannen/Archief/Vooronderzoek.PLAN.md). Wat daar niet meer klopt,
|
|
|
|
|
staat hierboven in §2 en §4.
|
|
|
|
|