Automatizando a Uberização de seu Gotchi 🤖👻
Com a possibilidade de alugar seu gotchi para que outras pessoas possam jogar (e você lucrar!) surge a dúvida: Como manter meu gotchi o maior tempo possível sendo utilizado?
A lógica é simples: Gotchi parado é dinheiro perdido! Mais ou menos como placa de taxi, se o carro está parado, não ganha nada. Por outro lado, é impossível jogar 24h por dia, assim como um motorista não consegue dirigir o dia inteiro.
O ideal seria rodar com o carro em turnos, com vários motoristas. Assim, o carro não fica parado, e todo mundo tem a chance de rodar e lucrar com o Play2Earn.
Como já escrevi anteriormente, contamos com um smart contract para definir as regras do empréstimo de maneira segura e transparente. Ainda sim, resta o trabalho de listar as ofertas de aluguel, manualmente, na interface do jogo.
Como dono de um gotchi, eu poderia configurar um alarme no celular para me lembrar de renovar os aluguéis de tempos em tempos, mas isso soa... irritante⏰.
Uma opção melhor é escrever um programa que faça isso para mim, mesmo se eu estiver dormindo 🤓.
"Espera... isso é permitido?"
Não só é permitido como é esperado! Ao colocar o smart contract na blockchain, os criadores abrem mão do controle sobre como as pessoas transacionam. Apenas o código dita as regras!
Essa abertura é uma grande vantagem dos smart contracts, pois permite que desenvolvedores do mundo todo tenham liberdade para exercer sua criatividade e criar novas maneiras de usar, combinar ou estender as funcionalidades existentes.
Normalmente, os próprios desenvolvedores disponibilizam o código-fonte para facilitar ainda mais esse processo, para que nós possamos interagir com o contrato da maneira que nos for conveniente (e isso pode ser verificado na própria blockchain). Sem o código isso ainda é possível, só é um pouco mais trabalhoso.🐱💻
Criando o Gerenciador Automático
Para demonstrar essa versatilidade, vou explicar como automatizar uma estratégia bem simples:
- Listar meu gotchi (em uma condição bacana para que alguém alugue rapidamente);
- Aguardar o fim do contrato;
- Recolher as recompensas e finalizar o contrato;
- Retornar ao passo 1. para uma nova listagem.
Usaremos Python e a biblioteca Web3. Não vai ficar bonito, e tudo bem, é MVP👶.
Sabemos que um gotchi pode estar em 4 estados:
- Alugado - Finalizado
- Alugado - Em Curso
- Listado para Aluguel
- Nenhum
Então vamos aplicar essa lógica em Python:
Vemos que precisamos implementar algumas funções para isso funcionar, principalmente aquelas que consultam ou executam transações na blockchain (isGotchiLent() por exemplo).
Para implementar essas funções, precisamos de três coisas:
- Um objeto web3 configurado para a blockchain que vamos utilizar;
- O endereço do smart contract e seu ABI (JSON que define a interface daquele smart contract);
- O par de chaves da carteira que queremos utilizar.
Os dois últimos estão fora do escopo desse artigo, então serão definidos em arquivos separados.
- gotchi.py, com o endereço do contrato e o ABI (disponível ao fim desse artigo)
- keys.py, com o par de chaves público/privado (indisponível 😜)
Nas linhas 8-9 criamos o objeto web3 para comunicar com o RPC da Polygon, e na linha 11 já temos o objeto por onde faremos as chamadas para o smart contract.
Dando uma olhada no código-fonte do contrato, vemos quais funções precisamos chamar para completar a implementação, chamando pelo objeto contract.functions.{nomeDaFuncao}.call()
Você deve ter percebido que as três primeiras funções apenas consultam a blockchain, enquanto as duas últimas executam transações através de uma função auxiliar sendTxAndWait(). Fiz assim para separar o que enviar de como enviar, (e de quebra evitar repetição desnecessária #DRY). Isso é importante, pois, enviar é um pouco mais complexo, como veremos a seguir.
Em contraste com as funções de consulta, que na sua maioria pedem apenas um call(), as que enviam dados para blockchain devem ser construídas (2-5), assinadas (6) e, finalmente, enviadas (9). Nessa função também já embuti a espera da confirmação da transação (12), e checo se a execução terminou com sucesso ou falha (14-16).
Juntando tudo num arquivo só (e adicionando alguns prints📝) chegamos nesse resultado!
Como podemos ver, o gotchi 3081 foi listado às 11:47, sem custo inicial, com duração de 1h e com 90% indo para o jogador. Finalizada a locação, às 12:48, foi fechado o contrato e no mesmo minuto aberto outro, com os mesmos parâmetros.
Caso você queira testar por si o gerenciador de gotchis, este código completo, mais o arquivo auxiliar gotchi.py pode ser seu por apenas 10 parcelas de... brincadeira, é só clicar no Gist abaixo. 😁
É claro que emprestar a custo zero com 10/90 não é um bom negócio (por enquanto?), mas com o conhecimento de como operar na blockchain, basta expandir a lógica interna do software para implementar estratégias mais vantajosas!
Neste artigo tentei simplificar o programa que tenho em execução para uma versão didática, mas ainda sim útil. E demonstrei como, em um mundo com smart contracts, as coisas podem ser feitas de maneira aberta sem abrir mão da segurança.
Espero que tenha motivado você a tentar implementar o "automatizador de gotchis" (Tabajara🌎🐍). Se não, pelo menos a pensar no que se pode fazer nessa nova realidade. 💡