Desplegando tu servidor de transacciones

Ofrece a los usuarios transacciones sin costo

El transactions-serverarrow-up-right es un servidor proxy que retransmite transacciones a Gelatoarrow-up-right. Recibe una transacción firmada del cliente que a su vez se envía a la red correspondiente entre bastidores. Esto permite al propietario del servidor facilitar a sus usuarios transacciones sin coste

El servidor de transacciones se utiliza para ayudar con la experiencia de usuario al usar múltiples redes y para evitar que cambien de proveedor de red sobre la marcha. Los usuarios pueden permanecer conectados a Ethereumarrow-up-right e interactuar con Polygonarrow-up-right firmando solo transaccionesarrow-up-right

La DAO de Decentraland ha configurado un servidor usado por nuestras dapps, cubriendo el costo hasta cierto límite con algunas restricciones. Este documento explica cómo puedes desplegar este servidor para permitir que tus usuarios retransmitan transacciones con las restricciones que necesites, si las hay.

Restricciones

Todas las restricciones son por transacción que el usuario intenta enviar. Lo que, en la práctica, se traduce en una petición POST al servidor.

Las restricciones configurables que tiene el servidor son:

  • Comprueba una cuota de transacciones máximas por día. Ver la sección de collections para más info.

  • Comprueba contratos en la lista blanca, así que si una transacción intenta interactuar con un contrato que no está reconocido fallará. Para ello usa

  • El precio de las ventas, restringiéndolo si está por debajo de un umbral. Ver sección de min sale value para más información

Configuración de Gelato

Gelatoarrow-up-right es un Multichain Relayer Protocol. Usamos su infraestructura para habilitar transacciones sin coste. Esto significa efectivamente que, cuando vas a enviar una transacción, en su lugar firmas un mensaje y lo envías a Gelato. El servicio se encargará de enviar la transacción por ti y darte una respuesta (hash de la transacción).

Necesita un contrato para reenviar las transacciones, pero por suerte podemos reutilizar el que está siendo usado por Decentraland (ver más abajo)

Gelatoarrow-up-right funciona como una API para el servidor. Para configurar lo primero que necesitarás es una API KEY que usaremos más adelante. Para conseguirlas:

  • Crea una nueva dapp para la red que pretendes targetear. Para imitar la configuración que usa Decentraland:

    • Selecciona la Mainnets opciones

    • Establece un App name apropiado para tu dApp

    • elige Polygon como la red para el Smart Contract

    • Habilita la Any Contract opción de alternar

  • Copia la API KEY desde la API Key sección

Por último, necesitarás financiar tu dapp recién creada. Puedes hacerlo conectando tu wallet en la 1Balancearrow-up-right sección en la barra lateral izquierda. Una vez conectada, te permitirá depositar tus USDCarrow-up-right para financiar las transacciones que tus usuarios enviarán. Si necesitas obtener MATIC, consulta este postarrow-up-right.

Testnet

Si quieres probar tu app antes de lanzarla y estás usando Polygon puedes hacerlo en Polygon Amoy, la testnet de Polygon.

Para ello simplemente repite el proceso pero eligiendo Matic Testnet (Amoy) en el campo de red.

Necesitarás financiar tu dapp, pero puedes hacerlo fácilmente obteniendo tokens Sepolia ETH desde el faucetarrow-up-right.

Descargando el servidor de transacciones

Primero, necesitarás una copia del código del transactions-server de Decentraland. Puedes encontrarlo en githubarrow-up-right. A partir de ahí, tienes dos opciones:

  1. Descargar el código: Para descargar el código, primero tienes que hacer clic en el botón verde Código y luego o bien

  • Haz clic en Download ZIP

  • Copia la URL bajo el Clone título y luego ejecuta $ git clone THE_URL_HERE

  1. Forkear el código: Puedes hacer clic en el botón fork en la esquina superior derecha de la página. Una vez que el proceso esté completo, podrás descargar tu código de la misma manera que en la primera opción. Necesitarás una cuenta de Github para esto; para más información sobre forkear repositorios ver aquíarrow-up-right

Configurando el servidor

El transactions server está escrito en NodeJSarrow-up-right usando Typescriptarrow-up-right. Antes de ejecutarlo necesitarás configurar algunas variables de entorno.

Para hacerlo:

  • Copia el .env.example archivo y pégalo renombrado a .env

  • Abre el .env archivo. Verás que algunas variables tienen un valor por defecto, como HTTP_SERVER_PORT=5000 (en qué puerto ejecutar el servidor)

  • Puedes dejar la mayoría de los valores tal y como están, pero hay algunos valores importantes a considerar:

Gelato

Usa la API KEY que obtuvimos al configurar gelato.

Transactions

Cuando llega una nueva petición de transacción comprobará la cantidad una dirección ha enviado ese día. Si está por encima del valor establecido la transacción fallará.

Para eliminar completamente esta comprobación, puedes entrar en el código y eliminar la

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

Contracts and collections

El servidor obtendrá la URL de direcciones de Contract y las almacenará localmente y consultará el subgraph. Cuando llegue una nueva petición de transacción entonces comprobará si el contrato con el que la transacción interactúa pertenece o bien a los contratos desplegados en la URL o a las collections desplegadas en el subgraph.

Si quieres suministrar tus propios contratos cambia la URL y mantén la misma estructura que tiene la actual https://contracts.decentraland.org/addresses.jsonarrow-up-right La red usada la determina COLLECTIONS_CHAIN_ID, y el intervalo con el que se vuelve a obtener la caché es COLLECTIONS_CHAIN_ID

Si tienes tus propias collections también puedes cambiar la URL del subgraph.

Para eliminar completamente estas comprobaciones, puedes entrar en el código y eliminar la

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

Min sale value

Cuando llega una nueva petición de transacción primero analizará los datos que intenta retransmitir. Si detecta una venta (compra en marketplace, oferta, etc.), comprobará el valor contra MIN_SALE_VALUE_IN_WEI. Si es menor, la transacción fallará.

Para comprobar los métodos de venta relevantes, puedes ver src/ports/transaction/validation/checkSalePrice.ts y para eliminar completamente esta comprobación, puedes entrar en el código y eliminar la

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

Ejecutando el servidor

Ahora que toda la configuración está lista, lo que queda es en realidad ejecutar el servidor. Puedes seguir su README pero en resumen, tendrás que:

Por supuesto, probablemente querrás desplegar esto en el servicio de tu elección, como AWSarrow-up-right por ejemplo. Puedes usar el Dockerfilearrow-up-right del proyecto para hacerlo.

Usando el servidor

Ahora que todo está configurado y en funcionamiento, es hora de usar realmente el servidor.

Para enviar una transacción, necesitas hacer un POST a /transactions. El esquema requerido para la petición está definido por transactionSchema en src/ports/transaction/types.ts.

Si, en cambio, quieres usar nuestras librerías ya hechas para facilitarte la vida puedes probar decentraland-transactionsarrow-up-right. Se usa a través de decentraland-dappsarrow-up-right en nuestras dapps como la Marketplacearrow-up-right, con las utilidades sendTransactionarrow-up-right. Revisa este códigoarrow-up-right para un ejemplo.

Última actualización