Auf der Web 3.0 Welle reiten

Der Entwickler Christophe Verdot teilt seine Erfahrungen mit dem Online-Kurs "Mastering Web 3.0 with Waves" .



Was ist dein Hintergrund? Was hat Sie motiviert, an dem Kurs teilzunehmen?

Ich bin seit ungefähr 15 Jahren Webentwickler und arbeite hauptsächlich als Freiberufler.

Als ich an der Entwicklung einer Webanwendung für eine nachhaltige Registrierung für Schwellenländer arbeitete, die von einer Bankgruppe finanziert wurde, wurde ich einmal nach der Möglichkeit gefragt, eine Blockchain-Zertifizierung in die Registrierung einzuführen. Zu dieser Zeit wusste ich nicht viel über Blockchain-Zertifizierung, obwohl ich mich schon eine Weile mit Krypto beschäftigt hatte, hauptsächlich auf der Anlegerseite.

Wir haben die Implementierung dieser Funktion für diese spezielle Anwendung nicht durchgesetzt, aber die Idee, dass Institute und Banken nach der Implementierung solcher Technologien in ihren Anwendungen fragten, veranlasste mich, das Thema gründlich zu untersuchen und zu untersuchen und dann die Signaturkette zu starten Projekt.

Ich habe eine Beta-Version entwickelt, die bereits auf Mainnet läuft. Zu diesem Zeitpunkt war [Waves-Programmiersprache] Ride noch nicht fertig, daher habe ich es auf einfachste Weise mithilfe von Übertragungstransaktionen mit angefügtem JSON entwickelt. Das Hauptziel war jedoch immer, erweiterte Funktionen bereitzustellen, sobald Ride verfügbar war. Dies war der Hauptgrund für mich, an dem Kurs teilzunehmen, da der nächste geplante Schritt für das Projekt darin besteht, es in eine dezentrale Anwendung (dApp) umzuwandeln.

Welche Aspekte des Kurses fanden Sie am einfachsten und am schwierigsten?

Der einfachste Aspekt war, dass wir viel Zeit dafür hatten, dass es nur darum ging zu lernen, anstatt zu konkurrieren, um die Besten zu sein. Es wurde auch gut erklärt, mit einfachen, aber expliziten Abbildungen, die viel dazu beitrugen, verschiedene Themen zu visualisieren und zu verstehen.

Bei den Herausforderungen wurden wir dazu gedrängt, selbstständig zu denken und manchmal Nachforschungen anzustellen. Dies ist der beste Weg, um Konzepte aus einer Lektion zu lernen und besser zu verstehen.

Mehrmals hatte ich kein klares Verständnis vom Vortragsteil, bis ich in den Code kam und die Herausforderung durchlief. Es war kein "Kopieren / Einfügen" erlaubt, was uns zwang, den gesamten Herausforderungscode zu schreiben, und das war ein weiterer wichtiger Punkt, um das Verständnis zu verbessern.

Der schwierigste Teil war, dass Multiple-Choice-Fragen im Herausforderungsteil manchmal nicht so klar waren. Ich meine, mein Englisch ist nicht ausgezeichnet, und die Fragen wurden von einem nicht-englischen Muttersprachler geschrieben, so dass es manchmal eine Lücke im Verständnis gab.

Wahrscheinlich hätte ich gerne mehr aus den Abschnitten Orakel und NFT gelernt. In jedem Fall richtet sich dieser Kurs jedoch hauptsächlich an Entwickler, und Sie müssen auf jeden Fall Zeit damit verbringen, damit herumzuspielen und später zu üben, um wirklich ein umfassendes Verständnis für jeden Aspekt und jedes Detail zu erhalten.

Können Sie die Lösung, an der Sie während des Kurses gearbeitet haben, ausführlich besprechen - 'Coupon Bazaar'? Könnten Sie auch Beispiele für Code angeben?

Wir haben am 'Coupon Bazaar' gearbeitet, einem Marktplatz, auf dem Menschen Rabattcoupons für Waren und Dienstleistungen zu einem niedrigen Preis kaufen und verkaufen. Jeder Gutschein wurde durch einen digitalen Vermögenswert dargestellt, der auch einen von Lieferanten angebotenen Sonderrabatt darstellte.



An mehreren Komponenten der Anwendung waren Arbeiten erforderlich. Erstens musste es den Lieferanten ermöglichen, ihre Artikel (Gutscheine) zu registrieren und zu verwalten. Anschließend mussten eine Kaufbestätigungsfunktion sowie eine Funktion erstellt werden, mit der Kunden Gutscheine suchen und kaufen können.



Während des Kurses wurden mehrere zusätzliche Funktionen hinzugefügt, darunter ein Abstimmungssystem und eine Funktion zur Überprüfung und schwarzen Liste von Lieferanten.

Wir haben zunächst die Unterschiede zwischen Smart Assets, Smart Accounts und dApp-Konten sowie die Grundlagen der Arbeit mit Verifiziererfunktionen untersucht. Mit den Überprüfungsfunktionen können Sie das Standardverhalten eines Kontos ändern. Standardmäßig prüfen sie die Signaturen von Transaktionen, aber mit der Überprüfungsfunktion können Sie eine andere 'Regel' festlegen.

{-# STDLIB_VERSION 3 #-} {-# CONTENT_TYPE DAPP #-} {-# SCRIPT_TYPE ACCOUNT #-} letownerPublicKey = base58'H8ndsHjBha6oJBQQx33zqbP5wi8sQP7hwgjzWUv3q95M' @Verifier(tx) funcverify() = { matchtx { cases: SetScriptTransaction=>sigVerify(tx.bodyBytes, tx.proofs[0], ownerPublicKey) cased: DataTransaction=>true case_ =>false } } 

Dann haben wir angefangen, Elemente hinzuzufügen. Wir haben eine der wichtigsten Funktionen für die dApp-Entwicklung verwendet, mit der alle Arten von Daten als Schlüssel-Wert-Paare in der Blockchain aufgezeichnet werden können, die Datentransaktion. Wir haben es mit einer neuen Transaktion, invokeScript, kombiniert, mit der eine aufrufbare Funktion von außen in eine dApp aufgerufen wird.

Eine Art von Datentransaktion, die wir im Kurs verwendet haben, bestand darin, dass Lieferanten Artikel zum Marktplatz hinzufügen:

 letdatajson = { "title": "t-shirt with , vote 1", "coupon_price": 10000000, "old_price": 1000000000, "new_price": 100000000, "address": "Universe", "description": "I want you to make love, not war, i know you've heard it before", "image": "https://bit.ly/2EXTghg" } it('add item', asyncfunction(){ letts = invokeScript({ dApp: dappAddress, call:{ function:"addItem", args:[ { type:"string", value: datajson.title }, { type:"integer", value: datajson.coupon_price }, { type:"string", value: JSON.stringify(datajson) } ]}, payment: [] }, accountSupplierSeed) lettx = awaitbroadcast(ts) awaitwaitForTx(tx.id) }) 

Um diese Datentransaktion über die Funktion addItem zu verarbeiten und später einen Kauf und andere Optionen zu entwickeln, haben wir die aufrufbare Funktion durchlaufen, die von Benutzern von außen aufgerufen werden kann. Infolgedessen kann es verschiedene Aufgaben ausführen, z. B. das Einleiten von Geldtransfers, das Schreiben oder Aktualisieren von Daten im Datenspeicher der dApp usw.

Hier ist ein Beispiel für eine aufrufbare Funktion. Es wird für die Funktion addItem verwendet:

 @Callable(i) funcaddItem(title: String, price: Int, data: String) = { letsupplierAddress = toBase58String(i.caller.bytes) letitem = getKeyItem(supplierAddress, title) if( price <= 0) thenthrow("purchase amount cannot be less than item price") elseif( getValueItemSupplier(item) !=NONE ) thenthrow("an item is already exist") else{ WriteSet([ DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data) ]) } } 

Wir haben später an einem Abstimmungssystem gearbeitet, damit Benutzer für die Werbung oder Entfernung bestimmter Produkte abstimmen können. Es wurde ein "Commit-Reveal" -System verwendet, um Einfluss von außen während des Abstimmungsprozesses zu vermeiden.
Der Festschreibungsschritt wurde verwendet, um verschlüsselte Stimmen mit einer Hash-Funktion und Salt zu sammeln.
Der Enthüllungsschritt besteht darin, entschlüsselte Stimmen zu sammeln und ihre Hashes zu vergleichen.

Hier ist ein Beispiel für eine aufrufbare Funktion, die für diese Funktion verwendet wird:

 @Callable(i) funcvoteCommit(item: String, hash: String) = { letuser = toBase58String(i.caller.bytes) letcommits = getValueCommitsCount(item) letstatus = getValueItemStatus(item) if( commits >=VOTERS) thenthrow("reached max num of voters") elseif(getValueCommit(item, user) !=NONE) thenthrow("user has already participated") elseif(getKeyItemSupplier(item) ==NONE) thenthrow("item does not exist") elseif(status !=NONE && status !=VOTING) thenthrow("voting is not possible") else{ WriteSet([ DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitsCount(item), commits +1), DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING) ]) } } 

Was haben Sie noch aus dem Kurs gelernt?

Der Kurs befasste sich auch mit Tokenisierung und nicht fungiblen Token (NFTs) - Token, die etwas Einzigartiges darstellen und daher nicht austauschbar sind.

Die letzte Klasse konzentrierte sich auf die Verwendung von Orakeln. Da eine Blockchain nicht auf Daten von außen zugreifen kann, müssen wir Orakel verwenden, die reale Daten an die Blockchain senden.

Im Rahmen unseres Marktplatzes haben wir ein Orakel verwendet, um einen Lieferanten zu überprüfen und gegebenenfalls auf die schwarze Liste zu setzen, der beispielsweise einen zuvor verkauften Gutschein nicht akzeptiert hat.

Hier ist ein Codebeispiel:

 funcgetExtValueItemWhiteListStatus(item:String) = { item +"_verifier_status" } letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv" letVERIFIED = "verified" letBLACKLISTED = "blacklist" @Callable(i) funcsetstatus(supplier: String, status: String) = { letaccount = toBase58String(i.caller.bytes) if( account !=verifier ) thenthrow("only oracle verifier are able to manage whitelist") elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("wrong status") else{ WriteSet([ DataEntry(getExtValueItemWhiteListStatus(supplier), status) ]) } } 

Welche Teile des Kurses fanden Sie am nützlichsten?

Der nützlichste Teil waren die Herausforderungen. Sie machten die Vorträge klarer und festigten mein neu erworbenes Wissen durch Versuch und Irrtum. Das Üben mit der IDE , dem Explorer und den Orakeln war wirklich nützlich.

Wie wollen Sie das, was Sie aus dem Kurs gelernt haben, nutzen?

Dieser Kurs sollte von Anfang an dazu beitragen, mein Projekt auf die nächste Stufe zu bringen. Die Idee ist nun, sign-web.app on Ride neu zu schreiben. Die aktuelle Version bietet bereits funktionierende Funktionen für die Dokumentenzertifizierung, wird jedoch definitiv mit einer zukünftigen Ride-Version erweitert. Dies ermöglicht mehr Flexibilität und Klarheit sowie mehr Funktionen, einschließlich E-Mail-Zertifizierung, Mehrparteienvereinbarung usw.

Der Kurs war auch sehr aufschlussreich und viele Ideen tauchten in meinem Kopf auf. Ich bin sicher, dass in Zukunft mehr daraus werden wird.

Source: https://habr.com/ru/post/de462991/


All Articles