Hönnuður Christophe Verdo talar um netnámskeiðið '' sem hann gekk nýlega frá.

Segðu okkur aðeins frá sjálfum þér. Hvað vakti áhuga þinn á þessu námskeiði?
Ég hef verið vefhönnuður í um 15 ár, aðallega sem sjálfstæður.
Þegar ég þróaði vefforrit fyrir langtímaskráningu fyrir þróunarlönd fyrir bankahóp stóð ég frammi fyrir því verkefni að samþætta blockchain vottun í það. Á þeim tíma vissi ég ekki mikið um blockchain vottun, þó ég hefði þegar áhuga á dulritunartækni - aðallega sem fjárfestir.
Þess vegna var þessi eiginleiki ekki útfærður, en ég hélt að stofnanir og bankar hefðu áhuga á slíkri lausn fyrir umsóknir sínar, byrjaði ég að kynna mér málið og hóf fljótlega verkefnið .
Ég hef þróað beta útgáfu af því sem er nú þegar fáanlegt á mainnetinu. Á þeim tíma [Waves forritunarmálið] Ride var ekki enn til, og ég gerði allt á einfaldasta hátt, með því að nota þýðingarfærslur með hreiðri JSON. En aðalmarkmiðið var að bæta við háþróaðri virkni eftir að Ride hófst. Og þetta er aðalástæðan fyrir því að ég tók þátt í námskeiðinu: næsta stig þróunar verkefnisins fól í sér að búa til dreifð forrit (dApp).
Hvaða þættir námsins fannst þér auðveldastir og hverjir erfiðastir?
Einfaldast var að við höfðum nægan tíma fyrir öll verkefni. Markmið námskeiðsins er að læra eitthvað, ekki að keppa hvert við annað. Skýringarnar voru mjög aðgengilegar og myndirnar einfaldar en yfirgripsmiklar. Það hjálpaði til við að sjá og skilja mismunandi efni.
Þegar verkefnum var lokið vorum við hvött til að hugsa sjálfstætt og stundum læra hlutina sjálf. Þetta er besta leiðin til að læra eitthvað og skilja hugmyndirnar sem ræddar eru í bekknum.
Nokkrum sinnum skildi ég ekki bóklega hlutann til fulls fyrr en ég byrjaði að skrifa kóða á meðan ég kláraði verkefnið. Við máttum ekki gera 'copy/paste', við þurftum að skrifa allan kóðann sjálf og þetta hjálpaði líka til að skilja allt betur.
Það erfiðasta var að spurningarnar í fjölvalsverkefninu voru ekki alltaf skýrar. Enskan mín er ekki fullkomin og spurningarnar voru skrifaðar af öðrum en móðurmáli þannig að það kom upp einstaka misskilningur.
Kannski mætti vera ítarlegri sá hluti námskeiðsins sem er helgaður véfréttum og NFT. En í öllum tilvikum er aðalverkefni námskeiðsins að vekja áhuga þróunaraðila. Síðan þarftu að sjálfsögðu að eyða tíma í að gera tilraunir og æfa þig til þess að skilja allar hliðar þess til hlítar.
Getur þú sagt okkur meira um lausnina sem þú vannst að í gegnum námskeiðið - 'Coupon Bazaar'? Get ég líka séð kóðasýni?
Já, við höfum verið að vinna að 'Coupon Bazaar', sem er markaðstorg þar sem fólk selur og kaupir afsláttarmiða sem gefa því rétt til að kaupa vörur og þjónustu á lægra verði. Hver afsláttarmiði er táknaður með stafrænni eign sem býður upp á sérstakan afslátt frá birgjum.

Nauðsynlegt var að þróa nokkra forritshluta. Í fyrsta lagi þurfti að koma á kerfi til að skrá birgja og halda utan um afsláttarmiða. Þá þurftum við sannprófunaraðgerð og möguleika fyrir notendur til að leita að afsláttarmiða.

Á námskeiðinu bættum við einnig við nokkrum nýjum eiginleikum, þar á meðal kosningakerfi og eiginleika sem gerir þér kleift að sannreyna og setja söluaðila á svartan lista.
Við lærðum fyrst muninn á snjöllum eignum, snjallreikningum og dApp reikningum og grunnatriðum þess að vinna með sannprófunaraðgerðir. Sannprófunaraðgerðirnar gera þér kleift að breyta sjálfgefna hegðun reiknings. Sjálfgefið er að þeir staðfesta undirskriftir viðskipta, en sannprófunaraðgerðin gerir þér kleift að setja aðrar „reglur“.
{-# 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
}
}Svo fórum við að bæta við afsláttarmiðum. Við notuðum eina af mikilvægustu dApp aðgerðunum, sem gerir þér kleift að skrifa gögn af hvaða gerð sem er í blockchain í formi lykilgildapöra - gagnaviðskipti. Við sameinuðum það með nýrri færslu, invokeScript, sem er notað til að kalla á kallaða aðgerð í dApp utan blockchain.
Tegund gagnaviðskipta sem við notuðum á námskeiðinu er að bæta afsláttarmiðum við markaðstorgið:
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)
})Til að vinna úr þessum gögnum með addItem aðgerðinni og þróa kaupaðgerðina og aðra valkosti, notuðum við kallanlega aðgerð sem notandinn getur hringt í utan blockchain. Þar af leiðandi getur það sinnt ýmsum verkefnum, svo sem að hefja millifærslu fjármuna, skrifa eða uppfæra gögn í dApp gagnageymslunni o.s.frv.
Hér er dæmi um kallanlega aðgerð sem notuð er í addItem aðgerðinni:
@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)
])
}
}Við þróuðum síðar kosningakerfi sem gerir þér kleift að greiða atkvæði til að kynna eða fjarlægja ákveðnar vörur. Til að koma í veg fyrir utanaðkomandi áhrif á atkvæðagreiðsluferlið notar það „Commit-Reveal“ kerfið.
„Framboð“ áfanginn er notaður til að safna dulkóðuðum atkvæðum með því að nota kjötkássaaðgerð og „salt“.
„Afhjúpunarfasinn“ er notaður til að safna dulkóðuðum atkvæðum og bera saman kjötkássa þeirra.
Hér er dæmi um kallað fall sem er notað hér:
@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)
])
}
}
>Hvað lærðir þú meira af námskeiðinu?
Námskeiðið innihélt einnig tokenization og non-fungible tokens (NFT) - tákn sem tákna eitthvað einstakt og því ekki skiptanlegt.
Síðasta kennslustundin var helguð véfréttum. Þar sem blockchain getur ekki tekið á móti gögnum frá umheiminum þurfum við véfrétt til að senda þessi gögn til hennar.
Fyrir markaðstorg okkar vantaði véfrétt til að sannreyna og, ef nauðsyn krefur, setja á svartan lista birgja sem til dæmis tók ekki við seldum afsláttarmiða.
Hér er dæmi:
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)
])
}
}
Hvað var gagnlegast fyrir þig?
Gagnlegasti hlutinn eru verkefnin. Þökk sé þeim varð fyrirlestraefnið skýrara og nýfengin þekking styrktist með tilraunum og mistökum. Verklega vinnan með , и .
Hvernig ætlar þú að koma því sem þú hefur lært í framkvæmd?
Strax í upphafi bjóst ég við því að námskeiðið myndi hjálpa til við að taka verkefnið mitt á næsta stig. Hugmyndin var að skrifa kóðann núna á RIDE. Núverandi útgáfa er nú þegar með skjalavottunareiginleika, en þökk sé RIDE er hægt að bæta hana til muna. Nýja útgáfan verður sveigjanlegri og skiljanlegri, með fleiri eiginleikum, þar á meðal tölvupóstvottun, fjölaðilasamningum og fleiru.
Námskeiðið gaf mér líka umhugsunarefni og ég fékk fullt af nýjum hugmyndum. Ég er viss um að árangurinn mun birtast í framtíðinni.
Heimild: www.habr.com
