> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/blockchain/deploying-your-own-transactions-server.md).

# Implantando Seu Server de Transactions

Forneça aos users transactions sem custo

O [transactions-server](https://github.com/decentraland/transactions-server/tree/1.8.0) é um servidor proxy que encaminha transações para [Gelato](https://www.gelato.network/relay). 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 transações sem custo para seus usuários

O servidor de transações é usado para ajudar na UX ao usar múltiplas redes e para evitar que os usuários troquem de provedor de rede em tempo real. Os usuários podem continuar conectados a [Ethereum](https://ethereum.org/en/) e interagir com [Polygon](https://polygon.technology/) [apenas assinando transações](https://docs.decentraland.org/blockchain-integration/transactions-in-polygon/)

A Decentraland DAO configurou um servidor usado por nossos dapps, cobrindo o custo até um certo limite com algumas [restrições](#restrictions). Este documento explica como você pode [implantar este servidor](#running-the-server) para permitir que seus usuários encaminhem transações com as restrições de que você precisa, 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 solicitação POST para o servidor.

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

* Verifica uma quota de transações máximas por dia. Veja [a seção de collections](#collections) para mais informações.
* Verifica contratos na lista de permissões, então, se uma transação estiver tentando interagir com um contrato que não seja reconhecido, ela falhará. Para isso, usa
  * Os contratos e coleções implantados. Veja [a seção de contratos e coleções](#contracts-and-collections) para mais informações
* O preço das vendas, restringindo-o se estiver abaixo de um limite. Veja [a seção de valor mínimo de venda](#min-sale-value) para mais informações

## Configurando o Gelato

[Gelato](https://www.gelato.network/relay) é um Protocolo Multichain Relayer. Usamos sua infraestrutura para permitir transações sem custo. Isso significa, na prática, que, quando você vai enviar uma transação, em vez disso está assinando uma mensagem e enviando-a para o Gelato. O serviço cuidará de enviar a transação para você e devolver uma resposta (hash da transação) de volta.

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

[Gelato](https://www.gelato.network/relay) funciona como uma API para o servidor. [Para configurar](#configuring-the-server) ele, você primeiro precisará de uma API KEY, que nós [usaremos mais tarde](#gelato). Para obtê-las:

* [Registre-se](https://app.gelato.network/relay) no serviço
* Crie uma nova dapp para a rede que você pretende atingir. Para imitar a configuração da Decentraland:
  * Selecione as `Mainnets` opções
  * Defina um `Nome do app` para sua dApp
  * escolha `Polygon` como a rede para o `Smart Contract`
  * Ative a `Any Contract` opção de alternância
* Copie a API KEY da `API Key` seção

Por fim, você precisará financiar sua dapp recém-criada. Você pode fazer isso conectando sua Wallet na [1Balance](https://app.gelato.network/1balance) seção na barra lateral esquerda. Depois de conectada, isso permitirá que você deposite seus [USDC](https://polygonscan.com/token/0x3c499c542cef5e3811e1192ce70d8cc03d5c3359) para financiar as transações que seus usuários enviarão. Se você precisar obter MATIC, confira este [post](https://docs.decentraland.org/blockchain-integration/transactions-in-polygon/#where-can-i-get-matic-to-pay-for-transaction-fees).

### Testnet

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

Para fazer isso, simplesmente repita [o processo](#configuring-gelato) mas escolhendo `Matic Testnet (Amoy)` no campo de rede.

Você precisará financiar sua dapp, mas pode fazer isso facilmente obtendo tokens Sepolia ETH na [faucet](https://sepoliafaucet.com/).

## Fazendo o download do servidor de transações

Antes de mais nada, você precisará de uma cópia do código do transactions-server da Decentraland. Você pode encontrá-lo [no GitHub](https://github.com/decentraland/transactions-server/tree/v1). A partir daí, você tem duas opções:

1. **Fazendo o download do código**: Para baixar o código, você precisa primeiro clicar no botão verde `Code` e então:

* Clique em `Download ZIP`
* Copie a URL abaixo do `Clone` título e então execute `$ git clone THE_URL_HERE`

2. **Fazendo fork do código**: Você pode clicar no `fork` botão no canto superior direito da página. Quando o processo for concluído, você poderá baixar 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 fork de repositórios, veja [aqui](https://docs.github.com/en/enterprise-server@3.5/get-started/quickstart/fork-a-repo)

## Configurando o servidor

O servidor de transações é escrito em [NodeJS](https://nodejs.org/en/) usando [TypeScript](https://www.typescriptlang.org/). Antes de executá-lo, você precisará configurar algumas variáveis de ambiente.

Para fazer isso:

* Copie o `.env.defaults` 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](#gelato)
  * [Transações](#transactions)
  * [Contratos e coleções](#contracts-and-collections)
  * [Valor mínimo de venda](#min-sale-value)

### Gelato

Use a API KEY que obtivemos quando [configurando o Gelato](#configuring-gelato).

```
GELATO_API_KEY=<YOUR_GELATO_API_KEY>
```

### Transações

Quando uma nova solicitação de transação chegar, ele verificará a quantidade **um endereço** que enviou naquele dia. Se ultrapassar o valor definido, a transação falhará.

```
MAX_TRANSACTIONS_PER_DAY=10
```

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

```ts
await checkQuota(components, transactionData)
```

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

### Contratos e coleções

O servidor buscará a URL dos endereços dos contratos e os armazenará localmente, além de consultar o subgraph. Quando uma nova solicitação de transação chegar, ele 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.json> tem. A rede usada é determinada por COLLECTIONS\_CHAIN\_ID, e o intervalo com que o cache é buscado novamente é COLLECTIONS\_FETCH\_INTERVAL\_MS

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

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

```ts
await checkContractAddress(components, transactionData)
```

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

```
CONTRACT_ADDRESSES_URL=https://contracts.decentraland.org/addresses.json
COLLECTIONS_FETCH_INTERVAL_MS=3600000
COLLECTIONS_CHAIN_ID=80002

COLLECTIONS_SUBGRAPH_URL=https://subgraph.decentraland.org/decentraland/collections-matic-amoy
```

### Valor mínimo de venda

Quando uma nova solicitação de transação chegar, ela primeiro analisará os dados que está tentando encaminhar. Se detectar uma venda (compra no Marketplace, lance etc.), verificará o valor em relação a MIN\_SALE\_VALUE\_IN\_WEI. Se for menor, a transação falhará.

```
MIN_SALE_VALUE_IN_WEI=1000000000000000000
```

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 ir ao código e remover o

```ts
await checkSalePrice(components, transactionData)
```

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

## Executando o servidor

Agora que toda a configuração está definida, o que resta é de fato executar o servidor. Você pode seguir [o README dele](/creator/content-creator-pt/scenes-sdk7/blockchain/deploying-your-own-transactions-server.md) mas, em resumo, você terá que:

* Ter [NodeJS](https://nodejs.org/en/) instalado
* Abra o terminal de sua preferência
* Execute os seguintes comandos:

```bash
npm install
npm run migrate # apenas na primeira execução
npm run start
```

Claro, você provavelmente vai querer fazer o deploy disso no serviço de sua preferência, como [AWS](https://aws.amazon.com/) por exemplo. Você pode usar o [Dockerfile](https://github.com/decentraland/transactions-server/blob/master/Dockerfile) do projeto para isso.

## Usando o servidor

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

Para de fato enviar uma transação, você precisa fazer POST para `/transactions`. O schema exigido para a solicitação é definido por `transactionSchema` em `src/ports/transaction/types.ts`.

Se, em vez disso, você quiser usar nossas libs pré-fabricadas para facilitar sua vida, você pode experimentar [decentraland-transactions](https://github.com/decentraland/decentraland-transactions). Ele é usado via [decentraland-dapps](https://github.com/decentraland/decentraland-dapps) em nossas dapps, como a [Marketplace](https://market.decentraland.org), com os utils [`sendTransaction`](https://github.com/decentraland/decentraland-dapps/blob/master/src/modules/wallet/utils.ts#L104). Confira [este código](https://github.com/decentraland/marketplace/blob/a2191515c6ae7ede54a685cc2dd9f9fafa35366b/webapp/src/modules/vendor/decentraland/OrderService.ts#L33) para um exemplo.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/scenes-sdk7/blockchain/deploying-your-own-transactions-server.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
