
Это намеренно уязвимый Truffle-деплой смарт-контрактов, предназначенный для того, чтобы позволить тем, кто интересуется безопасностью смарт-контрактов, эксплуатировать самые разные уязвимости в безопасной среде.
Испытайте удачу (или навыки) в различных играх казино, чтобы выиграть сказочные токены и призы!
Проект находится в разработке, поэтому сейчас игр может быть разочаровывающе мало, но впереди их будет больше, а пока есть множество вещей, которые можно эксплуатировать.
Установите зависимости
sudo apt install npmsudo npm install -g truffle ganache-cliЗапустите ./start_challenge.sh, чтобы запустить testrpc, развернуть казино в вашей локальной тестовой сети и начать симуляцию других игроков
Изучите код в каталоге contracts/, чтобы найти уязвимости
Создайте proof-of-concept скрипты, чтобы получить как можно больше CasinoTokens! (если застряли, посмотрите на скрипты симулированных пользователей в каталоге exec/simuilated-users/, чтобы понять, как взаимодействовать с контрактами)
GOATlib/GOATConfig.js и использовать GOATConfig.accounts.attacker для всех своих вызовов. Я знаю, что у вас есть доступ к фактическим аккаунтам владельцев и других игроков, поскольку всё работает на testrpc, и меня не впечатляет ваш скрипт, который перебирает аккаунты и вызывает 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 хранит резерв средств для доступа владельца. Равные доли средств хранилища защищены отдельными методами контроля доступа, чтобы лучше защитить средства, если один из методов окажется недостаточным.
Наконец, единственная игра в казино на данный момент — это лотерея.
Пользователи могут покупать билеты с номерами от 0 до 255.
Каждую минуту пользователь может вызвать функцию checkWin, чтобы сгенерировать номер выигрышного билета, выплатить победителю призовые деньги (за вычетом комиссии казино) и начать новый раунд, очистив купленные билеты.
Если никто не купил выигрышный билет, раунд продолжается ещё минуту для покупок, прежде чем можно будет выбрать новый выигрышный билет.