Implantando Seu Servidor de Transações

Forneça aos usuários transações sem custo

O transactions-serverarrow-up-right é um servidor proxy que retransmite transações para Gelatoarrow-up-right. Ele recebe uma transação assinada do cliente que por sua vez é enviada para a rede apropriada nos bastidores. Isso permite que o proprietário do servidor facilite para seus usuários transações sem custo

O transaction server é usado para ajudar na experiência de usar múltiplas redes e para evitar que eles mudem de provedores de rede dinamicamente. Os usuários podem permanecer conectados a Ethereumarrow-up-right e interagir com Polygonarrow-up-right apenas assinando transaçõesarrow-up-right

A Decentraland DAO configurou um servidor usado por nossas dapps, cobrindo o custo até um certo limite com algumas restrições. Este documento explica como você pode implantar este servidor para permitir que seus usuários retransmitam transações com as restrições que você precisar, se houver.

Restrições

Todas as restrições são por transação que o usuário tenta enviar. O que, na prática, se traduz em uma requisição POST para o servidor.

As restrições configuráveis que o servidor possui são:

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

  • Verificações de contratos na whitelist, então se uma transação tentar interagir com um contrato que não é reconhecido ela falhará. Para isso ela usa

  • O preço das vendas, restringindo-o se estiver abaixo de um limite. Veja seção de valor mínimo de venda para mais informações

Configurando o Gelato

Gelatoarrow-up-right é um Protocolo Multichain Relayer. Usamos sua infraestrutura para permitir transações sem custo. Isso efetivamente significa que, quando você for enviar uma transação, você estará assinando uma mensagem e enviando-a para o Gelato. O serviço cuidará de enviar a transação para você e retornará uma resposta (hash da transação).

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

Gelatoarrow-up-right funciona como uma API para o servidor. Para configurar isso você primeiro precisará de uma API KEY que nós usaremos mais tarde. Para obter estes:

  • Crie um novo dapp para a rede que pretende direcionar. Para imitar a configuração da Decentraland:

    • Selecione a Mainnets options

    • Defina um Nome do app para o seu dApp

    • escolher Polygon como a rede para o Smart Contract

    • Ativar o Qualquer Contract opção de alternância

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

Por fim, você precisará financiar seu dapp recém-criado. Você pode fazer isso conectando sua carteira no 1Balancearrow-up-right seção na barra lateral esquerda. Uma vez conectado, isso permitirá que você deposite seu USDCarrow-up-right para financiar as transações que seus usuários enviarão. Se você precisar obter MATIC, confira este postarrow-up-right.

Testnet

Se você quiser testar seu app antes de ir ao vivo e estiver usando Polygon, você pode fazê-lo em Polygon Amoy, a testnet da Polygon.

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

Você precisará financiar sua dapp, mas pode fazer isso facilmente obtendo tokens Sepolia ETH do faucetarrow-up-right.

Baixando o servidor de transações

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

  1. Baixando o código: Para baixar o código, você deve primeiro clicar no botão verde Code e então ou

  • Clique em Download ZIP

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

  1. Fazendo fork do código: Você pode clicar no fork botão no canto superior direito da página. Uma vez que o processo esteja completo, você poderá baixar seu código da mesma maneira que faria na primeira opção. Você precisará de uma conta no Github para isso; para mais informações sobre como fazer fork de repositórios, veja aquiarrow-up-right

Configurando o servidor

O transactions server é escrito em NodeJSarrow-up-right usando Typescriptarrow-up-right. 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 .env arquivo. Você verá que algumas variáveis têm um valor padrão, como HTTP_SERVER_PORT=5000 (em qual porta executar o servidor)

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

Gelato

Use a API KEY que obtivemos quando configurando gelato.

Transações

Quando uma nova requisição de transação chega, ela verificará a quantidade um endereço enviou naquele dia. Se estiver acima do valor definido, a transação falhará.

Para remover completamente essa verificação, você pode entrar no código e remover o

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

Contratos e coleções

O servidor buscará a URL de Contract addresses e as armazenará localmente e consultará o subgraph. Quando uma nova requisição de transação chegar, ele então verificará se o contrato com o qual a transação está interagindo pertence aos contratos implantados na URL ou às coleções implantadas no subgraph.

Se você quiser fornecer seus próprios contratos, altere a URL e mantenha a mesma estrutura que a atual https://contracts.decentraland.org/addresses.jsonarrow-up-right possui. A rede usada é determinada por COLLECTIONS_CHAIN_ID, e o intervalo com o qual o cache é reobtido é COLLECTIONS_CHAIN_ID

Se você tiver suas próprias coleções, também pode alterar a URL do subgraph.

Para remover completamente essas verificações, você pode entrar no código e remover o

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

Valor mínimo de venda

Quando uma nova requisição de transação chegar, ela primeiro analisará os dados que está tentando retransmitir. Se detectar uma venda (compra no marketplace, oferta, 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 venda relevantes, você pode ver src/ports/transaction/validation/checkSalePrice.ts e para remover completamente essa verificação, você pode entrar no código e remover o

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

Executando o servidor

Agora que toda a configuração está definida, o que resta é realmente executar o servidor. Você pode seguir seu README mas, em poucas palavras, você terá que:

Claro, provavelmente você vai querer implantar isso no serviço de sua preferência, como AWSarrow-up-right por exemplo. Você pode usar o Dockerfilearrow-up-right do Projeto para isso.

Usando o servidor

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

Para realmente enviar uma transação, você precisa fazer um POST para /transactions. O esquema exigido para a requisição é 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 experimentar decentraland-transactionsarrow-up-right. É usado via decentraland-dappsarrow-up-right em nossos dapps como o Marketplacearrow-up-right, com as utils sendTransactionarrow-up-right. Verifique este códigoarrow-up-right para um exemplo.

Atualizado