¡Bienvenidos! Este es un taller automatizado que explicará cómo implementar un token ERC20 en StarkNet y personalizarlo para realizar funciones específicas. El estándar ERC20 se describe aquí. Está dirigido a desarrolladores que:
- Comprender la sintaxis de Cairo
- Comprender el estándar de token ERC20.
Este tutorial ha sido escrito por Florian Charlier (@trevis_dev) en colaboración de Henri Lieutaud and Lucas Levy, basado en los originales de HenriERC20 101 y ERC20 102 tutoriales de Solidity.
Repo original Aquí.
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 ERC20 en StarkNet. 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 token ERC20.
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 y personalice un ERC721 NFT | StarkNet ERC721 |
Implemente y personalice un token ERC20 (aquí) | 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-erc20
cd starknet-erc721
- Nadai con Soluciones:
gh repo clone Nadai2010/Nadai-Cairo-ERC20-Starknet-Edu
cd Nadai-Cairo-ERC20-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 ex2_test_erc20 on the evaluator contract
Su objetivo es reunir tantos puntos ERC20-101 como sea posible. Tenga en cuenta :
-
La función de 'transferencia' de ERC20-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 dos interfaces (
IERC20Solution.cairo
yIExerciseSolution.cairo
). Por ejemplo, para la primera parte, su contrato ERC20 deberá ajustarse a la primera interfaz para validar los ejercicios; es decir, su contrato debe implementar todas las funciones descritas enIERC20Solution.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 implementará su propio token ERC20 en StarkNet!
El tutorial está estructurado en dos partes
- En la primera parte (ejercicios 1 a 9), deberá implementar un contrato ERC-20.
- En la segunda parte (ejercicios 10 a 18), implementará otro contrato que tendrá que interactuar con tokens ERC20.
- Llame a
ex1_assign_rank()
en el contrato del evaluador para recibir un ticker aleatorio para su token ERC20, así como un suministro de token inicial (1 pt). Puede leer su ticker asignado y suministrarlo a través de la página del evaluador en Voyager llamando a los captadoresread_ticker()
) yread_supply()
. - Cree un contrato de token ERC20 con el ticker y el suministro adecuados. Puede usar esta implementación como base (2 pts)
- Implementarlo en el testnet (verifique el constructor para los argumentos necesarios. También tenga en cuenta que los argumentos deben ser decimales). (1 punto)
starknet-compile contracts/token/ERC20/ERC20.cairo --output artifacts/ERC20.json
starknet deploy --contract ERC20 --inputs arg1 arg2 arg3 --network alpha-goerli
- Llame a
submit_erc20_solution()
en el Evaluador para establecer el contrato que desea evaluar (2 puntos) (los 3 puntos anteriores para el ERC20 y la implementación también se atribuyen en ese paso).
- Nadai con Soluciones Ejercicio 1
- Llame a
ex2_test_erc20()
en el evaluador para que verifique el ticker y suministre y atribuya sus puntos (2 puntos)
- Nadai con Soluciones Ejercicio 2
- Cree una función
get_tokens()
en su contrato. Debería acuñar parte de su token para la persona que llama. Deberá devolver el monto exacto que acuña para que el Evaluador verifique que el incremento de saldo y el monto enviado correspondan. - Implemente su contrato y llame a
submit_erc20_solution()
en el Evaluador para registrarlo - Llame a la función
ex3_test_get_token()
que distribuye tokens a la persona que llama (2 pts).
- Nadai con Soluciones Ejercicio 3
- Crear una función de lista de permisos de clientes. Solo permitir que los usuarios de la lista puedan llamar a
get_tokens()
. - Crear una función
request_allowlist()
que el evaluador llamará durante la comprobación del ejercicio para poder obtener tokens. - Cree una función
allowlist_level()
a la que cualquiera pueda llamar para saber si una cuenta puede obtener tokens. - Implemente su contrato y llame a
submit_erc20_solution()
en el Evaluador para registrarlo - Llame a
ex4_5_6_test_fencing()
en el evaluador para mostrar- No puede obtener tokens usando
get_tokens()
(1 pt) - Puede llamar a
request_allowlist()
y tener confirmación de que pasó (1 pt) - Luego puede obtener tokens usando el mismo
get_tokens()
(2 pt)
- No puede obtener tokens usando
- Nadai con Soluciones Ejercicio 4-5-6
- Crear una función de listado de múltiples niveles de clientes. Solo permitir que los usuarios de la lista puedan llamar a
get_token()
; y los clientes deben recibir una cantidad diferente de tokens según su nivel - Cree una función
request_allowlist_level()
que el evaluador llamará durante la verificación del ejercicio para poder obtener tokens en un cierto nivel de nivel - Modificar la función
allowlist_level()
para que devuelva el nivel permitido de cuentas. - Implemente su contrato y llame a
submit_erc20_solution()
en el Evaluador para registrarlo - Llame a
ex7_8_9_test_fencing_levels()
en el evaluador para mostrar- No puede obtener tokens usando
get_tokens()
(1 pt) - Puede llamar a
request_allowlist_level(1)
, luego llamar aget_tokens()
y obtener N tokens (2 puntos) - Puede llamar a
request_allowlist_level(2)
, luego llamar aget_tokens()
y obtener > N tokens (2 puntos)
- No puede obtener tokens usando
- Nadai con Soluciones Ejercicio 7-8-9
- Reclamar tokens manualmente en el reclamable preimplementado ERC20 (DTK tokens) (1 pts)
- Reclama tus puntos llamando a
ex10_claimed_tokens()
en el evaluador (1 pts)
- Nadai con Soluciones Ejercicio 10
- Crear un contrato
ExerciseSolution
que:- Puede reclamar y mantener tokens DTK en nombre de la dirección que llama
- Realiza un seguimiento de las direcciones que reclamaron tokens y cuánto
- Implementa una función
tokens_in_custody
para mostrar estas cantidades reclamadas
- Implemente su contrato y llame a
submit_exercise_solution()
en el Evaluador para registrarlo - Llame a
ex11_claimed_from_contract()
en el evaluador para probar que su código funciona (3 pts)
- Nadai con Soluciones Ejercicio 11
- Cree una función
withdraw_all_tokens()
enExerciseSolution
para retirar los tokens reclamados deExerciseSolution
a la dirección que los reclamó inicialmente - Implemente su contrato y llame a
submit_exercise_solution()
en el Evaluador para registrarlo - Llame a
ex12_withdraw_from_contract()
en el evaluador para probar que su código funciona (2 pts)
- Nadai con Soluciones Ejercicio 12
- Acuñe algunos tokens DTK y use voyager para autorizar al evaluador a manipularlos
- Llame a
ex13_approved_exercise_solution()
para reclamar puntos (1 pts)
- Nadai con Soluciones Ejercicio 13
- Utilizar voyager para revocar la autorización anterior.
- Llame a
ex14_revoked_exercise_solution()
para reclamar puntos (1 pts)
- Nadai con Soluciones Ejercicio 14
- Cree una función
deposit_tokens()
en su contrato a través de la cual un usuario pueda depositar DTK enExerciseSolution
, utilizandotransferFrom
de DTK - Implemente su contrato y llame a
submit_exercise_solution()
en el Evaluador para registrarlo - Llame a
ex15_deposit_tokens
en el evaluador para probar que su código funciona (2 pts)
- Nadai con Soluciones Ejercicio 15
- Cree e implemente un nuevo ERC20
ExerciseSolutionToken
para rastrear el depósito del usuario. Este ERC20 debe ser minable y la autorización de mint otorgada aExerciseSolution
- Implemente
ExerciseSolutionToken
y asegúrese de queExerciseSolution
conozca su dirección - Actualice la función de depósito en
ExerciseSolution
para que los saldos de los usuarios se tokenicen: cuando se realiza un depósito enExerciseSolution
, los tokens se acuñan enExerciseSolutionToken
y se transfieren a la dirección de depósito - Implemente su contrato y llame a
submit_exercise_solution()
en el Evaluador para registrarlo - Llame a
ex16_17_deposit_and_mint
en el evaluador para probar que su código funciona (4 pts)
- Nadai con Soluciones Ejercicio 16-17
- Actualice la función de retiro
ExerciseSolution
para que usetransferFrom()
enExerciseSolutionToken
, queme estos tokens y devuelva los DTK - Implemente su contrato y llame a
submit_exercise_solution()
en el Evaluador para registrarlo - Llame a
ex18_withdraw_and_burn
en el evaluador para probar que su código funciona (2 pts)
- Nadai con Soluciones Ejercicio 18
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!
- Ve a la 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.