6 de Abril, 2022

Automatizando a Uberização de seu Gotchi 🤖👻

Como manter meu gotchi o maior tempo possível sendo utilizado? Neste post vou explicar um pouco como automatizei os "empréstimos" de gotchis para esse fim.

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.

E convenhamos, o jogo nessa versão alpha 0.1 não é super envolvente para ficar jogando madrugada afora

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.

Definir preço inicial, período de locação e divisão leva menos de 1 minuto, mas se é preciso acordar de madrugada para fazê-lo...😴

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.🐱‍💻

Na blockchain, não é possível apresentar um código e executar outro. Code is Law™️

Criando o Gerenciador Automático

Para demonstrar essa versatilidade, vou explicar como automatizar uma estratégia bem simples:

  1. Listar meu gotchi (em uma condição bacana para que alguém alugue rapidamente);
  2. Aguardar o fim do contrato;
  3. Recolher as recompensas e finalizar o contrato;
  4. Retornar ao passo 1. para uma nova listagem.

Usaremos Python e a biblioteca Web3. Não vai ficar bonito, e tudo bem, é MVP👶.

Isso é plágio! Você não pode apenas "importar artigo"
Entendedores entenderão 😂 (crédito: somethingofthatilk.com infelizmente offline)

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:

  1. Um objeto web3 configurado para a blockchain que vamos utilizar;
  2. O endereço do smart contract e seu ABI (JSON que define a interface daquele smart contract);
  3. 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!

Eu disse que postaria um bom negócio, mas esse está bom demais, foi só pra printar esse exemplo 😶

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. 😁

Gerenciador de Gotchis
Gerenciador de Gotchis. GitHub Gist: instantly share code, notes, and snippets.

É 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. 💡