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

Desplegando tu servidor de transacciones

Ofrece a los usuarios transacciones sin coste

El transactions-server es un servidor proxy que retransmite transacciones a Gelato. Recibe una transacción firmada del cliente que luego se envía a la red apropiada detrás de escena. Esto permite al propietario del servidor facilitar a sus usuarios transacciones sin coste

El servidor de transacciones se usa para ayudar con la UX de usar múltiples redes y para evitar que cambien de proveedor de red sobre la marcha. Los usuarios pueden permanecer conectados a Ethereum e interactuar con Polygon solo firmando transacciones

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

Restricciones

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

Las restricciones configurables que tiene el servidor son:

  • Comprueba una cuota máxima de transacciones por día. Consulta la sección de colecciones para más información.

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

  • El precio de las ventas, restringiéndolo si está por debajo de un umbral. Consulta la sección de valor mínimo de venta para más información

Configuración de Gelato

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

Necesita un contract para reenviar las transacciones, pero por suerte podemos reutilizar el que está usando Decentraland (ver abajo)

Gelato funciona como una API para el servidor. Para configurarlo primero necesitarás una API KEY que usaremos más adelante. Para obtenerlos:

  • Regístrate en el servicio

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

    • Selecciona las Mainnets opciones

    • Configura un nombre de la app adecuado para tu dApp

    • elige Polygon como la red para el Smart Contract

    • Activa la Any Contract opción de interruptor

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

Por último, tendrás que financiar tu dapp recién creada. Puedes hacerlo conectando tu wallet en la 1Balance sección de la barra lateral izquierda. Una vez conectada, te permitirá depositar tus USDC para financiar las transacciones que enviarán tus usuarios. Si necesitas obtener MATIC, consulta esta publicación.

Testnet

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

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

Tendrás que financiar tu dapp, pero puedes hacerlo fácilmente obteniendo tokens Sepolia ETH del faucet.

Descargando el servidor de transacciones

Para empezar, necesitarás una copia del código de transactions-server de Decentraland. Puedes encontrarlo en GitHub. A partir de ahí, tienes dos opciones:

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

  • Haz clic en Download ZIP

  • Copia la URL debajo del Clone título y luego ejecuta $ git clone THE_URL_HERE

  1. Haciendo fork del código: Puedes hacer clic en el fork botón en la parte superior derecha de la página. Una vez completado el proceso, podrás descargar tu código de la misma forma que en la primera opción. Para esto necesitarás una cuenta de GitHub; para más información sobre hacer fork de repositorios consulta aquí

Configuración del servidor

El servidor de transacciones está escrito en NodeJS usando TypeScript. Antes de ejecutarlo, tendrás que configurar algunas variables de entorno.

Para hacerlo:

  • Copia el .env.defaults archivo y pégalo renombrándolo a .env

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

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

Gelato

Usa la API KEY que obtuvimos al configurar Gelato.

Transacciones

Cuando llegue una nueva solicitud de transacción comprobará la cantidad una dirección que ha enviado ese día. Si supera el valor establecido, la transacción fallará.

Para eliminar por completo esta comprobación, puedes ir al código y eliminar el

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

Contratos y colecciones

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

Si quieres proporcionar tus propios contracts, cambia la URL y conserva la misma estructura que tiene la actual https://contracts.decentraland.org/addresses.json tiene. La red utilizada está determinada por COLLECTIONS_CHAIN_ID, y el intervalo con el que se vuelve a obtener la caché es COLLECTIONS_FETCH_INTERVAL_MS

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

Para eliminar por completo estas comprobaciones, puedes ir al código y eliminar el

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

Valor mínimo de venta

Cuando llegue una nueva solicitud de transacción, primero analizará los datos que intenta reenviar. Si detecta una venta (compra en Marketplace, puja, etc.), comprobará el valor frente a MIN_SALE_VALUE_IN_WEI. Si es inferior, la transacción fallará.

Para comprobar los métodos de venta relevantes, puedes ver src/ports/transaction/validation/checkSalePrice.ts y para eliminar por completo esta comprobación, puedes ir al código y eliminar el

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

Ejecutando el servidor

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

  • Tener NodeJS instalado

  • Abre tu terminal de preferencia

  • Ejecuta los siguientes comandos:

Por supuesto, probablemente querrás desplegar esto en tu servicio de preferencia, como AWS por ejemplo. Puedes usar el Dockerfile del proyecto para hacerlo.

Usando el servidor

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

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

Si, en cambio, quieres usar nuestras librerías prehechas para facilitarte la vida, puedes probar decentraland-transactions. Se usa mediante decentraland-dapps en nuestras dapps como el Marketplace, con los utils sendTransaction. Consulta este código para ver un ejemplo.

Última actualización