IPFS bez boli (ali ovo nije točno)

IPFS bez boli (ali ovo nije točno)

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

Odmah ću pojasniti da nisam stručnjak za ovo područje, ali sam više puta pokazao interes za ovu tehnologiju, ali pokušaj igranja s njom često je izazivao bol. Danas sam ponovno počeo eksperimentirati i dobio neke rezultate koje bih želio podijeliti. Ukratko će biti opisan postupak instalacije IPFS-a i neke značajke (sve je napravljeno na ubuntu, nisam probao na drugim platformama).

Ako ste propustili što je IPFS, ovdje je dosta detaljnije napisano: habr.com/en/post/314768

Instalacija

Radi čistoće eksperimenta, predlažem da ga odmah instalirate na neki vanjski poslužitelj, budući da ćemo razmotriti neke zamke s radom u lokalnom načinu rada i na daljinu. Zatim, po želji, neće se dugo rušiti, nema puno.

Instaliraj idi

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

Napomena: bolje je instalirati IPFS u ime korisnika koji bi ga trebao najčešće koristiti. Činjenica je da ćemo u nastavku razmotriti mogućnost montaže putem OSIGURAČ i postoje 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 trebate 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 je li go instaliran

go version

Instalirajte IPFS

Najviše mi se svidio način postavljanja ipfs ažuriranje.

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 - vidjeti trenutno instaliranu verziju (dok nemamo instaliran IPFS, neće biti ništa).
ipfs-update instalirajte najnovije - instalirajte najnoviju verziju IPFS-a. Umjesto najnovije, odnosno, možete odrediti bilo koju željenu verziju s popisa dostupnih.

Instaliranje ipfs-a

ipfs-update install latest

Provjeravanje

ipfs --version

Izravno s instalacijom u općim uvjetima 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

Rezultirati

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. Dečki u fazi instalacije već počinju koristiti vlastite tehnologije. Predloženi hash QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv nije generiran posebno za vas, već je ušiven u izdanje. Odnosno, prije izdanja pripremili su tekst dobrodošlice, ubacili ga u IPFS i dodali adresu instalateru. Mislim da je jako cool. I ovu datoteku (točnije cijelu mapu) sada možete pogledati ne samo lokalno, već i na službenom pristupniku ipfs.io/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv. Istovremeno, možete biti sigurni da se sadržaj mape nije ni na koji način promijenio, jer da se promijenio, promijenio bi se i hash.

Usput, u ovom slučaju IPFS ima neke sličnosti s poslužiteljem za kontrolu verzija. Ako napravite promjene u izvornim datotekama mape i ponovno ubacite mapu u IPFS, ona će primiti novu adresu. Istodobno, stara mapa neće otići nigdje samo tako i bit će dostupna na svojoj prethodnoj adresi.

Izravno 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 Interneta

Obratite pozornost 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, pristupat ćete IPFS sučeljima koristeći lokalne adrese i sve će vam biti dostupno (Na primjer, localhost:5001/webui/). Ali kada se instalira na vanjski poslužitelj, pristupnici su prema zadanim postavkama zatvoreni za Internet. Pristupnici dva:

  1. webui administrator (Github) na priključku 5001.
  2. Vanjski API na portu 8080 (samo za čitanje).

Za sada se oba porta (5001 i 8080) mogu otvoriti za eksperimente, ali na borbenom poslužitelju, naravno, port 5001 treba zatvoriti vatrozidom. Tu je i port 4001, koji je potreban kako bi vas drugi peeri mogli pronaći. Treba ga ostaviti otvorenim za vanjske zahtjeve.

Otvorite ~/.ipfs/config za uređivanje i pronađite ove retke 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"
}

Promijenite 127.0.0.1 u ip vašeg poslužitelja i spremite datoteku, zatim ponovno pokrenite ipfs (zaustavite pokrenutu naredbu pomoću Ctrl+C i pokrenite je ponovo).

Treba dobiti

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

Sada bi trebala biti dostupna vanjska sučelja.

Provjerite

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

Gornja readme datoteka bi se trebala otvoriti.

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

Trebalo bi se otvoriti web sučelje.

Ako webui radi za vas, tada se postavke IPFS-a mogu promijeniti izravno u njemu, uključujući pregled statistike, ali u nastavku ću razmotriti mogućnosti konfiguracije izravno putem konfiguracijske datoteke, što općenito nije kritično. Samo je bolje zapamtiti gdje se točno nalazi konfiguracija i što učiniti s njom, inače ako web lice ne radi, bit će teže.

Postavljanje web sučelja za rad s vašim poslužiteljem

Evo prve zamke koja je trajala oko tri sata.

Ako ste instalirali IPFS na vanjski poslužitelj, ali niste instalirali ili pokrenuli IPFS lokalno, tada kada odete na /webui u web sučelju, trebali biste vidjeti pogrešku veze:

IPFS bez boli (ali ovo nije točno)

Činjenica je da webui, po mom mišljenju, radi vrlo dvosmisleno. Prvo se pokušava spojiti na API poslužitelja na kojem je sučelje otvoreno (naravno, na temelju adrese u pregledniku). a ako tamo ne radi, pokušava se spojiti na lokalni pristupnik. A ako imate IPFS pokrenut lokalno, tada će vam webui dobro raditi, samo što ćete vi raditi s lokalnim IPFS-om, a ne vanjskim, iako ste otvorili webui na vanjskom poslužitelju. Zatim učitate datoteke, ali ih iz nekog razloga ne vidite baš takve na vanjskom poslužitelju...

A ako se ne izvodi lokalno, dobivamo pogrešku veze. U našem slučaju, pogreška je najvjerojatnije uzrokovana CORS-om, što također ukazuje webui, predlažuć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 '["*"]'

Dodana zaglavlja mogu se pronaći u istom ~/.ipfs/config. U mom slučaju jest

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

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

Sada možete učitavati mape i datoteke izravno putem web sučelja, kao i stvarati vlastite mape.

Montiranje datotečnog sustava FUSE

Evo jedne prilično zanimljive značajke.

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

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

Zadnji hash je hash korijenske mape.

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

ipfs ls QmbnzgRVAP4fL814h5mQttyqk1aUxxxxxxxxxxxxx
QmfYuz2gegRZNkDUDVLNa5DXzKmKVxxxxxxxxxxxxxx 10 test.txt

Ali svejedno ga možete otvoriti kao običnu mapu.

Kreirajmo dvije mape u korijenu i dodijelimo prava na njih našem korisniku.

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

i ponovno pokrenite ipfs s --mount zastavom

ipfs daemon --mount

Možete kreirati mape na drugim mjestima i odrediti stazu do njih kroz parametre ipfs demona -mount -mount-ipfs /ipfs_path -mount-ipns /ipns_path

Sada je čitanje iz ove mape pomalo neobično.

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

To jest, nema izravnog pristupa korijenu ove mape. Ali možete dobiti sadržaj, znajući 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

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

Kao što sam rekao gore, postoje suptilnosti s takvim montiranjem: prema zadanim postavkama, montirane FUSE mape dostupne su samo trenutnom korisniku (čak ni root neće moći čitati iz takve mape, a da ne spominjemo druge korisnike u sustavu). Ako te mape želite učiniti dostupnima 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), dobit ćete pogrešku

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

U ovom slučaju trebate urediti /etc/fuse.conf uklanjanjem komentara iz retka #user_allow_other.

Nakon toga ponovno pokrenite ipfs.

Poznati problemi s FUSE-om

Više puta je primijećen problem da nakon ponovnog pokretanja ipfs-a s montiranjem (a možda i u drugim slučajevima), /ipfs i /ipns točke montiranja postaju nedostupne. Nema pristupa njima, a ls -la /ipfs pokazuje ???? u listi prava.

Našao ovo rješenje:

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

Zatim ponovno pokrenite ipfs.

Dodavanje usluge

Naravno, rad u terminalu prikladan je samo za početne testove. U načinu borbe, demon bi se trebao pokrenuti automatski pri pokretanju sustava.

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 stazu)).

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, bit će moguće ponovno pokrenuti poslužitelj u budućnosti kako bi se provjerilo pokreće li se ipfs uspješno automatski.

Dodavanje poznatih nam gozbi

Razmotrimo situaciju u kojoj imamo IPFS čvorove instalirane i na vanjskom poslužitelju i lokalno. Na vanjskom poslužitelju dodamo neku datoteku i pokušamo je dobiti preko IPFS-a lokalno po CID-u. Što će se dogoditi? Naravno, lokalni poslužitelj najvjerojatnije ne zna ništa o našem vanjskom poslužitelju i jednostavno će pokušati pronaći datoteku prema CID-u tako što će "pitati" sve IPFS peere koji su mu dostupni (s kojima se već uspio "upoznati"). Oni će zauzvrat pitati druge. I tako dalje, dok se datoteka ne pronađe. Zapravo, ista stvar se događa kada pokušamo dobiti datoteku preko službenog pristupnika ipfs.io. Ako imate sreće, datoteka će biti pronađena za nekoliko sekundi. A ako ne, neće se pronaći ni za nekoliko minuta, što uvelike utječe na udobnost rada. Ali znamo gdje će se ova datoteka prvo pojaviti. Pa zašto ne bismo odmah rekli našem lokalnom poslužitelju "Prvo pretraži tamo"? Očigledno, to se može učiniti.

1. Idemo na udaljeni poslužitelj i pogledamo ~/.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ću adresu u obliku "/ip4/ip_vaš_poslužitelj/tcp/4001/ipfs/$PeerID".

4. Radi pouzdanosti, pokušat ćemo dodati ovu adresu ravnopravnim korisnicima putem našeg lokalnog webuija.

IPFS bez boli (ali ovo nije točno)

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

Ponovno pokrenite IPFS.

Dodajmo sada datoteku vanjskom poslužitelju i pokušajmo je zatražiti na lokalnom. Trebalo bi letjeti brzo.

Ali ova funkcionalnost još nije stabilna. Koliko ja razumijem, čak i ako navedemo adresu peera u Bootstrapu, ipfs mijenja popis aktivnih veza s peerovima tijekom rada. U svakom slučaju, u tijeku je razgovor o tome i želje o mogućnosti određivanja stalnih blagdana здесь a čini se kao trebalo dodati neku funkcionalnost [e-pošta zaštićena]+

Popis trenutnih peera može se vidjeti i u webuiju iu terminalu.

ipfs swarm peers

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

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 peerom i, ako ne, za dodavanje veze.

Rasuđivanje

Među onima koji su već upoznati s IPFS-om, postoje i argumenti za i protiv IPFS-a. Uglavnom, jučer rasprava i potaknulo me da ponovno kopam po IPFS-u. A što se tiče gore spomenute rasprave: ne mogu reći da se oštro protivim bilo kojem argumentu onih koji su govorili (ne slažem se samo s činjenicom da jedan i pol programer koristi IPFS). Općenito, oboje su u pravu na svoj način (posebno komentar o čekovima tjera vas na razmišljanje). Ali ako odbacimo moralnu i pravnu ocjenu, tko će dati tehničku ocjenu ove tehnologije? Osobno imam neki unutarnji osjećaj da se "ovo mora učiniti nedvosmisleno, to ima neke perspektive". Ali zašto baš, nema jasne formulacije. Kao, ako pogledate postojeće centralizirane alate, oni su u mnogim aspektima daleko ispred (stabilnost, brzina, upravljivost itd.). Ipak, imam jednu misao koja se čini smislenom i koja se teško može provesti bez ovakvih decentraliziranih sustava. Naravno, previše zamahujem, ali formulirao bih to ovako: mora se promijeniti princip širenja informacija na internetu.

Dopustite da objasnim. Ako bolje razmislite, sada imamo informaciju raspodijeljenu po principu “Nadam se da će je čuvati onaj kome sam je dao i da je neće izgubiti ili primiti oni kojima nije namijenjena.” Kao primjer, lako je razmotriti razne usluge pošte, pohranu u oblaku itd. I što na kraju imamo? Na Habré hubu Sigurnost informacija je na prvoj liniji i gotovo svaki dan primamo vijesti o još jednom globalnom curenju podataka. U principu, sve najzanimljivije stvari navedene su u <ironija> prekrasno članak Ljeto je gotovo. Gotovo da više nema neprocurjelih podataka. Odnosno, glavni internetski divovi postaju sve veći, akumuliraju sve više i više informacija, a takva curenja su svojevrsne atomske eksplozije informacija. Ovo se nikad prije nije dogodilo, a evo opet. U isto vrijeme, iako mnogi razumiju da postoje rizici, nastavit će povjeravati svoje podatke tvrtkama trećih strana. Kao prvo, nema puno alternative, a kao drugo, obećavaju da su zakrpali sve rupe i da se to više nikada neće dogoditi.

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 o potpunoj otvorenosti čitanja. Pretpostavljam da bi informacije trebale biti distribuirane s javnim ključevima. Uostalom, princip javnih/privatnih ključeva već je star, gotovo kao i internet. Ako informacija nije povjerljiva i namijenjena je širokom krugu, tada se odmah izlaže s javnim ključem (ali još uvijek u šifriranom obliku, svatko ga može dešifrirati dostupnim ključem). A ako ne, onda se postavlja bez javnog ključa, a sam ključ se prenosi onome što bi trebalo imati pristup tim informacijama. Pritom, onaj tko bi trebao čitati trebao bi imati samo ključ, a gdje dobiti te informacije, ne bi trebao baš letjeti - on ih samo povuče s mreže (to je novi princip distribucije po sadržaju, a ne po adresa).

Dakle, za masovni napad napadači će morati nabaviti ogroman broj privatnih ključeva, a to se teško može učiniti na jednom mjestu. Ovaj je zadatak, kako ja to vidim, teži od hakiranja određene usluge.

I tu je još jedan problem zatvoren: potvrda autorstva. Sada na internetu možete pronaći mnoge citate naših prijatelja. Ali gdje je jamstvo da su ih oni napisali? Sada, kada bi svaki takav zapis pratio digitalni potpis, bilo bi puno lakše. I nije važno gdje leže te informacije, glavna stvar je potpis, koji je, naravno, teško krivotvoriti.

I evo što je ovdje zanimljivo: IPFS već nosi alate za šifriranje (uostalom, izgrađen je na blockchain tehnologiji). Privatni ključ je odmah naveden 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 mogu točno znati kako to ispravno koristiti, ali čini mi se da se ti ključevi koriste na razini razmjene između IPFS čvorova. I također js-ipfs i primjeri projekata kao što su orbita-dbna kojem radi orbita.chat. To jest, teoretski, svaki uređaj (mobilni i ne samo) može se lako opremiti vlastitim strojevima za šifriranje i dešifriranje. U ovom slučaju ostaje samo da svatko brine o čuvanju svojih privatnih ključeva, a svatko će biti odgovoran za vlastitu sigurnost, a ne biti talac drugog ljudskog faktora na nekom superpopularnom internetskom divu.

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Jeste li već čuli za IPFS?

  • Nikad nisam čuo za IPFS, ali čini mi se zanimljivim

  • Nisam čuo i ne želim čuti

  • Čuo, ali me ne zanima

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

  • Dugo sam aktivno koristio IPFS.

Glasovalo je 69 korisnika. Suzdržano je bilo 13 korisnika.

Izvor: www.habr.com

Dodajte komentar