98 lines
4.4 KiB
Markdown
98 lines
4.4 KiB
Markdown
# V4.4 — Neural Place
|
||
|
||
> **Hinweis:** Ab V4.5 wird die Place-Ökonomie zusätzlich durch Draw-, Aktivzeit- und Admin-Rewards erweitert. Siehe `V4.5_PLACE_REWARD_ECONOMY.md`.
|
||
|
||
Neural Place ergänzt den Hunt um eine gemeinsame, globale Pixel-Leinwand nach dem Grundprinzip von r/place. Anders als bei einem zeitbasierten Cooldown werden Placements ausschließlich durch echten Fortschritt im Hunt finanziert.
|
||
|
||
## Spielökonomie
|
||
|
||
- Solange Neural Place aktiviert ist, erzeugt jeder **dauerhaft gespeicherte Highscore-Fortschritt** eines Spielers Place-Punkte.
|
||
- Standard: **+1,00 Score-Prozentpunkte = 100 Place-Punkte**.
|
||
- Standard: **1 Placement = 100 Place-Punkte**.
|
||
- Kleine Score-Verbesserungen werden intern in Milli-Punkten gesammelt und gehen daher nicht durch Rundung verloren.
|
||
- Auch das Übermalen eines bereits belegten Pixels ist ein Placement und kostet Punkte.
|
||
- Es gibt **keinen Zeit-Cooldown**. Die knappe Ressource ist Hunt-Fortschritt.
|
||
- Vor dem Upgrade bereits vorhandene Scores werden absichtlich **nicht rückwirkend** vergütet. Punkte entstehen ab V4.4 bei neuen Verbesserungen.
|
||
|
||
Die Werte sind unter **Admin → RUNTIME** bzw. per Defaults konfigurierbar. Die Canvas darf erweitert werden; eine Verkleinerung wird abgewiesen, sobald dadurch bestehende Pixel außerhalb der neuen Grenzen lägen. Nach einer Größenänderung sollten offene `/place`-Seiten neu geladen werden:
|
||
|
||
```text
|
||
DEFAULT_PLACE_ENABLED=1
|
||
DEFAULT_PLACE_WIDTH=256
|
||
DEFAULT_PLACE_HEIGHT=256
|
||
DEFAULT_PLACE_POINTS_PER_SCORE=100
|
||
DEFAULT_PLACE_PIXEL_COST=100
|
||
```
|
||
|
||
## Hosted Worker / Account-Zuordnung
|
||
|
||
Neural Place verwendet die bestehende `identity_delegations`-Zuordnung. Erzielt ein mit einem Konto verknüpfter Hosted Worker eine echte Score-Steigerung, werden die Place-Punkte atomar dem Owner-Wallet gutgeschrieben. Der Worker bleibt im Fortschritts-Audit als Quelle sichtbar.
|
||
|
||
Damit können eigene Browser-/CLI-Fortschritte und Fortschritte mehrerer verknüpfter Worker dasselbe Place-Wallet finanzieren, ohne Worker-Identitäten zusammenzulegen.
|
||
|
||
## Konsistenz und Missbrauchsschutz
|
||
|
||
Die Punktevergabe läuft **in derselben SQLite-Transaktion wie die persistierte Score-Verbesserung**. Dadurch gilt:
|
||
|
||
- kein Reward für verlorene / nicht verbessernde Tipps,
|
||
- kein Reward für Lotterie-Tipps, die nicht ausgewertet wurden,
|
||
- kein doppelter Reward bei Retry oder parallelem Request,
|
||
- Score und Place-Punkte können nicht auseinanderlaufen,
|
||
- Worker-Owner-Auflösung erfolgt zum Zeitpunkt der erfolgreichen Verbesserung.
|
||
|
||
Die globale Leinwand verwendet eine monotone `revision`. Jedes Placement schreibt den aktuellen Pixelzustand und zusätzlich einen unveränderlichen Event-Eintrag. Das ermöglicht Live-Synchronisierung und Audit-Historie.
|
||
|
||
## Webinterface
|
||
|
||
`/place` ist die neue responsive Place-Oberfläche mit:
|
||
|
||
- zoombarer und verschiebbarer globaler Canvas,
|
||
- 32-Farben-Palette,
|
||
- Pixel-Auswahl mit aktuellem Besitzer und Revision,
|
||
- Wallet für Balance, erhaltene/ausgegebene Punkte und verfügbare Pixel,
|
||
- Anzeige der verknüpften Worker,
|
||
- Liste der letzten Hunt→Place-Vergütungen,
|
||
- Live-Placement-Feed,
|
||
- eigenem Place-WebSocket plus HTTP-Fallback-Synchronisierung,
|
||
- Desktop-, Tablet- und Mobile-Layout.
|
||
|
||
Die Canvas kann öffentlich gelesen werden. Für das Setzen eines Pixels ist die normale kryptografische Neural-Hunt-Identität/JWT-Sitzung erforderlich.
|
||
|
||
## Persistenz
|
||
|
||
Neue SQLite-Tabellen:
|
||
|
||
- `place_wallets` – Saldo, Lifetime-Einnahmen/-Ausgaben, Placement-Zähler,
|
||
- `place_state` – globale Canvas-Revision,
|
||
- `place_pixels` – aktueller Zustand jedes belegten Pixels,
|
||
- `place_pixel_events` – unveränderliche Placement-Historie,
|
||
- `place_progress_events` – Audit der Hunt→Place-Punktevergabe.
|
||
|
||
Die bestehende Admin-Profilbereinigung schützt ab V4.4 zusätzlich Identitäten mit verdientem Place-Wert oder Placements, damit ein Inaktivitäts-Cleanup keine erspielte Place-Ökonomie löscht.
|
||
|
||
## Neue HTTP-/WebSocket-Endpunkte
|
||
|
||
```text
|
||
GET /api/public/place
|
||
GET /api/public/place/changes?after=<revision>
|
||
GET /api/place/ws
|
||
GET /api/place/me (User-JWT)
|
||
POST /api/place/pixel (User-JWT)
|
||
```
|
||
|
||
Placement-Body:
|
||
|
||
```json
|
||
{"x": 12, "y": 34, "color_index": 15}
|
||
```
|
||
|
||
## Betrieb
|
||
|
||
Für große öffentliche Installationen kann die maximale Zahl der Place-WebSockets separat begrenzt werden:
|
||
|
||
```text
|
||
WS_MAX_PLACE_CONNECTIONS=1500
|
||
```
|
||
|
||
Die Place-Leinwand bleibt vollständig in SQLite persistent; ein Server-Neustart verliert weder Wallets noch Canvas noch History.
|