Reite die Welle von Web 3.0

Der Entwickler Christoph Verdo spricht über den Online-Kurs 'Mastering Web 3.0 with Waves', den er kürzlich abgeschlossen hat.

Reite die Welle von Web 3.0

Erzählen Sie ein wenig über sich. Was hat Ihr Interesse an diesem Kurs geweckt?

Ich beschäftige mich seit etwa 15 Jahren mit Webentwicklung, hauptsächlich als Freiberufler.

Während ich eine langfristige Registrierungs-Webanwendung für Entwicklungsländer im Auftrag einer Bankengruppe entwickelte, stieß ich auf die Herausforderung, die Blockchain-Zertifizierung zu integrieren. Zu diesem Zeitpunkt wusste ich nicht viel über Blockchain-Zertifizierung, obwohl ich mich bereits für Krypto-Technologien interessiert hatte – 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, mich mit diesem Thema zu beschäftigen, und startete bald das Projekt Signature Chain.

Ich entwickelte die Beta-Version, die bereits im Hauptnetz verfügbar ist. Zu diesem Zeitpunkt gab es [Programmiersprache Waves] Ride noch nicht, und ich machte alles auf die einfachste Art, indem ich Transaktionen mit eingebettetem JSON durchführte. Aber das Hauptziel war, nach dem Start von Ride erweiterte Funktionen hinzuzufügen. Und das ist der Hauptgrund, warum ich mich dem Kurs angeschlossen habe: die nächste Entwicklungsstufe des Projekts sah vor, eine dezentrale Anwendung (dApp) zu erstellen.

Welche Aspekte des Kurses empfanden Sie als am einfachsten und welche als 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 gegeneinander zu konkurrieren. Die Erklärungen waren sehr zugänglich, und die Illustrationen waren einfach, aber umfassend. Das half, verschiedene Themen zu visualisieren und zu verstehen.

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

Einige Male verstand ich den theoretischen Teil nicht vollständig, bis ich anfing, Code zu schreiben und die Aufgabe auszuführen. Uns war es nicht erlaubt, 'copy/paste' zu machen; den gesamten Code mussten wir selbst schreiben, und das half ebenfalls, alles besser zu verstehen.

Am schwierigsten war es, dass die Fragen in der Aufgabe mit mehreren Antwortmöglichkeiten nicht immer klar waren. Mein Englisch ist nicht perfekt, und die Fragen wurden von jemandem verfasst, der kein Muttersprachler ist, daher gab es manchmal Missverständnisse.

Vielleicht könnte der Teil des Kurses, der sich mit Orakeln und NFTs beschäftigt, ausführlicher sein. Aber in jedem Fall ist das Hauptziel des Kurses, Entwickler zu interessieren. Um alle Aspekte vollständig zu verstehen, muss man natürlich etwas Zeit damit verbringen, zu experimentieren und zu praktizieren.

Erzählen Sie uns mehr über die Lösung, an der Sie während des gesamten Kurses gearbeitet haben – 'Coupon Bazaar'? Kann man auch Codebeispiele sehen?

Ja, wir haben an 'Coupon Bazaar' gearbeitet, das ist ein Marktplatz, auf dem Menschen Gutscheine verkaufen und kaufen, die das Recht geben, Waren und Dienstleistungen zu einem niedrigeren Preis zu erwerben. Jeder Gutschein wird als digitaler Vermögenswert dargestellt, der einen speziellen Rabatt vom Anbieter vorsieht.

Reite die Welle von Web 3.0

Es war notwendig, mehrere Komponenten der Anwendung zu entwickeln. Zuerst musste ein System zur Registrierung der Anbieter und zur Verwaltung der Gutscheine geschaffen werden. Dann benötigten wir eine Verifizierungsfunktion und die Möglichkeit, Gutscheine durch die Benutzer zu suchen.

Reite die 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 die schwarze Liste zu setzen.

Zuerst haben wir den Unterschied zwischen Smart Assets, Smart Accounts und dApp-Konten sowie die Grundlagen der Arbeit mit den Verifizierungsfunktionen studiert. Die Verifizierungsfunktionen ermöglichen es, das standardmäßig festgelegte Verhalten des Kontos zu ändern. Standardmäßig überprüfen sie die Signaturen von Transaktionen, die Verifizierungsfunktion ermöglicht es, andere „Regeln“ festzulegen.

{#- STDLIB_VERSION 3 -#}
{#- CONTENT_TYPE DAPP -#}
{#- SCRIPT_TYPE ACCOUNT -#}
let ownerPublicKey = base58'H8ndsHjBha6oJBQQx33zqbP5wi8sQP7hwgjzWUv3q95M'
@Verifier(tx)
func verify() = {
    match tx {
        case: SetScriptTransaction => sigVerify(tx.bodyBytes, tx.proofs[0], ownerPublicKey)
        case d: DataTransaction => true
        case _ => false
    }
}

Dann haben wir begonnen, Gutscheine hinzuzufügen. Wir haben eine der wichtigsten Funktionen der dApp genutzt, die es ermöglicht, beliebige Daten in Form von „Schlüssel-Wert“-Paaren in die Blockchain zu schreiben – eine Datentransaktion. Wir haben sie mit einer neuen Transaktion, invokeScript, kombiniert, die verwendet wird, um eine aufrufbare Funktion in der dApp von außerhalb der Blockchain aufzurufen.

Die Art der Datentransaktionen, die wir während des Kurses verwendet haben, besteht darin, Gutscheine auf dem Marktplatz hinzuzufügen:

letdatajson = {
    "title":        "t-shirt mit , stimme 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 das 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 mit der Funktion addItem und die Entwicklung der Kauf- und anderer Optionen haben wir eine aufrufbare Funktion verwendet, die der Benutzer außerhalb der Blockchain aufrufen kann. Dadurch kann sie verschiedene Aufgaben ausführen, wie zum Beispiel die Initiierung von Geldtransfers, 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)
funcaddItem(title: String, price: Int, data: String) = {
    letsupplierAddress = toBase58String(i.caller.bytes)
    letitem = getKeyItem(supplierAddress, title)
    if( price <= 0) thenthrow("Kaufbetrag kann nicht geringer sein als der Artikelpreis")
    elseif( getValueItemSupplier(item) !=NONE ) thenthrow("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 Löschung bestimmter Produkte abzugeben. Um Einflussnahme von außen auf den Abstimmungsprozess zu verhindern, verwendet es das ‚Commit-Reveal‘-Schema.

Die Phase «commit» wird verwendet, um verschlüsselte Stimmen mithilfe einer Hash-Funktion und „Salz“ zu sammeln.

Die Phase «reveal» wird verwendet, um verschlüsselte Stimmen zu sammeln und deren Hashes zu vergleichen.

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

@Callable(i)
funcvoteCommit(item: String, hash: String) = {
    letuser = toBase58String(i.caller.bytes)
    letcommits = getValueCommitsCount(item)
    letstatus = getValueItemStatus(item)
    if( commits >=VOTERS) thenthrow("maximale Anzahl von Wählern erreicht")
    elseif(getValueCommit(item, user) !=NONE) thenthrow("Benutzer hat bereits teilgenommen")
    elseif(getKeyItemSupplier(item) ==NONE) thenthrow("Artikel existiert nicht")
    elseif(status !=NONE && status !=VOTING) thenthrow("Abstimmung ist nicht möglich")
    else{
        WriteSet([
           DataEntry(getKeyCommit(item, user), hash),
           DataEntry(getKeyCommitsCount(item), commits +1),
           DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING)
        ])
    }
}
>

Was haben Sie sonst noch aus dem Kurs gelernt?

Der Kurs umfasste auch die Tokenisierung und nicht-fungible Token (NFT) – Token, die etwas Einzigartiges darstellen und daher nicht austauschbar sind.

Die letzte Sitzung war den Orakeln gewidmet. Da die Blockchain keine Daten aus der externen Welt übernehmen kann, benötigen wir Orakel, um diese Daten dorthin zu senden.

Für unseren Marktplatz waren Orakel erforderlich, um Lieferanten zu verifizieren und gegebenenfalls auf die schwarze Liste zu setzen, die beispielsweise einen verkauften Gutschein nicht akzeptiert haben.

Hier ist 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 der Oracle-Verifier kann die Whitelist verwalten")
    elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("falscher Status")
    else{
        WriteSet([
           DataEntry(getExtValueItemWhiteListStatus(supplier), status)
        ])
    }
}

Was war für Sie am nützlichsten?

Der nützlichste Teil waren die Aufgaben. Dank dieser wurde der Stoff der Vorlesungen verständlicher, und das gerade erworbene Wissen wurde durch Ausprobieren gefestigt. Auch die praktische Arbeit mit IDE, Explorern und Orakeln.

Wie planen Sie, das Gelernte praktisch anzuwenden?

Von Anfang an erwartete ich, dass der Kurs mein Projekt auf ein neues Level heben würde. Die Idee war, nun den Code zu schreiben sign-web.app in RIDE. Die bestehende Version verfügt bereits über Funktionen zur Zertifizierung von Dokumenten, aber dank RIDE wird sie erheblich verbessert werden können. Die neue Version wird flexibler und verständlicher sein und mehr Funktionen bieten, einschließlich der Zertifizierung von E-Mails, Vereinbarungen zwischen mehreren Parteien usw.

Der Kurs hat auch Denkanstöße gegeben, und ich habe viele neue Ideen entwickelt. Ich bin mir sicher, dass sich die Ergebnisse auch in Zukunft zeigen werden.

Quelle: habr.com

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster