Tổng quan
Block-Sena là một hệ thống xổ số on-chain nơi việc mua vé, khóa vòng, quay số và phân phối giải thưởng đều được ghi lại trên blockchain. Giao thức sử dụng quy trình hai pha: blockSenaPauseDraw (khóa vòng và ghi lại cam kết) e blockSenaDrawPay (tiết lộ, quay số và thanh toán).
Mục tiêu
Đảm bảo quy trình có thể kiểm tra, tái hiện và với quy tắc thanh toán minh bạch cho mỗi vòng.
Khả năng kiểm toán
Bất kỳ ai cũng có thể xác minh đầu vào (cam kết, muối, block mục tiêu), tính toán hạt giống, số rút trúng và các sự kiện thanh toán.
Commit-Reveal (2 giai đoạn)
Hàm blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) khóa vòng chơi cho novas compras, xác định khối mục tiêu tương lai e armazena apenas o hash dmuối secreto.
Hàm blockSenaDrawPay(salt) xác thực rằng keccak256(salt) == commitHash, sử dụng blockhash của block mục tiêu, tạo ra 6 số duy nhất và thực hiện thanh toán.
Blockhash chỉ có thể truy cập trong khoảng ~256 block. Nếu hết hạn, vòng chơi cần đết lại. Việc đặt lại này là một biện pháp an toàn hiếm hoi, với thời gian chờ on-chain, và mọi lần sử dụng đều được công khai on-chain.
Cam kết muối (Salt)
Block mục tiêu
Quy trình quay số (21:00 UTC -> +5 block -> DrawPay)
Quy trình hoạt động của Block-Sena phân tách rõ ràng việc đóng đặt cược và tạo ra 6 số. Sự phân tách này loại bỏ rủi ro mua vé sau khi biết kết quả hoặc cố gắng điều chỉnh vé để khớp với số rút trúng.
Hàm blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) khóa vòng, chặn các lượt mua mới, ghi lại commitHash, xác định targetBlock = block.number + 5 và lưu trữ snapshot của pool bằng USD.
Sau PauseDraw, không có vé mới nào tham gia vòng đó. Tại thời điểm này, blockhash(targetBlock) vẫn chưa tồn tại, vì vậy 6 số cuối cùng vẫn không thể được dự đoán hoặc tính toán.
Hàm blockSenaDrawPay(salt) xác minh muối với cam kết, đọc blockhash của block mục tiêu, tạo ra 6 số duy nhất và thực hiện thanh toán theo từng token. Nếu cố gắng thực hiện trước block mục tiêu, giao dịch sẽ bị thu hồi on-chain.
Bất kỳ ai cũng có thể xác minh trên trình khám phá: giao dịch blockSenaPauseDraw, targetBlock, giao dịch blockSenaDrawPay, salt được tiết lộ, các số rút trúng và sự kiện thanh toán.
Không thể mua vé sau khi thấy 6 số củvòng chơi, vì vòng đã được khóa tại blockSenaPauseDraw trước khi quá trình quay số được thực hiện.
Không thể biết 6 số tại thời điểm tạm dừng, vì công thức phụ thuộc vào một khối tương lai (targetBlock) que ainda không tồn tại tại thời điểm đó.
Không thể thực hiện quay số trước thời gian kỹ thuật, vì blockSenaDrawPay yêu cầu on-chain que o block hiện tại đã passado do targetBlock.
Hàm blockSenaResetDraw chỉ tồn tại để tránh một vòng bị khóa mãi mãi nếu xảy ra sự cố hạ tầng kéo dài (ví dụ: RPC không khả dụng, bảo trì dịch vụ, ngắt kết nối mạng/hạ tầng hoặc vấn đề vận hành kéo dài) và DrawPay không thể thực hiện trước khi hết hạn blockhash(targetBlock).
Trong quy trình bình thường, dự kiến sẽ thực hiện DrawPay vài khối sau khi PauseDraw (mục tiêu tại +5 blocos). Việc đặt lại é uma biện pháp bảo vệ hoạt động, không phải là một phần của quy trình quay số thông thường.
Công thức toán học quay số (6 số únicos)
Hạt giống của quá trình quay số được dẫn xuất từ sự kết hợp của một khối tương lai, muối đã cam kết và dữ liệu củvòng chơi. Từ đó, hợp đồng tạo ra các số từ 1 đến 30, loại bỏ các số lặp lại cho đến khi hoàn thành bộ 6 số duy nhất.
Về mặt an ninh vận hành: vì các vé đã được đóng băng trong giai đoạn PauseDraw trước khi khối tương lai này tồn tại, việc quay số không thể bị "dàn xếp" để khớp với một vé được chèn vào sau, và không người tham gia nào có thể đặt cược trong cùng một vòng chơi sau khi biết kết quả.
Hạt giống quay số
Tạo từng số
Quy trình này ngăn chặn số lặp lại trong kết quả cuối cùng và giữ việc quay số trong khoảng hợp lệ 1..30.
Đặt cược nhiều số (6 đến 10 số) và Hạn ngạch kết hợp
Trong Block-Sena, một vé có thể chứa từ 6 đến 10 số. Vé này đại diện cho nhiều tổ hợp tương đương của 6 số. Việc tính toán giải thưởng được thực hiện bằng hạn ngạch chiến thắng (tổ hợp), không chỉ là "vé trúng".
Tổng số tổ hợp của một vé với k số
Quotas vencedoras theo mức thưởng (4/5/6)
Xét một vé với k số e x số trúng dentro trong bộ 6 số được rút.
Ví dụ (vé 10 số với 6 số trúng trong 10 số đó)
q6 = 1, q5 = 24, q4 = 90. Cùng một vé có thể thắng đồng thời ở cả 3 mức thưởng.
Thanh toán đa Token (Thanh toán theo Token)
Mỗi token trong pool (ví dụ: token gốc, USDC, USDT) được thanh toán độc lập. Hợp đồng tính toán bộ người thắng và giải thưởng theo vòng và theo từng token, duy trì lịch sử chính xác trong RoundTokenStats.
Phân chia theo mức thưởng
Giải thưởng cho mỗi hạn ngạch chiến thắng
Nếu không có người thắng
Giá trị của mức thưởng đó không bị mất: nó tạo thành tích lũy (carry-over) cho token đó trong vòng tiếp theo.
Nếu có nhiều người chiến thắng
Giải thưởng được chia theo hạn ngạch chiến thắng. Cùng một ví có thể nhận được nhiều hạn ngạch cộng dồn trong một lần thanh toán duy nhất theo từng token.
Cách kiểm toán một vòng chơi (Từng bước)
- Tìm giao dịch blockSenaPauseDraw và ghi lại commitHash và targetBlock.
- Sau khối mục tiêu, tìm giao dịch blockSenaDrawPay và đọc muối (salt) được gửi.
- Tính toán lại keccak256(salt) và xác thực rằng nó khớp với commitHash.
- Đọc blockhash(targetBlock) trên trình khám phá và prevrandao từ khối của giao dịch quay số.
- Tái hiện hạt giống và quy trình tạo bộ 6 số (loại bỏ lặp lại) và so sánh với sự kiện DrawExecuted.
- Nếu có lỗi vận hành hiếm gặp, hãy kiểm tra sự kiện DrawReset (roundId, targetBlock và khối đặt lại) để xác thực thời gian chờ và khả năng truy vết của việc đặt lại.
- Kiểm tra các sự kiện RoundTokenSettled cho các pool, thanh toán theo mức thưởng và tích lũy (carry-over) theo từng token.
- Kiểm tra các lệnh chuyển token gốc/ERC20 để xác thực việc thanh toán cho người thắng.
Đảm bảo, Minh bạch và Giới hạn vận hành
Block-Sena được thiết kế để kết quả của mỗi vòng chơi là có thể kiểm chứng, có thể tái hiện và minh bạch. Cơ chế commit-reveal kết hợp với bloco tương lai giúp giảm thiểu đáng kể khả năng can thiệp thủ công vào kết quả.
Về mặt kỹ thuật, mô hình làm cho kết quả không thể dự đoán tại thời điểm khóa, vì vòng chơi kết thúc trước khi tồn tại blockhash(targetBlock) được sử dụng trong hạt giống. Do đó, công thức vẫn công khai và có thể kiểm chứng mà không cho phép đặt cược sau đó dựa trên kết quả.
Những gì được đảm bảo trên chuỗi
Quy tắc quay số, tính toán hạn ngạch, thanh toán theo mức thưởng (80/15/5), lịch sử theo từng token, sự kiện và khả năng truy vết từng bước.
Hoạt động khẩn cấp
Có chức năng đặt lại quay số cho các tình huống kỹ thuật hiếm gặp (ví dụ: hết hạn blockhash do sự cố hạ tầng/mạng kéo dài). Nó chỉ có thể được thực hiện khi vòng chơi đã đóng và sau khi hoàn thành thời gian chờ trực tuyến. Mọi lần sử dụng đều công khai, được đăng ký trực tuyến và có thể kiểm toán trên trình khám phá.
Việc đặt lại không chuyển tiền, không xóa vé và không thay đổi pool. Nó chỉ mở khóa chu kỳ của vòng để cho phép thử lại việc quay số của cùng một vòng chơi trong trường hợp lỗi hiếm gặp.
Giá trị giải thưởng vẫn nằm trong hợp đồng cho đến khi quay số và thanh toán tự động cho người thắng diễn ra. Nếu không có người thắng ở một mức thưởng, giá trị đó vẫn được tính là tích lũy (carry-over) cho vòng tiếp theo. Chủ sở hữu không có chức năng rút tiền đã được tính vào bể giải thưởng.
Hàm rescueAll chỉ tồn tại để thu hồi số dư thừa không được tính toán (ví dụ: gửi trực tiếp do nhầm lẫn), tính toán số dư thực tế - bể đã được tính toán. Nó không ảnh hưởng đến số tiền thưởng đã được tính vào bể.
Nói cách khác: Block-Sena không yêu cầu sự tin tưởng mù quáng. Nó cung cấp một quy trình có thể được theo dõi, tái hiện toán học và xác minh trên chuỗi bởi bất kỳ ai, vào bất kỳ lúc nào.