IPFS brez bolečin (vendar to ni točno)

IPFS brez bolečin (vendar to ni točno)

Kljub temu, da je bil Habré že več kot en članek o IPFS.

Takoj bom pojasnil, da nisem strokovnjak na tem področju, vendar sem že večkrat pokazal zanimanje za to tehnologijo, vendar je poskus igranja z njo pogosto povzročal nekaj bolečin. Danes sem spet začel eksperimentirati in dobil nekaj rezultatov, ki bi jih rad delil. Na kratko bo opisan postopek namestitve IPFS in nekatere funkcije (vse je bilo narejeno na ubuntu, na drugih platformah tega nisem preizkusil).

Če ste zamudili, kaj je IPFS, je tukaj nekaj podrobnosti napisano: habr.com/en/post/314768

Namestitev

Zaradi čistosti poskusa predlagam, da ga takoj namestite na kakšen zunanji strežnik, saj bomo upoštevali nekatere pasti pri delu v lokalnem načinu in na daljavo. Potem se po želji dolgo ne bo porušilo, ni veliko.

Namestite go

Uradna dokumentacija
Oglejte si trenutno različico na golang.org/dl

Opomba: IPFS je bolje namestiti v imenu uporabnika, ki naj bi ga najpogosteje uporabljal. Dejstvo je, da bomo spodaj obravnavali možnost namestitve prek FUSE in obstajajo tankosti.

cd ~
curl -O https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz
tar xvf go1.12.9.linux-amd64.tar.gz
sudo chown -R root:root ./go
sudo mv go /usr/local
rm go1.12.9.linux-amd64.tar.gz

Nato morate posodobiti okolje (več podrobnosti tukaj: golang.org/doc/code.html#GOPATH).

echo 'export GOPATH=$HOME/work' >> ~/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc

Preverjanje, ali je go nameščen

go version

Namestite IPFS

Najbolj mi je bil všeč način namestitve posodobitev ipfs.

Namestite ga z ukazom

go get -v -u github.com/ipfs/ipfs-update

Po tem lahko zaženete naslednje ukaze:

ipfs-update različice - za ogled vseh različic, ki so na voljo za prenos.
različica posodobitve ipfs - za ogled trenutno nameščene različice (dokler nimamo nameščenega IPFS, ne bo nobene).
ipfs-update namestite najnovejšo - namestite najnovejšo različico IPFS. Namesto najnovejše lahko določite katero koli želeno različico s seznama razpoložljivih.

Namestitev ipfs

ipfs-update install latest

Preverite

ipfs --version

Neposredno z namestitvijo na splošno vse.

Zaženi IPFS

Inicializacija

Najprej morate izvesti inicializacijo.

ipfs init

V odgovor boste prejeli nekaj takega:

 ipfs init
initializing IPFS node at /home/USERNAME/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmeCWX1DD7HnXXXXXXXXXXXXXXXXXXXXXXXXxxx
to get started, enter:
	ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Lahko zaženete predlagani ukaz

ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Rezultat

Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. Use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------

Check out some of the other files in this directory:

  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes

Tukaj se po mojem mnenju začne zanimivo. Fantje v fazi namestitve že začenjajo uporabljati lastne tehnologije. Predlagana zgoščena vrednost QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv ni ustvarjena posebej za vas, ampak je vključena v izdajo. To pomeni, da so pred izdajo pripravili pozdravno besedilo, ga vlili v IPFS in dodali naslov namestitvenemu programu. Mislim, da je zelo kul. In to datoteko (natančneje, celotno mapo) si lahko zdaj ogledate ne le lokalno, ampak tudi na uradnem prehodu ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Hkrati ste lahko prepričani, da se vsebina mape ni v ničemer spremenila, saj če bi se spremenila, bi se spremenil tudi hash.

Mimogrede, v tem primeru ima IPFS nekaj podobnosti s strežnikom za nadzor različic. Če spremenite izvorne datoteke mape in znova prenesete mapo v IPFS, bo prejela nov naslov. Hkrati pa stara mapa ne bo šla nikamor kar tako in bo na voljo na prejšnjem naslovu.

Neposredni zagon

ipfs daemon

Prejeti bi morali takšen odgovor:

ipfs daemon
Initializing daemon...
go-ipfs version: 0.4.22-
Repo version: 7
System version: amd64/linux
Golang version: go1.12.7
Swarm listening on /ip4/x.x.x.x/tcp/4001
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

Odpiranje vrat v internet

Bodite pozorni na ti dve vrstici:

WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080

Zdaj, če ste IPFS namestili lokalno, boste dostopali do vmesnikov IPFS na lokalnih naslovih in vse vam bo na voljo (npr. localhost:5001/webui/). Ko pa je nameščen na zunanjem strežniku, so prehodi privzeto zaprti za internet. Dva prehoda:

  1. webui skrbnik (github) na vratih 5001.
  2. Zunanji API na vratih 8080 (samo za branje).

Zaenkrat je mogoče za poskuse odpreti oba vrata (5001 in 8080), na bojnem strežniku pa je seveda treba vrata 5001 zapreti s požarnim zidom. Obstajajo tudi vrata 4001, ki so potrebna, da vas lahko drugi vrstniki najdejo. Pustiti ga je treba odprtega za zunanje zahteve.

Odprite ~/.ipfs/config za urejanje in v njem poiščite te vrstice:

"Addresses": {
  "Swarm": [
    "/ip4/0.0.0.0/tcp/4001",
    "/ip6/::/tcp/4001"
  ],
  "Announce": [],
  "NoAnnounce": [],
  "API": "/ip4/127.0.0.1/tcp/5001",
  "Gateway": "/ip4/127.0.0.1/tcp/8080"
}

Spremenite 127.0.0.1 v ip vašega strežnika in shranite datoteko, nato znova zaženite ipfs (zaustavite izvajajoči se ukaz s Ctrl+C in ga znova zaženite).

Moral bi dobiti

...
WebUI: http://ip_вашего_сервера:5001/webui
Gateway (readonly) server listening on /ip4/ip_вашего_сервера/tcp/8080

Zdaj bi morali biti na voljo zunanji vmesniki.

Preverite

http://домен_или_ip_сервера:8080/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

Zgornja datoteka readme bi se morala odpreti.

http://домен_или_ip_сервера:5001/webui/

Odpreti bi se moral spletni vmesnik.

Če webui deluje za vas, potem lahko nastavitve IPFS spremenite neposredno v njem, vključno z ogledom statistike, vendar bom spodaj obravnaval možnosti konfiguracije neposredno prek konfiguracijske datoteke, kar na splošno ni kritično. Bolje je, da si natančno zapomnite, kje je konfiguracija in kaj storiti z njo, drugače bo, če spletna stran ne deluje, težje.

Nastavitev spletnega vmesnika za delo z vašim strežnikom

Tu je prva past, ki je trajala slabe tri ure.

Če ste IPFS namestili na zunanji strežnik, vendar IPFS niste namestili ali zagnali lokalno, bi morali ob obisku /webui v spletnem vmesniku videti napako povezave:

IPFS brez bolečin (vendar to ni točno)

Dejstvo je, da webui po mojem mnenju deluje zelo dvoumno. Najprej se poskuša povezati z API-jem strežnika, kjer je vmesnik odprt (na podlagi naslova v brskalniku, seveda). in če tam ne deluje, se poskuša povezati z lokalnim prehodom. In če imate IPFS, ki teče lokalno, potem vam bo webui dobro delal, samo vi boste delali z lokalnim IPFS in ne zunanjim, čeprav ste odprli webui na zunanjem strežniku. Nato naložite datoteke, vendar jih iz neznanega razloga ne vidite kar tako na zunanjem strežniku ...

In če se ne izvaja lokalno, dobimo napako pri povezavi. V našem primeru je napaka najverjetneje posledica CORS-a, kar nakazuje tudi webui, ki predlaga dodajanje konfiguracije.

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["http://ip_вашего сервера:5001", "http://127.0.0.1:5001", "https://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST"]'

Pravkar sem registriral nadomestni znak

ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'

Dodane glave najdete v istem ~/.ipfs/config. V mojem primeru je

  "API": {
    "HTTPHeaders": {
      "Access-Control-Allow-Origin": [
        "*"
      ]
    }
  },

Ponovno zaženemo ipfs in vidimo, da se je webui uspešno povezal (v vsakem primeru bi se moral, če ste odprli prehode za zahteve od zunaj, kot je opisano zgoraj).

Zdaj lahko naložite mape in datoteke neposredno prek spletnega vmesnika, pa tudi ustvarite lastne mape.

Namestitev datotečnega sistema FUSE

Tukaj je zelo zanimiva funkcija.

Datoteke (pa tudi mape) lahko dodajamo ne samo prek spletnega vmesnika, ampak tudi neposredno v terminalu, npr.

ipfs add test -r
added QmfYuz2gegRZNkDUDVLNa5DXzKmxxxxxxxxxx test/test.txt
added QmbnzgRVAP4fL814h5mQttyqk1aURxxxxxxxxxxxx test

Zadnja zgoščena vrednost je zgoščena vrednost korenske mape.

Z uporabo tega hasha lahko odpremo mapo na poljubnem vozlišču ipfs (ki lahko najde naše vozlišče in pridobi vsebino), lahko v spletnem vmesniku na vratih 5001 ali 8080 ali pa lokalno prek ipfs.

ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt

Vendar jo lahko še vedno odprete kot običajno mapo.

Ustvarimo dve mapi v korenu in podelimo pravice do njih našemu uporabniku.

sudo mkdir /ipfs /ipns
sudo chown USERNAME /ipfs /ipns

in znova zaženite ipfs z zastavico --mount

ipfs daemon --mount

Mape lahko ustvarite na drugih mestih in določite pot do njih prek parametrov demona ipfs -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path

Zdaj je branje iz te mape nekoliko nenavadno.

ls -la /ipfs
ls: reading directory '/ipfs': Operation not permitted
total 0

To pomeni, da ni neposrednega dostopa do korena te mape. Vsebino pa lahko dobite, če poznate hash.

ls -la /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx
total 0
-r--r--r-- 1 root root 10 Aug 31 07:03 test.txt

cat /ipfs/QmbnzgRVAP4fL814h5mQttyqxxxxxxxxxxxxxxxxx/test.txt 
test
test

Hkrati deluje tudi samodokončanje znotraj mape, ko je določena pot.

Kot sem rekel zgoraj, obstajajo tankosti s takšno montažo: privzeto so nameščene mape FUSE na voljo samo trenutnemu uporabniku (celo root ne bo mogel brati iz takšne mape, da ne omenjam drugih uporabnikov v sistemu). Če želite, da so te mape na voljo drugim uporabnikom, morate v konfiguraciji spremeniti "FuseAllowOther": false v "FuseAllowOther": true. A to še ni vse. Če zaženete IPFS kot root, je vse v redu. In če v imenu navadnega uporabnika (tudi sudo), boste dobili napako

mount helper error: fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf

V tem primeru morate urediti /etc/fuse.conf tako, da odkomentirate vrstico #user_allow_other.

Po tem znova zaženite ipfs.

Znane težave z FUSE

Več kot enkrat je bila opažena težava, da po ponovnem zagonu ipfs z namestitvijo (in morda v drugih primerih) postaneta točki namestitve /ipfs in /ipns nedostopni. Ni dostopa do njih in ls -la /ipfs pokaže ???? na seznamu pravic.

Našel to rešitev:

fusermount -z -u /ipfs
fusermount -z -u /ipns

Nato znova zaženite ipfs.

Dodajanje storitve

Seveda je delovanje v terminalu primerno samo za začetne teste. V bojnem načinu bi se moral demon samodejno zagnati ob zagonu sistema.

V imenu sudo ustvarite datoteko /etc/systemd/system/ipfs.service in vanjo napišite:

[Unit]
Description=IPFS Daemon
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/home/USERNAME/work/bin/ipfs daemon --mount
User=USERNAME
Restart=always

[Install]
WantedBy=multi-user.target

UPORABNIŠKO IME je seveda treba zamenjati z vašim uporabnikom (in morda bo celotna pot do programa ipfs za vas drugačna (navesti morate celotno pot)).

Aktiviramo storitev.

sudo systemctl enable ipfs.service

Zaženemo storitev.

sudo service ipfs start

Preverjanje statusa storitve.

sudo service ipfs status

Zaradi čistosti poskusa bo mogoče v prihodnosti znova zagnati strežnik, da preverimo, ali se ipfs uspešno samodejno zažene.

Dodajanje nam znanih praznikov

Razmislite o situaciji, ko imamo vozlišča IPFS nameščena na zunanjem strežniku in lokalno. Na zunanjem strežniku dodamo neko datoteko in jo poskušamo dobiti preko IPFS lokalno po CID. Kaj se bo zgodilo? Seveda lokalni strežnik najverjetneje ne ve ničesar o našem zunanjem strežniku in bo preprosto poskušal najti datoteko po CID tako, da bo "vprašal" vse vrstnike IPFS, ki so mu na voljo (s katerimi se je že uspel "seznaniti"). Ti bodo vprašali druge. In tako naprej, dokler se datoteka ne najde. Pravzaprav se isto zgodi, ko poskušamo dobiti datoteko prek uradnega prehoda ipfs.io. Če imate srečo, bo datoteka najdena v nekaj sekundah. In če ne, ga ne bo mogoče najti niti v nekaj minutah, kar močno vpliva na udobje dela. Vemo pa, kje se bo ta datoteka najprej pojavila. Zakaj torej našemu lokalnemu strežniku takoj ne rečemo "Najprej poišči tam"? Očitno je to mogoče storiti.

1. Gremo na oddaljeni strežnik in pogledamo konfiguracijo ~/.ipfs/config

"Identity": {
    "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuxxxxxxxxxxxxxxxx",

2. Zaženite sudo service ipfs status in v njem poiščite vnose Swarm, na primer:

Swarm announcing /ip4/ip_вашего_сервера/tcp/4001

3. Iz tega dodamo splošni naslov v obliki "/ip4/ip_vaš_strežnik/tcp/4001/ipfs/$PeerID".

4. Zaradi zanesljivosti bomo poskušali ta naslov dodati enakovrednim prek našega lokalnega spletnega vmesnika.

IPFS brez bolečin (vendar to ni točno)

5. Če je vse v redu, odprite lokalno konfiguracijo ~ / .ipfs / config, v njej poiščite »Bootstrap«: [...
in najprej dodajte prejeti naslov v polje.

Znova zaženite IPFS.

Zdaj pa dodamo datoteko na zunanji strežnik in jo poskusimo zahtevati na lokalnem. Moral bi leteti hitro.

Toda ta funkcionalnost še ni stabilna. Kolikor razumem, tudi če podamo naslov vrstnika v Bootstrapu, ipfs med delovanjem spremeni seznam aktivnih povezav z vrstniki. Vsekakor potekajo pogovori o tem in želje glede možnosti določitve stalnih praznikov tukaj in zdi se kot domnevno dodajte nekaj funkcij [e-pošta zaščitena]+

Seznam trenutnih vrstnikov si lahko ogledate v webui in terminalu.

ipfs swarm peers

In tu in tam lahko svoj praznik dodate ročno.

ipfs swarm connect "/ip4/ip_вашего_сервера/tcp/4001/ipfs/$PeerID"

Dokler ta funkcionalnost ni izboljšana, lahko napišete orodje za preverjanje povezave z želenim vrstnikom in, če ni, za dodajanje povezave.

Obrazložitev

Med tistimi, ki že poznajo IPFS, obstajajo argumenti za in proti IPFS. V glavnem, včeraj razprava in me je spodbudil, da se znova poglobim v IPFS. In glede zgoraj omenjene razprave: ne morem reči, da močno nasprotujem kakršnim koli argumentom tistih, ki so govorili (ne strinjam se le s tem, da programer in pol uporablja IPFS). Na splošno imata oba na svoj način prav (zlasti komentar o čekih ti da misliti). Če pa zavržemo moralno in pravno oceno, kdo bo dal tehnično oceno te tehnologije? Osebno imam nekakšen notranji občutek, da je "to treba narediti nedvoumno, ima določene možnosti." Toda zakaj točno, ni jasne formulacije. Na primer, če pogledate obstoječa centralizirana orodja, so v mnogih pogledih daleč pred nami (stabilnost, hitrost, vodljivost itd.). Kljub temu imam eno misel, ki se zdi smiselna in ki jo brez takšnih decentraliziranih sistemov težko uresničimo. Seveda preveč zamahujem, vendar bi se izrazil takole: spremeniti je treba princip širjenja informacij na internetu.

Naj pojasnim. Če dobro pomislite, imamo zdaj informacije razdeljene po načelu "Upam, da jih bo tisti, ki sem jim jih dal, varoval in jih ne bodo izgubili ali prejeli tisti, ki jim niso bile namenjene." Kot primer je enostavno upoštevati različne poštne storitve, shrambe v oblaku itd. In kaj na koncu dobimo? Na vozlišču Habré Informacijska varnost je na prvi vrsti in skoraj vsak dan prejmemo novice o drugem globalnem uhajanju. Načeloma so vse najbolj zanimive stvari navedene v <ironija> čudovito Članek Poletja je skoraj konec. Neodkritih podatkov skoraj ni več. To pomeni, da glavni internetni velikani postajajo večji, kopičijo vedno več informacij in takšna uhajanja so neke vrste informacijske atomske eksplozije. To se še nikoli ni zgodilo in tukaj je spet. Obenem, čeprav mnogi razumejo, da obstajajo tveganja, bodo svoje podatke še naprej zaupali tretjim podjetjem. Prvič, alternative ni veliko, drugič pa obljubljajo, da so zakrpali vse luknje in se to ne bo nikoli več ponovilo.

Kakšno možnost vidim? Zdi se mi, da bi bilo treba podatke na začetku razširjati odprto. Toda odprtost v tem primeru ne pomeni, da mora biti vse lahko berljivo. Govorim o odprtosti shranjevanja in distribucije, ne pa popolne odprtosti v branju. Predvidevam, da je treba informacije distribuirati z javnimi ključi. Navsezadnje je princip javnih / zasebnih ključev že star, skoraj kot internet. Če podatki niso zaupni in so namenjeni širokemu krogu, se takoj razkrijejo z javnim ključem (vendar še vedno v šifrirani obliki, prav vsak jih lahko dešifrira z razpoložljivim ključem). In če ne, potem je postavljen brez javnega ključa, sam ključ pa se prenese na tisto, kar bi moralo imeti dostop do teh informacij. Hkrati bi moral imeti tisti, ki bi ga moral prebrati, samo ključ, kje dobiti te podatke, pa ne bi smel res leteči - le potegne jih iz omrežja (to je nov princip distribucije po vsebini, ne po naslov).

Tako bodo morali napadalci za množični napad pridobiti ogromno število zasebnih ključev, tega pa verjetno ne bo mogoče storiti na enem mestu. Ta naloga je po mojem mnenju težja od vdora v določeno storitev.

In tu je še ena težava zaključena: potrditev avtorstva. Zdaj lahko na internetu najdete veliko citatov naših prijateljev. Toda kje je zagotovilo, da so jih napisali oni? Zdaj, če bi vsak tak zapis spremljal digitalni podpis, bi bilo veliko lažje. In ni pomembno, kje so te informacije, glavna stvar je podpis, ki ga je seveda težko ponarediti.

In tukaj je zanimivo: IPFS že nosi orodja za šifriranje (navsezadnje je zgrajen na tehnologiji veriženja blokov). Zasebni ključ je takoj določen v konfiguraciji.

  "Identity": {
    "PeerID": "QmeCWX1DD7HnPSuMHZSh6tFuMxxxxxxxxxxxxxx",
    "PrivKey": "CAASqAkwggSkAgEAAoIBAQClZedVmj8JkPvT92sGrNIQmofVF3ne8xSWZIGqkm+t9IHNN+/NDI51jA0MRzpBviM3o/c/Nuz30wo95vWToNyWzJlyAISXnUHxnVhvpeJAbaeggQRcFxO9ujO9DH61aqgN1m+JoEplHjtc4KS5
pUEDqamve+xAJO8BWt/LgeRKA70JN4hlsRSghRqNFFwjeuBkT1kB6tZsG3YmvAXJ0o2uye+y+7LMS7jKpwJNJBiFAa/Kuyu3W6PrdOe7SqrXfjOLHQ0uX1oYfcqFIKQsBNj/Fb+GJMiciJUZaAjgHoaZrrf2b/Eii3z0i+QIVG7OypXT3Z9JUS60
KKLfjtJ0nVLjAgMBAAECggEAZqSR5sbdffNSxN2TtsXDa3hq+WwjPp/908M10QQleH/3mcKv98FmGz65zjfZyHjV5C7GPp24e6elgHr3RhGbM55vT5dQscJu7SGng0of2bnzQCEw8nGD18dZWmYJsE4rUsMT3wXxhUU4s8/Zijgq27oLyxKNr9T7
2gxqPCI06VTfMiCL1wBBUP1wHdFmD/YLJwOjV/sVzbsl9HxqzgzlDtfMn/bJodcURFI1sf1e6WO+MyTc3.................

Nisem strokovnjak za varnost in ne morem natančno vedeti, kako ga pravilno uporabiti, vendar se mi zdi, da se ti ključi uporabljajo na ravni izmenjave med vozlišči IPFS. In tudi js-ipfs in primeri projektov, kot je npr orbit-dbna katerem deluje orbit.klepet. To pomeni, da je teoretično vsaka naprava (mobilna in ne samo) zlahka opremljena s svojimi stroji za šifriranje in dešifriranje. V tem primeru ostane le, da vsak poskrbi za shranjevanje svojih zasebnih ključev, vsak pa bo odgovoren za svojo varnost in ne bo talec drugega človeškega faktorja na kakšnem superpopularnem internetnem gigantu.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Ste že slišali za IPFS?

  • Še nikoli nisem slišal za IPFS, vendar se zdi zanimivo

  • Nisem slišal in nočem slišati

  • Slišal, a me ne zanima

  • Slišal, vendar nisem razumel, zdaj pa se zdi zanimivo

  • Že dolgo časa aktivno uporabljam IPFS.

Glasovalo je 69 uporabnikov. 13 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar