Ride the Web 3.0 to'lqini

Dasturchi Kristof Verdot onlayn kurs haqida gapiradi.To'lqinlar yordamida Web 3.0 ni o'zlashtirishu yaqinda o'tgan.

Ride the Web 3.0 to'lqini

O'zingiz haqingizda bir oz gapirib bering. Ushbu kurs sizni nima qiziqtirdi?

Men 15 yildan beri veb-ishlab chiqarish bilan shug'ullanaman, asosan frilanser sifatida.

Bank guruhi uchun rivojlanayotgan mamlakatlar uchun uzoq muddatli reestr uchun veb-ilovani ishlab chiqishda men unga blokcheyn sertifikatini integratsiya qilish vazifasiga duch keldim. O'sha paytda men blokcheyn sertifikati haqida ko'p narsa bilmasdim, garchi men allaqachon kripto texnologiyalariga, asosan investor sifatida qiziqqan edim.

Natijada, bu funktsiya amalga oshirilmadi, lekin tashkilotlar va banklar o'z arizalari uchun bunday echimdan manfaatdor deb o'ylab, men bu masalani o'rganishni boshladim va tez orada loyihani ishga tushirdim. Imzo zanjiri.

Men uning beta-versiyasini ishlab chiqdim, u allaqachon mainnetda mavjud. O'sha paytda [Waves dasturlash tili] Ride yo'q edi, shuning uchun men hamma narsani eng oddiy tarzda, ichki JSON bilan tarjima operatsiyalaridan foydalangan holda qildim. Ammo asosiy maqsad Ride ishga tushirilgandan so'ng yanada rivojlangan funksiyalarni qo'shish edi. Va bu mening kursga qo'shilganimning asosiy sababi: loyihani rivojlantirishning keyingi bosqichi markazlashtirilmagan dasturni (dApp) yaratish bilan bog'liq.

Kursning qaysi jihatlari sizga eng oson va qaysi biri qiyin bo'lgan?

Eng oddiy narsa shundaki, bizda barcha vazifalar uchun etarli vaqt bor edi. Kursning maqsadi nimadir o'rganish, bir-birlari bilan raqobatlashmaslikdir. Tushuntirishlar juda qulay va illyustratsiyalar oddiy, ammo keng qamrovli edi. Bu turli mavzularni tasavvur qilish va tushunishga yordam berdi.

Topshiriqlarni bajarishda biz mustaqil fikr yuritishga, ba'zan esa o'zimizcha biror narsani o'rganishga undashdi. Bu sinfda o'tilgan g'oyalarni o'rganish va tushunishning eng yaxshi usuli.

Bir necha marta men topshiriqni bajarayotganda kod yozishni boshlamagunimcha nazariy qismni to'liq tushunmadim. Bizga "nusxa ko'chirish/joylashtirish" ni amalga oshirishga ruxsat berilmadi, biz barcha kodni o'zimiz yozishimiz kerak edi va bu ham bizga hamma narsani yaxshiroq tushunishga yordam berdi.

Eng qiyini shundaki, ko'p tanlovli topshiriqdagi savollar har doim ham aniq bo'lmagan. Mening ingliz tilim mukammal emas va savollarni ona tili bo'lmagan odam yozgan, shuning uchun ba'zida tushunmovchiliklar bo'lgan.

Ehtimol, kursning oracle va NFTlarga bag'ishlangan qismi batafsilroq bo'lishi mumkin. Lekin, har holda, kursning asosiy maqsadi ishlab chiquvchilarni qiziqtirishdir. Keyin, uning barcha jihatlarini to'liq tushunish uchun siz, albatta, tajriba va mashq qilish uchun biroz vaqt sarflashingiz kerak bo'ladi.

Kurs davomida ishlagan yechimingiz - "Kupon bozori" haqida ko'proq gapirib bering? Ba'zi kod misollarini ham ko'rishim mumkinmi?

Ha, biz “Kupon bozori” ustida ishladik, bu bozorda odamlar arzonroq narxda tovar va xizmatlarni sotib olish huquqini beruvchi kuponlarni sotadi va sotib oladi. Har bir kupon yetkazib beruvchidan maxsus chegirma taklif qiladigan raqamli aktiv bilan ifodalanadi.

Ride the Web 3.0 to'lqini

Bir nechta dastur komponentlarini ishlab chiqish kerak edi. Birinchidan, etkazib beruvchilarni ro'yxatga olish va kuponlarni boshqarish tizimini yaratish kerak edi. Keyin bizga tekshirish funksiyasi va foydalanuvchilarga kuponlarni qidirish qobiliyati kerak edi.

Ride the Web 3.0 to'lqini

Kurs davomida biz bir qancha yangi funksiyalarni, jumladan, ovoz berish tizimi va yetkazib beruvchilarni tekshirish va qora roʻyxatga olish imkonini beruvchi funksiyani ham qoʻshdik.

Birinchidan, biz aqlli aktivlar, aqlli hisoblar va dApp hisoblari o'rtasidagi farqni va tekshirgich funktsiyalari bilan ishlash asoslarini bilib oldik. Tekshirish funksiyalari hisobingizning standart harakatini oʻzgartirishga imkon beradi. Odatiy bo'lib, ular tranzaksiya imzolarini tekshiradilar, ammo tekshirish xususiyati boshqa "qoidalar" ni o'rnatishga imkon beradi.

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

Keyin biz kuponlarni qo'shishni boshladik. Biz dApp-ning eng muhim funksiyalaridan birini ishlatdik, bu sizga blokcheyndagi istalgan turdagi maʼlumotlarni kalit-qiymat juftliklari koʻrinishida yozib olish imkonini beradi – maʼlumotlar tranzaksiyasi. Biz uni yangi tranzaksiya, invokeScript bilan birlashtirdik, bu blokcheyn tashqarisidan dApp-da chaqiriladigan funksiyani chaqirish uchun ishlatiladi.

Kurs davomida biz foydalangan ma'lumotlar tranzaksiya turi bozorga kuponlar qo'shish edi:

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

Ushbu ma'lumotlarni addItem funksiyasi bilan qayta ishlash va sotib olish funktsiyasi va boshqa variantlarni ishlab chiqish uchun biz foydalanuvchi blokcheyn tashqarisidan qo'ng'iroq qilishi mumkin bo'lgan chaqiriladigan funksiyadan foydalandik. Natijada, u turli vazifalarni bajarishi mumkin, masalan, mablag'larni o'tkazishni boshlash, dApp ma'lumotlar do'konida ma'lumotlarni yozish yoki yangilash va hokazo.

AddItem funksiyasida ishlatiladigan chaqirilgan funksiyaga misol:

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

Keyinchalik ma'lum mahsulotlarni reklama qilish yoki olib tashlash uchun ovoz berish imkonini beruvchi ovoz berish tizimini ishlab chiqdik. Ovoz berish jarayoniga tashqi ta'sirning oldini olish uchun u "Komitet-oshkor qilish" sxemasidan foydalanadi.

"Tasdiqlash" bosqichi xesh funksiyasi va "tuz" yordamida shifrlangan ovozlarni yig'ish uchun ishlatiladi.

"Oshkora qilish" bosqichi shifrlangan ovozlarni to'plash va ularning xeshlarini solishtirish uchun ishlatiladi.

Bu erda ishlatiladigan chaqirilgan funksiyaga misol:

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

Kursdan yana nimani o'rgandingiz?

Kurs shuningdek, tokenizatsiya va o'tkazilmaydigan tokenlarni (NFTs) - noyob narsani ifodalovchi va shuning uchun o'zgartirib bo'lmaydigan tokenlarni o'z ichiga oldi.

Oxirgi dars oraclelarga bag'ishlandi. Blokcheyn tashqi dunyodan ma'lumotlarni qabul qila olmagani uchun bizga ushbu ma'lumotlarni yuborish uchun oracle kerak.

Bizning bozorimiz uchun, masalan, sotilgan kuponni qabul qilmagan yetkazib beruvchini tekshirish va kerak bo'lganda qora ro'yxatga olish uchun oracle kerak edi.

Mana bir misol:

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

Siz uchun eng foydali narsa nima edi?

Eng foydali qismi - bu topshiriqlar. Ularning sharofati bilan ma'ruza materiali aniqroq bo'ldi, yangi olingan bilimlar sinov va xato orqali mustahkamlandi. Bilan amaliy ish BU YERGA, tadqiqotchi и Oracles.

O'rganganlaringizni amalda qanday qo'llashni rejalashtiryapsiz?

Boshidanoq men kurs loyihamni keyingi bosqichga olib chiqishga yordam beradi deb kutgandim. Endi kodni yozish g'oyasi edi sign-web.app RIDE da. Mavjud versiyada allaqachon hujjatlarni sertifikatlash funktsiyalari mavjud, ammo RIDE tufayli uni sezilarli darajada yaxshilash mumkin. Yangi versiya yanada moslashuvchan va intuitiv bo'ladi va ko'proq funktsiyalarga ega bo'ladi, jumladan, elektron pochta xabarlarini sertifikatlash, ko'p partiyaviy kelishuvlar va boshqalar.

Kurs ham o'ylantirdi va menga juda ko'p yangi g'oyalar berdi. Ishonchim komilki, natijalar kelajakda ham ko'rinadi.

Manba: www.habr.com

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster