Estas herramientas le permitirán realizar:
- Configuración del Proyecto con Webpack: Habilite una estructura de proyecto con WebGL para ser compilada por Webpack
- Integrar Web SDK: Permita que todos los EOAs y Sequence Wallet autentiquen al usuario
- Desplegar un contrato de coleccionables: Cree su propio contrato de coleccionables
- Desplegar un Remote Minter y mintear tokens dentro del juego: Realice transacciones relay sin gas con Cloudflare workers
- Aproveche los ítems dentro del juego: Integre coleccionables en el juego usando Sequence Indexer
- Queme tokens de logros dentro del juego: Queme logros del juego con wagmi
- (Opcional) Integre Embedded Wallet en Web SDK: Permita una experiencia fluida sin el uso de mensajes firmados por el firmante
1. Configuración del proyecto con webpack
Clonar el repositorio
Primero comenzaremos clonando un proyecto plantilla, que incluye algunos componentes basados en WebGL creados conthree, todos compilados usando webpack
Plantilla WebGL JS Web SDK Starter
Clona el repositorio anterior y accede a él con cd template-webgl-js-sequence-kit-starter.
Actualice .env
Cree un archivo .env (usando el .env.example) con las variables de entorno
2. Integrar Web SDK
Ahora que tenemos la estructura del proyecto lista, podemos integrar Web SDKConfigurar el componente App.jsx
Cree una carpeta dentro de src llamada react y cree 2 archivos: App.jsx y Login.jsx
En App.jsx incluya el siguiente código
Login.jsx agregue el siguiente código para crear un botón en la parte superior de la pantalla para iniciar sesión en la aplicación
Renderizar el componente en Javascript index.js
Finalmente, en index.js importe el componente App.jsx y renderícelo para que se agregue al elemento con id root en index.html
Crear un manejador de clic para llamar al modal de inicio de sesión
Agregue el siguiente código al componenteLogin.jsx
index.js
index.html
3. Implemente un contrato de coleccionables
Necesitará crear un coleccionable desde el Sequence Builder, lo cual puede lograr siguiendo esta guía Deberíamos crear 2 colecciones: una para los tokens de logros y otra para los aviones4. Desplegar un Remote Minter y mintear tokens de logros dentro del juego
Luego, para enviar transacciones a la blockchain de manera fluida y sin gas, implemente un Cloudflare Worker para mintear ítems desde un contrato desplegado en el paso anterior, asegurándose de que la dirección del contrato de la API de transacciones esté ingresada comoMinter Role
Permitiremos que existan múltiples caminos para mintear coleccionables: un coleccionable de avión y un coleccionable de logro.
Esto se logra en el código agregando una clave/valor isPlane al cuerpo de la solicitud normal de cloudflare, y creando un if/else adicional en el cloudflare worker.
Puede ver el código para esto en este repositorio de github
Para esta guía, ejecutaremos todo el código de cloudflare en un entorno de desarrollo local, esto se puede hacer iniciando el cloudflare worker en la carpeta del proyecto, así:
5. Aproveche los ítems dentro del juego
Esta sección se dividirá en 2 implementaciones para actualizar la UI según los cambios de propiedad de activos dentro del juego:- Mostrar cambios de avión según los activos del wallet
- Mostrar cambios en la UI según los activos del wallet
Mostrar cambios de avión según los activos del wallet
Para implementar cambios en el juego según los activos que tiene el wallet, puede implementar un botón que mintea un token y luego, en la respuesta, verifica los cambios en el indexer En elindex.js incluimos un botón conectado al atributo onclick del elemento en index.html
callContract se encarga del minteo llamando a un fetch que está envuelto en un mutex para asegurar que solo ocurra un minteo a la vez, evitando clics repetidos, y se agrega a la clase SequenceController en /API/SequenceController.js
fetchPlaneTokens hará polling del resultado hasta que haya un activo en su wallet, actualizando el plane color para representar un avión diferente.
fetchPlaneTokens se implementa con el siguiente código, donde la condición de balance es mayor que 1, y el tokenID es igual al id buscado.
Esta lógica condicional de la UI cambiaría según su aplicación
Mostrar cambios en la UI según los activos del wallet
A continuación, implementamos un cambio en la UI donde agregamos un botón deburn achievement, dependiendo de si el usuario tiene un logro o no
Primero, implementar la lógica de manejador de clic HTML/JS similar a la anterior
donde esta vez, el valor isPlane de callContract se establece en false
fetchTokensFromAchievementMint que se agrega al SequenceController
display haga aparecer el botón
6. Quemar tokens de logro dentro del juego
Finalmente, para quemar el token de logro, ya no podemos usar un Cloudflare Worker para las acciones enviadas a la blockchain, porque cuando el minteo se realizó ‘en nombre de’ la dirección usando la API de transacciones (haciendo que elmsg.sender en el contrato sea una de las direcciones del relayer), para esto, queremos asegurarnos de que el msg.sender en el contrato demuestre la propiedad del token y que la transacción sea enviada directamente por el usuario. Usaremos funciones frontend de wagmi y algo de composición de clases para lograrlo.
burnToken es una función pasada desde nuestro componente react que usa un patrón similar de mutexes, y enviamos la transacción usando sendTransaction del paquete wagmi, esperando la actualización del hash de la transacción para devolver el callback
SequenceController, llamamos a la función sendBurnToken envuelta en burnToken para hacer que la función de react sea accesible para el resto de la aplicación
SequenceController
7. (Opcional) Integre el Embedded Wallet en Web SDK
Si desea facilitar el recorrido del usuario para que no tenga que firmar transacciones en ningún momento, puede habilitar el Embedded Wallet actualizando la configuración de su componente react de Web SDK. Al hacer esto, reducimos los pop-ups al quemar tokens conwagmi, ya que la entrega de tokens de logro y el minteo de coleccionables se completan usando un Cloudflare Worker para transacciones sin gas.
Esto se puede lograr agregando algunas variables de entorno y cambiando el tipo de conector que usamos.
Primero actualice su archivo .env con los siguientes secretos de entorno
App.jsx
Para aprender más sobre Wallets dentro del juego, vea
aquí