Block-Sena テクニカルホワイトペーパー
セキュリティと透明性

監査可能、on-chain 描画は誰でも検証可能

Block-Sena では、描画には 2 フェーズが使用されます。 commit-reveal フローと組み合わせて ある 将来のブロックハッシュ そして prevrandaoこれにより結果が決定的になります 実行後はブロックチェーン上で監査可能ですが、抽出された数字の手動操作に耐性があります。

6時30分 6 つのユニークなピックと 6 つのユニークな数字のドローによる基本ゲーム
6から10 組み合わせ勝利のある複数選択チケット(4/5/6ヒット)
マルチマート 独立した決済と自動可能なcarry-overによる理由ごとの支払い

概要

Block-Sena は、チケットの購入、ラウンドロック、抽選の実行、賞品が含まれる on-chain の宝くじです。 配信はブロックチェーンに記録されます。このプロトコルは 2 フェーズフローを使用します。 blockSenaPauseDraw (ラウンドをロックし、コミットメントを記録します)および blockSenaDrawPay (公開、脚本、支払い)。

ゴール

すべてのラウンドの透明な支払いルールにより、監査可能で再現可能なプロセスを保証します。

監査可能性

誰でも入力 (コミット、ソルト、ターゲット ブロック)、シード計算、描画された数値、決済イベントを検証できます。

コミットと公開(2期)

フェーズ1:一時停止+コミット

機能 blockSenaPauseDraw(usdValuePoolSnapshot、commitHash) ラウンドをロックする 新規購入の場合は、将来のターゲットブロックを設定し、シークレットソルトのみを保存します ハッ.

フェーズ 2: 公開 + 描画 + 支払い

機能 blockSenaDrawPay(塩) それを検証します keccak256(salt) == コミットハッシュ、ブロックを使いますか ブロックハッシュ、 6 つの固有の番号を生成し、支払いを実行します。

テクニカルブロックウィンドウハッシュ

ブロックハッシュ 約256ブロックの場合のみ開始できます。 有効期限が切れた場合、ラウンドには次回の時間が必要です 動作リセット。このリセットは、on-chain タイムアウトを伴う稀なフェイルセーフであり、すべての使用はパブリック on-chain のままになります。

塩分へのこだわり

commitHash = keccak256(abi.encodePacked(salt))
フェーズ 1 ではソルトは公開されません。ハッシュのみが公開されます。フェーズ 2 では、公開されたソルトがコミットと正確に一致する必要があります。

ブロック

ブロック = ブロック番号 + 5
グラフィックにはブロックのハッシュが使用されます。 コミット時には、このブロック ハッシュ将来はまだ存在しないため、この入力を事前に知る人はいません。

描画フロー (21:00 UTC -> +5 ブロック -> DrawPay)

Block-Sena のオペレーションフローは明確に分かれています チケットクローズ から 6つの数字の生成この分離により、チケット購入のリスクが排除されます 結果が判明した後、または抽選された番号と一致するようにチケットを調整しようとしている場合。

1) 21:00 UTC (操作ウィンドウ) -> blockSenaPauseDraw

機能 blockSenaPauseDraw(usdValuePoolSnapshot、commitHash) ラウンドをロックし、 新しい購入ブロックを、記録します コミットハッシュ、定義します ブロック = ブロック番号 + 5、プールのスナップショットをUSDに保存します。

2)ランダム性が存在する前にチケットが凍結される

PauseDraw、新しいチケットはそのラウンドに入場できません。 その瞬間、 blockhash(targetBlock) まだ存在しませんが、 したがって、最後の 6 つの数字はまだ予測または計算できません。

3) +5 ブロック (ターゲット ブロック以降) -> blockSenaDrawPay

機能 blockSenaDrawPay(塩) ソルトをコミットして検証します。 ブロックブロックを読みます ブロックハッシュ、6つの一つのデザインの番号を生成し、実行します 最初ごとの支払い。ターゲットブロックの前に呼び出された場合、その後は on-chain を元に戻します。

4) いつでも正式承認が可能

エクスプローラーで誰でも確認できます。 blockSenaPauseDraw テキサス州、 ブロックblockSenaDrawPay TX、アルカリ塩、 抽選番号、決済・支払いイベント。

この設計により実際に耐えられること

それは不可能です ラウンドの6の数字を見てチケットを購入するには、 ラウンドはすでにロックインされていたため blockSenaPauseDraw 抽選が実行される前。

それは不可能です 式は依存するため、ロック時の6の数字を知る必要があります。 のブロック上 (ブロック)その時点ではまだ存在しません。

それは不可能です テクニカルタイムより前にドローを実行するため、 blockSenaDrawPay 現在のブロックがすでに ブロック.

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(シード, 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)

チケットを検討してください k 数字と × 描かれた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%

獲得枠ごとの賞品

勝者ごとの賞品X = フロア(賞金バケットX / クォータX)
除算には整数演算 on-chain が使用されます。丸め残り (ダスト) は、次のラウンドのために carry-over が残ります。

勝者がいない場合

その層の金額は失われません。次のラウンドでは、その時の carry-over になります。

当選者が複数の場合

賞金は優勝枠によって分けられます。同じウォレットは、支払いごとに1回の支払いに支払われた複数のクォータを受け取る場合があります。

ラウンドを監査する方法 (ステップバイステップ)

  1. を見つけてください blockSenaPauseDraw txしてメモしてください コミットハッシュ そして ブロック.
  2. ブロックの後に、 blockSenaDrawPay txして送信されたものを読みます .
  3. 再計算 keccak256(塩) それが一致することを確認します コミットハッシュ.
  4. 読む blockhash(targetBlock) エクスプローラーと prevrandao グラフィックTXブロックから。
  5. シードと6桁の生成ルーチン(重複を破棄)を再現し、次と比較します。 描画実行済み.
  6. まれに動作不良が発生した場合は点検してください DrawReset (roundId、targetBlock、reset block) を使用してタイムアウトを検証し、トレーサビリティをリセットします。
  7. チェックする RoundTokenSettled プール、層ごとの支払い、場所ごとのイベント carry-over。
  8. ネイティブ/ERC20 送金を確認して、当選者への支払いを検証します。

保証、透明性、運用上の制限

Block-Sena は、ラウンド結果が以下になるように設計されました。 監査可能、再現可能、透明性が高い。 Commit-Revealと将来のブロックを決めると、結果を手動で操作する可能性が大幅に減少します。

技術的に言えば、モデルが結果を作ります ロック時間は予測不可能、 ラウンドが終了する前に終了するため、 blockhash(targetBlock) シードで使用されているものが存在します。 これにより、結果に基づいて考えることができなくなり、公式が公開される可能性が保たれます。

保証内容 on-chain

描画ルール、クォータ計算、ティア支払い分割(80/15/5)、ウォークごとの履歴、イベント、各ステップのトレーサビリティ。

緊急運用

まれな技術的スケジュール (例: ブロックハッシュの有効期限切れなど) に対して描画リセット機能があります 長期にわたるインフラ/ネットワーク障害)。ラウンドがロックされ、on-chain タイムアウト後にのみ実行できます。 すべての使用は公開されており、on-chain に記録され、エクスプローラーで監査可能です。

リセットでは、資金の移動、チケットの削除、プールの変更は行われません。ラウンドサイクルのロックを解除するだけで、 の新しい描画の試み 同じラウンド まれな障害計画で。

賞金資金は、抽選と勝者への自動支払いまで契約が残ります。勝者がいない場合 層では、値は次のラウンドでも carry-over として考慮されます。全員には機能がありません すでに収益プールに置かれている資金を引き出すこと。

rescueAll 機能は放棄するためだけに存在する 未消化の残金 (例: 誤った直接送金)、計算 実質残高 - 会計プール。ない。 賞金はすでにプールに充当されています。

考えれば、Block-Sena は目的な信頼を要求しません。観察できるフローを提供し、 on-chain は数学的に再現され、いつでも誰でも検証できます。