¡Bienvenidos! Este es un taller automatizado que explicará cómo usar el puente de mensajería StarkNet L1 <-> L2 para crear poderosas aplicaciones de capas cruzadas.
Está dirigido a desarrolladores que:
- Comprenden la sintaxis de El Cairo
- Comprenden la sintaxis de Solidity
- Comprenden el estándar de token ERC20
- Comprenden el esándar ERC721
No espere ningún tipo de beneficio al usar esto, aparte de aprender un montón de cosas interesantes sobre StarkNet, el primer paquete acumulativo de validez de propósito general en Ethereum Mainnnet. StarkNet todavía está en Alfa. Esto significa que el desarrollo está en curso y que la pintura no está seca en todas partes. Las cosas mejorarán, y mientras tanto, ¡hacemos que las cosas funcionen con un poco de cinta adhesiva aquí y allá!
El objetivo de este tutorial es que cree e implemente contratos en StarkNet y Ethereum que interactuarán entre sí. En otras palabras, creará su propio puente L1 <-> L2.
Su progreso será verificado por un contrato de evaluador, implementado en StarkNet, que le otorgará puntos en forma de tokens ERC20.
Cada ejercicio requerirá que agregue funcionalidad a su puente.
- La primera parte le permite enviar y recibir mensajes de L1 a L2, sin tener que codificar necesariamente.
- La segunda parte requiere que codifiques contratos inteligentes en L1 y L2 que puedan enviar mensajes a las contrapartes de L2 y L1.
- La segunda parte requiere que codifique contratos inteligentes en L1 y L2 que puedan recibir mensajes de contrapartes L2 y L1.
Para cada ejercicio, deberá escribir una nueva versión en su contrato, implementarlo y enviarlo al evaluador para su corrección.
Este taller es el cuarto de una serie destinada a enseñar cómo construir en StarkNet. Echa un vistazo a lo siguiente:
Tema | GitHub repo |
---|---|
Aprenda a leer el código de El Cairo | Cairo 101 |
Implemente y personalice un ERC721 NFT | StarkNet ERC721 |
Implemente y personalice un token ERC20 | StarkNet ERC20 |
Cree una app de capa cruzada (usted está aquí) | StarkNet messaging bridge |
Depure sus contratos de El Cairo fácilmente | StarkNet debug |
Diseña tu propio contrato de cuenta | StarkNet account abstraction |
Una vez que haya terminado de trabajar en este tutorial, ¡sus comentarios serán muy apreciados!
Complete este formulario para informarnos qué podemos hacer para mejorarlo.
Y si tiene dificultades para seguir adelante, ¡háganoslo saber! Este taller está destinado a ser lo más accesible posible; queremos saber si no es el caso.
¿Tienes una pregunta? Únase a nuestro servidor Discord, regístrese y únase al canal #tutorials-support
Este proyecto se puede mejorar y evolucionará a medida que StarkNet madure. ¡Sus contribuciones son bienvenidas! Aquí hay cosas que puede hacer para ayudar:
- Crea una sucursal con una traducción a tu idioma
- Corrija los errores si encuentra alguno.
- Agregue una explicación en los comentarios del ejercicio si cree que necesita más explicación
- Oficial
git clone https://github.com/starknet-edu/starknet-messaging-bridge
cd starknet-messaging-bridge
- Nadai con Soluciones
gh repo clone Nadai2010/Nadai-Starknet-Edu-Bridge-L2-L1
cd Nadai-Starknet-Edu-Bridge-L2-L1
Hay dos formas de configurar su entorno en StarkNet: una instalación local o usando un contenedor docker
- Para usuarios de Mac y Linux, recomendamos
- Para usuarios de Windows recomendamos docker
Para obtener instrucciones de configuración de producción, escribimos este artículo.
- Configure el entorno siguiendo estas instrucciones
- Instale los contratos cairo de OpenZeppelin.
pip install openzeppelin-cairo-contracts
Si la error pruebe
gh repo clone OpenZeppelin/cairo-contracts
-Linux y macos
Pra mac m1:
alias cairo='docker run --rm -v "$PWD":"$PWD" -w "$PWD" shardlabs/cairo-cli:latest-arm'
Para procesadores amd
alias cairo='docker run --rm -v "$PWD":"$PWD" -w "$PWD" shardlabs/cairo-cli:latest'
- Windows
docker run --rm -it -v ${pwd}:/work --workdir /work shardlabs/cairo-cli:latest
starknet-compile contracts/Evaluator.cairo
La comunicación L2 -> L1 tarda ~30 minutos, por lo que se recomienda enviar los mensajes de L2 a L1 lo antes posible y hacer los ejercicios en L1 mientras tanto.
Para hacer este tutorial tendrás que interactuar con el contrato Evaluator.cairo
. Para validar un ejercicio tendrás que
- Lea el código del evaluador para averiguar qué se espera de su contrato
- Personaliza el código de tu contrato
- Implementarlo en la red de prueba de StarkNet. Esto se hace usando la CLI.
- Registre su ejercicio para corrección, usando la función
submit_exercise
en el evaluador. Esto se hace usando Voyager. - Llame a la función correspondiente en el contrato del evaluador para corregir su ejercicio y recibir sus puntos. Esto se hace usando Voyager.
- También hay un contrato de evaluador en L1, que comprobará la solidez de tu trabajo. El flujo de trabajo para usarlo es el mismo que el anterior, solo en L1.
Use un contrato implementado previamente para acuñar tokens ERC20 en L1 desde L2. Se pasa un mensaje secreto con los mensajes; asegúrese de encontrarlo para acumular sus puntos.
- Call function
ex_0_a
of L2 Evaluator - Debe especificar una dirección L1 y una cantidad de ERC20 para acuñar
- El mensaje secreto se envía de L2 a L1 en esta etapa.
- Llame a
mint
de L1 DummyToken- Debe demostrar que conoce el valor secreto en este paso
- Llame a
i_have_tokens
de L1 DummyToken- Esta función verifica que hayas podido acuñar tokens ERC20 y luego enviará un mensaje a L2 para acreditar tus puntos
- Esto se hace usando
ex_0_b
del evaluador L2
- Nadai con Soluciones Ejercicio 0
Escriba e implemente un contrato en L2 que envíe mensajes a L1.
- Escriba un contrato en L2 que enviará un mensaje a L1 MessagingNft y activará
createNftFromL2
- Su función debe llamarse
create_l1_nft_message
- Despliega tu contrato
- Envíe la dirección del contrato a L2 Evaluator llamando a su
submit_exercise
- Llame a
ex1a
de L2 Evaluator para activar el envío del mensaje a L2 - Llame a
createNftFromL2
de L1 MessagingNft para activar el consumo de mensajes en L1- L1 MessagingNft devuelve un mensaje a L2 para acreditar sus puntos en L2
- Nadai con Soluciones Ejercicio 1
Escriba e implemente un contrato en L1 que envíe mensajes a L2.
- Escriba un contrato en L1 que enviará un mensaje a L2 Evaluator y activará
ex2
- Puede comprobar cómo L1 MessagingNft envía un mensaje a L2 para obtener algunas ideas.
- Puede obtener la dirección más reciente del StarkNet Core Contract Proxy en Goerli ejecutando
starknet get_contract_addresses --network alpha-goerli
en su CLI - Aprenda cómo obtener el selector de una función de contrato de StarkNet
- Despliega tu contrato
- Activar el envío de mensajes en L1. Sus puntos se atribuyen automáticamente en L2.
- Nadai con Soluciones Ejercicio 2
- Escriba un contrato en L1 que recibirá un mensaje de la función
ex3_a
.- Asegúrese de que su contrato pueda manejar el mensaje.
- Su función de consumo de mensajes debe llamarse
consumeMessage
- Implemente su contrato L1
- Llame a
ex3_a
de L2 Evaluator para enviar un mensaje L2→L1 - Llame a
ex3
de L1 Evaluator, que activa el consumo de mensajes de su contrato L1- El evaluador de L1 también devolverá un mensaje a L2 para distribuir sus puntos
- Nadai con Soluciones Ejercicio 3
- Escribir un contrato L2 que pueda recibir un mensaje de
ex4
de L1 Evaluator- Puede nombrar su función como desee, ya que proporciona el selector de función como parámetro en L1
- Implemente su contrato en L2
- Llame a
ex4
de L1 Evaluator para enviar el valor aleatorio a su contrato L2 - Envíe la dirección de su contrato L2 llamando a
submit_exercise
de L2 Evaluator - Llame a
ex4_b
de L2 Evaluator que verificará que completó su trabajo correctamente y distribuirá sus puntos
- Nadai con Soluciones Ejercicio 4
Para convertir datos en fieltro, use el script utils.py
Para abrir Python en modo interactivo después de ejecutar el script
python -i utils.py
>>> str_to_felt('ERC20-101')
1278752977803006783537
Sus puntos se acreditarán en su billetera; aunque esto puede tomar algún tiempo. Si desea controlar su conteo de puntos en tiempo real, ¡también puede ver su saldo en Voyager!
- Vaya al contador ERC20 en voyager, en la pestaña "leer contrato"
- Ingrese su dirección en decimal en la función "balanceOf"
También puede verificar su progreso general [aquí] (https://starknet-tutorials.vercel.app)
¿Envió una transacción y se muestra como "no detectada" en voyager? Esto puede significar dos cosas:
- Su transacción está pendiente y se incluirá en un bloque en breve. Entonces será visible en Voyager.
- Su transacción no fue válida y NO se incluirá en un bloque (no existe una transacción fallida en StarkNet). Puede (y debe) verificar el estado de su transacción con la siguiente URL https://alpha4.starknet.io/feeder_gateway/get_transaction_receipt?transactionHash=, donde puede agregar el hash de su transacción.