IPFS - #3 - IPNS - Ein praktischer Blick auf den IPNS Layer

https://i.imgur.com/Xd5cZAa.png

IPNS ist eine Ebene in IPFS. Damit wird es möglich beständige Links zu erstellen.
Wer sich erstmal einen Überblick verschaffen möchte, kann sich gern den Artikel IPFS - Das System verstehen anschauen.

Was ist mein Ziel? Warum befasse ich mich überhaupt damit?

Ich brauche so etwas, wie einen Symlink für IPFS.

Ich möchte für die Community eine gleichbleibende Adresse zu einer Datei anbieten. Der Inhalt der Datei kann und soll sich aber ändern.
Genau dafür kann man IPNS (Inter-Planetay Naming System) nutzen.

Ab in die Praxis!

https://i.imgur.com/8VrYWge.pngIPFS wird auch als permanent Web bezeichnet. Ich kann darin keine Datei editieren. Was einmal drin ist, ist so wie es ist. Ich kann nur neue Dateien hinzufügen.

Als erstes füge ich dem IPFS Netzwerk eine Datei hinzu:

ipfs add meine_datei.xml
added QmXokRT5d...2W6rXhv7 meine_datei.xml

Jetzt erstelle ich meinem IPNS Link auf die Datei:

ipfs name publish QmXokRT5d...2W6rXhv7
Published to QmeUETey...oGcN5UxFER7: /ipfs/QmXokRT5d...2W6rXhv7

Der Hash QmeUETey...oGcN5UxFER7 ist der IPNS Link auf unseren anderen Hash im IPFS QmXokRT5d...2W6rXhv7.

Jetzt habe ich "meine_datei.xml" geändert und füge sie neu hinzu. Dafür werde ich einen neuen IPFS Hash erhalten:

ipfs add meine_datei.xml
added QmXQeB...VYFSZB meine_datei.xml

Soweit so gut, jetzt wird's spannend. Ich möchte nun den Link (Inhalt meines IPNS Hashes) auf den neuen IPFS Hash ändern:

ipfs name publish QmXQeB...VYFSZB
Published to QmeUETey...oGcN5UxFER7: /ipfs/QmXQeB...VYFSZB

Das war's auch schon. Ich kann einfach jederzeit den Link ändern, indem ich das ipfs name publish erneut ausführe.

IPNS mit lesbaren Namen nutzen

Die Verbidung mit klassischen DNS Servern.
Siehe auch:

Durch den Hinweis von @Janse möchte ich den Artikel hier noch etwas ergänzen. Damit man nicht nur einen permanenten Link, sondern einen lesbaren permanenten Link hat, kann man den IPFS Hash an einen DNS Eintrag koppeln.
Das setzt voraus, dass man eine Domain hat bei der man DNS Einträge setzen kann (das trifft also nicht gerade auf jeden zu). Alles was zu tun ist, ist ein TXT Record im DNS zu setzen. Machen wir mal ein Beispiel:

Angenommen uns gehört die Domain "sonstwas.com". Dann gehen wir zu unserem Nameserver und setzen ein TXT Record:
sonstwas.com. 600 IN TXT "dnslink=/ipfs/QmXQeB...VYFSZB"

Wenn ich dann im IPFS ein name resolve ausführe:

ipfs name resolve sonstwas.com
/ipfs/QmXQeB...VYFSZB

Jetzt kann ich mir die Datei zum Beispiel herunter laden mit:

wget -O meinedatei.xml https://ipfs.io/ipns/sonstwas.com

Learnings zu IPNS<->DNS

  • Die Verknüpfung mit einem klassischen DNS bezieht sich auf den IPFS-Hash, nicht auf den IPNS-Hash
    • Folglich brauch ich bei dieser Variante alles aus dem Praxisbeispiel oben gar nicht. Denn es gibt dabei keinen IPNS-Hash.
    • Das Ganze ist einfach eine andere Funktion des IPNS Layers.
  • Wenn ich die Datei austauschen will, mache ich die Änderung in meinem klassischen DNS Server.
    • Hier verweise ich dann einfach auf den neuen IPFS-Link
    • Ob ich als Nutzer die neue Datei erhalte, hängt vom Caching des Gateways ab! Schaut euch dazu gerne den Artikel IPFS - #4 - Public IPFS Gateways an.

Anmerkungen

  • Ich kann jemand einen IPNS Link geben und dahinter später die Inhalte austauschen. Für den Empfänger bleibt der Link gleich und er kann ihn immer wieder benutzen.
  • Ich kann mit meinem Key nur einen Link verwalten.
    • Wie euch vielleicht aufgefallen ist, habe ich ja nie den Hash des IPNS Links angegeben.
    • Dafür gibt es auch keinen Parameter.
    • Es sollte aber möglich sein eigene Private Keys zu generieren. Den Private Key gibt es als Paramter von ipfs name publish. Schaut einfach mal nach mit ipfs name publish --help
  • Es ergeben sich jetzt Folgefragen
    • Ist der Link sofort überall aktualisiert?
    • Wie kann ich den Link außerhalb von IPFS, also über HTTP, allen zur Verfügung stellen?
    • Die Fragen beantworte ich in dem nächsten Artikel IPFS - #4 - Public IPFS Gateways

Wenn ihr Fragen oder Anmerkungen dazu habt, schreibt mir bitte einen Kommentar! Ich freue mich auf über Anregungen, was euch sonst noch so an IPFS interessiert.

H2
H3
H4
3 columns
2 columns
1 column
4 Comments