IPFS bez bolova (ali ovo nije tačno)

IPFS bez bolova (ali ovo nije tačno)

Uprkos činjenici da je Habré već bio više od jednog članka o IPFS-u.

Odmah ću pojasniti da nisam stručnjak za ovu oblast, ali sam pokazao interesovanje za ovu tehnologiju više puta, ali pokušaj da se igram sa njom često je izazivao bol. Danas sam ponovo počela eksperimentirati i dobila neke rezultate koje bih htjela podijeliti. Ukratko, biće opisan proces instalacije IPFS-a i neke karakteristike (sve je urađeno na ubuntu, nisam probao na drugim platformama).

Ako ste propustili šta je IPFS, ovde je pobliže napisano: habr.com/en/post/314768

postavljanje

Radi čistoće eksperimenta, predlažem da ga odmah instalirate na neki eksterni server, pošto ćemo razmotriti neke zamke s radom u lokalnom i daljinskom. Onda se po želji neće još dugo rušiti, nema puno.

Instaliraj go

Službena dokumentacija
Pogledajte trenutnu verziju na golang.org/dl

Napomena: IPFS je bolje instalirati u ime korisnika koji bi trebao da ga najčešće koristi. Činjenica je da ćemo u nastavku razmotriti opciju montaže preko OSIGURAČ i ima suptilnosti.

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

Zatim morate ažurirati okruženje (više detalja ovdje: 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

Provjera da je go instaliran

go version

Instalirajte IPFS

Najviše mi se dopao način instalacije ipfs update.

Instalirajte ga naredbom

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

Nakon toga, možete pokrenuti sljedeće naredbe:

ipfs-update verzije - da vidite sve dostupne verzije za preuzimanje.
ipfs-update verzija - da vidite trenutno instaliranu verziju (dok ne budemo instalirali IPFS, neće biti nijedna).
ipfs-update instalirajte najnovije - instalirajte najnoviju verziju IPFS-a. Umjesto najnovije, možete odrediti bilo koju željenu verziju sa liste dostupnih.

Instaliranje ipfs-a

ipfs-update install latest

Proverite

ipfs --version

Direktno s instalacijom općenito sve.

Pokrenite IPFS

Inicijalizacija

Prvo morate izvršiti inicijalizaciju.

ipfs init

Kao odgovor, dobit ćete nešto poput ovoga:

 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

Možete pokrenuti predloženu naredbu

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

Ovdje, po mom mišljenju, počinje zanimljivo. Momci u fazi instalacije već počinju koristiti vlastite tehnologije. Predloženi hash QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv nije generiran posebno za vas, već je ušiven u izdanje. To jest, prije objavljivanja, pripremili su tekst dobrodošlice, ulili ga u IPFS i dodali adresu instalateru. Mislim da je jako kul. I ovaj fajl (tačnije, cijeli folder) sada se može vidjeti ne samo lokalno, već i na službenom pristupniku ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Istovremeno, možete biti sigurni da se sadržaj foldera nije promijenio ni na koji način, jer da se promijenio, promijenio bi se i heš.

Usput, u ovom slučaju IPFS ima neke sličnosti sa serverom za kontrolu verzija. Ako izvršite promjene u izvornim datotekama foldera i ponovo sipate folder u IPFS, tada će dobiti novu adresu. Istovremeno, stari folder neće nigdje ići tek tako i bit će dostupan na prethodnoj adresi.

Direktno lansiranje

ipfs daemon

Trebali biste dobiti ovakav 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

Otvaranje vrata Internetu

Obratite pažnju na ove dvije linije:

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

Sada, ako ste instalirali IPFS lokalno, tada ćete pristupiti IPFS sučeljima koristeći lokalne adrese i sve će vam biti dostupno (na primjer, localhost:5001/webui/). Ali kada su instalirani na eksternom serveru, prema zadanim postavkama, gatewayi su zatvoreni za Internet. Gateway dva:

  1. webui admin (GitHub) na portu 5001.
  2. Vanjski API na portu 8080 (samo za čitanje).

Do sada su oba porta (5001 i 8080) mogla biti otvorena za eksperimente, ali na borbenom serveru, naravno, port 5001 bi trebao biti zatvoren zaštitnim zidom. Tu je i port 4001, koji je potreban da bi vas drugi vršnjaci mogli pronaći. Trebalo bi da bude otvoreno za spoljne zahteve.

Otvorite ~/.ipfs/config za uređivanje i pronađite ove redove u njemu:

"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"
}

Promenite 127.0.0.1 u ip vašeg servera i sačuvajte datoteku, a zatim ponovo pokrenite ipfs (zaustavite pokrenutu komandu sa Ctrl+C i pokrenite je ponovo).

Trebalo bi da dobijem

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

Sada bi vanjski interfejsi trebali biti dostupni.

Provjeri

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

Gornji readme fajl bi se trebao otvoriti.

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

Web interfejs bi se trebao otvoriti.

Ako webui radi za vas, tada se IPFS postavke mogu promijeniti direktno u njemu, uključujući statistiku pregleda, ali u nastavku ću razmotriti opcije konfiguracije direktno kroz konfiguracijski fajl, što općenito nije kritično. Samo je bolje zapamtiti gdje se tačno nalazi konfiguracija i šta raditi s njom, inače će biti teže ako web lice ne radi.

Podešavanje web interfejsa za rad sa vašim serverom

Evo prve zamke koja je trajala oko tri sata.

Ako ste instalirali IPFS na eksternom serveru, ali niste instalirali ili pokrenuli IPFS lokalno, onda kada odete na /webui u web sučelju, trebali biste vidjeti grešku veze:

IPFS bez bolova (ali ovo nije tačno)

Činjenica je da webui, po mom mišljenju, radi vrlo dvosmisleno. Prvo pokušava da se poveže na API servera na kojem je interfejs otvoren (na osnovu adrese u pretraživaču, naravno). a ako tamo ne radi, pokušava se povezati na lokalni pristupnik. A ako imate IPFS koji radi lokalno, onda će webui raditi dobro za vas, samo ćete vi raditi s lokalnim IPFS-om, a ne vanjskim, iako ste otvorili webui na vanjskom poslužitelju. Zatim otpremite fajlove, ali ih iz nekog razloga ne vidite tek tako na eksternom serveru...

A ako ne radi lokalno, onda dobijamo grešku u vezi. U našem slučaju, greška je najvjerovatnije uzrokovana CORS-om, što također ukazuje webui, sugerirajući dodavanje 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"]'

Upravo sam registrirao zamjenski znak

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

Dodata zaglavlja mogu se naći u istoj ~/.ipfs/config. U mom slučaju jeste

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

Ponovo pokrećemo ipfs i vidimo da se webui uspješno povezao (u svakom slučaju, trebao bi, ako ste otvorili gatewaye za zahtjeve izvana, kao što je gore opisano).

Sada možete otpremati foldere i datoteke direktno preko web sučelja, kao i kreirati vlastite foldere.

Montiranje FUSE sistema datoteka

Evo jedne prilično zanimljive karakteristike.

Datoteke (kao i mape) možemo dodati ne samo preko web sučelja, već i direktno u terminalu, npr.

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

Posljednji hash je heš korijenskog foldera.

Koristeći ovaj hash, možemo otvoriti folder na bilo kojem ipfs čvoru (koji može pronaći naš čvor i dobiti sadržaj), možemo u web interfejsu na portu 5001 ili 8080, ili možemo lokalno preko ipfs-a.

ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt

Ali i dalje ga možete otvoriti kao običan folder.

Napravimo dva foldera u korijenu i dodijelimo prava na njih našem korisniku.

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

i ponovo pokrenite ipfs sa --mount zastavicom

ipfs daemon --mount

Možete kreirati foldere na drugim mjestima i odrediti putanju do njih preko parametara ipfs demona -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path

Sada je čitanje iz ovog foldera pomalo neobično.

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

Odnosno, nema direktnog pristupa korijenu ove mape. Ali možete dobiti sadržaj, znajući heš.

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

U isto vrijeme, čak i automatsko dovršavanje radi unutar mape kada je navedena staza.

Kao što sam rekao gore, postoje suptilnosti kod takvog montiranja: po defaultu, montirani FUSE folderi dostupni su samo trenutnom korisniku (čak ni root neće moći čitati iz takvog foldera, a da ne spominjemo druge korisnike u sistemu). Ako želite da ove mape učinite dostupnim drugim korisnicima, tada u konfiguraciji trebate promijeniti "FuseAllowOther": false u "FuseAllowOther": true. Ali to nije sve. Ako pokrenete IPFS kao root, onda je sve u redu. A ako u ime običnog korisnika (čak i sudo), onda ćete dobiti grešku

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

U ovom slučaju, morate urediti /etc/fuse.conf uklanjanjem komentara #user_allow_other linije.

Nakon toga, ponovo pokrenite ipfs.

Poznati problemi sa FUSE

Problem je više puta primećen da nakon ponovnog pokretanja ipfs-a sa montiranjem (a možda i u drugim slučajevima), /ipfs i /ipns tačke montiranja postaju nedostupne. Nema pristupa njima, a ls -la /ipfs pokazuje ???? na listi prava.

Našao ovo rješenje:

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

Zatim ponovo pokrenite ipfs.

Dodavanje usluge

Naravno, rad u terminalu je pogodan samo za početne testove. U borbenom režimu, demon bi se trebao automatski pokrenuti pri pokretanju sistema.

U ime sudo, kreirajte datoteku /etc/systemd/system/ipfs.service i napišite u nju:

[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

USERNAME, naravno, mora biti zamijenjeno vašim korisnikom (i možda će puna staza do ipfs programa biti drugačija za vas (morate navesti punu putanju)).

Aktiviramo uslugu.

sudo systemctl enable ipfs.service

Pokrećemo uslugu.

sudo service ipfs start

Provjera statusa usluge.

sudo service ipfs status

Radi čistoće eksperimenta, biće moguće ponovo pokrenuti server u budućnosti kako bi se proverilo da li se ipfs uspešno pokreće automatski.

Dodajući nam poznate gozbe

Razmotrimo situaciju u kojoj imamo IPFS čvorove instalirane i na eksternom serveru i lokalno. Na eksternom serveru dodajemo neki fajl i pokušavamo da ga dobijemo preko IPFS-a lokalno preko CID-a. Šta će se desiti? Naravno, lokalni server najvjerovatnije ne zna ništa o našem eksternom serveru i jednostavno će pokušati pronaći datoteku po CID-u tako što će “pitati” sve IPFS peerove koji su mu dostupni (sa kojima je već uspio da se “upozna”). Oni će zauzvrat pitati druge. I tako dalje, dok se fajl ne pronađe. U stvari, ista stvar se dešava kada pokušamo da dobijemo fajl preko zvaničnog gateway-a ipfs.io. Ako budete imali sreće, fajl će biti pronađen za nekoliko sekundi. A ako ne, neće se naći ni za nekoliko minuta, što uvelike utiče na udobnost rada. Ali znamo gdje će se ovaj fajl prvi put pojaviti. Pa zašto ne bismo odmah rekli našem lokalnom serveru "Traži prvo tamo"? Očigledno, ovo se može uraditi.

1. Idemo na udaljeni server i gledamo u ~/.ipfs/config konfiguraciju

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

2. Pokrenite sudo service ipfs status i potražite Swarm unose u njemu, na primjer:

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

3. Iz ovoga dodajemo opštu adresu u obliku "/ip4/ip_your_server/tcp/4001/ipfs/$PeerID".

4. Radi pouzdanosti, pokušat ćemo dodati ovu adresu kolegama preko našeg lokalnog webui-a.

IPFS bez bolova (ali ovo nije tačno)

5. Ako je sve u redu, otvorite lokalnu konfiguraciju ~ / .ipfs / config, pronađite u njoj “Bootstrap”: [...
i prvo dodajte primljenu adresu u niz.

Ponovo pokrenite IPFS.

Sada dodajmo fajl na eksterni server i pokušajmo da ga zatražimo na lokalnom. Trebao bi brzo letjeti.

Ali ova funkcionalnost još nije stabilna. Koliko sam shvatio, čak i ako navedemo adresu ravnopravnog partnera u Bootstrapu, ipfs mijenja listu aktivnih veza sa ravnopravnim korisnicima tokom rada. U svakom slučaju, u toku je rasprava o tome i željama u vezi mogućnosti određivanja stalnih praznika ovdje i izgleda kao pretpostavljao dodajte neku funkcionalnost [email zaštićen]+

Lista trenutnih peer-a može se vidjeti i na webui-u i na terminalu.

ipfs swarm peers

I tu i tamo možete ručno dodati svoju gozbu.

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

Dok se ova funkcionalnost ne poboljša, možete napisati alat za provjeru veze sa željenim peer-om i, ako nije, za dodavanje veze.

Obrazloženje

Među onima koji su već upoznati sa IPFS-om, postoje argumenti za i protiv IPFS-a. Uglavnom, juče rasprava i podstakao me da ponovo kopam po IPFS. A što se tiče gore spomenute rasprave: ne mogu reći da se snažno protivim bilo kojem argumentu onih koji su govorili (ne slažem se samo sa činjenicom da jedan i po programer koristi IPFS). Generalno, oboje su u pravu na svoj način (naročito komentar o čekovima tera na razmišljanje). Ali ako odbacimo moralnu i pravnu ocjenu, ko će dati tehničku ocjenu ove tehnologije? Ja lično imam neki unutrašnji osjećaj da "ovo mora da se uradi nedvosmisleno, ima određene perspektive". Ali zašto tačno, nema jasne formulacije. Na primjer, ako pogledate postojeće centralizirane alate, onda su u mnogim aspektima daleko ispred (stabilnost, brzina, upravljivost, itd.). Ipak, imam jednu misao koja se čini logičnom i koja se teško može implementirati bez ovako decentralizovanih sistema. Naravno, previše se zamahujem, ali ja bih to ovako formulisao: princip širenja informacija na Internetu se mora promijeniti.

Dopusti mi da objasnim. Ako bolje razmislite, sada imamo informacije koje se distribuiraju po principu “Nadam se da će je zaštititi onaj kome sam je dao i da je neće izgubiti ili primiti oni kojima nije namijenjena”. Kao primjer, lako je uzeti u obzir razne mail servise, pohranu u oblaku itd. I šta ćemo na kraju? Na Habré čvorištu Sigurnost informacija je na prvoj liniji i skoro svaki dan dobijamo vesti o još jednom globalnom curenju. U principu, sve najzanimljivije stvari su navedene u <ironiji> divno članak Ljeto je skoro gotovo. Skoro da nema podataka koji nisu procurili. Odnosno, glavni internet giganti postaju sve veći, gomilaju sve više informacija, a takva curenja su svojevrsne atomske eksplozije informacija. Ovo se nikada ranije nije dogodilo, a evo ga opet. Istovremeno, iako mnogi razumiju da postoje rizici, nastavit će vjerovati svojim podacima trećim kompanijama. Prvo, nema puno alternative, a drugo, obećavaju da su zakrpili sve rupe i da se to više nikada neće ponoviti.

Koju opciju vidim? Čini mi se da bi podatke u početku trebalo javno distribuirati. Ali otvorenost u ovom slučaju ne znači da sve treba biti lako čitljivo. Govorim o otvorenosti skladištenja i distribucije, ali ne i potpunoj otvorenosti u čitanju. Pretpostavljam da informacije treba distribuirati sa javnim ključevima. Uostalom, princip javnih/privatnih ključeva je već star, skoro kao Internet. Ako informacija nije povjerljiva i namijenjena je širokom krugu, tada se odmah izlaže javnim ključem (ali još uvijek u šifriranom obliku, jednostavno ih svatko može dešifrirati dostupnim ključem). A ako ne, onda se postavlja bez javnog ključa, a sam ključ se prenosi na ono što bi trebalo imati pristup ovim informacijama. U isto vrijeme, onaj ko bi trebao to pročitati treba da ima samo ključ, a odakle doći do te informacije, ne bi trebao baš vinuti - samo je izvlači iz mreže (ovo je novi princip distribucije po sadržaju, a ne po adresa).

Dakle, za masovni napad, napadači će morati da pribave ogroman broj privatnih ključeva, a malo je verovatno da će to biti urađeno na jednom mestu. Ovaj zadatak je, kako ja vidim, teži od hakovanja određene usluge.

I tu je još jedan problem zatvoren: potvrda autorstva. Sada na internetu možete pronaći mnoge citate koje su napisali naši prijatelji. Ali gdje je garancija da su ih oni napisali? E sad, kada bi svaki takav zapis bio popraćen digitalnim potpisom, bilo bi mnogo lakše. I nije važno gdje se nalaze ove informacije, glavna stvar je potpis, koji je, naravno, teško krivotvoriti.

A evo šta je ovdje zanimljivo: IPFS već ima alate za šifriranje (na kraju krajeva, izgrađen je na blockchain tehnologiji). Privatni ključ se odmah navodi u 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.................

Nisam stručnjak za sigurnost i ne znam tačno kako da ga pravilno koristim, ali čini mi se da se ovi ključevi koriste na nivou razmjene između IPFS čvorova. I takođe js-ipfs i primjeri projekata kao što su orbit-dbna kojoj radi orbit.chat. Odnosno, teoretski, svaki uređaj (mobilni i ne samo) može se lako opremiti vlastitim strojevima za šifriranje-dešifriranje. U ovom slučaju preostaje samo da se svi pobrinu za čuvanje svojih privatnih ključeva, a svako će biti odgovoran za svoju sigurnost, a ne biti talac drugog ljudskog faktora na nekom superpopularnom internet gigantu.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Jeste li već čuli za IPFS?

  • Nikad nisam čuo za IPFS, ali izgleda zanimljivo

  • Nisam čuo i ne želim čuti

  • Čuo, ali nisam zainteresovan

  • Čuo, ali nisam razumio, ali sada se čini zanimljivim

  • Aktivno koristim IPFS već duže vrijeme.

Glasalo je 69 korisnika. Uzdržano je bilo 13 korisnika.

izvor: www.habr.com

Dodajte komentar