Akbank Practicum Final Task by https://www.patika.dev/
--contract address-- -> 0x939e933F267cF9b866881f9E76548F4BE0B15799
- Oyuncu oyuna girişte bir ücret(0.005 ether) öder ve 0-9 arası bir sayı seçer.
- Oyuna giriş eventi tetiklenir.
- Maksimum oyuncu sayısına ulaşıldığında otomatik olarak oyun başlar.
- Oyun başladı eventi tetiklenir.
- İlk olarak Chainlink'ten rastgele bir uint256 sayı alınır.
- RequestSent eventi tetiklenir.
- Bu rastgele sayının ilk basamağı bizim Şanslı Sayımızdır.
- Bu sayının belirlenmesi yaklaşık 1-1.5 dakika alıyor.
- RequestFulfilled eventi tetiklenir.
- Oyuncularımız ve seçtikleri sayı bir mapping'de tutulur
mapping(uint -> address) playersAndSelectedNumbers yani her sayının kendine ait bir addres listesi vardır. Bu listede belirtilen sayıyı seçen oyuncular bulunur. Örnek olarak : 2 -> [0x241924129314928, 0x241924129314923] gibi.
- Şanslı Sayımız belirlendikten sonra playersAndSelectedNumbers isimli mappinginden şanslı sayımızı alırız. Her sayı oyuncu listesi tuttuğu için bir for döngüsü kullanmayız. Direkt bu listeyi çekebiliriz.
- Kasa bakiyemiz, kazananların sayısına bölünerek kişi başı ödül hesaplanır.
- Bu kişi başı ödül her kazanana contract tarafından gönderilir.
- Eğer kazanan yoksa ödül bir sonraki oyuna devreder.
- Oyun bitişinde oyun verileri bir Game struct'ında tutulur ve mapping(uint -> Game) games isimli mappingimizde depolanır.
- Oyun bütün adımlar sırasıyla otomatik bir şekilde birbirini tetikleyecek şekilde dizayn edilmiştr.
by Durmuş Gülbahar / https://app.patika.dev/durmuss