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!
IPFS 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 IPFSQmXokRT5d...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 mitipfs 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.
Moinsen,
wieder ein sehr gelungener Artikel, der hinter die Kulissen von IPFS schaut. Jedoch würde ich noch anmerken, dass man m.H. des IPNS-Hashes entsprechend einen TXT-Eintrag in den eigenen DNS-Records einsetzen kann, um mit einer "normalen" Domain auf den Hash zuzugreifen (möglich auch über das lokale Gateway). Denn auch, wenn das vielleicht im nächsten Part geplant ist, macht es m.M.n. mehr Sinn, das bereits hier aufzuführen (ansonsten ist für die meisten der Hash an sich wohl kaum aufschlussreich) 😉.
BB,
JanSe
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hi, ja das stimmt das werde ich morgen hier noch ergänzen. Super Hinweis! Leider ist es nur noch ne technische Hürde um etwas lesbarer zu machen und es ändert ja nix an der Notwendigkeit vom Gateways. Man erreicht ja damit nur, dass der IPNS Hash nen fluffiger lesbarer Name wird.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hi,
Sorry das war Mist. Ich muss meinen eigenen Kommentar korrigieren. Der DNS Eintrag bezieht sich auf den IPFS Hash nicht auf den IPNS Hash. Die Details habe ich jetzt im Artikel geupdated. Danke @Janse für den Denkanstoß!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Das hier beschriebene Prinzip wird auch in der Programmierung gern verwendet, um zB das Interface (Frontend) von dem Backend möglichst vollständig zu trennen.
Auch bei verschiedenen Bereichen innerhalb des Backends wird das verwendet (was hier noch besser auf das Beispiel zutrifft, als der Teil mit Frontend und Backend, weil diese ja Kontaktstellen benötigen, um Daten und Veränderungen von Daten auszutauschen). Man nutzt dabei sogenannte Interfaces, die eig nichts anderes machen als einen Verweis auf eine Methode festlegen. Man kann nun aber diese Methode in vielen verschiedenen Klassen nutzen und in jeder Klasse anders implementieren.
Sie heißt immer gleich, funktioniert aber jeweils anders.
Ähnlich berschreibst du es hier. Du setzt den Link und setzt darunter deine Funktionalität, in dem Fall zum Beispiel eine Datei einer Webseite.
Hoffe dieser kleine Exkurs war nicht zuviel :D Vor allem ist er vllt nicht 100% korrekt, Korrekturen werden gerne gesehen.
Allerdings hilft manchmal eine andere Sichtweise etwas besser zu verstehen, weshalb ich das unbedingt nocheinmal so aufdröseln wollte.
Sehr schöner Post :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit