カジノのさまざまなゲームで運(またはスキル)を試して、素晴らしいトークンと賞品を勝ち取りましょう!
これは開発中のため、現時点ではがっかりするほどゲーム数が少ないかもしれません。しかし、今後さらに追加される予定で、それまでの間にも悪用できるものがたくさんあります。
依存関係をインストールする
sudo apt install npmsudo npm install -g truffle ganache-cli./start_challenge.sh を実行して、testrpc を起動し、カジノをローカルテストネットにデプロイし、他のプレイヤーのシミュレーションを開始します。
脆弱性を見つけるために contracts/ ディレクトリ内のコードを確認してください。
できるだけ多くの CasinoTokens を獲得するための PoC(概念実証)スクリプトを作成しましょう!(行き詰まった場合は、exec/simuilated-users/ ディレクトリ内のシミュレーションユーザースクリプトを参照して、コントラクトとの対話方法の参考にしてください)
GOATlib/GOATConfig.js のライブラリを使用し、すべての呼び出しに GOATConfig.accounts.attacker を使用できます。testrpc 上であるため、実際のオーナーアカウントや他のプレイヤーにアクセスできることは分かっています。アカウントを順番に切り替えて transfer を呼び出すだけのスクリプトには感心しません。GOATlib/: さまざまなJavaScriptファイルで使用されるコードを含むライブラリ。build/: Truffle がプロジェクトをコンパイルするときに作成するディレクトリ。プロジェクト内のすべてのコントラクトに関する情報(コンパイル済みバイトコードやデプロイ済みコントラクトのアドレスなど)が含まれています。contracts/: スマートコントラクトのコード。exec/simulated-users/: さまざまなゲームをプレイするシミュレーションされたギャンブラーを制御するスクリプト。exec/examples: エクスプロイトを作成する際に参照できるサンプルスクリプト。migrations/: デプロイのために truffle によって実行されるスクリプト。アルファベット順に実行され、コントラクトがどのように初期化され、どのように組み合わされるかについての洞察を得られます。GOATCasino のすべてのゲームは、CasinoToken.sol ファイルで定義されている ERC20 準拠のトークンを使用します。
CasinoToken は、トークンの標準機能の多くを実装するために、広く使用されている zeppelin コントラクトを利用しています。
CasinoExchange.sol で定義されているコントラクトを使用して、ether と引き換えに CasinoTokens を売買できます。
Faucet.sol ファイルは、ゲームを試すためにユーザーごとに1回だけ無料のCasinoTokensを入手できるコントラクトを定義しています。
Vault.sol コントラクトは、オーナーがアクセスできる資金の準備金を保持します。金庫の資金は均等な割合に分けられ、それぞれが別々のアクセス制御方法で保護されています。これは、ある方法が不十分であると判明した場合に資金をより良く保護するためです。
最後に、現在カジノにある唯一のゲームはロッタリーです。
ユーザーは0から255までの番号でチケットを購入できます。
毎分、ユーザーは checkWin 関数を呼び出して、当選チケット番号を生成し、勝者にハウスカット(運営側の取り分)を差し引いた賞金を付与し、購入済みチケットをクリアして新しいラウンドを開始できます。
当選チケットを誰も購入していなかった場合、ラウンドはさらに1分間の購入期間が続き、その後、新しい当選チケットが選ばれるようになります。