For the complete documentation index, see llms.txt. This page is also available as Markdown.

Fazendo deploy do seu Transactions Server

Ofereça aos usuários transactions sem custo

O transactions-server é um servidor proxy que encaminha transações para Gelato. Ele recebe uma transação assinada do client, que por sua vez é enviada para a network apropriada nos bastidores. Isso permite ao owner do server facilitar para os seus users transações sem custo

O transaction server é usado para ajudar com a UX de usar múltiplas networks e para evitar que eles tenham de trocar de network provider em tempo real. Os users podem permanecer conectados a Ethereum e interagir com Polygon assinando apenas transações

A Decentraland DAO configurou um servidor usado pelos nossos dapps, cobrindo o custo até um certo limite com algumas restrições. Este documento explica como você pode deployar este servidor para habilitar os seus users a encaminhar transações com as restrições de que você precise, se houver.

Restrições

Todas as restrições são por transação que o user tenta enviar. O que, na prática, se traduz em uma request POST para o server.

As restrições configuráveis que o server tem são:

  • Verifica uma quota de máximo de transações por dia. Veja a seção de collections para mais informações.

  • Verifica contratos na whitelist, então se uma transação estiver tentando interagir com um contract que não é reconhecido ela falhará. Para isso, ele usa

  • O preço de vendas, restringindo-o se estiver abaixo de um threshold. Veja a seção de min sale value para mais info

Configurando o Gelato

Gelato é um Multichain Relayer Protocol. Usamos a sua infraestrutura para habilitar transações sem custo. Isso significa efetivamente que, quando você vai enviar uma transação, em vez disso você está assinando uma message e enviando isso para o Gelato. O serviço cuidará de enviar a transação para você e devolver uma response (transaction hash).

Ele precisa de um contract para encaminhar as transações, mas felizmente podemos reutilizar o que está sendo usado pela Decentraland (veja abaixo)

Gelato funciona como uma API para o server. Para configurar ele, você primeiro precisará de uma API KEY que nós usaremos depois. Para obter isso:

  • Registre-se no serviço

  • Crie um novo dapp para a network que você pretende targetear. Para imitar a configuração da Decentraland:

    • Selecione a Mainnets options

    • Defina um App name apropriado para o seu dApp

    • escolha Polygon como a network para o Smart Contract

    • Ative a Any Contract opção de toggle

  • Copie a API KEY da API Key seção

Por fim, você precisará financiar o dapp recém-criado. Você pode fazer isso conectando sua wallet na 1Balance seção na barra lateral esquerda. Uma vez conectado, isso permitirá que você deposite o seu USDC para financiar as transações que os seus users enviarão. Se você precisar obter MATIC, confira este post.

Testnet

Se você quiser testar seu app antes de ir para produção e estiver usando Polygon, você pode fazer isso em Polygon Amoy, a testnet da Polygon.

Para fazer isso, simplesmente repita o processo mas escolhendo Matic Testnet (Amoy) no campo de network.

Você precisará financiar o seu dapp, mas pode fazer isso facilmente obtendo tokens Sepolia ETH do faucet.

Baixando o transactions server

Antes de mais nada, você precisará de uma cópia do código do transactions-server da Decentraland. Você pode encontrá-lo no github. A partir daí, você tem duas opções:

  1. Baixando o código: Para baixar o código, você precisa primeiro clicar no botão verde e então Código botão e depois

  • Clique em Download ZIP

  • Copie a URL abaixo do Clone título e então execute $ git clone THE_URL_HERE

  1. Fazendo fork do código: Você pode clicar no botão fork no canto superior direito da página. Quando o processo estiver concluído, você poderá baixar o seu código da mesma forma que faria na primeira opção. Você precisará de uma conta no Github para isso; para mais informações sobre fazer fork de repositories, veja aqui

Configurando o server

O transactions server é escrito em NodeJS usando TypeScript. Antes de executá-lo, você precisará configurar algumas variáveis de ambiente.

Para fazer isso:

  • Copie o .env.example arquivo e cole-o renomeado para .env

  • Abra o arquivo com um editor de texto e role até encontrar .env arquivo. Você verá que algumas variáveis têm um valor padrão, como HTTP_SERVER_PORT=5000 (em qual port executar o server)

  • Você pode deixar a maioria dos valores como estão, mas há alguns valores importantes a considerar:

Gelato

Use a API KEY que obtivemos ao configurar o Gelato.

Transações

Quando uma nova request de transação chegar, ele verificará a quantidade um endereço que foi enviada naquele dia. Se estiver acima do valor definido, a transação falhará.

Para remover completamente esta verificação, você pode ir ao código e remover o

método de async function checkData(transactionData: TransactionData): Promise<void> { em src/ports/transactions/component.ts

Contracts e collections

O server buscará a URL dos endereços dos Contract e os armazenará localmente, além de consultar o subgraph. Quando uma nova request de transação chegar, ele então verificará se o contract com o qual a transação está interagindo pertence aos contracts deployados na URL ou às collections deployadas no subgraph.

Se você quiser fornecer os seus próprios contracts, altere a URL e mantenha a mesma estrutura que a atual https://contracts.decentraland.org/addresses.json tem. A network usada é determinada por COLLECTIONS_CHAIN_ID, e o intervalo com que o cache é recarregado é COLLECTIONS_CHAIN_ID

Se você tiver as suas próprias collections, também poderá alterar a URL do subgraph.

Para remover completamente estas verificações, você pode ir ao código e remover o

método de async function checkData(transactionData: TransactionData): Promise<void> { em src/ports/transactions/component.ts

Min sale value

Quando uma nova request de transação chegar, ela primeiro fará o parse dos dados que está tentando encaminhar. Se detectar uma sale (marketplace buy, bid, etc), verificará o valor em relação a MIN_SALE_VALUE_IN_WEI. Se for menor, a transação falhará.

Para verificar os métodos de sale relevantes, você pode ver src/ports/transaction/validation/checkSalePrice.ts e, para remover completamente esta verificação, você pode ir ao código e remover o

método de async function checkData(transactionData: TransactionData): Promise<void> { em src/ports/transactions/component.ts

Executando o server

Agora que toda a configuração está pronta, o que resta é realmente executar o server. Você pode seguir o README dele mas, em resumo, você terá que:

  • Ter NodeJS instalado

  • Abra o terminal de sua preferência

  • Execute os seguintes comandos:

Claro, você provavelmente vai querer deployar isso no service de sua escolha, como AWS por exemplo. Você pode usar o Dockerfile do Projeto para fazer isso.

Usando o server

Agora que tudo está configurado e em execução, é hora de realmente usar o server.

Para enviar uma transação, você precisa fazer POST para /transactions. O schema necessário para a request é definido por transactionSchema em src/ports/transaction/types.ts.

Se, em vez disso, você quiser usar nossas libs prontas para facilitar sua vida, você pode tentar decentraland-transactions. Ele é usado via decentraland-dapps em nossos dapps como o Marketplace, com os utils sendTransaction. Confira este código para um exemplo.

Atualizado