
Esta é uma implantação Truffle de contrato inteligente intencionalmente vulnerável, destinada a permitir que aqueles interessados em segurança de contratos inteligentes explorem uma ampla variedade de problemas em um ambiente seguro.
Teste a sua sorte (ou habilidades) nos vários jogos do cassino para ganhar tokens e prêmios fabulosos!
Isto está em desenvolvimento, por isso pode haver uma quantidade decepcionante de jogos neste momento, mas há mais por vir e muitas coisas para explorar entretanto.
Instale as dependências
sudo apt install npmsudo npm install -g truffle ganache-cliExecute ./start_challenge.sh para iniciar o testrpc, implantar o cassino na sua testnet local e começar a simular os outros jogadores
Revise o código no diretório contracts/ para encontrar vulnerabilidades
Crie scripts de prova de conceito para obter o máximo de CasinoTokens que conseguir! (veja os scripts de usuários simulados no diretório exec/simuilated-users/ para ter uma ideia de como interagir com os contratos se estiver com dificuldades)
GOATlib/GOATConfig.js e usar GOATConfig.accounts.attacker em todas as suas chamadas. Sei que você tem acesso às contas reais do proprietário e aos outros jogadores, já que está no testrpc, e não estou impressionado com o seu script de percorrer as contas e chamar transfer.GOATlib/: Biblioteca com código usado pelos vários arquivos JavaScript.build/: O diretório que o Truffle cria quando compila o projeto. Contém informações sobre todos os contratos do projeto, incluindo o bytecode compilado e os endereços dos contratos implantados.contracts/: O código dos contratos inteligentes.exec/simulated-users/: Scripts que controlam os jogadores simulados que jogam os vários jogos.exec/examples: Scripts de exemplo que você pode consultar ao criar os seus exploitsmigrations/: scripts executados pelo truffle para o deployment. São executados em ordem alfabética e podem oferecer insights sobre como os contratos são inicializados e como se encaixam.Todos os jogos do GOATCasino usam um token compatível com ERC20, definido no arquivo CasinoToken.sol.
O CasinoToken faz uso de alguns contratos zeppelin amplamente utilizados para implementar grande parte das funcionalidades padrão de um token.
Você pode usar o contrato definido em CasinoExchange.sol para comprar e vender CasinoTokens em troca de ether.
O arquivo Faucet.sol define um contrato que pode ser usado uma vez por usuário para obter um fornecimento gratuito de CasinoTokens para experimentar os jogos.
O contrato Vault.sol mantém uma reserva de fundos para acesso do proprietário. Partes iguais dos fundos do vault são protegidas por métodos separados de controle de acesso, a fim de proteger melhor os fundos se um método for considerado insuficiente.
Por fim, o único jogo no cassino neste momento é a loteria.
Os usuários podem comprar bilhetes por número, de 0 a 255.
A cada minuto, um usuário pode acionar a função checkWin para gerar o número do bilhete vencedor, recompensar o vencedor com o dinheiro do prêmio (menos a comissão da casa) e iniciar uma nova rodada, limpando os bilhetes comprados.
Se ninguém comprou o bilhete vencedor, a rodada continua por mais um minuto de compras antes que um novo bilhete vencedor possa ser escolhido.