Pēc ievērojamas attīstības mēs esam padarījuši drošu nejaušību pieejamu vietnē Sui Testnet. Šī svarīgā funkcija, ko darbina modulis sui::random, paver jaunas iespējas Sui izstrādātājiem un veidotājiem.

Kāpēc mums ir vajadzīga nejaušība ķēdē?

Lietojumprogrammas un projekti var izmantot nejaušību dažādos veidos, sākot no metamo kauliņu simulācijas līdz biļešu numuru piešķiršanai sistēmā, kas nodrošina godīgumu. Onchain nejaušības izmantošanas gadījumu ir vairāk, nekā sākotnēji varētu domāt. Šeit ir daži galvenie piemēri:

1. Laimes spēles. Acīmredzamākais izmantošanas gadījums ir tādām spēlēm kā loterijas, kāršu spēles, gacha, laupījumu kastes, izlozes un kazino spēles. Vietējā Onchain nejaušība ļauj šīm spēlēm darboties, neprasot spēlētājiem uzticēties spēles operatoram. Spēles godīgumu var pārbaudīt ikviens, nodrošinot caurspīdīgumu un uzticēšanos. Šis lietošanas gadījums attiecas uz sarežģītākām spēlēm, piemēram, lai noteiktu, vai RPG varonis gūst sitienu pret ienaidnieku.

2. Nejauša izlase: izlases apakškopas atlase no lielākas grupas, kas ir noderīga dažādās jomās, piemēram, pārvaldībā un randomizētās revīzijās. Strīdu izšķiršanā var izmantot nejaušu izlasi, lai izvēlētos objektīvu žūriju. Vēl viens piemērs ir nejauša komiteju atlase orākulos un DAO balsošanas un lēmumu pieņemšanas procesos, lai uzlabotu godīgumu un pārredzamību.

3. NFT: nejaušība ļauj izveidot nejaušus NFT ar dažādiem retuma līmeņiem. Piemēram, kriptonauda kolekcionējamam var saturēt dažādas pazīmes, kas piešķirtas varbūtēji. Turklāt NFT varētu ietvert ģenētiskas iezīmes vai nejaušas mutācijas audzēšanas scenārijos, paverot durvis radošumam NFT izstrādē un izmantošanā.

4. Sacensības un spēlētāju saskaņošana. Interesanti piemēri ietver dalībnieku nejaušu ievietošanu turnīru grupās, spēlētāju saskaņošanu spēlēm un sociālajām mijiedarbībām, spēļu secības noteikšanu uz gājieniem balstītās spēlēs, uzvarētāju atlasi neizšķirta gadījumā, spēlētāju sadalīšanu komandās un to secība melnrakstos, norādot vietu un tiesnešus par pasākumiem.

Mysten Labs Endrjū Šrans apspriež Sui iedzimto nejaušību Sui Basecamp.

Decentralizētās nejaušības tehniskā puse

Lai ķēdes nejaušība būtu droša, tai ir jābūt neparedzamai un objektīvai. Neprognozējamība nodrošina, ka neviens nevar paredzēt nejaušās vērtības pirms to izmantošanas, neļaujot uzbrucējiem manipulēt ar lietotnēm, veicot iepriekšējus darījumus vai iesaistoties tikai tad, ja rezultāti ir labvēlīgi. Neobjektīvība garantē, ka neviena puse nevar ietekmēt nejaušības ģenerēšanas procesa iznākumu, neļaujot uzbrucējiem sagrozīt rezultātus savā labā.

Esošie risinājumi un to ierobežojumi

Dažādu esošo risinājumu mērķis ir nodrošināt drošu nejaušību, katram ir savi kompromisi. Ārēja nejaušības avota, piemēram, lokālas/neizplatītas verificējamas nejaušības funkcijas (VRF) izmantošana ir vienkārša, bet nav īsti decentralizēta, jo uzticēšanās dažiem mezgliem, kas darbojas VRF, var radīt paredzamības un novirzes problēmas, ja avots sadarbojas ar citām pusēm. Pārbaudāmās aizkaves funkcijas (VDF) nodrošina, ka nejaušību nevar paredzēt, kamēr nav pagājis noteikts laiks, taču tās mēdz būt pārāk lēnas daudzām lietotnēm. 

Citos risinājumos tiek izmantota uz orākulu balstīta nejaušība, kas varētu būt paredzama un neobjektīva, ja orākuls sadarbojas ar mezgliem, un to var izmantot lēni drošā veidā. Piemēram, izmantojot drand, sadalītu nejaušības signālu, procesam ir jāgaida nejaušības raunds, kas ir pietiekami tālu nākotnē, lai nodrošinātu, ka tas ir neparedzams.

Sui pieeja nejaušībai

Mysten Labs ir izstrādājis risinājumu, kas izmanto sliekšņa kriptogrāfiju un sadalīto atslēgu ģenerēšanu (Distributed Key Generation — DKG), lai parādītu neparedzamības, objektīva un ātras īpašības. Šis risinājums parādās Sui kā nejaušības bāka, ko atbalsta validatora tīkls. Katra laikmeta sākumā validatori iniciē DKG protokolu, lai ģenerētu izplatītās atslēgas slepenās daļas. Pēc tam nepārtraukti visā laikmetā viņi izmanto savas atslēgas daļas, lai radītu nejaušību lietotnēm. 

Šis vietējais nejaušības risinājums ir daudz ātrāks nekā esošie Sui risinājumi. Nejaušības ģenerēšana darbojas paralēli konsensa mehānismam, nodrošinot nejaušas vērtības ātri pēc darījuma pasūtīšanas, bet pirms izpildes.

Turklāt pārvietošanas un programmējamie transakciju bloki (PTB) ļauj izveidot jaudīgus skaņdarbus, vienlaikus novēršot iespējamās manipulācijas, izmantojot iebūvētos ierobežojumus un kompilatora brīdinājumus. Lai gan ir iebūvētas svarīgas drošības sliedes, izstrādātājiem ir jānodrošina izturīgs programmu dizains, lai izvairītos no citu pārvietošanas funkciju vai PTB komandu pārbaudes.

Izmantojot sui::random moduli

Modulis sui::random nodrošina piekļuvi pseidogadījumam Sui, ļaujot izmantot dažādas lietotnes. Piemēram, izstrādātāji var izmantot šo funkciju, lai ieviestu funkciju Pārvietot, kas atlasa nejaušu izlozes uzvarētāju. Šī un citu piemēru pirmkods ir atrodams mūsu GitHub repozitorijā.

ieraksts set_winner(game: &mut Raffle, rnd: &Random, ctx: &TxContext) { assert!(is_none(game.winner), EWinnerAlreadySet); // uzvarētājs ir tipa Option<u32> let gen = new_generator(rnd, ctx); game.winner = Daži(gen.generate_u32_in_range(1, game.num_of_biļetes)); // biļešu_skaits ir u32, kas apzīmē dalībnieku skaitu }

Funkcijas otrā rinda

set_winner

nodrošina, ka uzvarētājs jau nav izvēlēts. Pēc tam funkcija inicializē jaunu nejaušības ģeneratoru, un biļešu numuru diapazonā tiek ģenerēts nejaušs skaitlis. Rezultāts ir droši un neparedzami izvēlēts uzvarētājs, pateicoties Sui spēcīgajām nejaušības ģenerēšanas garantijām, kas nodrošina, ka gener_u32_in_range atgrieztā vērtība ir nejauša un neparedzama, kamēr tiek bojāta mazāk nekā viena trešdaļa no tīkla balsstiesībām.

Lai gan nejaušību tīkls ģenerē globāli, nevis katram darījumam, Sui no šīs globālās nejaušības rada neparedzamu un objektīvu pseidogadījuma funkciju saimi katru reizi. 

jauns_ģenerators

tiek piesaukts.

Nejaušības noapaļošana uz Sui

Droša un mērogojama nejaušības avota ieviešana Sui ir būtisks sasniegums, kas ļauj izstrādātājiem izveidot izturīgākas un drošākas lietotnes. Mēs mudinām mūsu kopienu sniegt atsauksmes un izpētīt jaunus veidus, kā izmantot nejaušību. Sīkāku tehnisko informāciju skatiet Onchain Randomness dokumentācijā.

Šī funkcija tagad ir pieejama vietnē Sui Testnet. Mēs mudinām izstrādātājus to izmēģināt un nodrošināt, ka viņu lietotnes ir gatavas izmantot drošas un stabilas nejaušības vērtības, kad vietne Mainnet ir pieejama vietējā nejaušība. Paldies mūsu izstrādātājiem par ieguldījumu drošākas un efektīvākas Sui ekosistēmas veidošanā!