Ride the Wave of Web 3.0

Untwikkelder Christophe Verdo fertelt oer de online kursus 'Web 3.0 behearskje mei Waves' dy't hy koartlyn trochjûn.

Ride the Wave of Web 3.0

Fertel ús in bytsje oer dysels. Wat ynteressearre jo yn dizze kursus?

Ik bin sa'n 15 jier in webûntwikkelder, meast as freelancer.

By it ûntwikkeljen fan in webapplikaasje foar in lange termyn registraasje foar ûntwikkelingslannen foar in bankgroep, waard ik konfrontearre mei de taak om blockchain-sertifikaasje yn te yntegrearjen. Op dat stuit wist ik net folle oer blockchain-sertifikaasje, hoewol ik al ynteressearre wie yn kryptotechnologyen - benammen as ynvestearder.

As gefolch, dizze funksje waard net ymplementearre, mar nei te tinken oer it feit dat organisaasjes en banken binne ynteressearre yn sa'n oplossing foar harren applikaasjes, ik begûn te studearjen it probleem en gau lansearre it projekt Hantekening Chain.

Ik haw der in beta-ferzje fan ûntwikkele dy't al beskikber is op it mainnet. Op dat stuit [de programmeartaal fan Waves] Ride bestie noch net, en ik die alles op 'e ienfâldichste manier, mei help fan oersettingstransaksjes mei nestele JSON. Mar it haaddoel wie om mear avansearre funksjonaliteit ta te foegjen nei de lansearring fan Ride. En dit is de wichtichste reden wêrom't ik by de kursus kaam: de folgjende faze fan 'e ûntwikkeling fan it projekt befette it meitsjen fan in desintralisearre applikaasje (dApp).

Hokker aspekten fan de kursus fûnen jo it maklikst en hokker it dreechste?

It ienfâldichste wie dat wy genôch tiid hiene foar alle taken. It punt fan de kursus is om wat te learen, net mei elkoar te konkurrearjen. De taljochtingen wiene tige tagonklik en de yllustraasjes wiene ienfâldich mar wiidweidich. It holp om ferskate ûnderwerpen te visualisearjen en te begripen.

As ûnderdiel fan de opdrachten waarden wy stimulearre om selsstannich te tinken en soms sels dingen te learen. Dit is de bêste manier om wat te learen en de ideeën dy't yn 'e klasse besprutsen binne te begripen.

Ferskate kearen begriep ik it teoretyske diel net folslein oant ik begon te skriuwen koade by it foltôgjen fan de opdracht. Wy mochten net 'copy/paste' dwaan, wy moasten sels alle koade skriuwe, en dat holp ek om alles better te begripen.

It lestichste wie dat de fragen yn de mearkeuzetaak net altyd dúdlik wiene. Myn Ingelsk is net perfekt en de fragen binne skreaun troch in net-memmetaalsprekker, sadat der sa no en dan misferstannen wiene.

Miskien kin it diel fan 'e kursus wijd oan orakels en NFT's mear detaillearre wurde. Mar yn alle gefallen is de wichtichste taak fan 'e kursus om ûntwikkelders te ynteressearjen. Dan, om al syn aspekten folslein te begripen, sille jo fansels wat tiid moatte besteegje oan eksperimintearjen en oefenjen.

Kinne jo ús mear fertelle oer de oplossing wêr't jo de hiele kursus oan wurke hawwe - 'Coupon Bazaar'? Kin ik ek sjoch koade samples?

Ja, wy hawwe wurke oan 'Coupon Bazaar', dat is in merkplak wêr't minsken coupons ferkeapje en keapje dy't har it rjocht jouwe om guod en tsjinsten te keapjen tsjin in legere priis. Elke kûpon wurdt fertsjintwurdige troch in digitale asset dy't in spesjale koarting biedt fan 'e leveransier.

Ride the Wave of Web 3.0

It wie nedich om ferskate applikaasjekomponinten te ûntwikkeljen. Earst moast in systeem ynsteld wurde om leveransiers te registrearjen en kûpons te behearjen. Dan hawwe wy in ferifikaasjefunksje nedich en de mooglikheid foar brûkers om te sykjen nei coupons.

Ride the Wave of Web 3.0

Tidens de kursus hawwe wy ek tafoege ferskate nije funksjes, ynklusyf in stim systeem en in funksje wêrmei jo te ferifiearjen en blacklist vendors.

Wy learden earst it ferskil tusken tûke aktiva, tûke akkounts, en dApp-akkounts en de basis fan wurkjen mei ferifikaasjefunksjes. De ferifikaasjefunksjes kinne jo it standertgedrach fan in akkount feroarje. Standert ferifiearje se transaksjehantekeningen, mar de ferifikaasjefunksje lit jo oare "regels" ynstelle.

{-# 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
    }
}

Doe begûnen wy coupons ta te foegjen. Wy brûkten ien fan 'e wichtichste dApp-funksjes, wêrtroch jo gegevens fan elk type kinne skriuwe nei de blockchain yn' e foarm fan kaai-wearde-pearen - in gegevenstransaksje. Wy kombineare it mei in nije transaksje, invokeScript, dy't brûkt wurdt om in oproppen funksje yn in dApp fan bûten de blockchain te neamen.

It type gegevenstransaksje dat wy yn 'e kursus brûkten is it tafoegjen fan coupons oan' e merke:

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)
})

Om dizze gegevens te ferwurkjen mei de addItem-funksje en de oankeapfunksje en oare opsjes te ûntwikkeljen, hawwe wy in callable funksje brûkt dy't de brûker kin fan bûten de blockchain neame. As resultaat kin it ferskate taken útfiere, lykas it inisjearjen fan de oerdracht fan fûnsen, it skriuwen of bywurkjen fan gegevens yn 'e dApp-gegevenswinkel, ensfh.

Hjir is in foarbyld fan in callable funksje brûkt yn de addItem funksje:

@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)
        ])
    }
}

Wy hawwe letter in stimsysteem ûntwikkele wêrmei jo stimmen kinne útbringe om bepaalde produkten te befoarderjen of te ferwiderjen. Om ynfloed fan bûten op it stimproses foar te kommen, brûkt it it 'Commit-Reveal'-skema.

De "commit"-faze wurdt brûkt om fersifere stimmen te sammeljen mei in hashfunksje en in "salt".

De "reveal" faze wurdt brûkt om fersifere stimmen te sammeljen en har hashes te fergelykjen.

Hjir is in foarbyld fan in neamde funksje dy't hjir brûkt wurdt:

@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)
        ])
    }
}
>

Wat hawwe jo mear leard fan 'e kursus?

De kursus omfette ek tokenisaasje en net-fungibele tokens (NFT) - tokens dy't wat unyk fertsjintwurdigje en dus net útwikselber binne.

De lêste les wie wijd oan orakels. Sûnt de blockchain kin gjin gegevens ûntfange fan 'e bûtenwrâld, hawwe wy orakels nedich om dizze gegevens nei it te stjoeren.

Foar ús merkplak wiene orakels nedich om in leveransier te kontrolearjen en, as it nedich wie, op 'e swartlist te setten dy't bygelyks gjin ferkochte kûpon akseptearre.

Hjir is in foarbyld:

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)
        ])
    }
}

Wat wie it nuttichst foar jo?

It nuttichste diel is de opdrachten. Mei tank oan harren, it lêzing materiaal waard dúdliker, en de nij opdien kennis waard konsolidearre troch trial and error. It praktyske wurk mei HERE, ûntdekkingsreizger и orakels.

Hoe binne jo fan plan om wat jo leard hawwe yn 'e praktyk te bringen?

Fan it begjin ôf ferwachte ik dat de kursus soe helpe om myn projekt nei it folgjende nivo te nimmen. It idee wie om no de koade te skriuwen teken-web.app op RIDE. De besteande ferzje hat al funksjes foar dokumintsertifikaasje, mar troch RIDE kin it gâns ferbettere wurde. De nije ferzje sil fleksibeler en begrypliker wêze, mei mear funksjes, ynklusyf e-postsertifikaasje, mearpartijen oerienkomsten, en mear.

De kursus joech my ek stof ta tinken en ik krige in soad nije ideeën. Ik bin der wis fan dat de resultaten sille ferskine yn 'e takomst.

Boarne: www.habr.com

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster