Zvezte sa na vlne Web 3.0

Vývojár Christophe Verdot hovorí o online kurze 'Zvládnutie Web 3.0 pomocou Waves“, ktorú nedávno prešiel.

Zvezte sa na vlne Web 3.0

Povedz nám niečo o sebe. Čo ťa zaujalo na tomto kurze?

Vývoju webu sa venujem asi 15 rokov, väčšinou ako freelancer.

Pri vývoji webovej aplikácie pre dlhodobý register pre rozvojové krajiny pre bankovú skupinu som stál pred úlohou integrovať do nej certifikáciu blockchainu. V tom čase som o blockchainovej certifikácii veľa nevedel, aj keď som sa už o krypto technológie zaujímal, hlavne ako investor.

V dôsledku toho táto funkcia nebola implementovaná, ale v domnení, že organizácie a banky majú záujem o takéto riešenie pre svoje aplikácie, som začal študovať problematiku a čoskoro som spustil projekt Podpisový reťazec.

Vyvinul som jeho beta verziu, ktorá je už dostupná na mainnete. V tom čase neexistoval [programovací jazyk Waves] Ride, takže som všetko robil tým najjednoduchším spôsobom, pomocou prekladových transakcií s vnoreným JSON. Hlavným cieľom však bolo pridať pokročilejšie funkcie po spustení Ride. A to je hlavný dôvod, prečo som sa do kurzu zapojil: ďalšia fáza vývoja projektu zahŕňala vytvorenie decentralizovanej aplikácie (dApp).

Ktoré aspekty kurzu boli pre vás najjednoduchšie a ktoré boli najnáročnejšie?

Najjednoduchšie bolo, že na všetky úlohy sme mali dostatok času. Zmyslom kurzu je niečo sa naučiť, a nie medzi sebou súťažiť. Vysvetlenia boli veľmi prístupné a ilustrácie boli jednoduché, ale komplexné. To pomohlo vizualizovať a pochopiť rôzne témy.

Pri plnení úloh sme boli nabádaní k samostatnému mysleniu a občas aj k samostatnému štúdiu niečoho. Toto je najlepší spôsob, ako sa naučiť a pochopiť myšlienky zahrnuté v triede.

Niekoľkokrát som úplne nerozumel teoretickej časti, kým som nezačal písať kód pri dokončovaní úlohy. Nesmeli sme 'kopírovať/prilepiť', museli sme si celý kód napísať sami, a to nám tiež pomohlo všetko lepšie pochopiť.

Najťažšie bolo, že otázky v úlohe s výberom odpovede neboli vždy jasné. Moja angličtina nie je dokonalá a otázky písal nerodilý hovorca, takže občas dochádzalo k nedorozumeniam.

Možno časť kurzu venovaná veštcom a NFT by mohla byť podrobnejšia. Ale v každom prípade je hlavným cieľom kurzu zaujať vývojárov. Potom, aby ste plne porozumeli všetkým jeho aspektom, budete, samozrejme, musieť stráviť nejaký čas experimentovaním a cvičením.

Povedzte nám viac o riešení, na ktorom ste pracovali počas kurzu – „Bazár kupónov“? Môžem vidieť aj nejaké príklady kódu?

Áno, pracovali sme na 'Coupon Bazaar', toto je trhovisko, kde ľudia predávajú a kupujú kupóny, ktoré im dávajú právo nakupovať tovar a služby za nižšiu cenu. Každý kupón je reprezentovaný digitálnym aktívom, ktoré ponúka špeciálnu zľavu od dodávateľa.

Zvezte sa na vlne Web 3.0

Bolo potrebné vyvinúť niekoľko komponentov aplikácie. Najprv bolo potrebné vytvoriť systém registrácie dodávateľov a správu kupónov. Potom sme potrebovali overovaciu funkciu a možnosť pre používateľov vyhľadávať kupóny.

Zvezte sa na vlne Web 3.0

Počas kurzu sme tiež pridali niekoľko nových funkcií, vrátane systému hlasovania a funkcie, ktorá vám umožní overiť a zakázať dodávateľov.

Najprv sme sa naučili rozdiel medzi inteligentnými aktívami, inteligentnými účtami a účtami dApp a základy práce s funkciami overovača. Funkcie overovateľa vám umožňujú zmeniť predvolené správanie vášho účtu. Štandardne overujú podpisy transakcií, ale funkcia overovania vám umožňuje nastaviť iné „pravidlá“.

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

Potom sme začali pridávať kupóny. Využili sme jednu z najdôležitejších funkcií dApp, ktorá umožňuje zaznamenávať dáta akéhokoľvek typu v blockchaine vo forme párov kľúč – hodnota – dátová transakcia. Skombinovali sme to s novou transakciou, invokeScript, ktorá sa používa na volanie volateľnej funkcie v dApp mimo blockchainu.

Typ dátovej transakcie, ktorý sme počas kurzu použili, bolo pridávanie kupónov na trh:

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

Na spracovanie týchto údajov pomocou funkcie addItem a vývoj funkcie nákupu a ďalších možností sme použili volateľnú funkciu, ktorú môže používateľ volať mimo blockchainu. Vďaka tomu môže vykonávať rôzne úlohy, ako napríklad iniciovať prevod finančných prostriedkov, zapisovať alebo aktualizovať údaje v dátovom úložisku dApp atď.

Tu je príklad volanej funkcie použitej vo funkcii addItem:

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

Neskôr sme vyvinuli hlasovací systém, ktorý vám umožňuje hlasovať za propagáciu alebo odstránenie určitých produktov. Aby sa zabránilo vonkajšiemu ovplyvňovaniu hlasovacieho procesu, používa schému „Commit-Reveal“.

Fáza „commit“ sa používa na zbieranie zašifrovaných hlasov pomocou funkcie hash a „soľ“.

Fáza „odhalenia“ slúži na zbieranie zašifrovaných hlasov a porovnávanie ich hashov.

Tu je príklad volanej funkcie, ktorá sa tu používa:

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

Čo ste sa ešte na kurze naučili?

Súčasťou kurzu bola aj tokenizácia a nezastupiteľné tokeny (NFT) – tokeny, ktoré predstavujú niečo unikátne, a preto nie sú zameniteľné.

Posledná lekcia bola venovaná orákulom. Keďže blockchain nemôže prijímať dáta z vonkajšieho sveta, potrebujeme orakuly, aby mu tieto dáta posielali.

Pre naše trhovisko boli orakuly potrebné na overenie a v prípade potreby na blacklist dodávateľa, ktorý napríklad neakceptoval predaný kupón.

Tu je príklad:

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

Čo bolo pre vás najužitočnejšie?

Najužitočnejšou časťou sú úlohy. Vďaka nim sa sprehľadnil materiál prednášok, pokusom a omylom sa upevnili novonadobudnuté poznatky. Praktická práca s IDE, prieskumník и orákula.

Ako plánujete využiť to, čo ste sa naučili, v praxi?

Od samého začiatku som očakával, že kurz pomôže môjmu projektu posunúť na vyššiu úroveň. Myšlienkou bolo teraz napísať kód sign-web.app na RIDE. Existujúca verzia už má funkcie certifikácie dokumentov, no vďaka RIDE sa dá výrazne zlepšiť. Nová verzia bude flexibilnejšia a intuitívnejšia a bude mať viac funkcií vrátane certifikácie e-mailov, zmlúv s viacerými stranami atď.

Kurz bol aj na zamyslenie a dal mi veľa nových nápadov. Som presvedčený, že výsledky sa budú dostavovať aj v budúcnosti.

Zdroj: hab.com

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster