Ringkasnya
Block-Sena adalah lotere on-chain yang mana pembelian tiket, pengunci putaran, pelaksanaan pengundian, dan hadiah distribusi dicatat di blockchain. Protokol menggunakan aliran dua fase: blockSenaPauseDraw (mengunci putaran dan mencatat komitmen) dan blockSenaDrawPay (mengungkapkan, menarik, dan membayar).
Sasaran
Menjamin proses yang dapat diaudit dan diproduksi dengan aturan pembayaran yang transparan untuk setiap putaran.
Auditabilitas
Siapapun yang dapat memverifikasi masukan (komit, garam, blok target), perhitungan benih, nomor yang ditarik, dan peristiwa penyelesaian.
Pengungkapan Komitmen (2 Fase)
Fungsinya blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) mengunci putaran untuk pembelian baru, menetapkan blok target masa depan, dan hanya menyimpan garam rahasia hash.
Fungsinya blockSenaDrawPay(garam) memvalidasi itu keccak256(garam) == commitHash, menggunakan blok target blokhash, menghasilkan 6 nomor unik, dan mengeksekusi pembayaran.
Itu blokhash hanya dapat dibaca untuk ~256 blok. Jika habis masa berlakunya, putaran tersebut membutuhkan pengaturan ulang operasional. Penyetelan ulang ini merupakan tindakan pengamanan yang jarang terjadi dengan batas waktu on-chain, dan setiap penggunaan tetap bersifat publik on-chain.
Komitmen Garam
Blok Sasaran
Aliran Gambar (21:00 UTC -> +5 blok -> DrawPay)
Alur operasional Block-Sena terpisah dengan jelas penutupan tiket dari generasi 6 angka. Pemisahan ini menghilangkan risiko pembelian tiket setelah hasilnya diketahui atau mencoba menyesuaikan tiket agar sesuai dengan nomor yang ditarik.
Fungsinya blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) mengunci putaran, memblokir pembelian baru, mencatat komitHash, mendefinisikan targetBlock = blok.angka + 5, dan menyimpan kumpulan snapshot dalam USD.
Setelah itu PauseDraw, tidak ada tiket baru yang dapat memasuki babak itu. Pada saat itu, blockhash(targetBlock) masih belum ada, jadi 6 angka terakhirnya belum bisa diprediksi atau dihitung.
Fungsinya blockSenaDrawPay(garam) memvalidasi garam terhadap komitmen, membaca target blok blokhash, menghasilkan 6 nomor unik, dan mengeksekusi pembayaran per token. Jika dipanggil sebelum blok target, transaksi akan mengembalikan on-chain.
Siapa pun yang dapat memverifikasi penjelajahan: the blockSenaPauseDraw terima kasih, sasaran blok, itu blockSenaDrawPay tx, garam terungkap, nomor yang ditarik, dan peristiwa penyelesaian/pembayaran.
Hal ini tidak mungkin untuk membeli tiket setelah melihat 6 nomor putaran, karena putarannya sudah terkunci blockSenaPauseDraw sebelum pengundian dilaksanakan.
Hal ini tidak mungkin untuk mengetahui 6 angka pada lock time, karena rumusnya tergantung di blok masa depan (sasaran blok) yang belum ada pada saat itu.
Hal ini tidak mungkin untuk melaksanakan pengundian sebelum waktu teknis, karena blockSenaDrawPay membutuhkan on-chain bahwa blok saat ini sudah melewati sasaran blok.
blockSenaResetDraw ada hanya untuk mencegah jebakan terjebak secara permanen jika terjadi kegagalan infrastruktur yang berkepanjangan (misalnya: pemadaman RPC, pemeliharaan layanan, pemadaman jaringan/infra, atau masalah operasional yang berkelanjutan) dan DrawPay tidak dapat dieksekusi sebelumnya blockhash(targetBlock) masa.
Dalam aliran normal, perilaku yang diharapkan adalah mengeksekusi DrawPay beberapa blok setelahnya PauseDraw (target pada +5 blok). Reset adalah perlindungan keaktifan, bukan bagian dari aliran penarikan normal.
Rumus Undian Matematika (6 angka unik)
Benih undian berasal dari kombinasi blok masa depan, garam yang dikomit, dan data bulat. Dari situ, kontrak menghasilkan angka dari 1 hingga 30, membuang duplikat hingga mencapai 6 angka unik.
Dari segi keamanan operasional: karena tiket sudah dibekukan di PauseDraw fase sebelum blok berikutnya ada, undian tidak dapat "dibuat" untuk mencocokkan tiket yang dimasukkan kemudian, dan tidak ada peserta yang dapat bertaruh pada putaran yang sama setelahnya mengetahui hasilnya.
Menggambar Benih
Generasi Setiap Nomor
Prosedur ini mencegah pengulangan angka pada hasil akhir dan menjaga pengundian dalam rentang yang valid 1..30.
Tiket Pilihan Ganda (6 hingga 10 nomor) dan Kuota Kombinatorial
Di Block-Sena, tiket dapat berisi dari 6 sampai 10 angka. Tiket ini mewakili banyak kombinasi setara dari 6 angka. Perhitungan hadiah didasarkan pada kuota pemenang (kombinasi), bukan hanya “orang”.
Kombinasi Total untuk Tiket dengan Angka k
Memenangkan kuota berdasarkan tingkatan (4/5/6)
kaitkan tiket dengan k angka dan X pertandingan di dalam 6 nomor yang ditarik.
Contoh (tiket 10 nomor dengan 6 nomor yang ditarik di dalam 10)
q6 = 1, q5 = 24, q4 = 90. Tiket yang sama dapat dimenangkan secara bersamaan di level ketiga.
Pembayaran Multi-Token (Penyelesaian Per Token)
Setiap kumpulan token (misalnya, asli, USDC, USDT) diselesaikan secara independen. Kontrak penentuan dan pemenang berdasarkan putaran dan secara tidak langsung, mempertahankan riwayat yang tepat RoundTokenStats.
Pemisahan Tingkat
Hadiah per pemenang kuota
Jika tidak ada pemenang
Jumlah untuk level tersebut tidak hilang: menjadi carry-over untuk token tersebut pada putaran berikutnya.
Jika ada beberapa pemenang
Hadiahnya dibagi berdasarkan kuota kemenangan. Dompet yang sama dapat menerima beberapa kuota yang digabungkan menjadi satu pembayaran per token.
Cara Mengaudit Putaran (Langkah demi Langkah)
- Temukan blockSenaPauseDraw terima kasih dan catat komitHash Dan sasaran blok.
- Setelah blok target, temukan blockSenaDrawPay tx dan baca yang dikirimkan garam.
- Hitung ulang keccak256(garam) dan pastikan itu cocok dengan komitHash.
- Membaca blockhash(targetBlock) di penjelajahan dan prevrandao dari blok draw tx.
- Produksi ulang benih dan rutinitas pembuatan 6 angka (buang duplikatnya) dan bandingkan dengan Gambar Dieksekusi.
- Jika terjadi kegagalan operasional yang jarang terjadi, periksalah DrawReset (roundId, targetBlock, reset blok) untuk memvalidasi batas waktu dan mengatur ulang ketertelusuran.
- Memeriksa RoundTokenSettled acara untuk kumpulan, pembayaran per tingkat, dan per token carry-over.
- Konfirmasikan transfer asli/ERC20 untuk memvalidasi pembayaran kepada pemenang.
Jaminan, Transparansi dan Batasan Operasional
Block-Sena dirancang sedemikian rupa sehingga hasilnya bulat dapat diaudit, dapat direproduksi, dan transparan. Pengungkapan komitmen yang dikombinasikan dengan blok masa depan secara signifikan mengurangi kemungkinan manipulasi hasil manual.
Secara teknis, modellah yang menentukan hasilnya tidak dapat diprediksi pada waktu kunci, karena putaran ditutup sebelumnya blockhash(targetBlock) digunakan dalam benih ada. Hal ini membuat formula tetap publik dan dapat diaudit tanpa mengizinkan taruhan selanjutnya berdasarkan hasil.
Apa yang dijamin on-chain
Aturan penarikan, perhitungan kuota, pembagian tingkat pembayaran (80/15/5), riwayat per token, peristiwa, dan ketertelusuran setiap langkah.
Operasi darurat
Ada fungsi draw reset untuk skenario teknis yang jarang terjadi (misalnya, blockhash yang disebabkan oleh kegagalan infra/jaringan yang berkepanjangan). Ini hanya dapat dieksekusi dengan putaran terkunci dan setelah batas waktu on-chain. Setiap penggunaan bersifat publik, dicatat on-chain, dan dapat diaudit di penjelajahan.
Reset tidak menghapus dana, menghapus tiket, atau mengubah pool. Itu hanya membuka siklus putaran untuk memungkinkan upaya undian baru untuk putaran yang sama dalam skenario kegagalan yang jarang terjadi.
Dana hadiah tetap ada dalam kontrak hingga pengundian dan pembayaran otomatis kepada pemenang. Jika tidak ada pemenang dalam satu tingkat, nilai tetap diperhitungkan sebagai carry-over untuk putaran berikutnya. Pemiliknya tidak mempunyai fungsi untuk menarik dana yang sudah diperhitungkan dalam kumpulan hadiah.
Itu rescueAll fungsi ada hanya untuk menyelamatkan surplus yang tidak terhitung (misalnya, kesalahan transfer langsung), perhitungan saldo riil - kumpulan yang diperhitungkan. Itu tidak mencapai dana hadiah sudah diperhitungkan dalam pool.
Dengan kata lain: Block-Sena tidak meminta kepercayaan tetapi. Ini memberikan aliran yang dapat diamati, diproduksi secara matematis, dan persyaratan on-chain oleh siapa pun dan kapan pun.