公平性を自分で確認する
サイトがコントラクトについて述べていることは、すべてネットワークの公開データで照合できます。以下では、最も簡単なもの(2分)から最も深いもの(コードのビルド)まで、確認方法を順に紹介します。ほとんどの確認に、プログラミングは不要です。
確認の仕組み
サイトは偽造されたり誤ったりする可能性がありますが、ブロックチェーンの記録は違います。そのため、確認はプロジェクトのサイトではなく、ネットワークエクスプローラーで行ってください。エクスプローラーは、ブロックチェーンの内容を表示する独立したサイトです(Solscan、Solana Explorer、SolanaFMなど)。他人のメッセージ内のリンクからではなく、いずれかを自分で開いてください。
確認には2つのアドレスが必要です。プログラム(コントラクト)とトークンです。どちらも「セキュリティ」のページに表示されています。さらに、独立した場所を最低2つ(リポジトリ、公式チャンネル)使って照合してください。アドレスが食い違う場合、あなたは騙されかけています。
クイックチェック(2〜10分)
| 確認する内容 | 見る場所 | あるべき状態 | 違う場合 |
|---|---|---|---|
| 1. 新しいトークンを発行できないか | エクスプローラーのトークンのページ、Mint Authorityの欄 | 空(放棄済み) | そこに記載されたアドレスの持ち主は、トークンを好きなだけ発行して、あなたのトークンの価値を下げられます。 |
| 2. トークンを凍結できないか | 同じページのFreeze Authorityの欄 | ハズレ | 保有者は、あなたのものを含め、任意のウォレットを凍結できます。 |
| 3. コードを変更できるのは誰か | プログラムのページ、Upgrade Authorityの欄 | 空(コードは凍結済み)、または更新に遅延が付くマルチシグのアドレス | 通常のアドレスが1つだけの場合、その保有者はいつでも別のルールを読み込めます。 |
| 4. トークンの総発行量 | トークンのページ:Supply | 100,000,000,000以下で、バーンによって減る一方であること | それより多い場合、発行量が増やされたことを意味します。 |
| 5. トークンが一致しているか | あなたのウォレット内のトークンアドレスと、「セキュリティ」のページとの照合 | アドレスが1文字ずつ完全に一致していること | それは本物のFAIRDRUMではありません。購入も入金もしないでください。 |
| 6. ボールトにトークンが足りているか | 「セキュリティ」のページにあるボールトのアドレスのトークン残高と、「経済設計」のポットの金額 | ボールトの残高が、ポットの合計(さらにプレイヤーのゲーム残高も加えた額)を下回らないこと | コントラクトは常にトークンで裏付けられていなければなりません。食い違いは重大なシグナルです。 |
「セキュリティ」のページ上部の表は、同じ欄をネットワークから直接読み取って✔または⚠を表示しますが、それだけに頼らず、一度は自分で照合してください。
自分のスピンを確認する
各スピンはネットワークに記録を残し、画面に表示された結果をその記録と照合できます。
トランザクションを見つける
スピンの後、ボタンの下に「トランザクション」のリンクが表示されます。開くと、エクスプローラーの記録が表示されます。または、エクスプローラーで自分のウォレットの履歴を開き、FAIRDRUMプログラムのトランザクションを選んでください。
あるべき状態:ステータスがSuccessで、命令の一覧が表示されていること。
2組の呼び出しを見つける
最初のトランザクションには、Switchboardの呼び出し(乱数の要求、commit)と、FAIRDRUMプログラムの
spin_commit(ベット)があります。2つ目には、Switchboardの呼び出し(開示、reveal)とspin_settle(精算)があります。名前の表示はエクスプローラーによって少し異なります(SpinCommit、spinCommit)。順序を比較する
ベットは、数値が開示される前に記録されています。最初のトランザクションのブロック番号(Slot)は、2つ目より小さくなっています。つまり、ベットの時点では、あなたもプロジェクトも結果を知らなかったということです。
2つ目のトランザクションのログ(Logs)を見る
そこには
SpinSettledイベントが記録されており、スピン数、賞金、ミニジャックポット・ジャックポット・スーパージャックポットの当選が含まれます。ホイールが表示したのと同じ数値です。乱数の所有者を確認する
トランザクションに記載された乱数アカウントは、Switchboardプログラムの所有である必要があります。コントラクト自身がそれ以外を拒否しますが、確かめておく価値はあります。アカウントを開いて、Ownerの欄を見てください。
詳細な確認
コードをビルドしてハッシュを比較する
GitHub上のプロジェクトのリポジトリ(リンクは公開後に掲載されます)を取得し、再現可能モードでプログラムをビルドし(anchor build --verifiable)、ハッシュをネットワーク上のものと比較してください(solana-verify)。一致していれば、ネットワーク上にあるのはまさにこの公開コードです。
定数を読む
ゲームのすべての数値は、1つのファイルconsts.rsにまとまっています。割合、確率、賞金の段階、手数料、期間です。サイトの表はまさにこのファイルから描かれており、サイトとコントラクトの間に食い違いがあってはなりません。
テストを実行する
リポジトリには、ルールと計算のテスト(cargo test)とクライアントのテスト(npm test)があります。たとえば、すべてのプールと残高の合計が、ボールトにあるトークンを超えないことなどを検証します。
結果の選ばれ方を分析する
開示された32バイトの乱数から、コントラクトはSHA-256で数値を導き出します。メインホイールでは、SHA-256("FDRM-M" + 乱数 + ブロック番号)のブロックから、実行された各スピンにつき4バイト(リトルエンディアン)ずつ数値を取り出します。ゴールドホイールではSHA-256("FDRM-G" + 乱数 + 実行されたスピンの番号)です。数値は、232分率で表されたしきい値と比較されます。しきい値自体は、精算時点の週間プレイ量とポットの大きさに依存するため、過去のスピンを完全に再計算するには、そのスロット時点のプログラムの状態も必要です。計算式はmath.rsとengine.rsにあります。
期間のログを読む
誰でも、ある期間のすべてのSpinSettledイベントをネットワークから取り出して、ゴールドの頻度とポットの大きさを自分で集計できます。「確率と配当プラン」と比較してください。スピン数が少ないとばらつきは非常に大きく、1%の確率を確かめるには数千回のスピンが必要です。
確認できないこと
- オラクルの誠実さ。乱数はSwitchboardネットワークから届きます。コントラクトは、数値が正しいアカウントから来ており、ベットの後に開示されたことを検証しますが、オラクルのノードが共謀していないことまでは検証できません。これは外部依存です。
- コードにバグがないこと。テストと公開コードは確信を高めますが、独立した監査の代わりにはなりません。監査へのリンクが掲載されていない間は、監査は存在しません。
- 将来のこと。アップグレード権限が放棄されるまでは、新しいバージョンによってルールが変わる可能性があります。プログラムの更新トランザクションに注意してください。
- 管理者がコントラクトの外で行うこと。管理者のトークンの売却、マーケティング、上場の判断は、コントラクトの管理外です。プロモーション基金からの支払いは公開されますが、「何のために使われたか」をコントラクトは検証しません。