Mintee coleccionables usando una API de transacciones serverless sin gas
Aprenda cómo mintear coleccionables usando una API de transacciones serverless sin gas con Sequence. Implemente la API en un worker de Cloudflare para interacciones de usuario sin pagos de gas.
Tiempo para completar: 20-30 minutos
La API de transacciones de Sequence puede implementarse en un worker serverless de Cloudflare para que la interacción de un usuario en un juego o app sea fluida, sin necesidad de firma de confirmación ni pago de gas. Además, no tendrá que preocuparse por la velocidad de transacción, el rendimiento ni los reorgs del relayer, y disfrutará de escalabilidad automática con Cloudflare.
Los siguientes pasos le guiarán para construir su API de minteo alojada en 4 pasos:
- Configurar el entorno de Cloudflare con Wrangler CLI y desplegar una prueba
- Desplegar, patrocinar y actualizar metadata para un contrato ERC1155 con Sequence Builder
- Usar EthAuthProof para prevenir DDoS de EOA
- Mintear un coleccionable a una wallet
El resultado: una API segura con las siguientes especificaciones:
- HTTPS GET: devuelve blockNumber
- HTTPS POST(proof, address): mintea un coleccionable y devuelve el hash de la transacción
Necesita conocimientos básicos de wrangler cli, npm y Sequence Builder para completar esta implementación.
1. Configurar el entorno de Cloudflare con Wrangler CLI y desplegar una prueba
Para crear el proyecto desde cero, primero cree una carpeta con mkdir
, ingrese a la carpeta con cd
y ejecute pnpm init
para crear un package.json
.
A continuación, asegúrese de tener wrangler cli instalado en su proyecto y configure la palabra clave wrangler
como un alias en su sesión local de bash.
Cree una cuenta en el sitio de Cloudflare e inicie sesión en su panel de Cloudflare para conectar la plataforma Cloudflare con su entorno de desarrollo local.
Una vez que haya iniciado sesión, inicialice el proyecto en el directorio aceptando uno de los nombres de carpeta generados aleatoriamente que le guste, y siga las indicaciones para inicializar su aplicación typescript "Hello World" Worker
con control de versiones en git.
Para completar este paso, presione enter 4 veces después de wrangler init
, respondiendo No
en los últimos 2 pasos para rechazar el versionado con git y el despliegue.
Esto clonará un repositorio inicial que puede usar para desplegar código en la nube.
Pruebas locales de la API
En cualquier momento de la guía, puede usar el comando wrangler dev
en la carpeta del proyecto para pruebas locales
Despliegue de prueba
Finalmente, cambie al directorio del proyecto generado aleatoriamente usando cd
y ejecute el comando wrangler deploy
.
Esto debería mostrar una URL, que puede ingresar en el navegador como https://<app>.<account>.workers.dev
para ver el resultado Hello World!
.
2. Desplegar, patrocinar y actualizar metadata para un contrato ERC1155 con Sequence Builder
Para usar la API de transacciones, deberá actualizar su plan de facturación a Developer
para su proyecto en Sequence Builder, lo cual puede hacer siguiendo esta guía
Primero, siga esta guía para desplegar un contrato.
Luego, debe actualizar el acceso por roles del contrato en el Builder para que solo reciba solicitudes desde la dirección de la wallet de minteo, lo cual puede hacerse en 2 pasos.
Puede hacer esto en Sequence Builder otorgando el minter permission
a su Sequence Wallet Transactions API Address
.
Para saber cuál es la dirección de la API de transacciones con la que está trabajando, primero debe:
- Generar una usando esta app seleccionando su red y generando una clave de wallet con el botón
generate local wallet
(solo para demostración) Recomendado
: También puede imprimir localmente la dirección de cuenta generada a partir de una clave privada de wallet EOA usando el siguiente fragmento de código:
Para hacerlo, abra su proyecto, navegue a la página de Contracts
, seleccione sus Linked contracts
y, en la pestaña Write Contract
, expanda el método grantRole
.
Complete con los siguientes datos:
bytes32 role
: 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6
address account
: <Generated Sequence Transactions API Wallet Address>
Donde el string role
ingresado es el resultado de keccak256("MINTER_ROLE")
en solidity o ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE"))
en javascript
Esto hace que solo su dirección específica pueda mintear desde el contrato; de lo contrario, dará error.
Complete la actualización del rol haciendo clic en write
y firme la transacción patrocinada.
Actualizar metadata
A continuación, deberá actualizar la metadata con sus medios o assets para su contrato, lo cual puede hacer siguiendo esta guía.
Patrocinio del contrato
Finalmente, para patrocinar el contrato siga esta guía para patrocinar un contrato.
3. Usar EthAuthProof para prevenir DDoS de EOA
Ahora que tenemos un contrato desplegado, podemos volver al directorio y proyecto del worker de Cloudflare e instalar ethers
y 0xsequence
para acceder a las APIs de sequence y realizar una validación de prueba que asegure que la solicitud proviene de una fuente confiable, una wallet de sequence.
Luego, debemos agregar un tipo de middleware, después de verificar si es una solicitud POST o GET. Si es POST, verifique que el proofString
y la address
proporcionados sean válidos, así como las variables de entorno.
El esqueleto de código colocado en src/index.ts
se vería así, con callContract
y getBlockNumber
simulados, usando el paso de verificación mencionado de llamar a verify
antes de cualquier llamada al contrato.
Agregar variables de entorno de Cloudflare
Luego, pase las variables de entorno para su build actualizando la sección [vars]
en su wrangler.toml
.
Implementar el objeto Window en la plantilla de Wrangler
Debe tener en cuenta que, si intenta desplegar esto, obtendrá un error por falta del objeto window
requerido por los módulos web3.
Para evitar esto, agregue la siguiente línea a su archivo wrangler.toml
para hacer el entorno compatible.
Probando el despliegue
Ahora puede volver a desplegar usando wrangler deploy
Y realizar una solicitud curl para probar su endpoint así:
Puede obtener la prueba de dirección de su wallet usando este dapp y seguir los pasos a continuación.
Usando el dapp ETHAuthProof Viewer
Cuando llegue a la página, lo primero que debe hacer es seleccionar una red.
Luego tiene la opción de conectar y generar el Proof, o bien generar un wallet local.
Presione el botón connect
y luego copy to clipboard
.
Cabe señalar que es mejor no compartir este ETHAuthProof
con nadie, ya que permitiría que otra persona demuestre la propiedad de su wallet e interactúe con APIs específicas.
Por último, reemplace el url
con el de su app de este paso, el <some_proof>
con el valor generado que copió desde el dapp visor, y <some_address>
con la dirección de su wallet. Debería devolver simplemente el string simulado 0x
.
4. Mintear un coleccionable al wallet
Finalmente, para desplegar y mintear un coleccionable desde la dirección del contrato patrocinado, instalamos los siguientes paquetes
e implementamos los métodos callContract
y getBlockNumber
que antes estaban simulados, de la siguiente manera:
Una vez completados estos pasos, puede volver a desplegar y probar siguiendo los pasos descritos en el paso anterior. Esta vez, la solicitud POST debería devolver un hash de transacción por el minteo realizado y la solicitud GET debería devolver un número de bloque.
Si quiere ver el código completo, consulte un ejemplo de implementación aquí