Önemli bir gelişmenin ardından Sui Testnet'te güvenli rastgeleliği kullanıma sunduk. sui::random modülü tarafından desteklenen bu önemli özellik, Sui'deki geliştiriciler ve inşaatçılar için yeni olanaklar sunuyor.
Neden zincirde rastgeleliğe ihtiyacımız var?
Uygulamalar ve projeler, rastgeleliği, zar atmayı simüle etmekten adaleti sağlayan bir sistemde bilet numaralarını atamaya kadar çok çeşitli farklı şekillerde kullanabilir. Zincir içi rastgelelik için başlangıçta düşünüldüğünden daha fazla kullanım durumu vardır. İşte birkaç önemli örnek:
1. Şans Oyunları: En belirgin kullanım örneği piyango, kart oyunları, gacha, ganimet kutuları, çekilişler ve kumarhane oyunları gibi oyunlardır. Zincir içi yerel rastgelelik, bu oyunların oyuncuların oyun operatörüne güvenmesine gerek kalmadan çalışmasına olanak tanır. Oyunun adilliği, şeffaflık ve güven sağlanarak herkes tarafından doğrulanabilir. Bu kullanım durumu, RPG'deki bir karakterin bir düşmana vuruş yapıp yapmadığını belirlemek gibi daha karmaşık oyunları da kapsar.
2. Rastgele örnekleme: Yönetişim ve rastgele denetimler gibi çeşitli alanlarda yararlı olan, daha büyük bir gruptan rastgele bir alt kümenin seçilmesi. Uyuşmazlık çözümünde tarafsız bir jüri seçmek için rastgele örnekleme kullanılabilir. Başka bir örnek, adaleti ve şeffaflığı artırmak amacıyla oylama ve karar alma süreçleri için kahinler ve DAO'larda rastgele komite seçimidir.
3. NFT'ler: Rastgelelik, farklı nadirlik seviyelerine sahip rastgele NFT'lerin oluşturulmasını sağlar. Örneğin, bir kripto koleksiyon parçasının olasılıksal olarak atanmış çeşitli özellikleri olabilir. Ek olarak, NFT'ler üreme senaryolarına genetik özellikleri veya rastgele mutasyonları dahil ederek NFT'lerin tasarımı ve kullanımında yaratıcılığa kapılar açabilir.
4. Yarışmalar ve oyuncu eşleştirme: İlginç örnekler arasında katılımcıların turnuva gruplarına rastgele yerleştirilmesi, oyuncuların oyunlar ve sosyal etkileşimler için eşleştirilmesi, sıra tabanlı oyunlarda oyun sırasının belirlenmesi, beraberlik durumunda kazananların seçilmesi, oyuncuların takımlara dağıtılması ve taslaklardaki sıralamaları, etkinliklerde mekan ve hakemlerin atanması.
Mysten Labs'tan Andrew Schran, Sui Basecamp'ta Sui'nin doğal rastgeleliğini tartışıyor.
Merkezi olmayan rastgeleliğin teknik tarafı
Zincir içi rastgeleliğin güvenli olması için tahmin edilemez ve tarafsız olması gerekir. Tahmin edilemezlik, hiç kimsenin rastgele değerleri kullanılmadan önce tahmin edememesini sağlayarak, saldırganların önden çalışan işlemlerle uygulamaları manipüle etmesini veya yalnızca sonuçlar olumlu olduğunda devreye girmesini engeller. Tarafsızlık, hiçbir tarafın rastgelelik oluşturma sürecinin sonucunu tek başına etkileyemeyeceğini garanti ederek, saldırganların sonuçları kendi avantajlarına saptırmasını engeller.
Mevcut çözümler ve sınırlamaları
Çeşitli mevcut çözümler, her biri kendi dengelerine sahip, güvenli rastgelelik sağlamayı amaçlamaktadır. Yerel/dağıtılmamış Doğrulanabilir Rastgele İşlev (VRF) gibi harici bir rastgelelik kaynağının kullanılması basittir ancak gerçek anlamda merkezi olmayan değildir; çünkü VRF'yi çalıştıran birkaç düğüme güvenmek, kaynağın diğer taraflarla gizlice anlaşması durumunda öngörülebilirlik ve önyargı sorunlarına yol açabilir. Doğrulanabilir Gecikme İşlevleri (VDF'ler), belirli bir süre geçene kadar rastgeleliğin tahmin edilememesini sağlar, ancak aynı zamanda birçok uygulama için çok yavaş olma eğilimindedir.
Diğer çözümler, kehanetin düğümlerle gizlice anlaşması durumunda öngörülebilir ve önyargılı olabilecek ve güvenli bir şekilde kullanılması yavaş olabilecek kehanet tabanlı rastgelelik kullanır. Örneğin, dağıtılmış bir rastgelelik işareti olan drand'ın kullanılması, sürecin öngörülemez olmasını sağlamak için yeterince gelecekte bir rastgelelik turu beklemesini gerektirir.
Sui'nin rastlantısallığa yaklaşımı
Mysten Labs, öngörülemez, tarafsız ve hızlı olma niteliklerini sergilemek için eşik kriptografisinden ve Dağıtılmış Anahtar Üretiminden (DKG) yararlanan bir çözüm geliştirdi. Bu çözüm, Sui'de doğrulayıcı ağ tarafından desteklenen bir rastgelelik işareti olarak görünür. Her çağın başında doğrulayıcılar, dağıtılmış bir anahtarın gizli paylaşımlarını oluşturmak için bir DKG protokolü başlatır. Daha sonra, dönem boyunca sürekli olarak, uygulamaların kullanması için rastgelelik üretmek amacıyla anahtar paylaşımlarını kullanırlar.
Bu yerel rastgelelik çözümü, Sui'deki mevcut çözümlerden çok daha hızlıdır. Rastgelelik üretimi, fikir birliği mekanizmasına paralel olarak çalışır ve bir işlem sipariş edildikten sonra, ancak yürütmeden önce rastgele değerler sağlar.
Ek olarak, Taşıma ve Programlanabilir İşlem Blokları (PTB'ler), yerleşik kısıtlamalar ve derleyici uyarıları aracılığıyla olası manipülasyonları önlerken güçlü kompozisyonlara olanak tanır. Yerleşik önemli güvenlik rayları mevcut olsa da geliştiriciler, diğer Hareket işlevleri veya PTB komutları tarafından denetlenmeyi önlemek için sağlam program tasarımları sağlamalıdır.
sui::random modülünü kullanma
sui::random modülü, Sui içindeki sözde rastgeleliğe erişim sağlayarak çeşitli uygulamalara olanak tanır. Örneğin geliştiriciler bu özelliği, bir çekiliş için rastgele bir kazananı seçen bir Taşı işlevini uygulamak için kullanabilirler. Bunun ve diğer örneklerin kaynak kodunu GitHub depomuzda bulabilirsiniz.
giriş set_winner(game: &mut Raffle, rnd: &Random, ctx: &TxContext) { iddia!(is_none(game.winner), EWinnerAlreadySet); // kazanan Option<u32 türündedir> let gen = new_generator(rnd, ctx); game.winner = Bazıları(gen.generate_u32_in_range(1, game.num_of_tickets)); // bilet_sayısı katılımcı sayısını temsil eden u32'dir }
Fonksiyonun ikinci satırı
set_winner
bir kazananın henüz seçilmemiş olmasını sağlar. Fonksiyon daha sonra yeni bir rastgele oluşturucu başlatır ve bilet numaraları aralığında rastgele bir sayı üretilir. Sonuç, Sui'nin, ağın oylama gücünün üçte birinden azı bozulduğu sürece, created_u32_in_range tarafından döndürülen değerin rastgele ve tahmin edilemez olmasını sağlayan sağlam rastgele oluşturma garantileri sayesinde, güvenli ve öngörülemez bir şekilde seçilmiş bir kazanandır.
Rastgelelik, işlem başına değil, ağ tarafından küresel olarak üretilirken, Sui, bu küresel rastgelelikten, her seferinde öngörülemeyen ve tarafsız bir tohumlanmış sözde rastgele işlev ailesi türetir.
new_generator
çağrılır.
Sui'de rastgeleliğin yuvarlanması
Sui'ye güvenli ve ölçeklenebilir bir rastgelelik kaynağının sunulması, geliştiricilerin daha sağlam ve güvenli uygulamalar oluşturmasına olanak tanıyan çok önemli bir ilerlemedir. Topluluğumuzu geri bildirim sağlamaya ve rastgeleliği kullanmanın yeni yollarını keşfetmeye teşvik ediyoruz. Daha ayrıntılı teknik bilgi için Zincir İçi Rastgelelik belgelerine bakın.
Bu özellik artık Sui Testnet'te mevcut. Geliştiricilerin bunu denemelerini ve Mainnet'te yerel rastgelelik mevcut olduğunda uygulamalarının güvenli ve sağlam rastgele değerlerden yararlanmaya hazır olduğundan emin olmalarını öneririz. Daha güvenli ve verimli bir Sui ekosistemine katkıda bulundukları için geliştiricilerimize teşekkür ederiz!