Für wen das ist
Eine Maschine, die ohnehin läuft — ein NAS, ein Raspberry, ein kleiner Heimserver, eine Kiste im Rack, die du schon bezahlst — mit einem Gigabyte oder mehr Platz, den du nicht brauchst, im selben LAN wie ein Sensmos-Node. Linux mit Python 3, außer dem Skript selbst nichts zu installieren. Root braucht es nur, um die Zustandsdatei und die systemd-Unit zu schreiben.
Ein Käufer ist immer ein anderer Node-Besitzer: Store ist interner Handel zwischen Leuten, die Nodes betreiben, keine öffentliche Cloud. Mit dem Käufer hast du nie direkt zu tun; das Backend wählt Anbieter, bewegt die Bytes und rechnet die Tage ab.
Was du wirklich hältst
Verschlüsselte Blobs. Die App des Käufers verschlüsselt jede Datei auf dem Telefon mit einem Schlüssel aus der Wallet-Signatur des Käufers; bei dir kommt Chiffrat mit einer zufälligen ID an. Du bekommst keinen Schlüssel, keinen Dateinamen und nichts, was den Käufer erkennen lässt. Auf deiner Seite gibt es keinen Codepfad, der entschlüsseln könnte — der Agent ist eine einzige lesbare Datei, sieh selbst nach.
Schnellstart
Führe das auf der Maschine aus, die die Daten halten wird. Sie spricht einmal über das LAN mit deinem Node und danach nur noch mit dem Backend.
# 1 — Agent holen (eine Datei, nur Standardbibliothek)
sudo curl -fsSL -o /usr/local/bin/sensmos-store.py https://sensmos.com/ext/sensmos-store.py
sudo chmod +x /usr/local/bin/sensmos-store.py
# 2 — über deinen Node koppeln: seine LAN-Adresse, seine PIN, ein Name, Ablageort der Blobs, angebotener Platz
sudo sensmos-store.py --pair 192.168.1.50 --pin 123456 --name "NAS im Keller" \
--dir /srv/sensmos-store --capacity 100G
# 3 — als Dienst installieren und starten, überlebt Neustarts
sudo sensmos-store.py --install-service
# 4 — zusehen
journalctl -u sensmos-store -f
Das Koppeln gibt OK — attachment …, token saved to /etc/sensmos-store.json aus. Im Dienstprotokoll steht danach:
21:14:02 store agent store-py/0.1 dir=/srv/sensmos-store capacity=100 GB used=0.00 GB
21:14:03 connected as 3f9a1c2e
Ab diesem Moment bist du im Pool. Der erste Käufer erscheint im Protokoll als put 7d0b… 18.1 MB …, gefolgt von put 7d0b… done, Beweise als proof 7d0b… block 3: answered (10 MB hashed).
Die LAN-Adresse des Nodes steht in der Client-Liste deines Routers; die PIN ist die Node-PIN aus der App. Der Node muss beim Koppeln online sein (mit dem Backend verbunden) — er reicht deine Anfrage und die Antwort des Backends weiter.
Wie du bezahlt wirst
| was | Bedingungen |
|---|---|
| Preis | 0,1 GALU pro GB pro Kopie pro Tag — ein Paket beginnt bei 1 GB und wächst um je 1 GB; 10 GB sind 1 GALU am Tag pro Kopie |
| dein Anteil | 70%; 30% fließen zurück in den Belohnungspool |
| bezahlt für | jeden Tag, an dem das Paket eines Käufers bei dir festgelegt ist und du da warst: liegen seine Dateien auf deiner Platte, hat deine Kopie einen Beweis bestanden; ist das Paket noch leer, hat sich dein Agent an dem Tag gemeldet — der Platz ist so oder so reserviert |
| nicht bezahlt für | Tage offline oder mit fehlgeschlagenem Beweis; Tage, an denen der Käufer kein GALU hatte — der Tag zählt für den Käufer als Rückstand (Uploads pausiert, Kopien nach 14 unbezahlten Tagen freigegeben), und du wirst dafür nicht bezahlt |
Die Abrechnung läuft einmal pro Stunde im Backend und bucht jedes Tripel (Tag, Käufer, Anbieter) genau einmal. GALU landet im Guthaben deiner Wallet wie jede andere Diensteinnahme.
Beweise — woher das Backend weiß, dass du die Datei noch hast
Dreimal am Tag pro Kopie wählt das Backend einen zufälligen 10-MB-Block einer zufälligen Datei, die du hältst, und schickt ein Salz. Dein Agent hasht den Block mit dem Salz und antwortet mit 32 Bytes — keine Daten bewegen sich, auf unserer Seite wird nichts gerechnet. Bei zwei Kopien bei zwei Anbietern werden die beiden Antworten miteinander verglichen. Weichen sie ab oder ist nur eine Kopie online, fordert das Backend den rohen Block an und prüft ihn gegen die Hash-Liste, die der Käufer beim Hochladen mitgegeben hat.
Drei fehlgeschlagene Beweise in Folge, und die Kopie gilt als fallen gelassen: keine Herausforderungen mehr, keine Bezahlung mehr. Eine weitere Strafe gibt es nicht — du verdienst an ihr einfach nichts mehr.
Kapazität und wie Anbieter gewählt werden
--capacityist dein Angebot. Es wird nicht geprüft — wer mehr deklariert, als er hat, scheitert an den Beweisen und verdient nichts, das ist die ganze Kontrolle.- Es zählt der freie Platz im eigenen Buch des Backends (was es bei dir abgelegt hat), nicht die Meldung deines Agenten; der Bericht alle fünf Minuten ist informativ.
- Das Paket eines Käufers beginnt bei 1 GB und wächst gigabyteweise bei denselben Anbietern, also lässt sich jedes volle freie Gigabyte deines Angebots verkaufen.
- Anbieter werden nach freiem Platz gereiht; die zwei Kopien eines Käufers gehen immer an zwei verschiedene Besitzer und nie auf die Maschinen des Käufers selbst.
- Einmal gewählt bist du festgelegt: jede Datei, die dieser Käufer ab dann hochlädt, landet bei dir, und kauft er ein Gigabyte dazu, muss es bei dir passen. Sein Paket zieht von selbst nirgendwohin. Ein Käufer kann es jederzeit schließen: seine Dateien werden von deiner Platte gelöscht, der Platz ist wieder frei und die Zahlungen enden mit diesem Tag.
Um dein Angebot zu ändern, bearbeite capacity_b in /etc/sensmos-store.json und starte den Dienst neu. Um aufzuhören, stoppe den Dienst — ohne Beweise werden deine Kopien binnen eines Tages fallen gelassen und du verlässt den Pool; die Blobs in --dir darfst du löschen.
Netzwerk
Der Agent wählt sich ausgehend über TLS bei sensmos.com ein und hält diese eine Verbindung. Kein eingehender Port, keine Portweiterleitung, funktioniert hinter CGNAT. Übertragungen, Beweise und Löschungen kommen alle über dieselbe Verbindung.
Wo du es siehst
Heute: im Dienstprotokoll. Die App zeigt noch keine Anbieterstatistik; das wird gebaut, und diese Seite sagt es, sobald es da ist.
Flags
| Flag | Bedeutung |
|---|---|
--pair IP --pin PIN --name "…" | einmaliges Koppeln über einen Node |
--dir DIR | wo die Blobs liegen (Standard /var/lib/sensmos-store) |
--capacity 100G | angebotener Platz; Suffixe M, G, T |
--install-service | Kopie nach /usr/local/bin, systemd-Unit schreiben und aktivieren |
--be URL | anderes Backend, zum Testen |
Die Unit, die er schreibt:
# /etc/systemd/system/sensmos-store.service
[Unit]
Description=Sensmos store agent
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/python3 /usr/local/bin/sensmos-store.py
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
Koppeln — das Token
Der Agent hat keine eigenen Zugangsdaten. Er bittet deinen Node (mit der Node-PIN, aus dem LAN heraus), für ihn zu bürgen; der Node reicht die Anfrage an das Backend weiter, und das Backend stellt ein Token mit dem Scope store.serve aus — Store-Sitzungen bedienen, sonst nichts. Das Token liegt in /etc/sensmos-store.json (Modus 0600), der Agent erneuert es selbst. Ein Node kann für bis zu vier Anhänge bürgen. Der vollständige Vertrag steht unter Anhänge & die EXT-API.
Updates
Der Agent aktualisiert sich nie selbst: er läuft als root in deinem LAN, und ein Server, der ihm Code schicken könnte, wäre ein Weg in dein Netz. Zum Aktualisieren Schritt 1 wiederholen und neu starten:
sudo curl -fsSL -o /usr/local/bin/sensmos-store.py https://sensmos.com/ext/sensmos-store.py
sudo systemctl restart sensmos-store
Anfangszeit
Store ist neu. Während der Tests ist ein Paket eine Kopie statt zwei, und der Pool ist klein. Der Preis pro Kopie ändert sich nicht, wenn die zweite Kopie zurückkommt. Wenn du einen Anbieter aufsetzt und eine Weile nichts ankommt, ist das der ehrliche Stand der Nachfrage, kein Fehler auf deiner Seite — sag auf Discord Hallo, und wir sagen dir, wie der Pool aussieht.