Ovládněte vlnu Web 3.0

Vývojář Kristof Verdo hovoří o online kurzu ‘Ovládnutí Web 3.0 s Waves’, který nedávno absolvoval.

Ovládněte vlnu Web 3.0

Řekněte nám něco o sobě. Co vás na tomto kurzu zaujalo?

Věnuji se webovému vývoji přibližně 15 let, převážně jako freelancer.

Při vývoji webové aplikace na dlouhodobé registrace pro rozvojové země na zakázku jedné bankovní skupiny jsem se setkal s úkolem integrace blockchainového certifikátu. V té době jsem toho o blockchainových certifikátech moc nevěděl, i když jsem se už zajímal o kryptotechnologie – převážně jako investor.

Nakonec tato funkce nebyla realizována, ale když jsem uvažoval o tom, že organizace a banky mají zájem o toto řešení pro své aplikace, začal jsem se problematikou zabývat a brzy spustil projekt Signature Chain.

Vyvinul jsem beta verzi, která je už dostupná v hlavní síti. Tehdy [programovací jazyk Waves] Ride ještě neexistoval a já všechno dělal nejjednodušším způsobem, využívajíc transakce převodu s vloženým JSON. Hlavním cílem ale bylo přidat pokročilejší funkce po spuštění Ride. A to je hlavní důvod, proč jsem se připojil k tomuto kurzu: další fáze vývoje projektu předpokládala vytvoření decentralizované aplikace (dApp).

Které aspekty kurzu vám přišly nejjednodušší a které nejvíce složité?

Nejjednodušší bylo, že jsme měli dostatek času na všechny úkoly. Smyslem kurzu je naučit se něco, nikoli soutěžit mezi sebou. Vysvětlení byla velmi přístupná a ilustrace jednoduché, ale výstižné. To pomohlo vizualizovat a pochopit různé témata.

Při plnění úkolů jsme byli podněcováni k nezávislému myšlení a někdy i k samostatnému studiu. To je nejlepší způsob, jak se něco naučit a porozumět myšlenkám, které se na lekcích probírají.

Několikrát jsem plně nechápal teoretickou část, dokud jsem nezačal psát kód a plnit úkoly. Nebylo nám dovoleno dělat ‘copy/paste’, veškerý kód bylo nutné psát sami, což také pomohlo lépe se ve všem zorientovat.

Nejvíce obtížné bylo, že otázky v úkolu s několika možnostmi odpovědi nebyly vždy jasné. Moje angličtina není dokonalá a otázky byly napsány osobou, která není rodilým mluvčím, což občas vedlo k nedorozuměním.

Možná by část kurzu věnovaná orákulům a NFT mohla být podrobnější. Ale v každém případě je hlavním cílem kurzu zaujmout vývojáře. Abychom plně porozuměli všem aspektům, bude samozřejmě nutné strávit nějaký čas experimentováním a praxí.

Můžete nám říct více o řešení, na kterém jste pracovali po celou dobu kurzu – 'Coupon Bazaar'? Můžeme také vidět příklady kódu?

Ano, pracovali jsme na 'Coupon Bazaar', což je tržiště, kde lidé prodávají a kupují kupony umožňující koupit zboží a služby za nižší cenu. Každý kupon je digitální aktivum, které představuje speciální slevu od dodavatele.

Ovládněte vlnu Web 3.0

Bylo potřeba vyvinout několik komponentů aplikace. Za prvé, bylo nutné vytvořit systém pro registraci dodavatelů a správu kuponů. Pak byla potřeba funkce ověřování a možnost vyhledávání kuponů uživateli.

Ovládněte vlnu Web 3.0

Během kurzu jsme také přidali několik nových funkcí, včetně hlasovacího systému a funkce umožňující ověřit a zařadit dodavatele na černou listinu.

Nejprve jsme prozkoumali rozdíl mezi chytrými aktivy, chytrými účty a dApp účty a základy práce s ověřovacími funkcemi. Ověřovací funkce umožňují měnit chování účtu, které je nastaveno jako standardní. Ve výchozím nastavení kontrolují signatury transakcí, ale ověřovací funkce umožňuje nastavit jiná „pravidla“.

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

Pak jsme začali přidávat kupony. Použili jsme jednu z nejdůležitějších funkcí dApp, která umožňuje zapisovat do blockchainu data jakéhokoli typu ve formě párů „klíč-hodnota“ – transakci dat. Sloučili jsme ji s novou transakcí, invokeScript, která se používá k volání volané funkce v dApp zvenčí blockchainu.

Typ transakcí, které jsme během kurzu použili, je přidání kupónů na tržiště:

letdatajson = {
    "title":        "triko s , hlasuj 1",
    "coupon_price": 10000000,
    "old_price":    1000000000,
    "new_price":    100000000,
    "address":      "Vesmír",
    "description":  "Chci, aby ses miloval, ne válčil, vím, že jsi to už slyšel",
    "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)
})

Pro zpracování těchto dat funkcí addItem a vývoj funkce nákupu a dalších možností jsme použili volatelnou funkci, kterou může uživatel vyvolat zvenku blockchainu. To jí umožňuje vykonávat různé úkoly, jako je například iniciování převodu prostředků, zapisování nebo aktualizace dat v datovém úložišti dApp atd.

Zde je příklad volatelné funkce používané ve funkci addItem:

@Callable(i)
funcaddItem(title: String, price: Int, data: String) = {
    letsupplierAddress = toBase58String(i.caller.bytes)
    letitem = getKeyItem(supplierAddress, title)
    if( price <= 0) thenthrow("nákupní částka nemůže být menší než cena položky")
    elseif( getValueItemSupplier(item) !=NONE ) thenthrow("položka již existuje")
    else{
        WriteSet([
           DataEntry(getKeyItemSupplier(item), supplierAddress),
           DataEntry(getKeyItemPrice(item), price),
           DataEntry(getKeyItemData(item), data)
        ])
    }
}

Později jsme vyvinuli systém hlasování, který umožňuje hlasovat pro propagaci nebo odstranění určitých produktů. Aby nedošlo k ovlivnění procesu hlasování zvenku, používá schéma 'Commit-Reveal'.

Fáze „commit“ se používá ke shromažďování zašifrovaných hlasů pomocí hashovací funkce a „soli“.

Fáze „reveal“ slouží k shromažďování zašifrovaných hlasů a porovnávání jejich hashů.

Zde je příklad volatelné funkce používané zde:

@Callable(i)
funcvoteCommit(item: String, hash: String) = {
    letuser = toBase58String(i.caller.bytes)
    letcommits = getValueCommitsCount(item)
    letstatus = getValueItemStatus(item)
    if( commits >=VOTERS) thenthrow("dosáhli jsme maximálního počtu voličů")
    elseif(getValueCommit(item, user) !=NONE) thenthrow("uživatel se již zúčastnil")
    elseif(getKeyItemSupplier(item) ==NONE) thenthrow("položka neexistuje")
    elseif(status !=NONE && status !=VOTING) thenthrow("hlasování není možné")
    else{
        WriteSet([
           DataEntry(getKeyCommit(item, user), hash),
           DataEntry(getKeyCommitsCount(item), commits +1),
           DataEntry(getKeyItemStatus(item),if(commits ==VOTERS) thenREVEAL elseVOTING)
        ])
    }
}
>

Co dalšího jste se z kurzu naučili?

Kurz také zahrnoval tokenizaci a non-fungible tokeny (NFT) – tokeny, které představují něco jedinečného, a proto nejsou zaměnitelné.

Poslední lekce byla věnována orakulům. Protože blockchain nemůže získávat data z vnějšího světa, potřebujeme orakuly, které by tato data do něj posílaly.

Pro náš trh orakuly byly potřeba k ověřování a, pokud bylo třeba, k zařazení dodavatele na černou listinu, který například nepřijal prodaný kupon.

Zde je příklad:

funcgetExtValueItemWhiteListStatus(item:String) = {
    item +"_verifier_status"
}
 
letverifier = "3Mx9qgMyMhHt7WUZr6PsaXNfmydxMG7YMxv"
letVERIFIED = "ověřeno"
letBLACKLISTED = "černá listina"
@Callable(i)
funcsetstatus(supplier: String, status: String) = {
    letaccount = toBase58String(i.caller.bytes)
    if( account !=verifier ) thenthrow("pouze oracle verifier mohou spravovat whitelist")
    elseif( status !=VERIFIED && status !=BLACKLISTED) thenthrow("neplatný status")
    else{
        WriteSet([
           DataEntry(getExtValueItemWhiteListStatus(supplier), status)
        ])
    }
}

Co pro vás bylo nejvíce užitečné?

Nejvíce užitečná část byly úkoly. Díky nim se materiál přednášek stával srozumitelnějším a právě nabyté znalosti se upevňovaly metodou pokusů a omylů. Velmi užitečná byla i praktická práce s IDE, explorerem a orakuly.

Jak plánujete použít to, co jste se naučili, v praxi?

Od samého začátku jsem očekával, že kurz pomůže posunout můj projekt na novou úroveň. Myšlenka spočívala v tom, že teď napíšu kód sign-web.app v RIDE. Existující verze již má funkce certifikace dokumentů, ale díky RIDE ji bude možné výrazně vylepšit. Nová verze bude flexibilnější a srozumitelnější, bude mít více funkcí, včetně certifikace elektronických zpráv, dohod mezi více stranami atd.

Kurz také poskytl podněty k zamyšlení a mám spoustu nových nápadů. Jsem si jistý, že výsledky se projeví i v budoucnu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster