Block-Sena 기술 백서
보안 및 투명성

누구나 검증 가능한 온체인 추첨 시스템

Block-Sena는 2단계 commit-reveal 메커니즘을 사용하며, 미래 블록 해시prevrandao를 결합합니다. 이를 통해 결과는 실행 직후 결정되며, 블록체인에서 즉시 확인 가능하고 수동 조작이 불가능합니다.

30개 중 6개 1부터 30까지 중 6개를 고유하게 추첨하는 기본 게임
6~10개 선택 조합별 당첨 확률(4/5/6개 일치)이 포함된 다중 선택 티켓
멀티 토큰 지원 각 토큰별 독립적 정산 및 감사 가능한 이월(carry-over) 시스템

개요

Block-Sena은 케이스 구매, 라운드 잠금, 실행 및 상품이 포함된 on-chain 복권입니다. 분배기는 블록체인에 기록됩니다. 경우는 2단계로 간단하게 사용합니다. blockSenaPauseDraw (라운드를 잠그고 약속을 기록합니다) 그리고 blockSenaDrawPay (공개, 추첨 및 지불).

목표

매 라운드마다 투명한 지급 규칙을 통해 감사 가능하고 재현 가능한 프로세스를 보장합니다.

감사 가능성

누구나 입력(커밋, 솔트, 대상 블록), 시드 계산, 추첨 번호, 정산 이벤트를 확인할 수 있습니다.

커밋-공개(2단계)

1단계: 일시 중지 + 커밋

기능 blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) 라운드를 잠급니다 신규 구매시에는 미래의 타겟 블록을 설정하고 비밀솔트만 저장합니다. 해시시.

단계 2: 공개 + 뽑기 + 지불

기능 blockSenaDrawPay(소금) 그것을 검증한다 keccak256(salt) == commitHash, 대상 블록을 사용합니다. 블록해시, 6개의 고유번호를 생성하고 지급을 실행합니다.

기술적인 블록해시 창

그만큼 블록해시 ~256개 블록까지만 읽을 수 있습니다. 다음번에 반품이 필요합니다. 활동구성원입니다. 이 부분은 on-chain 시간만큼만 사용할 수 있는 보안 장치이며 모든 사용은 on-chain 표시 상태로 유지됩니다.

소금에 대한 헌신

commitHash = keccak256(abi.encodePacked(salt))
1단계에서는 솔트가 공개되지 않습니다. 해시만 공개됩니다. 2단계에서는 공개된 솔트가 커밋과 정확히 일치해야 합니다.

대상 블록

targetBlock = 블록.번호 + 5
추첨은 미래 블록의 해시를 사용합니다. 커밋 시 이 블록해시는 아직 존재하지 않으므로 누구도 이 입력을 미리 알 수 없습니다.

그리기 흉함(21:00 UTC -> +5 블록 -> DrawPay)

Block-Sena 작업은 그냥 쉽게 구성됩니다. 티켓 마감 ~에서 6개의 숫자 생성. 이러한 분리로 인해 티켓 구매 위험이 제거됩니다. 결과가 알려진 후 또는 추첨된 숫자에 맞게 티켓을 조정하려고 하는 경우.

1) 21:00 UTC (운영 창구) -> blockSenaPauseDraw

기능 blockSenaPauseDraw(usdValuePoolSnapshot, commitHash) 라운드를 잠그고, 신규 구매를 차단하고, 커밋해시, 정의 targetBlock = 블록.번호 + 5, 풀스냅샷을 USD로 기록해봤습니다.

2) 무작위성이 존재하기 전에 동결된 티켓

후에 PauseDraw, 새로운 티켓은 해당 라운드에 참가할 수 없습니다. 그 순간, blockhash(targetBlock) 아직 존재하지 않습니다. 따라서 마지막 6개 숫자는 아직 예측하거나 계산할 수 없습니다.

3) +5 블록(대상 블록 이후) -> blockSenaDrawPay

기능 blockSenaDrawPay(소금) 커밋에 대해 솔트를 검증하고, 타겟 블록을 읽습니다 블록해시, 6개의 고유한 포스틱을 생성하고 실행합니다. 가격을 확인하세요. 대상 블록 이전에 소니는 on-chain을(를) 있습니다.

4) 언제든지 공개 감사 가능

누구나 탐색기에서 확인할 수 있습니다. blockSenaPauseDraw 텍사스, 타겟블록, blockSenaDrawPay 텍사스, 소금 공개, 추첨번호, 정산/지급 이벤트 등을 제공합니다.

이 디자인이 실제로 방해하는 것

그것은 불가능하다 라운드 번호 6개를 확인한 후 티켓을 구매하고, 라운드가 이미 잠겨 있었기 때문에 blockSenaPauseDraw 추첨이 실행되기 전.

그것은 불가능하다 공식이 다르기 때문에 잠금 시간에 6개의 숫자를 알아야 합니다. 미래의 블록(타겟블록) 그 순간에는 아직 존재하지 않습니다.

그것은 불가능하다 기술 시간 이전에 추첨을 실행해야 하기 때문입니다. blockSenaDrawPay 현재 블록이 이미 다음 블록을 지나거나 on-chain이 필요합니다. 타겟블록.

ResetDraw 정보(드문 경우)

blockSenaResetDraw 가는 것을 멈추는 것을 방지하기만 하면 됩니다. 복원된 오류가 발생하는 경우(예: RPC 중단, 서비스 유지 관리, 네트워크/인프라 중단 또는 종료의 작동 문제) 및 DrawPay 실행할 수 없습니다 전에 blockhash(targetBlock) 만료됩니다.

정상적인 흐름에서 예상되는 동작은 다음과 같습니다. DrawPay 몇 블록 뒤에 PauseDraw (대상 +5 블록). 재설정은 활성 보호 장치입니다. 일반적인 드로우 흐름의 일부가 아닙니다.

수학적 추첨 공식(6개의 고유 숫자)

추첨 시드는 미래 블록, 커밋된 솔트 및 라운드 데이터의 조합에서 파생됩니다. 이로부터 계약은 1부터 30까지의 숫자를 생성하고 6개의 고유 숫자에 도달할 때까지 중복된 숫자를 버립니다.

운영 보안 측면에서: 티켓이 이미 PauseDraw 미래 블록이 존재하기 전에는 추첨을 "제작"할 수 없습니다. 나중에 삽입된 티켓과 일치하도록 하며 이후에는 누구도 같은 라운드에 베팅할 수 없습니다. 결과를 아는 것.

시드 그리기

시드 = keccak256(abi.encodePacked(blockhash(targetBlock), salt, block.prevrandao, roundId))
계약에 사용되는 실제 입력: blockhash(targetBlock), 소금, 블록.prevrandao, 그리고 currentRoundId.

각 번호의 생성

num = (keccak256(seed, nonce) mod 30) + 1
해당 라운드에서 이미 숫자가 추첨된 경우 해당 숫자는 폐기되고 목하 증가됩니다. 이 과정은 6개의 고유 번호를 얻을 때까지 반복됩니다.

이 절차는 최종 결과에서 숫자가 반복되는 것을 방지하고 유효한 범위 내에서 추첨을 유지합니다. 1..30.

중요(투명성) 최종 결과는 결정적이며 on-chain 데이터로 공유 가능합니다. 모든 운영 공개고 감사하는 추적 on-chain을 남깁니다.

다중 선택 티켓(6~10개 번호) 및 조합 할당량

Block-Sena에서 다음을 삽입할 수 있습니다. 6~10개의 숫자. 이 티켓은 여러 가지를 나타냅니다. 6개의 숫자를 동일하게 조합한 것입니다. 상금 계산은 다음을 기준으로 합니다. 할당량 획득 (조합), 단지 "사람"이 아닙니다.

k개 숫자가 포함된 총 구성

콤보(k) = C(k, 6)
예: 만약 k = 10, 그 다음에 C(10,6) = 210 동등한 조합.

계층별 획득 할당량(4/5/6)

티켓을 고려해보세요 케이 숫자와 엑스 추첨된 6개의 숫자 내에서 일치합니다.

q6 = C(x, 6)
q5 = C(x, 5) * C(k - x, 1)
q4 = C(x, 4) * C(k - x, 2)
계약은 지갑당 이러한 할당량을 합산하여 토큰당 집계된 형태로 지불합니다(가스 효율성이 더 높음).

예(10개 안에 추첨번호 6개가 포함된 10개 번호 티켓)

q6 = 1, q5 = 24, q4 = 90. 동일한 티켓으로 3개 등급 모두에서 동시에 당첨될 수 있습니다.

다중 토큰 지급(토큰별 정산)

각 풀 내용(예: 기본, USDC, USDT)은 참여로 정산됩니다. 계약을 체결하지 않고 승리자를 떠나고 있습니다. 그리고 기록을 유지합니다. RoundTokenStats.

계층 분할

6히트 티어 = 토큰 풀의 80%
5히트 티어 = 토큰 풀의 15%
4-히트 티어 = 토큰 풀의 5%

우승 할당량 당 상금

PrizePerWinnerX = 바닥(prizeBucketX / 전체량X)
나폴리는 정수 산술 on-chain을 사용합니다. 반올림 부분(더스트)은 다음 라운드에서 carry-over로 유지됩니다.

당첨자가 없는 경우

해당 부분의 금액은 손실되지 않습니다. 다음 업무의 업무에 대해 carry-over이입니다.

당첨자가 다수인 경우

상금은 우승 할당량에 따라 나누어집니다. 동일한 지갑은 토큰당 단일 지불로 집계된 여러 할당량을 받을 수 있습니다.

라운드 감사 방법(단계별)

  1. 찾기 blockSenaPauseDraw tx를 보고 참고하세요 커밋해시 그리고 타겟블록.
  2. 대상 블록 다음에 다음을 찾으십시오. blockSenaDrawPay tx를 전송하고 내용을 보내주시기 바랍니다. 소금.
  3. 재계산 케짝256(소금) 일치하는지 확인하세요. 커밋해시.
  4. 읽다 blockhash(targetBlock) 탐험가와 prevrandao tx 블록에서 그리기.
  5. 시드 및 6자리 생성 루틴(중복 항목 삭제)을 재현하고 다음과 비교합니다. 그리기가 실행됨.
  6. 드물게 작동 오류가 발생한 경우 검사하십시오. DrawReset (roundId, targetBlock, Reset block)을 사용하여 시간 초과를 확인하고 추적하는 구성원입니다.
  7. 확인하다 RoundTokenSettled 풀, 분리별 지급 및 의미별 carry-over에 대한 이벤트입니다.
  8. 찾아내는 사람에게 지불을 확인하려면 기본/ERC20 전송을 확인하세요.

보증, 투명성 및 운영 제한

Block-Sena은 작업 결과가 다음과 같이 만들기를 수행합니다. 감사 가능하고 재현 가능하며 투명합니다.. 미래 블록과 결합된 커밋-공개는 수동 결과 조작 가능성을 크게 줄입니다.

기술적인 측면에서 모델이 결과를 만들어냅니다. 잠금 시간에는 예측할 수 없음, 라운드가 종료되기 전에 blockhash(targetBlock) 씨앗에 사용되는 것이 존재합니다. 이렇게 하면 결과에 따라 나중에 베팅하는 것을 허용하지 않고 공식을 공개하고 감사할 수 있게 유지됩니다.

on-chain

추첨 규칙, 할당량 계산, 계층 지급 분할(80/15/5), 토큰별 내역, 이벤트 및 각 단계의 추적 가능성.

비상작전

해당 영역(예: 다음으로 관련 블록해시 종료)에 대한 그리기 기초 기능이 있습니다. 해야 할 일/네트워크 장애). 라운드가의 잠긴 상태에서 on-chain 시간 초과만 종료될 수 있습니다. 모든 사용은 표시되고 on-chain로 기록을 위해 감사할 수 있습니다.

재설정은 자금 이동, 티켓 삭제 또는 풀 변경을 수행하지 않습니다. 라운드 주기만 잠금 해제하여 허용합니다. 새로운 무승부 시도 같은 라운드 드문 실패 시나리오에서.

상금은 전투가 있는 사람에게 자동으로 지급될 때 계약에 남아 있습니다. 본인이 없는 경우 반대 반대에서는 다음 라운드에서 carry-over으로 유지됩니다. 어머니는 없습니다. 특별한 금이 풀려 포함된 자금을 인출합니다.

그만큼 rescueAll 기능은 구조를 위해서만 존재합니다. 미계상 잉여 (예: 실수로 직접 이체), 계산 실제 잔액 - 계정 풀. 닿지 않는다 상금은 이미 풀에 반영되었습니다.

즉, Block-Sena은 맹목적인 신뢰를 요구하지 않습니다. 관측할 수 있는 기회를 전달하며, 소수의 on-chain을 수학적으로 공유하고 검증할 수 있습니다.