Li Wave of Web 3.0 siwar bibin

Pêşvebir Christophe Verdo li ser qursa serhêl diaxive 'Serwerkirina Web 3.0 bi Waves' ya ku wî vê dawiyê derbas kir.

Li Wave of Web 3.0 siwar bibin

Ji me re hinekî behsa xwe bike. Çi we di vê qursê de eleqedar kir?

Nêzîkî 15 sal in ez pêşdebirê malperê me, bi piranî wekî serbixwe.

Dema ku ji bo komek bankingê ji bo welatên pêşkeftî ji bo qeydek demdirêj serîlêdanek webê çêdikir, ez bi peywira yekkirina pejirandina zincîra blokê re rû bi rû bûm. Wê demê, min di derbarê sertîfîkaya zincîra blokê de pir nizanibû, her çend ez jixwe bi teknolojiyên krîptoyê re eleqedar bûm - nemaze wekî veberhêner.

Wekî encamek, ev taybetmendî nehat bicihanîn, lê, bi fikira ku rêxistin û bank ji bo serîlêdanên xwe bi çareseriyek wusa re eleqedar in, min dest bi lêkolîna pirsgirêkê kir û di demek kurt de dest bi projeyê kir. Zincîra Îmzeyê.

Min guhertoyek wê ya beta ya ku jixwe li ser torê heye peyda kiriye. Wê demê [zimanê bernamesaziya Waves] Ride hîn nebû, û min her tişt bi awayê herî hêsan kir, bi karanîna danûstendinên werger bi JSON-ya hêlîn re. Lê armanca sereke ew bû ku piştî destpêkirina Ride fonksiyonên pêşkeftî zêde bikin. Sedema bingehîn a ku ez beşdarî qursê bûm ev e: qonaxa paşîn a pêşkeftina projeyê bi çêkirina serîlêdanek nenavendî (dApp) ve girêdayî ye.

Kîjan aliyên qursê ji we re hêsantir û kîjan herî dijwar dîtin?

Tiştê herî hêsan ew bû ku ji bo hemû karan wext têra me hebû. Mebesta qursê hînbûna tiştekî ye, ne ku bi hev re pêşbaziyê bikin. Ravekirin pir gihîştî bûn û nîgar sade lê berfireh bûn. Ew ji bo dîtin û fêmkirina mijarên cûda bû alîkar.

Wekî beşek ji peywiran, em hatin teşwîq kirin ku em serbixwe bifikirin û carinan bi serê xwe tiştan hîn bibin. Ev awayê çêtirîn e ku meriv tiştek fêr bibe û ramanên ku di polê de têne nîqaş kirin fam bikin.

Çend caran min ji beşa teorîk tam fêm nekir heya ku dema ku peywirê qedand min dest bi nivîsandina kodê kir. Destûr nedan me ku em 'copy/paste' bikin, diviyabû ku me hemî kodê bixwe binivîsanda û ev jî bû alîkar ku em her tiştî çêtir fam bikin.

Tiştê herî dijwar ew bû ku pirsên di karê pir-bijartî de her gav ne zelal bûn. Îngilîziya min ne bêkêmasî ye û pirs ji hêla axaftvanek ne xwemalî ve hatine nivîsandin ji ber vê yekê carinan xelet têgihîştin hebûn.

Dibe ku beşa qursê ya ku ji orakles û NFT-an re hatî veqetandin dikare bêtir berfireh be. Lê, di her rewşê de, peywira sereke ya qursê eleqedarkirina pêşdebiran e. Dûv re, ji bo ku hûn hemî aliyên wê bi tevahî fêm bikin, bê guman, hûn ê hewce bikin ku hin dem bi ceribandin û pratîkê derbas bikin.

Hûn dikarin li ser çareseriya ku we di qursê de li ser xebitî - 'Bazara Kupon' bêtir ji me re vebêjin? Ez dikarim mînakên kodê jî bibînim?

Belê, em li ser 'Bazara Kuponan' dixebitin, ku ew bazarek e ku tê de xelk difiroşin û dikirin kuponên ku mafê kirîna mal û karûbaran bi bihayekî kêmtir dide wan. Her kupon ji hêla sermayek dîjîtal ve tê temsîl kirin ku ji dabînkerê dakêşek taybetî pêşkêşî dike.

Li Wave of Web 3.0 siwar bibin

Pêwîst bû ku çend hêmanên serîlêdanê pêşve bibin. Pêşîn, pêdivî bû ku pergalek were danîn ku dabînkeran tomar bike û kuponan birêve bibe. Dûv re ji me re fonksiyonek verastkirinê û jêhatîbûna bikarhêneran hewce bû ku li kuponan bigerin.

Li Wave of Web 3.0 siwar bibin

Di dema qursê de, me gelek taybetmendiyên nû jî lê zêde kir, di nav de pergala dengdanê û taybetmendiyek ku dihêle hûn firoşkaran verast bikin û navnîşa reş bikin.

Em pêşî fêrî cûdahiya di navbera hebûnên jîr, hesabên jîr, û hesabên dApp û bingehên xebata bi fonksiyonên verastkerê de bûn. Fonksiyonên verastker rê dide we ku hûn tevgera xwerû ya hesabek biguhezînin. Bi xwerû, ew îmzeyên danûstendinê verast dikin, lê fonksiyona verastker destûrê dide we ku hûn "qanûnên" din bicîh bikin.

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

Paşê me dest bi lêkirina kuponan kir. Me yek ji wan fonksiyonên dApp-ê yên herî girîng bikar anî, ku destûrê dide te ku hûn daneyên her cûreyî li ser zincîra blokê di forma cotên key-nirxê de binivîsin - danûstendinek daneyê. Me ew bi danûstendinek nû, invokeScript, ku ji derveyî zincîra blokê ji bo gazîkirina fonksiyonek binavkirî di dApp-ê de tê bikar anîn, berhev kir.

Cûreya danûstendina daneyê ya ku me di qursê de bikar anî ev e ku kupon li sûkê zêde dike:

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

Ji bo ku em van daneyan bi fonksiyona addItem re bişopînin û fonksiyona kirînê û vebijarkên din pêşve bibin, me fonksiyonek gazîkirî bikar anî ku bikarhêner dikare ji derveyî zincîra blokê gazî bike. Wekî encamek, ew dikare karên cihêreng bike, wekî destpêkirina veguheztina drav, nivîsandin an nûvekirina daneyan di hilanîna daneya dApp, hwd.

Li vir mînakek fonksiyonek gazîkirî ye ku di fonksiyona addItem de tê bikar anîn:

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

Dûv re me pergalek dengdanê pêşxist ku dihêle hûn dengan bidin ku hin hilberan pêşve bibin an jêbirin. Ji bo pêşîgirtina li bandora derve ya li ser pêvajoya dengdanê, pilana 'Pêşkêşî-Rêveal' bikar tîne.

Qonaxa "commit" ji bo berhevkirina dengên şîfrekirî bi karanîna fonksiyonek hash û "xwê" tê bikar anîn.

Qonaxa "aşkerekirinê" ji bo berhevkirina dengên şîfrekirî û berhevkirina haşeyên wan tê bikar anîn.

Li vir mînakek fonksiyonek tê gotin ku li vir tê bikar anîn heye:

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

We ji qursê hîn çi dît?

Kurs di heman demê de tokenîzasyon û nîşaneyên ne-guhêrbar (NFT) jî vedihewîne - nîşaneyên ku tiştek bêhempa temsîl dikin û ji ber vê yekê nayên guhartin.

Dersa dawî ji bo şîretan hat veqetandin. Ji ber ku zincîra blokê nikare daneyan ji cîhana derve werbigire, ji bo ku em van daneyan jê re bişînin ji orakles re hewce ne.

Ji bo sûka me, orakles hewce bûn ku verast bikin û, ger hewce bike, dabînkerek ku, wek nimûne, kuponek firotî qebûl nekir, reş bikin.

Li vir mînakek e:

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

Ji bo we ya herî bikêr çi bû?

Beşa herî bikêr, peywir in. Bi saya wan, materyalê dersê zelaltir bû, û zanîna ku nû hatî desteser kirin bi ceribandin û xeletiyê hate yek kirin. Karê pratîkî bi LI VIR, lêkolînvan и oracles.

Hûn çawa plan dikin ku tiştên ku we hîn bûne bixin pratîkê?

Ji destpêkê ve, min hêvî dikir ku qurs dê bibe alîkar ku projeya min berbi astek din ve bibe. Fikir ew bû ku niha kodê binivîsin sign-web.app li ser RIDE. Guhertoya heyî jixwe taybetmendiyên pejirandina belgeyê heye, lê bi saya RIDE, ew dikare pir çêtir bibe. Guhertoya nû dê bi taybetmendiyên bêtir maqûltir û têgihîştî be, di nav de pejirandina e-nameyê, peymanên pir-partî, û hêj bêtir.

Kurs jî ji min re xwarina ramanê da û min gelek ramanên nû peyda kirin. Ez bawer im ku encam dê di pêşerojê de diyar bibin.

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster