Block-Sena Sách trắng kỹ thuật
An ninh và Minh bạch

Quay số on-chain có thể kiểm chứng bởi bất kỳ ai

Trong Block-Sena, quá trình quay số sử dụng cơ chế commit-reveal hai giai đoạn, kết hợp với block hash tương laiprevrandao. Điều này làm cho kết quả được xác định ngay sau khi thực thi, có thể kiểm tra trực tiếp trên blockchain và chống lại các thao tác can thiệp thủ công.

6 trên 30 Trò chơi cơ bản với 6 lựa chọn duy nhất rút từ 30 số
6 đến 10 số Vé chọn nhiều số với tổ hợp chiến thắng (trúng 4/5/6 số)
Multi-Token Thanh toán độc lập cho mỗi loại token và có thể kiểm tra số dư tích lũy.

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)

Giai đoạn 1: Tạm dừng + Cam kết

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.

Giai đoạn 2: Tiết lộ + Quay số + Thanh toán

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.

Cửa sổ kỹ thuật blockchain

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)

commitHash = keccak256(abi.encodePacked(salt))
Muối không được tiết lộ trong giai đoạn 1. Chỉ có mã băm là công khai. Trong giai đoạn 2, muối được tiết lộ phải khớp chính xác với cam kết chính xác với cam kết.

Block mục tiêu

targetBlock = block.number + 5
Việc quay số sử dụng mã băm của một khối tương lai. Tại thời điểm cam kết, mã băm khối này vẫn chưa tồn tại, thì không ai biết trước đầu vào này.

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ượctạ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.

1) 21:00 UTC (khung giờ vận hành) -> blockSenaPauseDraw

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.

2) Cược bị đóng băng trước khi có kết quả ngẫu nhiên

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.

3) +5 block (sau block mục tiêu) -> blockSenaDrawPay

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.

4) Kiểm toán công khai bất cứ lúc nào

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.

Thiết kế này ngăn chặn điều gì trong thực tế

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.

Về việc đặt lại kết quả (ResetDraw) (trường hợp hiếm gặp)

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ố

seed = keccak256(abi.encodePacked(blockhash(targetBlock), salt, block.prevrandao, roundId))
Đầu vào thực tế được sử dụng trong hợp đồng: blockhash(targetBlock), salt, block.prevrandao e currentRoundId.

Tạo từng số

num = (keccak256(seed, nonce) mod 30) + 1
Nếu số đã được rút rút trúng nesta vòng, nó sẽ bị loại bỏ và nonce é được tăng lên. Quy trình lặp lại cho đến khi nhận được 6 số duy nhất.

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.

Quan trọng (minh bạch) Kết quả của một vòng chơi đã kết thúc mang tính xác định và có thể tái hiện với các dữ liệu trên chuỗi. Bất kỳ nỗ lực can thiệp vận hành (ex.: đặt lại vòng chơi) để lại dấu vết công khai e có thể kiểm chứng na blockchain.

Đặ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ố

combos(k) = C(k, 6)
Ví dụ: nếu k = 10, thì C(10,6) = 210 tổ hợp tương đương.

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.

q6 = C(x, 6)
q5 = C(x, 5) * C(k - x, 1)
q4 = C(x, 4) * C(k - x, 2)
Hợp đồng cộng các hạn ngạch này theo ví và thanh toán dưới dạng tổng hợp theo token (tiết kiệm gas hơn).

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

Mức 6 số trúng = 80% pool của token
Mức 5 số trúng = 15% pool của token
Mức 4 số trúng = 5% pool của token

Giải thưởng cho mỗi hạn ngạch chiến thắng

prizePerWinnerX = floor(prizeBucketX / quotasX)
Việc chia sử dụng số học số nguyên trên chuỗi. Phần dư làm tròn (dust) được giữ lại làm tích lũy cho vòng tiếp theo.

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)

  1. Tìm giao dịch blockSenaPauseDraw và ghi lại commitHashtargetBlock.
  2. Sau khối mục tiêu, tìm giao dịch blockSenaDrawPay và đọc muối (salt) được gửi.
  3. Tính toán lại keccak256(salt) và xác thực rằng nó khớp với commitHash.
  4. Đọc blockhash(targetBlock) trên trình khám phá và prevrandao từ khối của giao dịch quay số.
  5. 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.
  6. 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.
  7. 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.
  8. 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.