Crea Tu Primera Cripto Moneda ERC20 Desde Cero | Cyfrin Updraft
Cyfrin Updraft Courses · 46:34
A Spanish-language tutorial contrasts deploying an ERC-20 token through OpenZeppelin's Wizard and Remix with understanding the Solidity code behind it. It builds selected transfer, approval and burn functions in Foundry, then switches to an inherited token contract and demonstrates an initial-supply test. The emphasis is on choosing features deliberately and testing custom changes rather than copying generated code.
Speakers
Topics
From Cyfrin Updraft Courses, hosted by Cyfrin.
Transcript
Hola Así que quieres crear tu primera criptomoneda y no sabes cómo estás en el video correcto porque hoy te voy a enseñar Cómo crear tu primera criptomoneda desde cero paso a paso te vas a dar cuenta que el proceso es bastante sencillo Y la verdad es que cualquiera puede crear su criptomoneda hoy en día existen una cantidad infame de criptomonedas que de hecho no tienen valor real pero existen otro tipo de criptomonedas que han servido Para apoyar proyectos de alto valor como el es el token de chainlink Así que si tú quieres entender Cómo crear una moneda desde cero Quédate porque estamos por empezar vamos a desplegar tu primer rc20 en menos de 5 minutos para eso Solamente
tienes que ir a Google y poner Open seeling wizard darle click en enter y seleccionar la opción de Open seeling wizard seleccionas esto Esto te va a crear un asistente básicamente ya tenemos por defecto el rc20 Así que solamente vamos a seleccionar estas opones de aquí y le vamos a dar clic en open in remix esto nos va a abrir el editor de código remix ID con el Smart Contract listo para ser desplegado tienes varias opciones inclusive Puedes cambiar el nombre de tu token yo lo voy a dejar tal cual como está por defecto ahora Necesitamos compilar este Smart Contract para lo cual vamos a utilizar control S o con mans en Mac y esto automáticamente va a compilar el contrato por acá para desplegarlo solo
tenemos que ir a deploy and Run transaction y Aquí vamos a seleccionar metamask Esto va a abrir nuestra wallet por supuesto tenemos que desbloquearla y una vez desbloqueado Esto va a estar conectado con nuestra página ahora bien en el constructor de este Smart Contract nos pide que determinemos quién va a ser la wallet dueña del Smart Contract Así que solamente voy a abrir mi metamask voy a copiar mi wallet address voy a pegarla aquí y así de simple puedo dar clic en deploy Esto va a abrirme la transacción de metamask aquí a mi derecha solo voy a dar clic en confirmar y esto básicamente va a crear la transacción para desplegar este Smart Contract Tendremos que esperar unos momentos la transacción debería aparecer aquí abajo pero es más
fácil ir directamente a metamask actividad y como Puedes ver este contrato ya fue creado voy a darle click con View on block Explorer Esto me va a abrir el explorador de bloques hsan y aquí simplemente tenemos que esperar un momento puesto que la transacción ahorita se está indexando una vez la transacción ha finalizado como puedes ver ya tenemos el contrato desplegado si damos clic aquí esto nos va a llevar directamente a la dirección de el contrato podemos ver que si vamos a contrato Tenemos aquí el Hash code y así de sencillo acabas de desplegar tu primer rc20 en menos de 5 minutos esto que acabamos de hacer Está técnicamente correcto porque los contratos de openlin están previamente
auditados y gestionados por una gran comunidad Por lo cual sabes que los contratos han sido revisados y no te van a dar ningún problema técnico Pero tenemos un problema filosófico detrás de esto la razón por la que ves tantas meme coins y monedas sin ningún tipo de valor allá afuera es porque como pudiste ver cualquiera puede desplegar una en menos de 5 minutos pero hacer esto sin tener idea de por qué despliegas una moneda de cuáles son los tokenomics detrás de ella o siquiera Cuáles son las funciones de cómo esta funciona es extremadamente peligroso y como aquí queremos enseñarte a hacer las cosas de manera correcta vamos a ver cómo implementar un erc 20 donde te voy a enseñar De dónde viene la idea del rc20 Cuáles son las funciones
importantes y Cómo volver a aplicar esta idea de utilizar Open zepeling Pero esta vez entendiendo lo que hacemos desde el inicio Así que si estás preparado para realmente pasar al siguiente nivel y no solamente desplegar meme coins en menos de 5 minutos pero realmente entender cómo funciona una rc20 pues estás en el video correcto estamos por empezar Así que ve a tomar una taza de café y prepárate porque vas a aprender much en este video Okay primero es importante que entendamos Por qué es un rc20 De dónde viene todo esto Pues básicamente cu vitalic buttering creó la red de ethereum permitió a los desarrolladores aportar nuevas cosas a la red básicamente creando eips un eep o eip en inglés son estándares que buscan
especificar posibles mejoras o funcionalidades para el protocolo de etherium permiten a los desarrolladores y miembros de la comunidad proponer nuevas soluciones especificaciones de protocolo modificaciones y características de la red básicamente permitiendo que nuevos desarrolladores creen nuevas características que puedan correr dentro de eto una de esas propuestas fue propuesta por el autor Fabián boger en colaboración con el mismo vitalic butterin y fue la propuesta número 20 de ahí viene el nombre erc20 este nuevo token estándar permitía que las personas puedan crear sus propias criptomonedas que correrían encima de la red de ethereum una criptomoneda muy parecida a bitcoin o el
mismo ether en las especificaciones de eap de la página oficial de ethereum.org puedes ver todas las propuestas que se han hecho algunas han pasado y se han convertido en partes integrales del ecosistema de ethereum y otras han sido descartadas y de hecho si es que tú vas al github oficial de ethereum En la categoría de ercs aquí puedes ver la propuesta hecha en el 2015 sobre este nuevo token con todas sus funcionalidades como todos los Smart contracts corren en la red virtual de ethereum prácticamente tú puedes crear un erc20 utilizando los guidelines que te dejan por aquí ojo como sabrás siempre
utilizo terminología en inglés en estos videos Porque es importante saber ciertos términos Pero si te dificulta mucho leer este eap no olvides que puedes simplemente dar un clic derecho y traducir al español utilizando Google Chrome yo lo voy a dejar en inglés Porque es importante acostumbrarse a eso pero bueno básicamente Cómo crearíamos nosotros nuestro token siguiendo estas especificaciones Pues básicamente solo tendrías que crear un Smart Contract como lo haces cotidianamente Y lo que tendrías que hacer es incluir estas funciones unas funciones que te permiten determinar el nombre el símbolo Cuántos decimales se obtiene Cuál es el total supply total supply viene a ser la cantidad total de tokens que va a tener tu moneda Cuál va a ser los balances de
cada adres y bueno varias funciones diferentes que en conjunto harían que cualquier Smart Contract que tú decidieras tener se convirtiera en efecto en un erc20 Y sí Esto es algo muy interesante porque tú para crear un rc20 No necesariamente tienes que utilizar únicamente estas funciones puedes utilizar las funciones del estándar y Añadir otras funciones que no tienen nada que ver con esto y técnicamente tu Smart Contract sería un rc20 o un token y a la vez Podría tener muchísimas otras funcionalidades encima de él para este tutorial vamos a la mayoría de funciones importantes que conforman un rs20 y las vamos a implementar de manera
manual en nuestro editor de código para lo cual ten seguro de tener instalado visual Studio code en tu sistema y vamos a estar utilizando el framework para Smart Contract development llamado foundry Así que vamos a empezar con la parte de la programación Okay como puedes ver yo estoy aquí en mi terminal me he creado una nueva carpeta para este proyecto y lo que voy a hacer es utilizar Forge init para que foundry me cree el nuevo proyecto que vamos a utilizar si no sabes qué es F y no lo has usado nunca Recuerda que puedes tomar los cursos en sa updraft y ahí tenemos una explicación paso a paso de cómo funciona este framework sin embargo si es que deseas instalarlo para este tutorial puedes ir directamente en tu navegador a f Rebook y aquí obtendrás la
información de instalación en el apartado instal lo único que tendrás que hacer es copiar y pegar este código en tu terminal también en el anterior tutorial que hicimos para este canal te enseño cóm instalar F desde cero entonces puedes empezar por ahí voy a asumir que tú ya tienes esto instalado Así que vamos a continuar como ya creo mi primer proyecto Aquí voy a limpiar mi terminal y simplemente voy a abrir visual Studio code aquí como podrás ver Esto me da una estructura básica de siempre de foundry con un contrato Counter sol pero lo vamos a ignorar totalmente de momento pero nosotros no vamos a estar utilizándolo para lo cual voy a crearme aquí en la carpeta src un nuevo contrato este se va a llamar token manuals básicamente te voy a explicar
cómo podríamos de manera manual implementar el estándar que te he explicado de los rc20 en un Smart Contract como podrás ver aquí en la descripción del eap tenemos varias cosas que este standar debería tener la función para saber cuál es el nombre del token saber cuántos decimales tiene Cuál es el total el supply o la cantidad total de los tokens del balance y bueno cosas que ya te expliqué antes lo que yo voy a hacer aquí es tratar de implementar alguna de estas cosas entonces mira aquí necesitamos tener un evento para transferir un evento para probar básicamente nosotros tenemos que implementar todas estas funcionalidades para que nuestro contrato sea considerado un erc20 en este tutorial yo te voy a
enseñar las funcionalidades para transferir los tokens tanto internamente como externamente como quemar los toques en caso de que ya no sean necesarios y pues algunas de los eventos que va a requerir esto para lo cual lo Primero lo primero y vamos a establecer las funciones básicas de cualquier contrato en solidity Por lo cual lo que yo voy a hacer aquí es crearme la licencia como siempre del mit puede ser cualquier licencia de software libre y voy a estar utilizando la versión de solidity 0.826 que es la más actual a fecha de grabación de este video y aquí voy a establecer mi contrato cont manual token y voy a abrir aquí los llaves básicamente con esto ya tengo
declarado mi contrato y tenemos que transformar este contrato en un rc20 para lo cual vamos a empezar declarando ciertas cosas primero necesitamos determinar primero el nombre del token Cuál va a ser el símbolo es decir los abreviaturas Cuántos decimales va a tener y el total supply que en este caso va a ser la cantidad total de tokens disponible para el protocolo entonces para lo cual voy a crearme algunas funciones que gracias al G Pilot van a aparecer automáticamente aquí entonces mira me creo un String de tipo name un String tipo sambol aquí Quiero un u in 8 y con 18 decimales porque estoy utilizando esto Pues básicamente esto
también es parte del estándar hay algunos ercs que son un poquito extraños o ercs exóticos que se les conoce que no usan 18 decimales pero ethereum o el eer usa 18 18 decimales como estándar así como una gran variedad de tokens Yo te recomiendo que dejes esto en 18 puesto estarías más apegado al estándar y pues me he quado también aquí la variable para determinar el supply total ahora Necesitamos crear una forma de saber cuántos balances existe si revisas el estándar nosotros de aquí decimos que tenemos una función que se llama balance off y esta función debería devolverme los balances de de cada usuario pero no necesito una forma de trackear estos
balances para lo cual me voy a crear por acá un mapping para los balances Así que voy a crearme un mapping que va a ser de un address a un Windows 156 que va a ser balance of básicamente le digo la wallet por ejemplo de José cuántos tokens tiene también me voy a crear un mapping que va a ser para el allowance ya te voy a explicar qué es esto este va a ser un mapping de un mapping básicamente es un mapping de un address que va a otro mapping de un wiin 256 y se va a llamar allowance Mira básicamente si tú eres el creador de este contrato o el dueño de este contrato tú le vas a decir desde mi wallet mi wallet le va a permitir a otra wallet o la wallet de José gastar o
utilizar 10 tokens básicamente la persona que ejecute una función que use este mapping va a decir desde mi wallet o desde la wallet de origen le voy a permitir a otra wallet usar una x cantidad de tokens ahora Necesitamos un constructor en este constructor van a ser las variables que se van a asignar cuando se cree este Smart Contract es decir cada que yo ejecute este Smart Contract O creo una nueva instancia de este Smart Contract voy a necesitar pasarle ciertas cosas en el constructor Entonces le voy a decir constructor y este constructor me va a recibir como parámetros primero un supply inicial es decir cuál es la cantidad inicial de tokens también
me va a recibir como parámetro un nombre y un símbolo el nombre y el símbolo pues lo declaramos acá Entonces le digo por ejemplo este token cuando se cree por primera vez va a tener una cantidad inicial de tokens de 1000 va a tener un nombre x por ejemplo pepcoin y las iniciales van a ser PP o lo que tú deseas Entonces le digo que el total supply es igual al initial supply pero aquí hay un problema qué tal si es que yo en initial supply le digo Oye quiero que existan 1000 Recuerdas que te dije que necesitamos utilizar un estándar de decimales es por eso que cuando yo cree esto le voy a decir que el total supply va a ser igual al initial supply multiplicado por 10 elevado a la
cantidad de decimales entonces básicamente si le pongo que Esto va a ser 1000 va a ser 1000 multiplicado por esto para que me sea 1000 con 18 decimales luego es una práctica común darle al creador del token todos los tokens in esto es una práctica común no es obligatoria básicamente si tú creas este token va a ser tu protocolo va a estar bajo tu eh tutela si tú creas el token Pues es obvio que tú vas a querer tener el control del balance inicial y por eso el balance inicial es asignado a quien crea el contrato podrías hacerlo de manera diferente y no hacer esto en absoluto pero digamos que es básicamente
el estándar y luego Obviamente establecemos que el nombre y el símbolo son los que estamos mandando por aquí como parámetro ahora Necesitamos establecer algunas funciones como podrás ver si volvemos a ver la especificación del eap tenemos funciones muy interesantes y la que a mí me interesa es la función de transfer es decir la habilidad de transferir tokens de una cuenta a otra cuenta la capacidad de aprobar es decir yo como te dije utilizando ese mapping permito que otra wallet use una x cantidad de tokens y también me gustaría tener las funciones para quemar que podemos la tener por acá arriba de hecho Déjenme buscarlo como burn y de hecho no me aparece aquí en la
especificación Pero mira Por ejemplo si es que tú quieres hacer que una vez los tokens sean utilizados para una x transacción esos tokens desde aparezcan para siempre podemos establecer una función que queme dichos tokens y aquí es la parte interesante que te dije si bien es cierto tú necesitas aplicar las funciones básicas de El estándar como podrás ver la espec apicación no me dice nada de una función burn Yo la voy a Añadir manualmente lo que va a hacer que mi rc20 tenga funcionalidades extra de las que tiene la especificación como te dije en última instancia un eap son prácticas y estándares que puedes utilizar para cualquier Smart Contract para que funcione como otra cosa en este
caso estamos creando un Smart Contract llamado manual token cuyas funciones van a hacer que se comporte como un rc20 es estas funciones pueden ser únicamente las especificadas en el estándar o tú puedes Añadir cualquier función que a ti te plasca Entonces como te dije para este tutorial lo que yo quiero hacer es una función para transferencia de toques una función para aprobar los tokens y una función para quemar los tokens Esto va a ser muy sencillo ahora nuevamente basado en las prácticas comunes necesitamos crear necesitamos dividir esta función de transferencia en dos funciones diferentes una función interna
que va a ser ejecutada únicamente o que solo se puede llamar desde el contrato y una función externa o pública la verdad que se puede llamar desde fuera del contrato y que puede llamar cualquier wallet address lo vas a entender en un instante entonces Bueno vamos a empezar con esa función la función transfer para lo cual voy a decirle function gu baj transfer las funciones internas suelen empezar con gu bajo le voy a decir Oye quiero que me permitas transferir desde una cuenta hacia otra cuenta entonces le digo address from a address to y obviamente quiero decirle Cuál es la cantidad de tokens que quiero estar enviando esta función como te dije va a ser una función interna Por eso uso la
palabra clave internal y abro aquí las llaves no estoy dejando que el auto completado funcione porque quiero explicarte algunas cosas aquí Entonces primero tengo que hacer algunas verificaciones la primera verificación es que no estoy en en and a una dirección inválida por ejemplo si quiero enviar desde la cuenta x a una cuenta que no existe Pues eso sería un problema Por lo cual voy a Añadir un require que me diga Oye la función a la la función el adrees al que estoy enviando no debe ser un adrees cero sino que tiene que ser una dirección correcta y si es que es elre cero le decir Oye la transferencia es una a una dirección inválida también voy a revisar que hay un saldo suficiente si es que la wallet tiene solamente 100 tokens y yo quiero
transferir 150 pues no debería a permitirme de hacer eso Por lo cual le voy a decir requiérase envía sea igual o mayor al valor que se está enviando recordarás este balance of es el mapping que creamos acá solamente para relacionar cuántos tokens tiene cada address Y por último voy a hacer un último require que va a ser para detect arme overflows esto te va a sonar un poco extraño te estoy diciendo requiérase valor que le esté igualando al que le estoy enviando sea igual o mayor al balance al que se está enviando Okay Okay Déjame explicarte aquí una cosa suponte que si es que la walled a
la que le envío tiene 100 tokens y yo le quiero enviar 50 tokens en última instancia el balance Debería ser 150 tokens esto es obvio verdad Entonces por qué tengo que detectar esto pues sabrás Que solidity Tiene ciertas limitaciones y los u 256 tienen un valor máximo que va de 0 hasta 2 elevado a 256 men Un entonces supongamos que yo le quiero enviar a una address que tiene una cantidad excesiva de tokens en el punto en el que yo le envíe más tokens de los que este uin 256 puede permitir como máximo este valor va
a pasar de ser positivo a negativo y queremos obviamente evitar eso queremos saber que siempre que les mande to tokens de una cuenta a otra Estos tokens sí que se están sumando porque en el caso de que tenga un overflow es decir que llegue a la capacidad máxima del uin 256 Esto me va a dar un negativo esta comprobación es un poco innecesaria hoy en día porque las últimas versiones de solidity vienen ya con una librería llamada safe mat pero esta era una práctica muy común antes de estas versiones y también solamente por tenerlo en cuenta quería ponerla aquí ahora Necesitamos tener un registro de los balances previos es decir voy crearme un uin 256 llamado previous balances y voy a decirle Okay súmame el balance de la cuenta desde la cual se
envía al balance de la cuenta a la que estoy enviando básicamente si es que la cuenta un tiene 50 tokens y la cuenta dos tiene 30 tokens en total esta suma me debería dar 80 tokens este balance o esta suma previa la vamos a utilizar al final de esta de esta función ya vas a entender por qué ahora necesito restar esos balances Por lo cual el balance de la cuenta de la que estoy enviando hay que restarle el valor que se está enviando y el balance Uy creo que me salté un poco Disculpa acá y el balance de la cuenta a la que se está enviando tiene que ser sumado básicamente solo le
digo Oye de la cuenta de la que estoy enviando rstan el valor y de la cuenta a la que estoy enviando súmame el valor así de sencillo por último por buena costumbre nosotros deberíamos amos emitir un evento de que los tokens se han transferido pero este evento no existe y aquí nuevamente es es 100% necesario este evento la respuesta técnica es No pero si ya estás siguiendo un estándar podrás ver que aquí en el estándar tienes algunas funciones Y tenemos un evento llamado transfer que determina Oye los tokens han sido enviados Entonces vamos a seguir ese estándar Vale entonces básicamente lo que yo voy a hacer es literalmente copiar y pegar este evento entonces voy a copiarlo desde la página origen voy a
volver a mi visual Studio code y aquí arriba bajando a los mappings voy a decirle Oye créame unos eventos acá y voy a pegar este evento entonces una vez dos tokens han sido enviados correctamente voy a decirle emit y que me ejecute esto este emit o este transfer Perdón va a tener enviar la wallet desde la que se envía Hacia dónde se está enviando y el valor que Se está enviando Y por último para demostrar que esto está funcionando correctamente vamos a crear un acert que de hecho va a verificar utilizando este previous balance básicamente le voy a decir Oye asegúrate de que el balance final sea igual al balance previo Cómo esto
funciona Pues mira como te había dicho si es que la cuenta uno tiene 50 tokens y la cuenta dos tiene 30 tokens supongamos que la cuenta uno le envía a la cuenta dos 10 tokens entonces la cuenta uno va a tener 40 tokens y la cuenta dos va a tener también 40 tokens a la final la suma de estos tokens va a seguir siendo 80 ya que estamos transfiriendo el balance de una cuenta a otra el balance final de ambas cuentas siempre Debería ser el mismo independientemente de cuánto se transfiera la una a la otra Esta es una forma muy fácil de picar que se están haciendo las cosas de manera correcto y
podrás utilizar este tipo de asserts cuando estés haciendo análisis esttico y buscando Books en tu código ahora ya tenemos esta función interna como te dije que va a ser la que sea ejecutada por el Smart Contract y ahora vamos a crear la función pública que puede ejecutar cualquiera en esta función pública no vamos a necesitar enviar la eh dirección from y es la razón principal es porque como cualquiera puede enviar esta transacción entonces obviamente quien envía la transacción va a ser el from o desde dónde se envía Entonces le voy a decir mira créame una nueva función que se llame transfer vas a decirme A qué wallet quieres transferir esos tokens y Cuál es el valor que quieres transferir y aquí
Únicamente lo que voy a hacer es utilizar esta función interna para decirle Oye el que envía o el from es este message sender le estoy enviando a otra wallet y le estoy mandando esta cantidad obviamente no necesito emitir un nuevo evento porque la función interna Ya me emite el evento que necesito vale ya tenemos esta primera parte Esto está bastante bien Ahora vamos a crear otra sección para nuestro Smart Contract que es la capacidad de aprobar los tokens para eso vamos a estar utilizando el mapping que te había enseñado por acá arriba que era el de un address a otro mapping de un address a un Win 256 básicamente como dije es una
wallet permitiendo a otra wallet gastar o utilizar x cantidad de tokens Entonces vamos a decir función approve vamos a mandarle como parámetro un address que va a ser el spender el valor que le estamos permitiendo y lo que sería aquí es decirle Oye a este mapping the allowance vas a añadirle lo siguiente quien envía el mensaje le está permitiendo a la address spender gastar o utilizar este valor al igual que en el estándar Tenemos aquí un nuevo evento llamado aproval Pues yo también voy a copiar este evento y a mi visual Studio code y Añadir esto en la sección de mis eventos y me falta el punto y coma por acá por lo tanto Aquí voy a decirle Oye emífero
y por último voy a crear una nueva función para quemar los tokens como te dije esta función no está en el estándar o no está especificada en el estándar pero lo vamos a crear De todas formas porque nosotros vamos a estar utilizando Entonces le voy a decir function burn Esto me va a requerir un valor un window 156 de cuánto es el valor que voy a quemar esta Va a ser una función pública y va a retornar un buano que se va a llamar success aquí nuevamente voy a Añadir una verificación y esta verificación básicamente es para que el remitente tiene suficientes tokens es decir si quiero quemar 20 tokens debo
Tener suficiente balance para poder quemarlos de otra manera no debería permitirme hacer esto bajo ninguna circunstancia y para quemar los tokens es tan sencillo como restar el valor Entonces le voy a decir actualízame el mapping del balance of y réstale el valor de tokens que quieren ser quemados y además también vas a restarle al total supply o a la cantidad total de tokens el valor esto es hace para que básicamente los tokens no vuelvan a entrar en circulación y pues sean totalmente eliminados del protocolo para siempre y voy a emitir un nuevo evento de quemado o sea entonces voy a decir emit burn vamos voy a mandar Quiénes Quién es el que está quemando y Cuál es el valor que ha sido quemado y voy a retornar true como sabrás me está dando un error porque yo no he creado este
evento para quemar los tokens entonces así como dicen transfer y approval voy a decirle Oye creamos un nuevo evento para quemar tokens que va a tomar como parámetro la address de la cual se está quemando y Cuál es el valor y así de simple tener tenemos todos los funciones básicas de este Smart contr control y es aquí donde las cosas se ponen interesantes como pudiste ver establecimos tres funciones básicas la primera para transferir los tokens la segunda para probar que una wallet x pueda comerciar con dichos tokens y la habilidad de quemar esos tokens para que sean eliminados por completo de la cantidad total de tokens estas tres funciones hacen que técnicamente nuestro contrato ya sea un rc20 ya sea un token
que puedes desplegar y puedes comercial con él pero le faltan bastantes cosas no crees básicamente le faltan casos específicos donde se necesite quemar el token en ciertas condiciones otras funciones para determinar diferentes formas de transferir el token y bueno básicamente muchas otras funcionalidades que podrían estar faltando es aquí donde nosotros utilizamos estándares como el de Open zepeling como pudiste ver al inicio de este video El wizard de Open zepelin te ofrece bastantes cosas como por ejemplo hacer que el token sea mintable es decir que puedas crear nuevas unidades de ese token que el token sea quemable que es como la función que acabamos de crear la que sea
pausable que puedas pausar ese token para que no pueda ser utilizado y puedas Añadir varias cosas como por ejemplo que se puede utilizar para hacer votos En caso de que tengas una da o decentralized autonomous organization que puedas establecer roles para que ciertas personas puedan hacer x y o z en el contrato para que puedas hacer uso de upgradable smart contracts o Smart contracts que se pueden actualizar y como puedes ver puedes Añadir montones de cosas más es aquí entonces donde el uso de estas herramientas cobra muchísimo más sentido porque no estás de manera mindless simplemente cogiendo abriendo el wizard copiando lo primero que te sale yendo a remix y desplegando sino que cada función que vas a Añadir a tu Smart Contract va a tener un motivo
en este caso yo te enseñé tres funciones básicas para a probar transferir y quemar los tokens pero la verdad puedes Añadir cualquier otro tipo de funcionalidad técnicamente puedes hacer esto totalmente de manera manual Pero por eso como te dije utilizamos estándares como el estándar de Open zepeling que nos permite todos estos contratos y utilizarlos de manera efectiva en nuestro ciclo de desarrollo Te voy a enseñar Cuál es la diferencia de crear un token rc20 que va a tener las funciones que te acabo de mostrar Y muchísimas más y y lo fácil que es hacerlo con Open zepeling para lo cual Permíteme volver a compartir mi pantalla y vamos a ir a nuestro a nuestra terminal primero es lo primero y es que
como vamos a estar utilizando Open zepeling necesitamos instalar eso en nuestro proyecto Entonces le voy a decir Forge install open zepeling sl open zepeling gu contracts y el no commit este no commit es muy importante porque si no vamos a tener problemas con foundry que ya de por sí viene con una versión de git instalada entonces voy a darle enter y esto debe sería instalarme Open zepeling Cómo sé yo de Dónde conseguir esto O sea si es que yo le digo Open zepeling por estoy utilizando Slash Open seeling guion contracts es muy sencillo Y esto te va a servir mucho cuando ests instalando cualquier paquete por ejemplo si es que yo vuelvo a mi navegador por aquí y digo en una nueva pestaña Open cepelin contracts y le digo github dejame abrir esto podrás ver que
si Yo abro el github oficial obtengo esto open zepelin Open seeling gu Contract entonces básicamente esta misma estructura de nombre sl repositorio es el que tú tienes que estar utilizando cuando instales estos paquetes Aquí también tiene en consideración que yo estoy instalando la versión última que por default en este caso es la 5.02 si yo quisiera instalar una versión específica utilizaría exactamente el mismo Comando pero pondría aquí una ara Y especificara qué versión quiero utilizar vale en este caso como ya tengo instaladas las dependencias Open seeling en mi proyecto puede volver a mi editor de código ir a foundry Tel y aquí establecer unos remapping básicamente la
razón es porque si es que yo empiezo a utilizar esto en mis Smart contracts el editor de código se va a quedar un poco choo y no va a ser capaz de reconocer que tengo estas librerías instaladas Entonces le voy a decir remapping va a ser igual a @open zepelin lo vas a obtener de la carpeta lip Open seping contracts que es las que tengo por acá voy a guardar esto y voy a crear cre ar un nuevo Smart Contract aquí que se va a llamar nuestro token punos en este nuestro token vas a ver lo fácil que va a ser implementar este estándar de rc20 que de hecho va a tener muchas más funciones de las que yo te mostré entonces voy a nuevamente establecer la licencia y la versión de solidity en
este caso la 0.8.26 y aquí es donde tengo que importar Entonces le voy a decir Oye desde y aquí le voy a decir Open zepelin sl Contract sl token sl rc20 y el rc20 sol nuevamente Cómo sé yo de dónde importar esto aquí es una cosa muy importante si tú vas al github podrás ver que vas a la carpeta contratos por acá carpeta token que es la que tengo por acá rc20 y aquí tienes el rc20 pun sol que es de donde estoy importando ahora tú podrás ver que opening te da una variedad increíble de diferentes tokens RS 721 para nfts RS 11155 para otros tipos de nfts que este
se le conoce como el multi token y una cosa interesante es que una vez entiendas cómo funciona todo esto tú vas a saber qué cosas quieres y no quieres importar podrás observar que Si volvemos al wizard cuando yo empecé a Añadir aquí características me empezó a Añadir importes la cantidad de importes que tú vas a utilizar va a depender de tu uso de caso específico volvamos al código Mientras tanto y todo va a cobrar coherencia en unos minutos Entonces le voy a decir Contract nuestro token es un rs20 ya que estoy heredando de aquí voy a utilizar el constructor el constructor va a requerir un initial supply le voy a decir que nuestro token se va a llamar nuestro token con unas siglas ent y que me mint a el message do sender el supply
inicial es básicamente lo que estamos diciendo acá Sabes en nuestro constructor de de nuestro token manual le dijimos Oye cuando tú uses el constructor o cuando el Smart Contract sea desplegado mándale el initial supply al message d sender y es básicamente lo que estamos haciendo aquí miname al message d sender el initial supply y así de simple con tan solo 10 líneas de código ya está Eso es todo lo que necesitas para crear es un rc20 de manera básica y aquí pues utilizamos bastante más y aquí es donde tú me vas a decir Oye vale Pero si a la larga estamos haciendo lo que hicimos exactamente al inicio del video que simplemente un estándar copiar pegar y ya está Entonces qué sentido tiene que hayamos creado un token de
manera manual y aquí es donde viene la parte importante del asunto como te dije cuando tú uses un estándar como pepelin lo que puedes hacer es ir directamente Pues a lo que viene a ser el github de el proyecto y aquí en extensiones y inutilidades puedes tener montones de funcionalidades extra todas estas funcional idades extra la puedes implementar de manera manual por ti mismo lo que hace el estándar es proveerte esas herramientas entonces Estarás de acuerdo conmigo en que hay una gran diferencia entre entender las funciones de tu Smart Contract saber por qué la estás implementando a simplemente ir a un wizard todas las funciones
copiarlas en remix y desplegar verdad Porque por ejemplo déjame mostrarte algo específico aquí si es que yo estuviera utilizando una decentralized autonomous organization o una dao probablemente yo quisiera utilizar las capacidades para que ese rc20 pueda ser utilizado como mecanismo de Voto o para que la gente pueda votar utilizando eso para lo cual vendría las extensiones y utilizaría este rc20 Bots y utilizaría las funciones que aquí me proveen Para yo poder ese token y utilizarlo como parte de los Smart Contract que estoy utilizando pues para mi da y así esta misma lógica se puede aplicar Pues a absolutamente todo ahora si bien es
cierto estamos utilizando el estándar es decir las funciones predeterminadas de Open zepeling no podemos solamente confiarnos y quedarnos ahí porque a la mínima que crees una función extra que no está contemplada en el estándar Eso quiere decir que tu Smart Contract ya tiene funcionalidades que no fueron auditadas ni testeadas previamente y aquí viene la parte más importante en lugar de solamente copiar y pegar el código de un wizard y desplegarlo tenemos que probar que este código funciona para lo cual te voy a enseñar Cómo crear una prueba básica y el resto va a ser un reto para ti para que crees más funciones que prueben que el Smart Contract está funcionando como debe Por
supuesto en la descripción del video vas a tener el link completo del proyecto con todas las pruebas ya implementadas y todas me refiero a realmente no muchas porque hay muchas más que podría implementar pero si es que tú quieres asumir el reto pues después de que creemos la primera prueba las demás van a ser un reto personal para ti vamos a ello para lograr esto primero necesitamos crear un Script que nos permita desplegar este token o nuestro token y este Script va a ser muy sencillo Y si te has desplegado scripts o has desplegado contratos utilizando fondry este proceso no debería sorprenderte entonces me voy a crear un nuevo Script que va se va a llamar deploy nuestr token.sol y aquí voy a poner las cosas básicas de
todo lo que necesitamos Entonces como siempre voy a establecer la licencia la versión de solidity que es la 26 por acá y voy a importar Script y consola 2 esto viene de la librería estándar para testing de foundry y obviamente voy a importar nuestro token que es el token que acabamos de crear y aquí de hecho Solamente voy a copiar y pegar de un despliegue anterior que ya hice lo que estoy diciendo es Oye creame un Script para desplegar nuestro token este Script va a tener un initial supply de un millón de ethereum bmst broadcast creo una nueva instancia del token le mando el initial supply BM stop broadcast y
luego Retorno a la dirección del Tok y así de sencillo tengo un deployment Script para esto voy a hacer un pequeño inciso aquí y es que ya estoy asumiendo que has usado fondry antes y entiendes las bases de Cómo despegar un Smart Contract si estás completamente perdido aquí y dices Oye no tengo idea de lo que estás haciendo Recuerda que puedes ir a cin obra tomar los cursos de cero experto donde te explicamos todo paso por paso y con ojo de detalles sí es cierto los cursos de momento están únicamente en inglés tenemos un buen sistema de subtítulos Pero si te gustaría ver ese contenido traducido a tu idioma No olvides darle apoyo a este video suscribiéndote y darle like porque de esa forma podremos traerte más contenido en español Sobre desarrollo de blockchain acabando este eso podemos
continuar entonces una vez tenga este deployment Script que es bastante básico ya puedo hacer lo que a mí me interesa que es crear mis pruebas entonces voy a crearme un nuevo Script para pruebas que se va a llamar muestr token punt sol y aquí voy a establecer mi primera prueba Entonces como siempre establezco la licencia y la versión de solidity esto ya es estándar y ahora vamos a importar las cosas importo nuevamente las funciones de testeo desde la librería estándar de Found y importo nuestro token e importo el deploy deployment Script que Acabo de crear ahora voy a decirle que me cree un contrato llamado
nuestro token test este contrato va a ser un contrato de tipo test porque estamos utilizando librería estándar y aquí le voy a decir Oye declaremos el token Entonces le digo nuestro token va a ser igual a nuestro token punto y coma vamos a crear una instancia del Script de despliegue entonces deploy nuestro token va a ser igual a deploy nuestro token pero en este caso voy a utilizar más bien la palabra deployer que va a ser el Script que va a desplegar este Smart Contract vamos a decirle address public y el deployer address que va a ser la cuenta o la wallet address que va a desplegar este Smart Contract
en nuestra prueba y vamos a crear dos address una que se va a llamar user 1 y otra address que se va a llamar user 2 ahora necesito una función Setup las funciones Setup son funciones que se van a ejecutar el 100% de las veces al inicio antes de cualquier otra prueba Entonces voy a decirle function Setup va a ser una función pública y voy a abrir las llaves por aquí y le voy a decir primero el deployer va a ser una nueva instancia de este deploy nuestro token y nuestro token va a ser una nueva instancia de nuestro token y aquí recordarás que nuestro token requiere un initial supply este initial supply yo no lo he declarado Entonces vamos a declarar Por
lo cual aquí arriba al inicio de todo le voy a decir Oye el initial supply va a ser igual 1000 eers que es un que va a ser un millón de hs Entonces le digo créame una nueva instancia de nuestro token con el initial supply que te pasé acá arriba ahora como el deployer el contrato que va a crear el token va a ser Va a ser deploy nuestro token todos los tokens van a ser enviados a este Smart Contract que es del deployer pero yo quiero tener el control de esos Smart contracts Entonces le voy a decir nuestro token pun transfer no al address dis sino más bien al message sender es el que está enviando la transacción o la
wet que envía esa transacción Envíale el initial supply recordarás que aquí en nuestro token el initial supply se envía al message d sender sin embargo el message d sender va a ser este contrato deploy y no la wallet address es por eso que es importante que le enviemos esos assets a la wallet verdadera o a la wallet que está ejecutando las transacciones para empezar Aquí voy a crear dos wallets Entonces le voy a decir user 1 va a ser igual a make address y va a ser la primera wallet y la user 2 va a ser igual a make address user 2 y aquí me estoy poniendo una aem más y con eso ya lo tenemos como siempre
en los test de foundry vamos a utilizar un BM prank que es como para fingir que tenemos una transacción o algo ejecutándose en tiempo real Entonces le digo message d sender punto y coma por acá y por último le voy a decir Oye transfiéreme de nuestro token transfiéreme al usuario 1 100 ethereum y con esto Esta función Setup se va a ejecutar al inicio de todas las pruebas que vamos a estar utilizando y voy a crear las primeras dos pruebas la primera prueba va a ser una función que va va a probar que el initial supply esté siendo bien utilizado entonces test initial supply va a ser una prueba de tipo pública y va a ser de tipo View de
hecho Entonces le voy a decir asegúrate que el total supply al inicio de la prueba es igual al initial Supply recordemos que yo le estoy mandando como inicio supply 1 millón de hs Entonces esta prueba debería funcionar de manera correcta déjame guardar todo ir a mi terminal limpiar esto por acá le voy a decir porge test y estas pruebas deberían correr sin ningún problema y como puedes ver acaba de pasar todas las pruebas incluyendo las de El Counter pun sol que es las que vienen por defecto pero que yo ni siquiera estuve topando para empezar y así de sencillo tenemos las primeras pruebas ahora bien hay varias formas de crear más pruebas con
esto la primera sería ir una por una por todas las funciones especificadas en el estándar en este caso lo que tendrías que hacer es Volver al github de Open zepelin volver acá a la parte de tokens ir al rc20 pun sol y Ver todas las funciones que tienes por acá y crear una prueba individual para cada una de estas funciones te recomiendo de hecho más bien revisar en la interfaz porque en la interfaz Tienes todas las funciones sin implementación Entonces es más fácil probar esto por ejemplo una función o una prueba para ver si es que sí se puede ejecutar correctamente el allowance que te había explicado antes una prueba para demostrar que se puede
ejecutar en laof de manera correcta y así sucesivamente como te había contado el reto para ti A partir de ahora es que crees estas pruebas y te asegures de que cada función funciona como debería funcionar ahora creo que la perspectiva ha cambiado bastante verdad desde un wizard que ni siquiera entendemos utilizarlo en remix y desplegar nuestro token y quedarnos tan panchos a Okay tengo un protocolo mi protocolo necesita tener un token y este token necesita ciertas características tengo dos opciones la primera crear todas las funcionalidades desde cero Cómo hago eso pues voy hacia las páginas oficiales de los standars veo qué opciones me
requieren estos estándares para que mi token o para que mi contrato sea considerado en este caso un erc20 y lo implemento o la función o la forma más fácil que es ahora sí utilizando un wizard como opening o utilizando los contratos de Open seeling pero específicamente decidiendo Okay mi protocolo necesita Esto entonces voy a aplicar esto y esto y esto entendiendo por qué lo aplicas Y por último y más importante no solamente plegando tu Smart Contract sino que creando pruebas para cada una de las funciones sí es cierto en este tutorial me salté bastantes cosas porque de hacerlo paso por paso sería un video de 3 horas o
inclusive cuatro y el objetivo es hacerlo de la manera más dinámica y que tengas una Clara perspectiva de cómo desplegar un rc20 o tu primer rc20 pero hacerlo con cabeza y hacerlo Sabiendo Por qué implementas cada función quiero recordarte y espero que no me parezca spam que si quieres aprender todos estos conceptos desde cero desarrollo de contratos inteligentes fondry los principios de los drcs y otras cosas más vayas y cheques s in updraft ahí tenemos una variedad increíble de cursos para que vayas de cero a experto Y si te gustaría que sus cursos estén en español No olvides darle apoyo a este video porque va a ser la única forma en que nosotros sabremos que el contenido te
está gustando y que debemos crear más de eso para ti con eso dicho dicho te agradezco mucho por haberme acompañado en este video y espero lo hayas disfrutado hasta la próxima