Skip to content

Latest commit

 

History

History
305 lines (203 loc) · 19.1 KB

Starknet-Edu-Bridge-L2-L1.md

File metadata and controls

305 lines (203 loc) · 19.1 KB

Puente de mensajería StarkNet

¡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

Introducción

Descargo de responsabilidad

​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á! ​

Cómo funciona

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. ​ ​

¿Dónde estoy?

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

Proporcionar comentarios y obtener ayuda

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 ​

Contribuyendo

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

Preparándose para trabajar

Paso 1: clonar el repositorio

  • 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

Paso 2: configure su entorno

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.

Opción A: configurar un entorno Python local

pip install openzeppelin-cairo-contracts

Si la error pruebe

gh repo clone OpenZeppelin/cairo-contracts

Opción B: usar un entorno dockerizado

-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

Paso 3: pruebe que puede compilar el proyecto

starknet-compile contracts/Evaluator.cairo

Trabajando en el tutorial

Flujo de trabajo

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.

Ejercicios y direcciones de contratos

Contract code Contract on voyager
L2 Evaluator 0x595bfeb84a5f95de3471fc66929710e92c12cce2b652cd91a6fef4c5c09cd99
Points counter ERC20 0x38ec18163a6923a96870f3d2b948a140df89d30120afdf90270b02c609f8a88
L2 Dummy NFT 0x6cc3df14b8b3e8c05ad19c74f373e110bba0380b2799bcd9f717d31d2757625
L1 Evaluator 0x8055d587A447AE186d1589F7AAaF90CaCCc30179
L1 Dummy token 0x0232CB90523F181Ab4990Eb078Cf890F065eC395
L1 Messaging NFT 0x6DD77805FD35c91EF6b2624Ba538Ed920b8d0b4E
StarkNet Core Contract Proxy 0xde29d060D45901Fb19ED6C6e959EB22d8626708e
Goerli Faucet (0.1 ETH / 2 hours) 0x25864095d3eB9F7194C1ccbb01871c9b1bd5787a

Lista de tareas

Ejercicio 0 - Enviar un mensaje L2→L1→L2 con contratos existentes (2 pts)

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


Ejercicio 1 - Envía un mensaje L2→L1 con tu contrato (2 pts)

Escriba e implemente un contrato en L2 que envíe mensajes a L1.



Ejercicio 2 - Envía un mensaje L1→L2 con tu contrato (2 pts)

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.


Ejercicio 3 - Recibe un mensaje L2→L1 con tu contrato (2 pts)

  • 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


Ejercicio 4 - Recibe un mensaje L1→L2 con tu contrato (2 pts)

  • 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


Anexo - Herramientas y recursos útiles

Conversión de datos a y desde decimal

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

Comprobando tu progreso y contando tus puntos

​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) ​

Estado de la transacción

​¿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. ​

Artículos y documentación