Reiten Sie auf der Welle von Web 3.0

Der Entwickler Christoph Verdo spricht ĂŒber den Online-Kurs ‚Mastering Web 3.0 with Waves‘, den er kĂŒrzlich besucht hat.

Reiten Sie auf der Welle von Web 3.0

ErzĂ€hlen Sie uns ein wenig ĂŒber sich. Was hat Ihr Interesse an diesem Kurs geweckt?

Ich bin seit etwa 15 Jahren als Webentwickler tÀtig, hauptsÀchlich als Freiberufler.

Bei der Entwicklung einer Webanwendung fĂŒr langfristige Registrierungen in EntwicklungslĂ€ndern im Auftrag einer Banken-Gruppe stieß ich auf die Herausforderung, Blockchain-Zertifizierungen zu integrieren. Zu diesem Zeitpunkt wusste ich nicht viel ĂŒber Blockchain-Zertifizierungen, obwohl ich mich bereits fĂŒr Krypto-Technologien interessierte – hauptsĂ€chlich als Investor.

Letztendlich wurde diese Funktion nicht umgesetzt, aber als ich darĂŒber nachdachte, dass Organisationen und Banken an einer solchen Lösung fĂŒr ihre Anwendungen interessiert sind, begann ich, das Thema zu erforschen, und startete bald das Projekt Signature Chain.

Ich habe die Beta-Version entwickelt, die bereits im Hauptnetz verfĂŒgbar ist. Zu diesem Zeitpunkt gab es die [Programmiersprache Waves] Ride noch nicht, und ich habe alles auf die einfachste Weise gemacht, indem ich Überweisungstransaktionen mit eingebettetem JSON verwendet habe. Das Hauptziel war jedoch, nach dem Launch von Ride fortschrittlichere Funktionen hinzuzufĂŒgen. Und das ist der Hauptgrund, warum ich dem Kurs beigetreten bin: Die nĂ€chste Entwicklungsstufe des Projekts sah die Erstellung einer dezentralen Anwendung (dApp) vor.

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

Am einfachsten war, dass wir genĂŒgend Zeit fĂŒr alle Aufgaben hatten. Der Sinn des Kurses besteht darin, etwas zu lernen, und nicht darin, gegeneinander zu konkurrieren. Die ErklĂ€rungen waren sehr zugĂ€nglich, und die Illustrationen waren einfach, aber umfassend. Das hat geholfen, verschiedene Themen zu visualisieren und zu verstehen.

Bei der Bearbeitung der Aufgaben wurden wir angeregt, unabhÀngig zu denken und manchmal selbst etwas zu erforschen. Das ist der beste Weg, um zu lernen und die Ideen zu verstehen, die im Unterricht behandelt werden.

Es gab mehrmals Momente, in denen ich die theoretischen Inhalte nicht vollstÀndig verstand, bis ich begann, Code zu schreiben und die Aufgaben zu lösen. Es war uns nicht erlaubt, 'copy/paste' zu verwenden; wir mussten den gesamten Code selbst schreiben, was mir ebenfalls half, alles besser zu verstehen.

Das Schwierigste war, dass die Fragen in den Aufgaben mit mehreren Antwortmöglichkeiten nicht immer klar waren. Mein Englisch ist nicht perfekt, und die Fragen wurden von jemandem verfasst, der kein Muttersprachler war, was manchmal zu MissverstĂ€ndnissen fĂŒhrte.

Vielleicht könnte der Teil des Kurses, der sich mit Orakeln und NFTs beschĂ€ftigt, etwas ausfĂŒhrlicher sein. Aber die Hauptaufgabe des Kurses ist es, die Entwickler zu interessieren. Um alle Aspekte vollstĂ€ndig zu verstehen, wird man natĂŒrlich etwas Zeit investieren mĂŒssen, um zu experimentieren und zu ĂŒben.

Könnten Sie bitte mehr ĂŒber die Lösung erzĂ€hlen, an der Sie wĂ€hrend des gesamten Kurses gearbeitet haben – 'Coupon Bazaar'? WĂ€re es auch möglich, einige Codebeispiele zu sehen?

Ja, wir haben an 'Coupon Bazaar' gearbeitet, einem Marktplatz, auf dem Menschen Gutscheine kaufen und verkaufen können, die ihnen das Recht geben, Produkte und Dienstleistungen zu einem niedrigeren Preis zu erwerben. Jeder Gutschein wird als digitales Asset dargestellt, das einen speziellen Rabatt vom Anbieter ermöglicht.

Reiten Sie auf der Welle von Web 3.0

Es musste eine Reihe von Komponenten fĂŒr die Anwendung entwickelt werden. ZunĂ€chst war ein System zur Registrierung von Anbietern und zur Verwaltung von Gutscheinen erforderlich. Danach brauchten wir eine Verifikationsfunktion sowie die Möglichkeit fĂŒr Benutzer, Gutscheine zu suchen.

Reiten Sie auf der Welle von Web 3.0

WĂ€hrend des Kurses haben wir auch mehrere neue Funktionen hinzugefĂŒgt, darunter ein Abstimmungssystem und eine Funktion, die es ermöglicht, Anbieter zu verifizieren und auf eine schwarze Liste zu setzen.

ZunĂ€chst haben wir den Unterschied zwischen Smart Assets, Smart Accounts und dApp Accounts sowie die Funktionsweise der Verifikatorfunktionen untersucht. Die Verifikatorfunktionen ermöglichen es, das standardmĂ€ĂŸige Verhalten des Kontos zu Ă€ndern. StandardmĂ€ĂŸig ĂŒberprĂŒfen sie die Signaturen von Transaktionen, wĂ€hrend die Verifikatorfunktion andere "Regeln" festlegen kann.

{-# 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, Coupons hinzuzufĂŒgen. Wir haben eine der wichtigsten Funktionen der dApp genutzt, die es ermöglicht, Daten jeglicher Art in Form von „SchlĂŒssel-Wert“-Paaren in die Blockchain zu schreiben – eine Datentransaktion. Wir haben dies mit einer neuen Transaktion kombiniert, invokeScript, die zum Aufruf einer Funktion innerhalb der dApp von außerhalb der Blockchain verwendet wird.

Die Art der Datentransaktionen, die wir wĂ€hrend des Kurses verwendet haben, betraf das HinzufĂŒgen von Coupons zum Marktplatz:

letdatajson = {
    "title":        "t-shirt with , vote 1",
    "coupon_price": 10000000,
    "old_price":    1000000000,
    "new_price":    100000000,
    "address":      "Universum",
    "description":  "Ich möchte, dass du Liebe machst, nicht Krieg; ich weiß, du hast es schon einmal gehört",
    "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)
})

FĂŒr die Verarbeitung dieser Daten durch die Funktion addItem und die Entwicklung von Kauf- sowie weiteren Optionen haben wir eine aufrufbare Funktion verwendet, die der Benutzer außerhalb der Blockchain aufrufen kann. Dadurch können verschiedene Aufgaben ausgefĂŒhrt werden, wie zum Beispiel die Initiierung von MittelĂŒbertragungen, das Schreiben oder Aktualisieren von Daten im dApp-Datenspeicher usw.

Hier ist ein Beispiel fĂŒr die aufrufbare Funktion, die in der Funktion addItem verwendet wird:

@Callable(i)
func addItem(title: String, price: Int, data: String) = {
    let supplierAddress = toBase58String(i.caller.bytes)
    let item = getKeyItem(supplierAddress, title)
    if (price <= 0) then throw("Der Kaufbetrag darf nicht kleiner als der Artikelpreis sein")
    elseif (getValueItemSupplier(item) != NONE) then throw("Ein Artikel existiert bereits")
    else {
        WriteSet([
           DataEntry(getKeyItemSupplier(item), supplierAddress),
           DataEntry(getKeyItemPrice(item), price),
           DataEntry(getKeyItemData(item), data)
        ])
    }
}

SpĂ€ter haben wir ein Abstimmungssystem entwickelt, das es ermöglicht, Stimmen fĂŒr die Förderung oder Entfernung bestimmter Produkte abzugeben. Um Ă€ußeren Einfluss auf den Abstimmungsprozess zu vermeiden, verwendet es das 'Commit-Reveal'-Schema.

Die Phase 'commit' dient zur Sammlung von verschlĂŒsselten Stimmen mittels Hash-Funktion und 'Salt'.

Die Phase 'reveal' wird verwendet, um die verschlĂŒsselten Stimmen zu sammeln und ihre Hash-Werte zu vergleichen.

Hier ist ein Beispiel fĂŒr die aufgerufene Funktion, die hier verwendet wird:

@Callable(i)
funcvoteCommit(item: String, hash: String) = {
    let user = toBase58String(i.caller.bytes)
    let commits = getValueCommitsCount(item)
    let status = getValueItemStatus(item)
    if (commits >= VOTERS) then throw("maximale Anzahl an WĂ€hlern erreicht")
    elseif (getValueCommit(item, user) != NONE) then throw("Benutzer hat bereits teilgenommen")
    elseif (getKeyItemSupplier(item) == NONE) then throw("Artikel existiert nicht")
    elseif (status != NONE && status != VOTING) then throw("Abstimmung nicht möglich")
    else {
        WriteSet([
           DataEntry(getKeyCommit(item, user), hash),
           DataEntry(getKeyCommitsCount(item), commits + 1),
           DataEntry(getKeyItemStatus(item), if (commits == VOTERS) then REVEAL else VOTING)
        ])
    }
}
>

Was haben Sie sonst noch aus dem Kurs gelernt?

Der Kurs umfasste auch Tokenisierung und non-fungible Tokens (NFT) – Tokens, die etwas Einzigartiges reprĂ€sentieren und daher nicht austauschbar sind.

Die letzte Sitzung befasste sich mit Orakeln. Da die Blockchain keine Daten aus der Außenwelt beziehen kann, benötigen wir Orakel, um diese Daten hineinzusenden.

FĂŒr unseren Marktplatz waren Orakel erforderlich, um den Anbieter zu ĂŒberprĂŒfen und gegebenenfalls auf die schwarze Liste zu setzen, wenn dieser beispielsweise den verkauften Gutschein nicht akzeptiert hat.

Hier ein Beispiel:

funcgetExtValueItemWhiteListStatus(item:String) = {
    item +"_verifier_status"
}
 
letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv"
letVERIFIED = "verifiziert"
letBLACKLISTED = "schwarzliste"
@Callable(i)
funcsetstatus(supplier: String, status: String) = {
    letaccount = toBase58String(i.caller.bytes)
    if( account !=verifier ) thenthrow("nur Oracle-Verifizierer sind in der Lage, die Whitelist zu verwalten")
    elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("falscher Status")
    else{
        WriteSet([
           DataEntry(getExtValueItemWhiteListStatus(supplier), status)
        ])
    }
}

Was fanden Sie am hilfreichsten?

Der nĂŒtzlichste Teil waren die Aufgaben. Sie machten die Vorlesungsinhalte verstĂ€ndlicher, und das neu erlernte Wissen wurde durch Ausprobieren gefestigt. Auch die praktische Arbeit mit IDE, dem Explorer und Oracle.

Wie planen Sie, das Gelernte in der Praxis umzusetzen?

Von Anfang an erwartete ich, dass der Kurs dazu beitrĂ€gt, mein Projekt auf eine neue Ebene zu heben. Die Idee war, jetzt den Code zu schreiben sign-web.app in RIDE. Die bestehende Version bietet bereits Funktionen zur Dokumentenzertifizierung, aber mit RIDE wird sie erheblich verbessert. Die neue Version wird flexibler und benutzerfreundlicher sein, mit mehr Funktionen, einschließlich der Zertifizierung von E-Mails, Vereinbarungen zwischen mehreren Parteien usw.

Der Kurs hat auch zum Nachdenken angeregt und mir viele neue Ideen gegeben. Ich bin ĂŒberzeugt, dass sich die Ergebnisse auch in Zukunft zeigen werden.

Quelle: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster