Umphuhlisi uChristophe Verdot uthetha ngekhosi ye-intanethi '’ esandul’ ukudlula.

Sixelele kancinci ngawe. Yintoni onomdla kuyo kwesi sifundo?
Bendisenza uphuhliso lwewebhu malunga neminyaka eyi-15, ubukhulu becala njenge-freelancer.
Nangona ukuphuhlisa isicelo sewebhu kwirejista yexesha elide kumazwe asakhulayo kwiqela lebhanki, ndandijongene nomsebenzi wokudibanisa i-blockchain certification kuyo. Ngelo xesha, ndandingazi kakhulu malunga nesatifikethi se-blockchain, nangona ndandisele ndinomdla kwi-crypto technologies, ngokukodwa njengomtyalo-mali.
Ngenxa yoko, lo msebenzi awuzange uphunyezwe, kodwa, ndicinga ukuba imibutho kunye neebhanki zinomdla kwisisombululo esinjalo kwizicelo zabo, ndaqala ukufunda lo mbandela kwaye ngokukhawuleza ndaqalisa iprojekthi. .
Ndiphuhlise inguqulelo ye-beta, esele ikhona kwi-mainnet. Ngelo xesha, kwakungekho [ulwimi lweprogram ye-Waves] Ride, ngoko ke ndenza yonke into ngendlela elula, ndisebenzisa ukuguqulela ukuguqulela nge-JSON eneed. Kodwa eyona njongo ibikukongeza ukusebenza okuphezulu emva kokuba iRide iqalisiwe. Kwaye esi sesona sizathu sibalulekileyo sokuba ndijoyine ikhosi: inqanaba elilandelayo lophuhliso lweprojekthi libandakanya ukudalwa kwesicelo sokwabiwa kwamagunya (dApp).
Yeyiphi imiba yesi sifundo oye wayifumanisa ilula kwaye yeyiphi eyeyona inzima?
Eyona nto ilula yayikukuba sasinexesha elaneleyo layo yonke imisebenzi. Inqaku lekhosi kukufunda okuthile, kwaye ungakhuphisani omnye nomnye. Iingcaciso zazifikeleleka kakhulu kwaye imizobo yayilula kodwa ibanzi. Oku kuye kwanceda ukuba nomfanekiso-ngqondweni nokuqonda imixholo eyahlukeneyo.
Xa sigqibezela izabelo, sasikhuthazwa ukuba sicinge ngokuzimeleyo yaye maxa wambi sifunde okuthile ngokwethu. Le yeyona ndlela ilungileyo yokufunda nokuqonda izimvo ezifundwa eklasini.
Amaxesha amaninzi andizange ndiyiqonde ngokupheleleyo inxalenye yethiyori de ndaqalisa ukubhala ikhowudi ngelixa ndigqibezela isabelo. Asizange sivunyelwe ukwenza 'ikopi / ukunamathisela', kwafuneka sibhale yonke ikhowudi ngokwethu, kwaye oku kwasinceda ukuba siqonde yonke into engcono.
Eyona nto yayinzima yayikukuba imibuzo kumsebenzi wokhetho oluninzi yayingasoloko icacile. IsiNgesi sam asiphelelanga, kwaye imibuzo ibibhalwa ngumntu ongengomthonyama, ngoko ke ngamanye amaxesha bekukho ukungavisisani.
Mhlawumbi inxalenye yekhosi enikezelwe kwizihlabo kunye nee-NFTs inokuchazwa ngakumbi. Kodwa, kuyo nayiphi na imeko, injongo ephambili yekhosi kubaphuhlisi abanomdla. Ke, ukuze uqonde ngokupheleleyo yonke imiba yayo, kuya kufuneka, ngokuqinisekileyo, uchithe ixesha elithile ulinga kwaye uziqhelanisa.
Sixelele ngakumbi malunga nesisombululo osebenze kuso kulo lonke ixesha lekhosi - 'Ikhuphoni Bazaar'? Ngaba ndingayibona eminye imizekelo yekhowudi?
Ewe, sisebenze kwi-'Coupon Bazaar ', le yindawo yokuthengisa apho abantu bathengisa kwaye bathenge amakhuphoni abanika ilungelo lokuthenga iimpahla kunye neenkonzo ngexabiso eliphantsi. Ikhuphoni ngalinye limelwe yi-asethi yedijithali enika isaphulelo esikhethekileyo kumthengisi.

Amacandelo amaninzi esicelo afuneka ukuba aphuhliswe. Okokuqala, kwakuyimfuneko ukudala inkqubo yokubhalisa ababoneleli kunye nokulawula amakhuphoni. Emva koko siye safuna umsebenzi wokuqinisekisa kunye nokukwazi kwabasebenzisi ukukhangela amakhuphoni.

Ngexesha lesifundo songeze amanqaku amatsha amaninzi, kubandakanya inkqubo yokuvota kunye nenqaku elikuvumela ukuba uqinisekise kunye noluhlu lwababoneleli abangekhoyo.
Okokuqala, sifunde umahluko phakathi kwee-asethi ezihlakaniphile, ii-akhawunti ze-smart, kunye nee-akhawunti ze-dApp kunye neziseko zokusebenza kunye nemisebenzi yokuqinisekisa. Imisebenzi yoQinisekiso ikuvumela ukuba utshintshe indlela yokuziphatha engagqibekanga kwiakhawunti yakho. Ngokungagqibekanga baqinisekisa utyikityo lwentengiselwano, kodwa into yokuqinisekisa ikuvumela ukuba usete eminye “imithetho”.
{-# 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
}
}Emva koko saqala ukufaka amakhuphoni. Sisebenzise enye yeyona misebenzi ibalulekileyo ye-dApp, ekuvumela ukuba urekhode idatha yalo naluphi na uhlobo kwi-blockchain ngendlela ye-key-value pairs - ukuthengiselana kwedatha. Siyidibanise nentengiselwano entsha, i-invokeScript, esetyenziselwa ukubiza umsebenzi obizwa ngokuba yi-dApp ngaphandle kwebhloko.
Uhlobo lwentengiselwano yedatha esilusebenzisileyo ngexesha lekhosi ibisongeza iikhuphoni kwindawo yentengiso:
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)
})Ukucwangcisa le datha kunye nomsebenzi we-addItem kunye nokuphuhlisa umsebenzi wokuthenga kunye nezinye iinketho, sasebenzisa umsebenzi obizayo ukuba umsebenzisi angabiza ngaphandle kwe-blockchain. Ngenxa yoko, inokwenza imisebenzi eyahlukeneyo, njengokuqalisa ukudluliselwa kwemali, ukubhala okanye ukuhlaziya idatha kwi-data yedatha ye-dApp, njl.
Nanku umzekelo wento ebizwa ngokuba yi-function esetyenziswe kumsebenzi we-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)
])
}
}Kamva savelisa inkqubo yokuvota evumela ukuba uvotele ukukhuthaza okanye ukususa iimveliso ezithile. Ukuthintela impembelelo yangaphandle kwinkqubo yokuvota, isebenzisa isicwangciso 'Zibophelele-Sityhile'.
Isigaba "sokuzibophelela" sisetyenziselwa ukuqokelela iivoti ezifihliweyo kusetyenziswa umsebenzi we-hash kunye "netyuwa".
Isigaba "sokutyhila" sisetyenziselwa ukuqokelela iivoti ezifihliweyo kunye nokuthelekisa i-hashes zabo.
Nanku umzekelo wento ebizwa ngokuba yi function esetyenziswe apha:
@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)
])
}
}
>Yintoni enye oyifundileyo kwesi sifundo?
Ikhosi yayiquka i-tokenization kunye ne-non-fungible tokens (NFTs) - iithokheni ezimele into ekhethekileyo kwaye ngoko ke ayinakufungiswa.
Isifundo sokugqibela sasinikelwe kwizihlabo. Ekubeni i-blockchain ayikwazi ukufumana idatha evela kwihlabathi langaphandle, sifuna i-oracles ukuthumela le datha kuyo.
Kwindawo yethu yentengiso, ii-oracles zazifuneka ukuze kuqinisekiswe kwaye, ukuba kuyimfuneko, kufakwe amagama amnyama kumthengisi, umzekelo, ongazange alamkele ikhuphoni elithengisiweyo.
Nasi umzekelo:
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)
])
}
}
Yeyiphi eyona nto yayiluncedo kuwe?
Elona candelo liluncedo zizabelo. Enkosi kubo, izinto zokufunda ziye zacaca ngakumbi, kwaye ulwazi olutsha lwadityaniswa ngokuzama kunye nempazamo. Umsebenzi osebenzayo kunye , и .
Uceba ukukusebenzisa njani oko ukufundileyo?
Kwasekuqaleni, bendilindele ukuba ikhosi iya kunceda ukuthatha iprojekthi yam ukuya kwinqanaba elilandelayo. Umbono yayikukubhala ngoku ikhowudi kwi-RIDE. Uguqulelo olukhoyo sele lunemisebenzi yoqinisekiso loxwebhu, kodwa ngenxa ye-RIDE inokuphuculwa kakhulu. Inguqulelo entsha iya kuba bhetyebhetye ngakumbi kwaye intuitive, kwaye iya kuba neempawu ezininzi, kubandakanywa nokuqinisekiswa kwee-imeyile, izivumelwano zamaqela amaninzi, njl.
Ikhosi nayo yayindixhokonxa iingcinga kwaye yandinika iimbono ezininzi ezintsha. Ndiqinisekile ukuba iziphumo ziya kuqhubeka zivela kwixesha elizayo.
umthombo: www.habr.com
