Pages:
Author

Topic: NinjaBets - Aposte nas olimpíadas de forma 'descentralizada' na testnet da ETH - page 3. (Read 375 times)

legendary
Activity: 2758
Merit: 6830
Tirei um tempinho para codar um contrato simples, baseado em Solidity, que utiliza a ChainLink para demonstrar o funcionamento de uma casa de apostas descentralizada.

Site UI: https://ninjabets.vercel.app
Contrato na testnet da Kovan: https://kovan.etherscan.io/address/0xC950039ABcB06e7bC331d986a3DB86cFF50A4472

Como apostar

É preciso ter um pouco de ETH na testnet da Kovan para pagar as transações e fazer as apostas. Existem faucets que te dão um troquinho, e.g: https://app.mycrypto.com/faucet (ou sinta-se livre para postar seu endereço, e eu mesmo mando um pouco).

Como não desenvolvi nenhuma interface, os processos devem ser feitos pela interface da Etherscan.

Com o ETH em mãos, vá para a página do contrato na Etherscan (link acima) e clique na aba "Write Contract". A função payBet pode ser chamada passando o valor em ETH da aposta no primeiro campo, o id do jogo no _gameId e o id do time (1 ou 2) no _team. Depois é só clicar em Write e confirmar a transação.

Como recuperar o premio

Após o termino do jogo, você pode chamar a função claimRewards passando o mesmo _gameId. A recompensa é calculada baseada na proporção do valor apostado no time vencedor relativo ao resto do pote, dividida pelo total apostado no time perdedor + aposta inicial. E claro que você precisa ter apostado no time vencedor para fazer isso.

O id do jogo em andamento e a quantidade apostada (de todo o jogo e por jogador) podem ser vistos na aba "Read Contract", fazendo um query nas funções getTotalBets(_gameId) e getUserBets(_gameId, _user).

Código do contrato

O código pode ser visto na mesma página da Etherscan, na aba "Contract": https://kovan.etherscan.io/address/0xC950039ABcB06e7bC331d986a3DB86cFF50A4472#code

Limitações

1. Para simplificar todo o processo, programei o contrato para aceitar apostas em apenas 2 times (por partida).

2. Ele é descentralizado no papel, mas eu controlo a API que desenvolvi para o projeto (também para simplificar o processo). Ou seja, eu que coloco no sistema quem ganhou. Em um caso realmente descentralizado, poderiamos utilizar várias APIs de provedores diferentes e comparar seus resultados. API utilizada: https://ninjabets.ninjastic.space/games/idDoJogo

3. Eu, o operador do contrato, sou o único que posso definir novos jogos e chamar o oracle da ChainLink para pegar o resultado (para fins de demonstração). Em um caso descentralizado, poderiamos dar uma recompensa leve para quem chamasse as funções no momento certo (para incentivar o desenvolvimento de bots que fizessem essa manutenção). Um exemplo que utiliza desse formato é a Aave e Compound, onde qualquer um pode criar um bot "liquidador" para liquidar empréstimos que caem abaixo de um certo nível de colateral (ficando com uma % da recompensa).



E aí, quem topa uma aposta?  Cool

Manda o endereço que eu passo uns ETH e a gente marca um jogo.

edit: atualizado com novo contrato
Pages:
Jump to: