Po významném vývoji jsme na Sui Testnet zpřístupnili bezpečnou náhodnost. Tato klíčová funkce, poháněná modulem sui::random, otevírá nové možnosti pro vývojáře a stavitele na Sui.

Proč potřebujeme náhodnost na řetězu?

Aplikace a projekty mohou náhodnost využívat širokou škálou různých způsobů, od simulace hodu kostkou až po přidělování čísel tiketů v systému, který zajišťuje spravedlnost. Existuje více případů použití pro onchain náhodnost, než by se zpočátku mohlo zdát. Zde je několik klíčových příkladů:

1. Hazardní hry: Nejzřetelnějším případem použití jsou hry jako loterie, karetní hry, gacha, loot boxy, tomboly a kasinové hry. Onchain nativní náhodnost umožňuje těmto hrám fungovat, aniž by hráči museli věřit hernímu operátorovi. Férovost hry může ověřit kdokoli, což zajišťuje transparentnost a důvěru. Tento případ použití se rozšiřuje na složitější hry, jako je určování, zda postava v RPG zasáhne nepřítele.

2. Náhodné vzorkování: Výběr náhodné podmnožiny z větší skupiny, což je užitečné v různých oblastech, jako je správa a randomizované audity. Při řešení sporů lze k výběru nezaujaté poroty použít náhodný výběr vzorků. Dalším příkladem je náhodný výběr komisí ve věštcích a DAO pro hlasování a rozhodovací procesy s cílem zvýšit spravedlnost a transparentnost.

3. NFT: Náhodnost umožňuje vytváření náhodných NFT s různou úrovní vzácnosti. Například kryptografický sběratelský předmět může mít různé pravděpodobnostně přiřazené vlastnosti. Kromě toho by NFT mohly zahrnovat genetické vlastnosti nebo náhodné mutace ve scénářích chovu, což by otevřelo dveře kreativitě při navrhování a používání NFT.

4. Soutěže a párování hráčů: Mezi zajímavé příklady patří náhodné umístění účastníků do turnajových závorek, párování hráčů pro hry a sociální interakce, určování pořadí hry v tahových hrách, vybírání vítězů v případě remízy, přidělování hráčů do týmů a jejich pořadí v draftech, přidělování místa konání a rozhodčích na akcích.

Andrew Schran z Mysten Labs diskutuje o nativní náhodnosti Sui na Sui Basecampu.

Technická stránka decentralizované náhodnosti

Aby byla onchain náhodnost bezpečná, musí být nepředvídatelná a neobjektivní. Nepředvídatelnost zajišťuje, že nikdo nemůže předvídat náhodné hodnoty předtím, než jsou použity, a brání útočníkům v manipulaci s aplikacemi prostřednictvím front-run transakcí nebo zapojení pouze v případě příznivého výsledku. Nestrannost zaručuje, že žádná strana nemůže ovlivnit výsledek procesu generování náhodnosti, a brání útočníkům ve zkreslení výsledků ve svůj prospěch.

Stávající řešení a jejich omezení

Různá existující řešení mají za cíl poskytovat bezpečnou náhodnost, přičemž každé má své vlastní kompromisy. Použití externího zdroje náhodnosti, jako je místní/nedistribuovaná verifikovatelná náhodná funkce (VRF), je jednoduché, ale není skutečně decentralizované, protože důvěřování několika uzlům provozujícím VRF může vést k problémům s předvídatelností a zkreslením, pokud se zdroj dohodne s jinými stranami. Funkce Verifiable Delay Functions (VDF) zajišťují, že náhodnost nelze předvídat, dokud neuplyne určitý čas, ale také bývají pro mnoho aplikací příliš pomalé. 

Jiná řešení využívají náhodnost založenou na orákulu, která může být předvídatelná a zkreslená, pokud se orákulum dohodne s uzly a může být pomalé při bezpečném použití. Například použití drand, distribuovaného majáku náhodnosti, vyžaduje, aby proces čekal na kolo náhodnosti, které je v budoucnosti dostatečně daleko, aby bylo zajištěno, že bude nepředvídatelné.

Suiův přístup k náhodnosti

Společnost Mysten Labs vyvinula řešení, které využívá prahovou kryptografii a generování distribuovaného klíče (DKG), aby se projevily vlastnosti nepředvídatelnosti, neobjektivity a rychlosti. Toto řešení se na Sui zobrazuje jako maják náhodnosti podporovaný sítí validátorů. Na začátku každé epochy spouštějí validátoři protokol DKG pro generování tajných sdílení distribuovaného klíče. Poté, nepřetržitě během epochy, používají své podíly klíče k vytváření náhodnosti pro aplikace, které mohou používat. 

Toto nativní řešení náhodnosti je mnohem rychlejší než stávající řešení na Sui. Generování náhodnosti funguje paralelně s mechanismem konsenzu a poskytuje náhodné hodnoty rychle poté, co byla transakce objednána, ale ještě před jejím provedením.

Pohybové a programovatelné transakční bloky (PTB) navíc umožňují výkonné kompozice a zároveň zabraňují potenciální manipulaci prostřednictvím vestavěných omezení a varování kompilátoru. I když jsou vestavěny důležité bezpečnostní zábradlí, vývojáři by měli zajistit robustní návrhy programů, aby se vyhnuli kontrole jinými funkcemi pohybu nebo příkazy PTB.

Pomocí modulu sui::random

Modul sui::random poskytuje přístup k pseudonáhodnosti v Sui, což umožňuje různé aplikace. Vývojáři mohou tuto funkci použít například k implementaci funkce Move, která vybere náhodného vítěze tomboly. Zdrojový kód tohoto a dalších příkladů lze nalézt v našem úložišti GitHub.

vstup set_winner(hra: &mut Raffle, rnd: &Náhodné, ctx: &TxContext) { tvrdit!(je_žádný(hra.vítěz), EWinnerAlreadySet); // vítěz je typu Option<u32> let gen = new_generator(rnd, ctx); game.winner = Some(gen.generate_u32_in_range(1, game.num_of_tickets)); // num_of_tickets je u32, což představuje počet účastníků }

Druhý řádek funkce

set_winner

zajišťuje, že vítěz ještě nebyl vybrán. Funkce poté inicializuje nový náhodný generátor a v rozsahu čísel tipu se vygeneruje náhodné číslo. Výsledkem je bezpečně a nepředvídatelně vybraný vítěz, a to díky robustním zárukám náhodného generování Sui, které zajišťují, že hodnota vrácená generovat_u32_in_range je náhodná a nepředvídatelná, pokud je poškozena méně než jedna třetina hlasovací síly sítě.

Zatímco náhodnost je generována globálně sítí a ne na transakci, Sui odvozuje z této globální náhodnosti pokaždé nepředvídatelnou a nezkreslenou rodinu pseudonáhodných funkcí. 

nový_generátor

je vyvoláno.

Zaokrouhlování náhodnosti na Sui

Zavedení bezpečného a škálovatelného zdroje náhodnosti do Sui je zásadní pokrok, který umožňuje vývojářům vytvářet robustnější a bezpečnější aplikace. Vyzýváme naši komunitu, aby poskytovala zpětnou vazbu a zkoumala nové způsoby využití náhodnosti. Podrobnější technické informace najdete v dokumentaci Onchain Randomness.

Tato funkce je nyní dostupná na Sui Testnet. Doporučujeme vývojářům, aby to vyzkoušeli a zajistili, že jejich aplikace jsou připraveny využívat bezpečné a robustní náhodné hodnoty, když je na Mainnet k dispozici nativní náhodnost. Děkujeme našim vývojářům za to, že přispěli k bezpečnějšímu a efektivnějšímu ekosystému Sui!