Block-Sena Teknik İnceleme
Güvenlik ve Şeffaflık

Denetlenebilir, on-chain herkes tarafından doğrulanabilir

Block-Sena'da çizim iki fazlı bir yöntem kullanır commit-reveal ile birlikte akış bir mevcut blokaj ve prevrandao. Bu sonucun deterministik olmasını sağlar Yürütüldükten sonra blok sisteminde yeniden düzenlenebilir ve değiştirilebilen manuel olarak değiştirilmeye karşı dayanıklıdır.

6 ila 30 6 tek seçim ve 6 tek sayıdan oluşan bir çekiliş içeren temel oyun
6'ya 10 Kombinatoryal kazanç kotalarına sahip çoklu seçimli bilet (4/5/6 isabet)
Çoklu Token Bağımsız ödeme ve düzenlenebilir carry-over ile token başına ödeme

Genel Bakış

Block-Sena, bilet alımlarının, yuvarlak kilitlemenin, çekilişin gerçekleştirilmesinin ve sertifikanın verildiği bir on-chain piyangosudur ürünün blockchain'e aktarılması. Protokol iki fazlı bir akış kullanır: blockSenaPauseDraw (turu kilitler ve taahhüdüler) ve blockSenaDrawPay (açıklar, berabere kalır ve öder).

Amaç

Her tur için şeffaf ödeme kurallarıyla denetlenebilir, tekrarlanabilir bir süreç garanti edin.

Denetlenebilirlik

Herkesin girdiği (taahhüt, tuz, hedef blok), çekirdek programlamayı, profilli ve uzlaşma olaylarını doğrulayabilir.

Taahhüt-Açıklama (2 Aşama)

Aşama 1: Duraklatma + Kaydetme

fonksiyon blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) turu kilitler yeni satın alma alımları için kaydedilen hedefin belirlenmesini belirler ve yalnızca gizli depolar doğramak.

2. Aşama: Göster + Çek + Öde

fonksiyon blockSenaDrawPay(tuz) bunu doğruluyor keccak256(tuz) == bunlarınHash, hedefin sönmesini kullanır blok karma, Toplamda 6 benzersiz sayıyı oluşturur ve ödemeleri yapar.

Teknik blok karma penceresi

blok karma yalnızca ~256 blok için okunabilir. Süresi dolarsa turun bir süreye ihtiyacı vardır miktarı azaltılır. Bu kesinti, on-chain zaman aşımı ile nadir görülen bir arızalıdır ve kullanımı, on-chain herkes açık olarak kalır.

Tuz Taahhüdü

commitHash = keccak256(abi.encodePacked(tuz))
Tuz 1. aşamada açıklanmaz. Yalnızca karma halkalar. 2. aşamada ortaya çıkan oranın azaltılmasıyla tam olarak eşleşmesi gerekir.

Hedef Blog

hedefBlok = blok.numarası + 5
Çekilişin bir kısmı kaybolunca karmasını kullanır. Taahhüt zamanında bu blok karması henüz mevcut olan ürünler kimse bu kızı oluşturmayı bilemez.

Çizim Akışı (21:00 UTC -> +5 blok -> DrawPay)

Block-Sena operasyonel akışı, biletlerin kapatılması ile 6 numaranın oluşturulması işlemlerini sistematik olarak birbirinden ayırır. Bu ayrım, sonuç belli olduktan sonra bilet alma riskini veya çekilen sayılara eşleşecek şekilde biletleri ayarlama ihtimalini ortadan kaldırır.

1) 21:00 UTC (çalışma penceresi) -> blockSenaPauseDraw

fonksiyon blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) turu kilitler, yeni satın alma işlemleri engellenir, ürünlerinHash, kalacaksın hedefBlok = blok.numarası + 5ve değişikliklerin değiştirilmesinin USD cinsinden saklanması.

2) Rastgelelik ortaya çıkmadan önce kullanılmış biletler

Daha sonra PauseDraw, o tura yeni bilet girilemez. O anda, blockhash(targetBlock) hala yok, Sonuçta 6 sayı henüz tahmin edilemiyor veya hesaplanamıyor.

3) +5 blok (hedef bloktan sonra) -> blockSenaDrawPay

fonksiyon blockSenaDrawPay(tuz) taahhüde karşı tuzu doğrular, hedefin gidişatı okur blok karma6 basamaklı sayıyı oluşturur ve çalıştırır jeton başına ödemeler. Hedef bloktan önce çağrılırsa işlem on-chain değerini geri alır.

4) Kamunun her zaman denetlenebilirliği

Explorer'da herkes doğrulayabilir: blockSenaPauseDraw Teşekkürler, hedefBlok, blockSenaDrawPay tx, açığa çıkan tuz, Kaydedilen sayılar ve ödeme/ödeme olayları.

Bu tasarımın pratikte neyi engellediği

Bu mümkün değil Turdaki 6 rakamı gördükten sonra bilet almak için, çünkü tur zaten kilitlenmişti blockSenaPauseDraw kür yapılmadan önce.

Bu mümkün değil formülüne bağlıdır çünkü kilitleme zamanında 6 sayıyı bilmek mevcut bir blokta (hedefBlok) o anda mevcut değil.

Bu mümkün değil kura çekiminin teknik süreden önce yapılması, çünkü blockSenaDrawPay gelişiminin zaten geçmiş olmasını gerektirir on-chain hedefBlok.

ResetDraw Hakkında (bir senaryo)

blockSenaResetDraw yalnızca bir turun kalıcı olarak gizliliğini önlemek için mevcuttur Uzun süreli bir altyapı arızası meydana gelirse (örneğin: RPC kesintileri, hizmet bakımı, ağ/altyapı kesintileri veya uzun süreli süreklilik sorunları) ve DrawPay idam edilemez önce blockhash(targetBlock) süresi doluyor.

Normal akışta beklenen davranış, DrawPay birkaç blok sonra PauseDraw (hedef +5 bloklar). Sıfırlama bir canlılık korumasıdır, normal çekmenin bir parçası değil.

Matematiksel Çizim Formülü (6 benzersiz sayı)

Beraberlik tohumu, düzenli bir blok, ödüllük verilen tuz ve yuvarlak veri birleşiminden türetilir. Sözleşme bundan 1'den 30'a kadar sayı üretir ve 6 benzersiz sayıya ulaşana kadar kopyaları atar.

Operasyonel güvenlik açısından: çünkü biletler zaten kayıtlı durumda. PauseDraw dağıtılmasının mevcut oluşunun bir sonraki aşaması, çekilişin "hazırlanamaz" olması Daha sonra bir biletle eşleşmek için ve hiçbir kesinti daha sonra aynı turda bahis oynayamaz. sonucunu bilmek.

Tohum Çiz

tohum = keccak256(abi.encodePacked(blockhash(targetBlock), salt, blok.prevrandao, roundId))
Sözleşmenin uygulamaları gerçek girenler: blockhash(targetBlock), tuz, blok.prevrandao, ve currentRoundId.

Sayısının Üretilmesi

sayı = (keccak256(tohum, tek seferlik) mod 30) + 1
Eğer sayı o turda zaten çekilmişse, atılır ve bir kez artırılır. İşlem 6 sayı elde edilinceye kadar tekrarlanır.

Bu prosedür sonuçta nihai tekrarlanan paketler ve çekilişin geçerli aralıkta kalması sağlanır 1..30.

Önemli (şeffaflık) Nihai turun sonucu deterministiktir ve on-chain verileriyle tekrarlanabilir. Herhangi bir parça müdahale girişimi (örn. tur sıfırlama) genel ve denetlenebilir bir iz bırakır on-chain.

Çoklu Seçimli Bilet (6 ila 10 numara) ve Kombinatoryal Kotalar

Block-Sena'da bir bilet paketinin dağıtılması: 6 ila 10 sayı. Bu bilet birden fazla kişiyi temsil ediyor 6 eşdeğerleri. Ödül programlarının devamı: kota kazanma (kombinasyonlar), sadece “insanlar” değil.

k Numaralı Bir Biletin Toplam Kombinasyonları

ayrıntılar(k) = C(k, 6)
Örnek: eğer k = 10, Daha sonra C(10,6) = 210 standart ayarlar

Kademe bazında kazanma kotaları (4/5/6)

Bir bilet düşünün k sayı ve X Çekilen 6 sayının İçindekiler.

q6 = C(x, 6)
q5 = C(x, 5) * C(k - x, 1)
q4 = C(x, 4) * C(k - x, 2)
Sözleşme, bütçe başına bu kotaları toplar ve bunları token başına toplu biçimde öder (daha fazla gaz alışverişi sağlar).

Örnek (10'un içinde izlenen 6 rakamın bulunduğu 10 rakamlı bilet)

q6 = 1, q5 = 24, q4 = 90. Aynı bilet her 3 kademede de aynı anda kazanılabilir.

Çoklu Token Ödemesi (Token Başına Ödeme)

Her havuz jetonu (ör.yerel, USDC, USDT) bağımsız olarak kapatılır. Sözleşmeler, kazananları ve ödülleri turlara göre hesaplanıyor ve simgesel olarak, tam geçmiş muhafaza' RoundTokenStats.

Seviye Bölünmesi

6 kademe kademesi = token havuzunun %80'i
5 vuruş kademesi = token havuzunun %15'i
4 vuruş kademesi = token havuzunun %5'i

Kazanılan kota başına ödül

prizePerWinnerX = taban(prizeBucketX / quotasX)
Bölme işlemini on-chain tamsayı aritmediğini kullanabilirsiniz. Yuvarlama artıkları (toz) bir sonraki tur için carry-over olarak kalır.

Eğer kazanan yoksa

Bu seviyenin miktarı değişiyor: bir sonraki turda o token için carry-over olur.

Birden fazla kazanan varsa

Ödül, kazanılan kotalara bölünür. Aynı bütçe, jeton başına tek bir ödemede toplanmış birden fazla kota alabilir.

Bir Tur Nasıl Denetlenir (Adım Adım)

  1. Bul blockSenaPauseDraw Tx ve şunu not edin ürünlerinHash ve hedefBlok.
  2. Hedef bloktan sonra, blockSenaDrawPay tx'i tıklayın ve gönderilenleri okuyun tuz.
  3. Yeniden hesapla keccak256(tuz) ve eşleştiğini onaylayın ürünlerinHash.
  4. Okumak blockhash(targetBlock) kaşifte ve prevrandao Tx'in neslinden çekilmesi.
  5. Tohumu ve 6 rakamlı üretim rutinini yeniden üretin (kopyaları atın) ve şunu karşılaştırın: Çizim Yürütüldü.
  6. Nadir bir arıza meydana gelirse inceleyin DrawReset (roundId, targetBlock, resetleniyor) zaman aşımını yenilemek ve izlenebilirliği iptal etmek için.
  7. Kontrol etmek RoundTokenSettled havuzlara yönelik etkinlikler, katman başına ödemeler ve jeton başına carry-over.
  8. Kazananlara yapılan ödemeleri sürdürmek için yerel/ERC20 transferlerini onaylayın.

Garantiler, Şeffaflık ve Operasyonel Sınırlar

Block-Sena yuvarlak bir sonuç verecek şekilde tasarlandı denetlenebilir, tekrarlanabilir ve şeffaf. Gelecekteki bir blokla birleştirilmiş hizmetlerlik-açıklama, manuel sonuç işlemlerini önemli ölçüde azaltır.

Teknik açıdan model, sonuç ortaya koyar Kilitlenme zamanında tahmin edilemez, çünkü tur turdan önce kapandı blockhash(targetBlock) Tohumlarda kullanılanlar mevcuttur. Bu, birleştirilmiş olarak daha sonra bahis kurulumuna izin veren formülün herkesin açık ve soğutulabilir olmasını sağlar.

Neyin verilmiştir on-chain

Yazı kuralları, kota programlamaları, bölünmüş ödeme paylaşımı (80/15/5), token başına tarih, olaylar ve her adımın izlenebilirliği.

Acil durum çalışması

Nadir teknik senaryolar için bir azaltma azaltma fonksiyonu vardır (örn. uzun süreli altyapı/ağ arızası). Yalnızca tur kilitliyken ve on-chain zaman aşımdan sonra yürütülebilir. Her kullanım karşılığında, on-chain gözetim altında tutulabilir ve gezginde denetlenebilir.

Sıfırlama fonlarını taşımaz, kayıt silmez veya belleği değiştirmez. İzin vermek için yalnızca döngüsel döngünün açıklığını sağlar yeni bir beraberlik denemesi için aynı tur nadir bir başarısızlık senaryosunda.

Ödül fonları, çekiliş ve kazananlara otomatik ödeme yapılana kadar sözleşme kalana kadar. Eğer kazanan yoksa bir aşamalı değer bir sonraki tur için carry-over olarak yer almaya devam eder. Sahibinin bir fonksiyonu yok Ödül havuzunda zaten mevcut olan parayı çekmek için.

rescueAll özellik yalnızca kurtarmak için mevcuttur fazla hesaplanmayan (örneğin, hatalı doğrudan transferler), programlama gerçek bakiye - hesaplanan simülasyon. Ulaşmıyor ödül fonları zaten havuza aktarılmıştı.

Başka bir deyişle: Block-Sena körü körüne güven vermez. Gözlemlenebilecek bir analiz sağlar, çeşitlilik olarak çoğaltılır ve herhangi biri tarafından herhangi bir zamanda on-chain doğrulanır.