Haal de golf van Web 3.0 binnen

Ontwikkelaar Christoph Verdo vertelt over de online cursus ‘Mastering Web 3.0 with Waves’, die hij onlangs heeft gevolgd.

Haal de golf van Web 3.0 binnen

Vertel ons iets over jezelf. Wat trok je aan in deze cursus?

Ik ben al ongeveer 15 jaar bezig met webontwikkeling, voornamelijk als freelancer.

Tijdens de ontwikkeling van een webapplicatie voor langetermijnregistratie voor ontwikkelingslanden, in opdracht van een bancaire groep, stuitte ik op de uitdaging om blockchain-certificering te integreren. Destijds wist ik niet veel over blockchain-certificering, alhoewel ik al geïnteresseerd was in crypto-technologieën - voornamelijk als investeerder.

Uiteindelijk werd deze functie niet gerealiseerd, maar toen ik nadacht over de belangstelling van organisaties en banken voor dergelijke oplossingen voor hun applicaties, begon ik me in het onderwerp te verdiepen en lanceerde ik snel het project Signature Chain.

Ik heb de bètaversie ontwikkeld, die al beschikbaar is in het hoofdnet. Destijds was er nog geen [programmeer taal Waves] Ride, en deed ik alles op de eenvoudigste manier, door transacties met ingesloten JSON te gebruiken. Maar het hoofddoel was om geavanceerdere functionaliteit toe te voegen na de lancering van Ride. En dit is de belangrijkste reden waarom ik me bij de cursus heb aangesloten: de volgende fase van de ontwikkeling van het project omvatte het creëren van een gedecentraliseerde applicatie (dApp).

Welke aspecten van de cursus vond je het gemakkelijkst en welke het moeilijkst?

Het gemakkelijkste was dat we genoeg tijd hadden voor alle opdrachten. Het doel van de cursus is om iets te leren, niet om tegen elkaar te concurreren. De uitleg was zeer toegankelijk, en de illustraties waren eenvoudig maar compleet. Dit hielp bij het visualiseren en begrijpen van verschillende onderwerpen.

Bij het uitvoeren van de opdrachten werden we aangemoedigd om zelfstandig na te denken en soms iets zelf op te zoeken. Dit is de beste manier om iets te leren en de ideeën die in de lessen worden besproken, te begrijpen.

Verschillende keren begreep ik het theoretische deel niet volledig totdat ik begon met coderen, terwijl ik de opdracht uitvoerde. We mochten geen 'copy/paste' doen; alle code moest zelf worden geschreven, en dat hielp ook om alles beter te begrijpen.

Het moeilijkste was dat de meerkeuzevragen in de opdracht niet altijd duidelijk waren. Mijn Engels is niet perfect en de vragen waren geschreven door iemand die geen moedertaalspreker is, waardoor er soms misverstanden ontstonden.

Misschien zou het deel van de cursus dat aan orakels en NFT's is gewijd uitgebreider kunnen zijn. Maar in ieder geval is de belangrijkste taak van de cursus om ontwikkelaars te interesseren. Daarna, om alle aspecten volledig te begrijpen, moet er natuurlijk tijd worden besteed om te experimenteren en te oefenen.

Kun je meer vertellen over de oplossing waar je tijdens de cursus aan hebt gewerkt – ‘Coupon Bazaar’? Kunnen we ook voorbeeldcode zien?

Ja, we hebben gewerkt aan ‘Coupon Bazaar’, dat is een marktplaats waar mensen coupons verkopen en kopen die het recht geven om goederen en diensten tegen een lagere prijs aan te schaffen. Iedere coupon wordt gepresenteerd als een digitale asset die een speciale korting van de leverancier impliceert.

Haal de golf van Web 3.0 binnen

Er moesten verschillende componenten van de applicatie worden ontwikkeld. Ten eerste moest er een systeem worden gecreëerd voor het registreren van leveranciers en het beheren van coupons. Daarna was er behoefte aan een verificatiefunctie en de mogelijkheid voor gebruikers om coupons te zoeken.

Haal de golf van Web 3.0 binnen

Gedurende de cursus hebben we ook verschillende nieuwe functies toegevoegd, inclusief een stemfunctie en een functie die het mogelijk maakt om leveranciers te verifiëren en op een zwarte lijst te plaatsen.

Eerst hebben we de verschillen bestudeerd tussen smart assets, smart accounts en dApp-accounts, en de werking van verificatiefuncties. Verificatiefuncties stellen de accountgedragingen in die standaard zijn ingesteld. Standaard controleren ze de handtekeningen van transacties, maar de verificatiefunctie maakt het mogelijk om andere 'regels' vast te stellen.

{-# 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 DataTransaction => true
        case _ => false
    }
}

Vervolgens begonnen we coupons toe te voegen. We gebruikten een van de belangrijkste functies van dApp, die het mogelijk maakt om gegevens van elk type als paren van ‘sleutel-waarde’ in de blockchain te registreren – een datatransactie. We combineerden dit met een nieuwe transactie, invokeScript, die wordt gebruikt om een aanroepende functie van buiten de blockchain in de dApp op te roepen.

Het type gegevensoverdracht dat we tijdens de cursus hebben gebruikt, is het toevoegen van coupons op de marktplaats:

letdatajson = {
    "title":        "t-shirt met, stem 1",
    "coupon_price": 10000000,
    "old_price":    1000000000,
    "new_price":    100000000,
    "address":      "Universum",
    "description":  "Ik wil dat je liefde maakt, niet oorlog, ik weet dat je het al eerder hebt gehoord",
    "image":        "https://bit.ly/2EXTghg"
}
it('voeg item toe', 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)
})

Voor de verwerking van deze gegevens met de functie addItem en de ontwikkeling van de functie voor aankoop en andere opties, hebben we een aanroepbare functie gebruikt die door de gebruiker van buiten de blockchain kan worden aangeroepen. Hierdoor kan het verschillende taken uitvoeren, zoals het initiëren van geldtransfers, het schrijven of bijwerken van gegevens in de gegevensopslag van de dApp, enzovoort.

Hier is een voorbeeld van de aanroepbare functie die in de functie addItem wordt gebruikt:

@Callable(i)
funcaddItem(title: String, price: Int, data: String) = {
    letsupplierAddress = toBase58String(i.caller.bytes)
    letitem = getKeyItem(supplierAddress, title)
    if( price <= 0) thenthrow("aankoopbedrag mag niet lager zijn dan de itemprijs")
    elseif( getValueItemSupplier(item) !=NONE ) thenthrow("een item bestaat al")
    else{
        WriteSet([
           DataEntry(getKeyItemSupplier(item), supplierAddress),
           DataEntry(getKeyItemPrice(item), price),
           DataEntry(getKeyItemData(item), data)
        ])
    }
}

Later hebben we een stemmechanisme ontwikkeld waarmee stemmen kunnen worden uitgebracht voor het promoten of verwijderen van specifieke producten. Om invloed van buitenaf op het stemproces te voorkomen, maakt het gebruik van het schema ‘Commit-Reveal’.

Fase ‘commit’ wordt gebruikt voor het verzamelen van versleutelde stemmen met behulp van een hash-functie en ‘salt’.

Fase ‘reveal’ wordt gebruikt voor het verzamelen van versleutelde stemmen en het vergelijken van hun hashes.

Hier is een voorbeeld van de aanroepbare functie die hier wordt gebruikt:

@Callable(i)
funcvoteCommit(item: String, hash: String) = {
    letuser = toBase58String(i.caller.bytes)
    letcommits = getValueCommitsCount(item)
    letstatus = getValueItemStatus(item)
    if( commits >=VOTERS) thenthrow("max aantal stemmers bereikt")
    elseif(getValueCommit(item, user) !=NONE) thenthrow("gebruiker heeft al meegedaan")
    elseif(getKeyItemSupplier(item) ==NONE) thenthrow("item bestaat niet")
    elseif(status !=NONE && status !=VOTING) thenthrow("stemmen is niet mogelijk")
    else{
        WriteSet([
           DataEntry(getKeyCommit(item, user), hash),
           DataEntry(getKeyCommitsCount(item), commits +1),
           DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING)
        ])
    }
}
>

Wat heb je verder geleerd tijdens de cursus?

De cursus omvatte ook tokenisatie en non-fungible tokens (NFT's) – tokens die iets unieks vertegenwoordigen en daarom niet verwisselbaar zijn.

De laatste les was gewijd aan oracle's. Aangezien de blockchain geen gegevens uit de buitenwereld kan ontvangen, hebben we oracle's nodig om deze gegevens erin te sturen.

Voor onze marktplaats waren oracle's nodig om leveranciers te verifiëren en indien nodig op een zwarte lijst te zetten als ze bijvoorbeeld een verkochte coupon niet hadden geaccepteerd.

Hier is een voorbeeld:

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("alleen oracle verifier kunnen de whitelist beheren")
    elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("foute status")
    else{
        WriteSet([
           DataEntry(getExtValueItemWhiteListStatus(supplier), status)
        ])
    }
}

Wat was het meest nuttige voor jou?

Het nuttigste onderdeel waren de opdrachten. Dankzij hen werd het college materiaal duidelijker en verankered in de praktijk door middel van vallen en opstaan. Ook het praktische werk met IDE, de explorer en oracle's.

Hoe ben je van plan om wat je geleerd hebt in de praktijk te gebruiken?

Vanaf het begin verwachtte ik dat de cursus mijn project naar een hoger niveau zou tillen. Het idee was om nu de code te schrijven sign-web.app in RIDE. De bestaande versie beschikt al over functies voor documentcertificering, maar dankzij RIDE kan deze aanzienlijk worden verbeterd. De nieuwe versie zal flexibeler en gebruiksvriendelijker zijn, met meer functies, waaronder certificering van e-mails, overeenkomsten tussen meerdere partijen, enz.

De cursus gaf me ook stof tot nadenken en ik heb veel nieuwe ideeën opgedaan. Ik ben ervan overtuigd dat de resultaten ook in de toekomst zichtbaar zullen zijn.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster