在赌场的各种游戏中试试你的运气(或技巧),赢取丰厚的代币和奖品!
目前仍在开发中,所以游戏数量可能令人失望,但未来还会有更多游戏,同时也有大量可以利用的东西。
安装依赖
sudo apt install npmsudo npm install -g truffle ganache-cli运行 ./start_challenge.sh 启动 testrpc,将赌场部署到本地测试网,并开始模拟其他玩家
查看 contracts/ 目录中的代码以找到漏洞
编写概念验证脚本,尽可能多地获取 CasinoTokens!(如果你卡住了,可以查看 exec/simuilated-users/ 目录中的模拟用户脚本,了解如何与合约交互)
GOATlib/GOATConfig.js 中的库,并在所有调用中使用 GOATConfig.accounts.attacker。我知道,由于这是在 testrpc 上,你可以访问实际的 owner 账户和其他玩家账户,而且你那种循环遍历账户并调用 transfer 的脚本并不会让我觉得了不起。GOATlib/:包含各种 JavaScript 文件使用的代码的库。build/:Truffle 编译项目时创建的目录。它包含项目中所有合约的信息,包括编译后的字节码和已部署合约的地址。contracts/:智能合约代码。exec/simulated-users/:控制模拟赌徒参与各种游戏的脚本。exec/examples:构建漏洞利用时可以参考的示例脚本migrations/:由 truffle 执行用于部署的脚本。它们按字母顺序执行,可以让你深入了解合约如何被初始化以及它们如何组合在一起。GOATCasino 中的所有游戏都使用一种符合 ERC20 标准的代币,该代币定义在 CasinoToken.sol 文件中。
CasinoToken 使用了一些广泛使用的 zeppelin 合约来实现代币的大部分标准功能。
你可以使用 CasinoExchange.sol 中定义的合约,用以太币买卖 CasinoTokens。
Faucet.sol 文件定义了一个合约,每个用户可以使用一次,免费获得一批 CasinoTokens 来试用这些游戏。
Vault.sol 合约持有资金储备供 owner 访问。金库资金的等额部分由不同的访问控制方法分别保护,以便在某种方法被证明不足时更好地保护资金。
最后,赌场目前唯一的游戏是彩票。
用户可以购买编号为 0 到 255 的彩票。
每分钟,用户都可以触发 checkWin 函数来生成中奖彩票编号,将奖金(扣除庄家抽成)奖励给中奖者,并通过清除已购买的彩票来开始新一轮。
如果没有人购买中奖彩票,则该轮会继续再开放一分钟的购买时间,之后才能选择新的中奖彩票。