¡Bienvenidos! Este es un taller automatizado que explicará cómo implementar un token ERC721 en StarkNet y personalizarlo para realizar funciones específicas. El estándar ERC721 se describe aquí. Está dirigido a desarrolladores que:
- Comprender la sintaxis de Cairo
- Comprender el estándar de token 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 Mainnet.
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 personalizar e implementar un contrato ERC721 en StarkNet. Su progreso será verificado por un contrato de evaluator contract, implementado en StarkNet, que le otorgará puntos en forma de ERC20 tokens.
Cada ejercicio requerirá que agregue funcionalidad a su token ERC721.
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 segundo 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 ERC721 NFT(usted está aquí) | StarkNet ERC721 |
Implemente y personalice un token ERC20 | StarkNet ERC20 |
Cree una app de capa cruzada | 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 alguna pregunta? Únase a nuestro servidor Discord server, regístrese y únase al canal #tutorials-support. ¿Está interesado en seguir talleres en línea sobre cómo aprender a desarrollar en StarkNet? Subscríbete aquí
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 algunos.
- Agregue una explicación en los comentarios del ejercicio si cree que necesita más explicación.
- Agregue ejercicios que muestren su característica favorita de El Cairo.
- Oficial:
git clone https://github.com/starknet-edu/starknet-erc721
cd starknet-erc721
- Nadai con Soluciones:
gh repo clone Nadai2010/Nadai-Cairo-721-Starknet-Edu
cd Nadai-Cairo-721-Starknet-Edu
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 either
- 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
- Instalar OpenZeppelin's cairo contracts.
pip install openzeppelin-cairo-contracts
- Linux y macos
Para mac m1:
alias cairo='docker run --rm -v "$PWD":"$PWD" -w "$PWD" shardlabs/cairo-cli:latest-arm'
Para amd procesadores
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
Para hacer este tutorial tendrás que interactuar con el contrato Evaluator.cairo
. Para validar un ejercicio tendrás que:
- Leer el código del evaluador para averiguar qué se espera de su contrato
- Personaliza el código de tu contrato
- Despliéguelo en la red de prueba de StarkNet. Esto se hace usando la CLI.
- Registre su ejercicio para corrección, usando la función de
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.
Por ejemplo para resolver el primer ejercicio el flujo de trabajo sería el siguiente:
deploy a smart contract that answers ex1
→ call submit_exercise on the evaluator providing your smart contract address
→ call ex1_test_erc721 on the evaluator contract
Su objetivo es reunir tantos puntos ERC721-101 como sea posible. Tenga en cuenta :
-
La función de 'transferencia' de ERC721-101 ha sido deshabilitada para alentarlo a terminar el tutorial con una sola dirección Para recibir puntos, el evaluador debe alcanzar las llamadas a la función distribuir_punto.
-
Este repositorio contiene una interfaz
IExerciseSolution.cairo
. Su contrato ERC721 deberá ajustarse a esta interfaz para validar algunos ejercicios; es decir, su contrato debe implementar todas las funciones descritas enIExerciseSolution.cairo
. -
Realmente recomendamos que lea el contrato de
Evaluator.cairo
para comprender completamente lo que se espera de cada ejercicio. En este archivo Léame se proporciona una descripción de alto nivel de lo que se espera de cada ejercicio. -
El contrato de Evaluador a veces necesita realizar pagos para comprar sus tokens. ¡Asegúrate de que tenga suficientes fichas ficticias para hacerlo! De lo contrario, debe obtener tokens ficticios del contrato de tokens ficticios y enviarlos al evaluador.
¡Hoy estamos creando un registro de animales! Los animales son criados por criadores. Pueden nacer, morir, reproducirse, venderse. Irás implementando estas características poco a poco.
- Cree un contrato de token ERC721. Puedes usar esta implementación como base.
- Despliéguelo en la red de prueba (verifique en el constructor los argumentos necesarios. También tenga en cuenta que los argumentos deben ser decimales).
starknet-compile contracts/ERC721/ERC721.cairo --output artifacts/ERC721.json
starknet deploy --contract artifacts/ERC721.json --inputs arg1 arg2 arg3 --network alpha-goerli
- Entrega el token n.° 1 al contrato del evaluador
- Llame a
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar (4 pts) - Llame a
ex1_test_erc721()
en el evaluador para recibir sus puntos (2 pts)
- Nadai con Soluciones Ejercicio 1
- Llame a
ex2a_get_animal_rank()
para que le asignen una criatura aleatoria para crear. - Lea las características esperadas de su animal del Evaluador
- Cree las herramientas necesarias para registrar las características de los animales en su contrato y permita que el contrato del evaluador las recupere a través de la función
get_animal_characteristics
en su contrato marque esto - Implementa tu nuevo contrato
- Acuñar el animal con las características deseadas y entregarlo al evaluador
- Llame
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar - Llame a
ex2b_test_declare_animal()
para recibir puntos (2 pts)
- Nadai con Soluciones Ejercicio 2
- Crear una función para permitir a los criadores acuñar nuevos animales con las características especificadas
- Implementa tu nuevo contrato
- Llame a
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar - Llame a
ex3_declare_new_animal()
para obtener puntos (2 puntos)
- Nadai con Soluciones Ejercicio 3
- Cree una función para permitir que los criadores declaren animales muertos (quemar el NFT)
- Implementa tu nuevo contrato
- Llame a
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar - Llame a
ex4_declare_dead_animal()
para obtener puntos (2 puntos)
- Nadai con Soluciones Ejercicio 4
- Use el dummy token faucet ficticias para obtener dummy token.
- Usa
ex5a_i_have_dtk()
para mostrar que lograste usar el grifo (2 pts) - Cree una función para permitir el registro de criadores.
- Esta función debería cobrarle al registrante una tarifa, pagada en tokens ficticios (consulte
registration_price
- Agregar permisos. Solo permitir que los criadores listados puedan crear animales.
- Implementa tu nuevo contrato
- Llame a
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar - Llame a
ex5b_register_breeder()
para probar que su función funciona. Si es necesario, envíe tokens ficticios primero al evaluador (2 puntos)
- Nadai con Soluciones Ejercicio 5
- Mint un NFT con metadatos en este dummy ERC721 token, utilizable aquí.
- Compruébalo en Aspect.
- Reclamar puntos en
ex6_claim_metadata_token
](https://github.com/starknet-edu/starknet-erc721/blob/main/contracts/Evaluator.cairo#523). (2 puntos)
- Nadai con Soluciones Ejercicio 6
- Cree un nuevo contrato ERC721 que admita metadatos. Puedes usar este contrato como base
- El URI del token base es la puerta de enlace IPFS elegida.
- Puede cargar sus NFT directamente en este website
- ¡Tus tokens deberían ser visibles en Aspect una vez acuñados!
- Implementa tu nuevo contrato
- Llame a
submit_exercise()
en el Evaluador para configurar el contrato que desea evaluar - Reclamar puntos en
ex7_add_metadata
(2 puntos)
- Nadai con Soluciones Ejercicio 7
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
Si da error pruebe:
python3 -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 monitorear su conteo de puntos en tiempo real, ¡también puede ver su saldo en voyager!
- Vaya al contador ERC20 counter en voyager, en la pestaña "leer contrato"
- Ingrese su dirección en decimal en la función "balanceOf"
También puede consultar su progreso general aquí.
¿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.