Dla kogo to jest
Maszyna, która i tak stoi — NAS, Raspberry, mały domowy serwer, skrzynka w szafie, za którą już płacisz — z gigabajtem lub więcej miejsca, którego nie potrzebujesz, w tym samym LAN-ie co node Sensmos. Linux z Pythonem 3, nic do instalowania poza samym skryptem. Root jest potrzebny tylko do zapisania pliku stanu i jednostki systemd.
Kupującym jest zawsze inny właściciel noda: Store to handel wewnętrzny między ludźmi, którzy mają nody, nie publiczna chmura. Z kupującym nie masz do czynienia bezpośrednio; serwer dobiera sprzedawców, przenosi bajty i rozlicza dni.
Co naprawdę trzymasz
Zaszyfrowane bloby. Apka kupującego szyfruje każdy plik na telefonie kluczem wyprowadzonym z podpisu jego portfela; do Ciebie dociera szyfrogram z losowym identyfikatorem. Nie dostajesz klucza, nazwy pliku ani niczego, co wskazuje kupującego. Po Twojej stronie nie ma ścieżki w kodzie, która mogłaby cokolwiek odszyfrować — agent to jeden czytelny plik, sprawdź sam.
Szybki start
Uruchom to na maszynie, która będzie trzymać dane. Raz rozmawia z Twoim nodem po LAN-ie, potem już tylko z serwerem.
# 1 — pobierz agenta (jeden plik, tylko biblioteka standardowa)
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 — sparuj przez noda: jego adres w LAN-ie, jego PIN, etykieta, gdzie trzymać bloby, ile oferujesz
sudo sensmos-store.py --pair 192.168.1.50 --pin 123456 --name "NAS w piwnicy" \
--dir /srv/sensmos-store --capacity 100G
# 3 — zainstaluj i uruchom jako usługę startującą z systemem
sudo sensmos-store.py --install-service
# 4 — patrz
journalctl -u sensmos-store -f
Parowanie wypisuje OK — attachment …, token saved to /etc/sensmos-store.json. W logu usługi widać potem:
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
Od tej chwili jesteś w puli. Pierwszy kupujący pokaże się w logu jako put 7d0b… 18.1 MB …, a po nim put 7d0b… done; dowody jako proof 7d0b… block 3: answered (10 MB hashed).
Adres noda w LAN-ie znajdziesz na liście klientów routera; PIN to PIN noda z apki. Node musi być w chwili parowania online (połączony z serwerem) — przekazuje Twoją prośbę i odpowiedź serwera.
Jak dostajesz zapłatę
| co | warunki |
|---|---|
| cena | 0,1 GALU za GB za kopię na dobę — pakiet zaczyna się od 1 GB i rośnie po 1 GB; 10 GB to 1 GALU dziennie za kopię |
| Twój udział | 70%; 30% wraca do puli nagród |
| płatne za | każdy dzień, w którym pakiet kupującego jest przypięty do Ciebie, a Ty byłeś na miejscu: gdy jego pliki leżą na Twoim dysku, kopia zaliczyła dowód; gdy pakiet jest jeszcze pusty, agent meldował się tego dnia — miejsce jest zarezerwowane tak czy inaczej |
| niepłatne za | dni offline albo z oblanym dowodem; dni, w których kupujący nie miał GALU — taki dzień liczy się kupującemu jako zaległość (wysyłki wstrzymane, po 14 dobach kopie zwolnione), a Ty za niego nie dostajesz zapłaty |
Rozliczenie idzie na serwerze raz na godzinę i księguje każdą trójkę (dzień, kupujący, sprzedawca) raz. GALU ląduje w saldzie Twojego portfela jak każdy inny przychód z usług.
Dowody — skąd serwer wie, że dalej masz plik
Trzy razy dziennie na kopię serwer wybiera losowy blok 10 MB losowego pliku, który trzymasz, i wysyła sól. Twój agent liczy skrót bloku z solą i odpowiada 32 bajtami — żadne dane nie idą, po naszej stronie nic nie jest liczone. Przy dwóch kopiach u dwóch sprzedawców obie odpowiedzi porównywane są ze sobą. Gdy się różnią albo gdy online jest tylko jedna kopia, serwer prosi o surowy blok i sprawdza go z listą skrótów, którą kupujący przysłał przy wysyłce.
Trzy oblane dowody z rzędu i kopia dostaje status zrzuconej: koniec wyzwań, koniec zapłaty. Innej kary nie ma — po prostu przestajesz na niej zarabiać.
Pojemność i dobór sprzedawców
--capacityto Twoja oferta. Nie jest sprawdzana — kto zadeklaruje więcej, niż ma, obleje dowody i nic nie zarobi, i to jest cała kontrola.- Liczy się wolne miejsce w księdze serwera (co u Ciebie umieścił), nie meldunek agenta; raport co pięć minut jest informacyjny.
- Pakiet kupującego zaczyna się od 1 GB i rośnie po gigabajcie u tych samych sprzedawców, więc każdy pełny wolny gigabajt Twojej oferty da się sprzedać.
- Sprzedawcy są szeregowani po wolnym miejscu; dwie kopie kupującego idą zawsze do dwóch różnych właścicieli i nigdy na maszyny samego kupującego.
- Raz wybrany jesteś przypięty: każdy plik, który ten kupujący od tej chwili wyśle, ląduje u Ciebie, a gdy dokupi gigabajt, musi się on zmieścić u Ciebie. Jego pakiet sam nigdzie się nie przenosi. Kupujący może go w każdej chwili zamknąć: jego pliki znikają z Twojego dysku, miejsce jest znów wolne, a opłaty kończą się z tym dniem.
Żeby zmienić ofertę, popraw capacity_b w /etc/sensmos-store.json i zrestartuj usługę. Żeby przestać sprzedawać, zatrzymaj usługę — bez dowodów Twoje kopie zostaną zrzucone w ciągu doby i wypadasz z puli; bloby w --dir możesz skasować.
Sieć
Agent łączy się wychodząco z sensmos.com po TLS i trzyma to jedno połączenie. Żadnego portu przychodzącego, żadnego przekierowania, działa za CGNAT. Transfery, dowody i kasowania przychodzą tym samym połączeniem.
Gdzie to widać
Dziś: w logu usługi. Apka nie pokazuje jeszcze statystyk sprzedawcy; to jest w budowie i ta strona powie, gdy będzie.
Flagi
| flaga | znaczenie |
|---|---|
--pair IP --pin PIN --name "…" | jednorazowe parowanie przez noda |
--dir DIR | gdzie trzymane są bloby (domyślnie /var/lib/sensmos-store) |
--capacity 100G | oferowane miejsce; przyrostki M, G, T |
--install-service | kopia do /usr/local/bin, zapis i włączenie jednostki systemd |
--be URL | inny serwer, do testów |
Jednostka, którą zapisuje:
# /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
Parowanie — token
Agent nie ma własnych poświadczeń. Prosi Twojego noda (PIN-em noda, z wnętrza LAN-u), żeby za niego poręczył; node przekazuje prośbę do serwera, a serwer wydaje token o zakresie store.serve — obsługa sesji Store, nic więcej. Token leży w /etc/sensmos-store.json (prawa 0600) i agent odnawia go sam. Jeden node może poręczyć za najwyżej cztery przystawki. Pełny kontrakt jest na stronie Przystawki i EXT API.
Aktualizacje
Agent nigdy nie aktualizuje się sam: działa jako root w Twoim LAN-ie, a serwer, który mógłby wgrać mu kod, byłby drogą do Twojej sieci. Żeby zaktualizować, powtórz krok 1 i zrestartuj:
sudo curl -fsSL -o /usr/local/bin/sensmos-store.py https://sensmos.com/ext/sensmos-store.py
sudo systemctl restart sensmos-store
Początki
Store jest nowy. Na czas testów pakiet to jedna kopia zamiast dwóch, a pula jest mała. Cena za kopię nie zmieni się, gdy druga kopia wróci. Jeśli postawisz sprzedawcę i przez jakiś czas nic nie przychodzi, to uczciwy stan popytu, nie błąd po Twojej stronie — odezwij się na Discordzie, a powiemy, jak wygląda pula.