 Me llamo Carlos Sánchez, yo soy desarrollador desde hace muchos años de software pero no fue hasta aunque llevo como en Ethereum como cuatro o cinco años como usuario, no fue este año pasado que me puse en serie con el tema del desarrollo. Os dejo también ahí mis redes, github y twitter, os aviso que, bueno, soy bastante más activo en github. El resumen de lo que vamos a ver hoy, lo que os voy a contar son estas, lo he vivido en tres pasos y el primero es Scaffolding. Esto es una herramienta que usamos en Billgild, la hemos creado nosotros y es una herramienta que te soluciona todo el programa de tooling y te sigue para prototipar muy rápido tu aplicación. Luego pasaremos a Spidermicerium que ya es como una plataforma para superar una serie de retos y es para ampliar conocimientos, ya son cosas más avanzadas. Y el último paso es Billgild que es la comunidad sala que yo pertenezco, que luego os contaré más y creo que es el sitio perfecto para ya seguir colaborando en el co-sistema y conociendo a gente de más con tus mismos intereses. Veis que arriba pongo lo de aprender construyendo, con eso me refiero que siempre se ha dicho que hay distintas maneras de aprender las cosas, hay gente que dice que aprende de forma más visual, gente que aprende de forma más teórica, pero yo creo que cuando realmente se aprende y cuando realmente se interna los conocimientos, cuando te pones a hacer, cuando te manchas las manos. Entonces, todos estos tres pasos están basados en lo mismo, tienen como un denominador que es desde el minuto uno te estás haciendo algo, estás programando. Y sí, es verdad que al principio puede ser un poco incómodo, habrá un montón de vacíos que tengáis en la cabeza de conocimiento que no sepáis, pero si seguís os aseguro que esos vacíos se van rellenando. Por supuesto, esta es la única manera de aprender o de lanzarte dentro del mundo y Sirium, pero es la manera que me ha funcionado a mí y a cientos de personas que veo que pasan por estos tres pasos. Lo primero, paso uno, es Scaffolder. Como os decía, Scaffolder es una herramienta de software libre, por supuesto gratuita para todo el mundo, que podéis descargar en vuestro ordenador, instalar y te da todo lo que necesitas y eso incluso más para crear una aplicación completa en Sirium. Y está muy bien, porque bueno, si venís por ejemplo del ecosistema de JavaScript, sabéis que bueno, al final lo que es el tooling, el setup del proyecto, a veces es un poco complejo y tú tienes, tú sabes programar en JavaScript, pero claro, hasta que montas todo el entorno, pues te cuesta, ¿no? Y con Scaffolder, lo que hacemos es montar, digamos, toda la estructura que necesitas y la conectamos, ¿no?, el cableado llegamos interno y entonces no te tienes que preocupar de ciertas cosas. Una manera de aprender también es una vez que todo, que sepa, digamos manejar los comandos y que usas la magia de Scaffolder, es ya bucear en el código y así también podéis ver cómo funciona internamente. El stack actualmente de la versión 1 es en hardhat para la parte Smart Contract Consolidative y en la parte de Front, está usando React, con Cries React App. También usamos Iter.js, que es para la comunicación con estos Smart Contracts. Pongo a lo de versión 1, porque actualmente estamos trabajando en la versión 2, que bueno, va a ser con un stack un poco más moderno, va a usar Next.js, que parece que está dando bastante terreno y vamos a dejar elegir en la parte de Smart Contracts entre hardhat y Foundry, que Foundry también está dando, parece que la gente prefiera la Foundry, pero bueno, dejaremos las dos opciones. Esto va bien desarrollo, pero bueno, lo dejo ahí para que estéis atentos por si queréis probarlo también. Entonces, bueno, voy a aplicar lo que acabo de decir en la diapositiva anterior, de ser práctico y no tan teórico y nos vamos a llamarnos a la obra y os voy a enseñar un poco cómo funciona Scaffolis. Scaffolis lo podéis encontrar, si busquéis Scaffolis en Google, es lo primero que va a salir. Una cosa que no he dicho, perdón, al final de la presentación voy a dejar un QR que podéis escanear con los enlaces a todo lo que estoy diciendo, tanto a las diapositivas como a Scaffolis y a todo. Lo digo por si no queréis tomar notas, eso es, así sí que deis, pero bueno, Scaffolis, buscáis en Google lo primero que os sale, pues el típico repositorio que tenéis que clonar, necesitaréis no de YAR que usamos y, bueno, élito. Esta primera parte ya lo he hecho, además que no está funcionando muy bien internet aquí hoy, o sea que bueno, me alegro de haberlo hecho antes, pero bueno, clonéis el repositorio, entres en la carpeta y ya insta de las dependencias. Esto suele tomar un rato y más si el internet no va muy bien. Así que bueno, eso ya lo he hecho con antelación. Entonces, bueno, como ya tenemos todo las dependencias instaladas, vamos a empezar, vamos a lanzar Scaffolis y para esto se lanzan los tres comandos mágicos. El primero es YAR Chain, esto es simplemente de YAR, YAR es como NPM en otros gestos de paquetes y esto va a lanzar simplemente un comando que está definido en el Package JSON. El YAR Chain lo que va a hacer es iniciar un nodo de hardhat local, básicamente como un blockchain local y un servidor RPC para que nos podamos comunicar con esa blockchain local. Cuando estamos desarrollando, evidentemente queremos probar con algo de prueba, de local, porque no queremos gastar, ni aunque sea una testnet, no queremos tener que queremos que sea rápido y que podamos en plan quitarlo y volverlo a poner sin ningún problema. Lo segundo que vamos a hacer, el segundo comando es YAN Start. Esto es simplemente lanzar el front, es lanzar el riot, vamos a dejar aquí que dar a veces un poquillo. Y el tercero, el que más vamos a estar usando es YAR Deploy. Así, sin ningún parámetro ni nada, lo que hace es deployar el contrato que viene de prueba digamos el contrato o la mundo de Scaffolis en la red local. De hecho, ahora vais a ver que en cuanto le demos en la de arriba a la izquierda, en la blockchain local que tenemos, no nuestro nodo se ve como sea, como sea, vamos a mirarlo aquí, seguimos un poquito y veis aquí cómo se ha deployado el contrato, la información de la transacción, la dirección y demás. Bueno, el front ya ha cargado, pero bueno, voy a enseñar primero la estructura de carpetas. Ahora estoy hasta corriendo, las dos pestañas de arriba, las dos terminales de arriba, eso va a ser fijo, va a ser el blockchain que va a ser el corriendo hasta que lo paremos y el front end. Y la bajo, bueno, la vamos a tener para seguir deployando contratos. Esto es como se ve Scaffolis en cuanto lo cargáis, no es lo más bonito del mundo, lo reconozco, pero bueno, aquí ten en cuenta que podéis luego poner el UI que queráis. Tiene mucha cosa, nos preocupéis que vamos irendo más o menos lo más significativo para que luego ya podáis con eso ir tirando a vosotros. La función legma que me gusta a mí de Scaffolis es este componente que hemos creado aquí de contrato. Esto lo que hace es se adapta de forma automática con los contratos que deployéis en la blockchain local. Entonces, os voy a enseñar primero el contrato. Bueno, un poco la estructura de carpetas también aquí que os he dicho. Vale, esto es la estructura de carpetas donde más vamos a estar va a ser en la carpeta de pagalles y sobre todo en Star 2, en hardhat para la parte de smart contract y en react app para la parte del front. Luego aquí hay otros servicios un poco más avanzados que bueno no creo que veamos hoy, pero que sepáis que también están disponibles. El contrato, lo podéis encontrar en la carpeta de hardhat, contracts y vais a ver este contrato Hola Mundo que os decía. Es un contrato muy sencillito, tiene una variable propósito con un valor por defecto, un declaración de un evento, un constructor vacío y luego una función que simplemente lo que hace es cambiar ese propósito. Cuando llamemos desde nuestro frontend a set propos le basaremos un nuevo propósito y simplemente lo que estamos haciendo es cambiarlo y bueno emitir el evento. Entonces veis que esto es justo lo que está viendo aquí en el front y esto se pasa de manera automática. ¿Cómo pasa esto? No sé si sabéis cuando compiláis un contrato de solidity, se generan varios archivos y uno de ellos es el código ABI del contrato, el ABI, que esto no es más que un fichero JSON, que es la especificación de ese contrato. Está diciendo vale, tenemos una variable que se tiene que ser mayor contract, una variable que se llama propósito y una función que se llama setPropos con un parámetro. Entonces ahora este componente lo que hace es leer ese ABI y demontar este smart contract, o sea ver este front con todo lo necesario. Entonces por ejemplo ahora podríamos intentar decir vale vamos a poner un nuevo propósito que se llame hola y vamos a mandarlo a ver qué pasa. Vale, no funciona, ¿por qué? Porque no tenemos dinero. Decís vale, no sé si habéis fijado cuando he cargado la página que es el aquí con un wallet conectado ¿verdad? Tenéis aquí el el connect y yo podría aquí conectar ni MetaMask, pero claro esto para desarrollo local no es muy ágil, ¿por qué? Porque si ahora por ejemplo conecto a mi MetaMask y tengo digamos id local podría mandar esto, pero claro me mandaría, me habría mi MetaMask, tendría que darle a confirmar, bla, bla, bla, eso no lo queremos para desarrollo local. Entonces en Scapolis hemos desarrollado lo que llamamos Barnard Wallets como monederos desechables y son unos monederos, es un wallet que se crea en memoria, de hecho si vemos aquí la aplicación aquí vamos a ver, nos asustéis, esto es una clave privada pero esto lo voy a borrar luego, o sea que no pasa nada, pero esto es una clave privada que se ha generado de forma random en el front para tener digamos un barrio cual es ya conectado, entonces podamos mandar transacciones al momento, siendo que el navegador ya tiene nuestro wallet, nuestra clave privada, no necesitamos a MetaMask para confirmar en una transacción. Entonces fijaos que acaba en 71C para que veáis cómo funciona, si ahora yo borro este local storage, ahora recargaría y en vez de 71C pues me va a salir otra vez, este es 8C, también lo podéis probar si vais por ejemplo a otra una pestaña de incógnito, veréis que aquí crea otro, están acabando todos en C, no sé qué pasa, está una conspiración, esto está muy bien, lo de tener varios wallet porque puedes abrir distintos navegadores o distintas pestañas de incógnito y podéis interactuar con el smart contract como distintas identidades, es una de decir pues mira este es el administrador, este es un usuario y bueno está muy bien porque es muy rápido y no hay que firmar nada, vamos a verlo en acción, no tenemos nada de dinero, también es que folis trae otra cosa que es una Faset local, podemos darle aquí, esto nos manda una transacción y se debe de actualizar, nos ha mandado como 0,01, si queremos más podemos copiar nuestra dirección y podríamos ir aquí, aquí abajo podéis ver que está como el valor de id actual, el valor del gas y demás, también tenemos aquí una Faset más digamos con todo este dinero de hardhat y entonces podemos pasar nuestra dirección aquí, poner pues queremos a ver, queremos dos y nos lo mandamos, entonces esto nos va a mandar, ya tenemos aquí dinero disponible, dinero por supuesto no real, ojalá no, fuera así de fácil, pero este es dinero sólo para la red de hardhat, de hecho si la pestaña de yarnchain que hemos ejecutado, si ahora yo la cerraré, esto se perdería, porque cada vez que lo reseteamos todo se inicia de nuevo, entonces bueno ahora ya sabes lo que son los Barnet Wallet, tenemos ya dinero, al allá, esto en principio debería funcionar, vamos a ver, hola DevCon, mandamos y habéis visto que automáticamente ya la variable de ese contrato ha cambiado, vale, porque me gusta tanto este componente, porque ahora podemos venir al Smart Contract y decir, vamos a hacer algún cambio, vamos a hacer un cambio chorras, a ver que se abre ejemplo, vamos a definir un entero, que se llame público, que se llame contador, ¿no? y ahora vamos a hacer que cuando alguien llame esta función, el contador se incremente en uno, ahora vamos, como el contrato ha cambiado, un contato no se puede editar, una vez que está deployado, ahí es ¿no? ahí queda, entonces ahora vamos a volver aquí y vamos a hacer un yard deploy, a veces puede fallar esto, se puede hacer reset, el reset digamos lo que hace es borrar las carpetas de los archivos compilados y lo vuelve a ejecutar, entonces bueno, ahora venimos aquí y veis que automáticamente, sin yo tocar nada, se ha reseteado y se ha adaptado el frontend a nuestro Smart Contract, ahora podemos probar aquí ¿no? hola, ahora mando la transacción y el contador debe ya aumentar, esto bueno, no sé qué es para mí, me parece maravilloso la verdad, porque bueno, es una manera como de jugar con el Smart Contract de forma muy sencilla y no solo pues como en plataformas como Remix y Poright, que puedes jugar también, compilar y probar, pero no te da esta facilidad de este frontend que puedes jugar y probarlo inmediatamente, ¿qué hice yo cuando empecé con esto? pues yo iba a esta página, si la conocéis, Solidity by Example, que está genial la verdad, tiene como muchos ejemplos y entonces fui uno por uno probando, copiando y pegando ¿no? vamos a ver que podemos que podemos agarrar de aquí, un mapping por ejemplo, quiero saber cómo funciona un mapping en Solidity, teroles, la teoría muy bien, cabe valor, tipo de accionario y bueno, pues voy a coger este de aquí y lo voy a pegar en el Smart Contract, vale, vamos a llamarle pues User Counter, veis que tiene clave, que es una dirección y valor un entero, ahora podríamos ver en Solidity by Example cómo funciona, cómo se añaden valores, cómo se obtienen y demás, entonces aquí podríamos hacer ahora, ya que estamos con el rollo este del contador, puede decir vale User Counter, ahora la clave sería la dirección del usuario que está llamando esta función, que en Solidity tenemos estas variables globales, como por ejemplo es Message Sender, que esto automáticamente te lo va a transformar por la dirección de la persona, bueno si puede ser un Smart Contract que haya ejecutado esta transacción y aquí pues también vamos a sumar uno, lo mismo, hemos hecho este cambio, que hay que hacer redeploy, quedamos automáticamente, si vamos a nuestro front, esto se debería actualizar, veis aquí que tenéis el User Counter que ha aparecido nuevo y entonces ahora cuando ya llame a esta función, aparte de incrementarse el contador general, también se va a incrementar el contador de mi usuario, de mi wallet, de mi adres, aquí vamos a comprobarlo, se ha leído el valor, algo apetado ahí, veimos, estoy poniendo como un ejemplo muy, no tiene mucho sentido, pero para que se entienda, el mapping lo que está haciendo simplemente es como un diccionario, no sé si se sabe si en otro lenguaje, que tiene una clave y un valor, entonces en este caso le está diciendo que la clave es una dirección, un adres y el valor es un entero, entonces aquí si nos hayas visto que le hemos llamado User Counter, al llamar esa función, lo que pasa es que le estamos pasando como clave en la dirección de la persona que está llevando esta función y lo estamos incrementando en uno, es como simplemente para guardar un registro, igual que teníamos el counter este, pues eso es otro contador, que sí que tiene mucho sentido en la vida real, pero es como para probar, vamos a ver qué está pasando aquí, porque algo está petando, igual probar resetear esto, creo que esto es por internet, igual bueno, voy a probar otra vez y si no lo resetearé, vamos a un segundo, perdón por, ah mira, aquí está pasando algo, genial, vamos a matar esto, cosas del directo, si no seguiremos con otras cosas no os preocupes, como tenemos tiempo, así además ves que lo que pasa en la vida real, que no es todo como esos vídeos de YouTube que veis que duran 5 minutos y todo sale perfecto, todo bien siempre, vamos a ver otra vez, y ahora en Start y ya de Ploy, así repasamos un poco, esto ya está compilado, entonces bueno, lo que quiero que veáis con esto es la facilidad que tiene de acercando el User Smart Contract para jugar y probar de una manera muy sencilla y muy visual, porque lo que pasa es que a veces eso hacemos un User Smart Contract, pero claro, eso como lo pruebas, tienes que desarrollar un frontend para poder interactuar con él, también os estoy diciendo que esta es la manera de jugar un poco y de probar, bueno, ya quedaba aquí, no sé muy bien qué, vamos a ver si funciona esto, vale, estamos aquí, ahora si pruebo esta dirección, ahora si también funciona, me debería de devolver uno, ahora si, bueno, no sé, cosas raras que pasan a veces, lo que os decía es que esto está muy bien para jugar y para crear vuestro Smart Contract de forma inicial, pero si queréis ir en serio con algún proyecto lo que deberíamos hacer es test, test automáticos, que también aquí viene una carpeta con un test de prueba que se ejecutan con Yarn Test, de hecho podemos ejecutarlo aquí, y esto es de una forma ya pues más automatizada de probar nuestros tests y no nos tenemos que fiar de nosotros mismos ahí jugando con el Smart Contract, está muy bien además esta herramienta de testing, porque te da como la cantidad de gas que ha gastado cada función o cada llamada, tenemos muchísimo tiempo, vamos a hacer alguna cosa más aquí, no quiero contar más cosas, pero quiero que veáis más posibilidades de Solidity y con Scaffoli, por ejemplo, no así conocéis el patrón de Unable, que es bueno, con Open Ceberin nos ofrecen muchas librerías, a veces tenemos que implementar alguna cosa en nuestro Smart Contract y no queremos reinventar la rueda, a veces es mejor fiarse de alguien de una librería, es igual libre que está muy revisada y podemos extender de esa librería y vamos a tener había mucho más fácil y no vamos a cometer errores. Esta librería es muy sencilla, nos introduce el concepto de dueño, como el dueño de un Smart Contract, a veces hay ciertas acciones, tú tienes un Smart Contract igual hay ciertas acciones que no quieres que todo el mundo ejecute sino solo una determinada persona o un determinado wallet, nos ofrece este Modifier que la vamos a ver cómo se usa y entonces ahora podríamos simplemente importar esta librería y esto bueno si conocéis algún otro lenguaje es como la típica herencia, entonces al hacer esto automáticamente, solo con esto fijaos que al hacer deploy, ya tengo como un montón más de funciones que no están en mi contrato pero claro al haber heredado de una vol han aparecido aquí ciertas cosas como el owner, como el renunciar a ser dueño, como transferir a otro dueño y demás. No sé si os he hecho un problema ahora mismo, claro digo vale yo quiero ejecutar esto como el dueño del Smart Contract pero claro aquí me está diciendo que el owner es un señor que no soy yo porque yo soy esta persona, este es mi wallet y en cambio me está saliendo este, entonces esto si alguno hay un trabajo con Harhat, sabéis que está, que es mítica, no está la dirección la F39, es la dirección que la primera dirección del Limónic que tiene Harhat, entonces por defecto cuando tú haces un deploy en localhost, Harhat usa esta dirección como deployer adres, entonces esto me sirve para introducir el archivo de deploy. Dentro de Harhat, carpeta de deploy, tenemos aquí lo que es el script que hace el deploy. Este script se va a ejecutar ahora mismo para localhost porque estábamos ejecutando para localhost pero esto se puede ejecutar para cualquier red incluso mainer, entonces bueno aquí vemos que cuando se hace un deploy es esto usando la cuenta de deployer y este deployer está funcionando automáticamente en localhost usa la de Harhat, que es ese F39, pero lo que podemos hacer es hacer, dame aquí comentado, podemos llamar a la función de nuestro contrato que se llama transfer ownership y podemos hacer que el dueño se llame a nosotros, entonces ahora voy a copiar esta dirección, voy a pegar aquí la dirección y automáticamente cuando el contrato se deploye se va a ejecutar una segunda transacción que va a pasar el deployer actual que es el F39 a nosotros, vamos a hacer aquí, vamos a hacer un reset aquí por ese caso, estamos seguros y bueno vamos a ver, vamos a nuestro frontend, maravilloso, ahora de mismo veis que somos el owner, ahora que ya somos el owner podemos ir a cualquier función y por ejemplo vamos a implementar una función para el propósito ponerlo a cero, vaciarlo como resetearlo, pues la función podría ser clear, por ejemplo, parámetros necesitamos, si la vamos a limpiar no hace falta, es función pública pero vamos a usar este modifier que os decía que se llama only owner, entonces esto ya nos da la magia de que cuando esta función se llame va a comprobar por defecto si el que llama esta función es el owner, si no es el dueño nos revertirá la transacción y nos dirá lo siento no puedes y esto simplemente lo que hace es, lo vamos a hacer así, para resetearlo lo ponemos como una cadena vacía y ya está, venga vamos a hacer un nuevo redeploy, creo que ha funcionado, vale, vamos a probar, si ahora abro esto con otro usuario en principio a llamar la función de clear no nos debería dejar, vamos a ver lo que pasa, bueno primero es que no tengo, a bueno ya nos dice que no somos el owner, si puedo iba a decir no tengo dinero pero bueno, aún así ya ha sido listo y nos ha dicho lo siento pero no, no es el dueño, entonces si ahora voy a la otra pestaña que tenía aquí mi owner, vemos aquí el 8c, si llama esta función, ahora sí me ha dejado y veis que el propósito se ha puesto a cero, entonces bueno con lo que os tienes que dar con esto es lo fácil que es el iterar, el copiar cosas, pegarlas aquí, probarlas, algo se rompe, muy bien que ha pasado, lo arreglamos, problemas aquí, este bugle un poco de aprendizaje, a mí es lo que más me ha servido, vale, más o menos os he contado ya todo de este componente, porque scapholic viene con muchos componentes y muchas utilidades que ahora os voy a enseñar a una más que hace, porque ahora estamos con la parte un poco del desarrollo en solidity de nuestro smart contract, que daría la parte de frontend y que haría toda la parte de deploy, vamos un poco con la parte de deploy que me parece muy interesante, imaginamos, ya hemos hecho este pedazo de smart contract que no creo que tenga mucha utilidad, pero vamos a hacerlo de como si fuera nuestro smart contract de prueba y ahora queremos decir, ya queremos publicar este smart contract, lo lógico sería publicarlo a una red de prueba, no tiene sentido ponerle el mainnet sin haberlo probado primero, entonces scapholic te permite con este comando, que yo no lo voy a ejecutar porque ya lo he hecho, pero esto, al hacer esto te crea un wallet en tu directorio, con una sitphrase y de a partir de ahí se va a usar ese wallet para hacer las transacciones de deploy, como ya lo he creado, usáis yart generate y eso simplemente lo va a crear, ya la puedes hacer yart account, esto lo que va a hacer es te va a coger SNemonic, te va a coger la primera adress y ahora mismo veis que estás sacando aquí por pantalla, un QR que podrías escanear y mandarle fondos, por ejemplo, este debería tener algo de testnet en goerli, que ahí lo veis, tengo algo de balance, pero esto por ejemplo puedes crear vuestro wallet aquí y luego con vuestro wallet escanear el QR que sale más arriba y mandarle algo de fondos, en decisión vale, que como difícil es hacer deploy en goerli, para que no sepa es como una testnet, es como una copia de mainnet con transacciones de prueba, anteriormente antes del merch teníamos como rinkb y coban y robsten, pero todas esas ya me parece que han pasado mejor vida, ¿cómo hacemos un deploy de a goerli? o sea acuerdate de esto, ya es deploy, pues mirad que sencillo, simplemente ahora network, o sea le ponemos como un flag de network y la network que queramos y esto, si funciona internet, que ahora veremos, debería hacer un deploy en goerli, vamos a dejarla ver un poco, no tiene muy buena pinta, la verdad, porque sí, ahora os voy a enseñar, hay un archivo que se llama hardhat.conf y ya podéis configurar todas estas cosas, en una testnet no es tan importante el gas, pero por ejemplo en mainnet si que sería importante, tú querés mandar una transacción y querés poner igual un gas bajo y que se ejecute cuando sea, eso se puede configurar tanto en el fichero de hardhat.conf que os he enseñado ahora, o también podrías hacer así, no me acuerdo el comando exactamente, pero es como gas price y podrías ponerle aquí el precio en way, pero si no pones nada, o sea así ejecuta digamos lo que el fichero de hardhat.conf dice por defecto, entonces cuando estamos haciendo estas cosas de network, lo que estamos haciendo es sobrescribir esa llamada y puede ser para la network, para el gas o lo que sea, parece que se aporta bien internet y tenemos aquí nuestro contrato, se ha deployado en esa transacción en esta dirección, ahora podríamos copiar esta dirección, nos podríamos ir a idrescan, idrescan, goerli, claro porque no estamos en mainnet, ahora podríamos aquí buscar nuestra dirección del contrato, y aquí veis, genial, veis que se han ejecutado tus transacciones, una la del propio deploy y la otra, no se os acordáis que hemos cambiado el dueño, hemos hecho una transacción para cambiar el dueño, otra cosa que podéis ver aquí, no sé si os he llamado la atención, es esto, esta pestaña, no si habéis visto que algunos contratos, la mayoría de los que deberéis estar usando vosotros, están verificados, sale como el check, el check verde, cuando un contrato está verificado, un contrato verificado simplemente está diciendo, este bytecode que queda aquí, que hemos deployado, se corresponde con este código fuente, porque tú ves esto y aquí es complicado ver, es complicado auditar si alguien me dice, con esto tu metamask interactúa con este contrato, le voy a decir pues no, no sé lo que está haciendo, es que a foliz también te ofrece una herramienta, una herramienta no, un comando que tú vas a hacer jar, verify, le iríamos lo mismo, netword, goerli y luego la dirección, la dirección del contrato, y esto también a vez de estar un poquillo, pues totalmente depende de internet, lo que hace simplemente es eso, es coger el comando por dentro de jar hat y verifica el contrato, vamos a esperar un poquito a ver si hay suerte y si no pasamos a otra cosa, entonces bueno, os deis cuenta que con una serie de herramientas que se escafoliz, hay un montón de utilidades que te permite hacer realmente todo lo que necesitas, porque llevamos pues 20 minutos y ya hemos deployado el smart contract, lo estamos verificando, hemos jugado con él, hemos hecho testing, entonces bueno, creo que por eso escafolice es una buena herramienta para iniciarte en el mundillo, esto parece que da un poquillo, vamos a ver si no lo dejaremos ahí, seguiremos con otras cosas y a ver si hay suerte luego, ah mira, ha funcionado, justo, ahora ya tenemos el famoso tick verde y ahora ya, fijaos, vemos aquí, ya vemos y bueno, no nosotros, que no es lo importante, lo importante es la gente que va a interactuar con nuestro contrato, va a ver aquí que realmente el código fuente es el que decimos que es. Bueno, yo creo que por esta parte de Solity ya vale, si puedes traer tu primer smart contract para verificarlo aquí o como, o sea, te refieres este comando del jar verify, claro, esto el verify por debajo digamos que está cableado para que agarre los comandos, o sea los contratos que están en el proyecto, o sea no podrías verificar un contrato que no está dentro de tu entorno porque no tendrías el código fuente, sabes, dices aquí o sea tú traes en escafolice y pones tu contrato aquí dices, sí, sí, hay sin problemas, así sí, eso es, que también no sé si alguien le ha dicho para eso, se puede hacer también de forma manual, tú también puedes ir en idrescan, puedes ir y hay como un, aquí dentro de la parte de contratos, bueno, que lo he cerrado ya creo, pero aquí en la parte de contratos también hay como este tu contrato, verificalo, entonces es como un proceso, lo que pasa es claro, aquí tendrías pues que pegar el código fuente, aquí en este caso es muy sencillito porque al final fijaos tenemos tres archivos, nuestro contrato y los que el de una vol que estamos extendiendo y el de context, que usa el de una vol, entonces es muy fácil, suavely hay que pegar esos archivos y ya estaría, pero a veces algún esmar contract puede tener 20-25 dependencias y entonces con este comando fijaos que eso es, sí, sí, atendiendo, claro, ten en cuenta que no es tan importante, no es tan importante que sea dinámico porque esto solo se va a ejecutar una vez, cuando este deploy ya está, pero bueno, se me ocurren varias ideas como una podría ser declararlo como una variable en torno, igual podría ser donde en tu entorno pues que esto fuese como algo como process, no, don't end y contrato, así le diría como la variable de tu entorno y sí, es que al final ten en cuenta que esto no tiene que ser tan dinámico porque solo se hace una vez, o sea una vez que esté deployado en mainnet ya no lo vas a volver a tocar, entonces no es tan importante esa dinamismo. Los tests, sí, o sea, me quiero meter muy a fondo porque no tenemos mucho tiempo, pero sí, o sea, Harhat te viene con un test suite y bueno, fijaos aquí, podemos hacer un ejemplo, ¿no? Esto es lo que está haciendo, describir el contrato, se llama major contract, ¿no? y le dice, vale, debería de deployar nuestro contrato, tú le pasas a esto, si esto ya fallase, ya te haría un error el test, esto es lo normal, es que no pase, ¿no? Decís, vale, este es el caso del contrato que tenemos de prueba, le estamos diciendo, vale, queremos poner un nuevo propósito, esto es una variable, entonces le estamos diciendo, vale, nuestro contrato, llamamos a la función de setear el nuevo propósito y le pasamos el parámetro, esto es lo más importante del test que es el expect, ¿no? que es como el assert, le estamos diciendo, vale, hemos hecho esto, hemos llamado a esta función y entonces ahora esperamos que nuestro contrato, si leemos la variable propósito, equivale a este propósito, así básicamente es como funciona todo, o sea, adidas los test, pues cuando es tu usuario mande este dinero, manda el otro, esto tiene que ser igual a uno, entonces así es como una manera más automática de test, entonces haces un cambio de smart contract y lanzas los test y te va a explotarte, decir, no, esto no funciona, ¿sí? que aquí tiene, yo estoy entandolas como una visión un poco global de todo, pero claro, aquí tiene mucho para bucear, tiene mucho, mucha cosa, ¿no? Bueno, simplemente comentamos brevemente el tema ya de, ya que hemos hecho la parte de smart contract, sí, la parte del front, ¿no? Yo recomiendo que aquí, por defecto, Scapolis viene con un ejemplo de UI, otra vez nos fíjese si es bonito o feo, o sea, que lo importante es que esto está hecho en React, que hay ciertos componentes, ciertas utilidades y que podéis interactuar con el, con los contratos, luego esto le podría dar la forma con CSS o usando otras librerías, la forma que quisieres y que se ve sea muy bonito, ¿no? Aquí yo recomiendo que veáis para aprender cómo está el tema del front, ir al Package, React app y aquí tenemos todos los componentes, hooks y utilidades que trae Scapolis y en el caso de ejemplo UI podéis venir aquí y veis cómo se están usando las distintas utilidades, los distintos componentes que vienen con Scapolis, por ejemplo, aquí tenemos un componente de React, ¿no? Que tú le pasas una dirección y automáticamente te carga una dirección en la que puedes clicar y te iba a ir al scan, tiene para copiar, ¿no? Ciertas utilidades, bueno, que te faciliten un poco la vida. Tenemos también pues para hacer transacciones, ¿no? Aquí quieres hacer una transacción con tu smart contract, ¿no? Mintear tu NFT, ¿no? Pues tú tendrías aquí, decir, mira, tenemos el componente de transacción, cojamos todos los contatos que están de escritura y llevamos esta función. Entonces yo recomiendo que no entra mucho en detalle, pero recomiendo que vengáis aquí y veáis pues el componente React como está montado para interactuar con el contrato y aquí, bueno, tenéis más componentes, ¿no? De balance, de eventos y otras maneras de mandar, digamos, transacciones. Sí, está con React. Al final con Scapolis, lo que hacemos es intentar que esté todo, digamos, ya como cableado por debajo, ¿no? Y React parece que es como bastante estándar ya en web 3, ¿no? O sea, se usa como... Sí. Es como web 2, entras a la hoja de estilo, en cambias, en mueves. Eso es, eso es. Al final, sueles aprender ya esos pequeños business, pequeñas partes, ¿no? Que interactúan con el smart contracts. Vale, mira, sí, a ver, vamos a volver aquí a la presentación. Vale, Scapolis, espero que os haya gustado esta parte y que os animéis a probarla porque creo que es una utilidad muy buena. Y llegamos al paso 2. El paso 2, aquí ya deberíais tener como cierta soltura para jugar con los smart contracts, entender un poco el frontend, cómo se conectan. Pero claro, hay un problema, ¿no? Que me pasó a mí, es decir, vale, llegas allí y dices, ahora, ¿qué hago, no? O sea, porque ya he jugado un poco y ya no tienes igual ninguna idea para desarrollar. Pues, ¿cómo puedo seguir aprendiendo? Pues, aquí la solución es Spidermicerium. Spidermicerium no es más que una plataforma que te ofrece un conjunto de retos para ampliar tus conocimientos en Solidity. Aunque, bueno, todos estos challenges que os voy a explicar ahora son full stack, es decir, os hacen deployar un contrato y un frontend también deployado que interactúe con ese contrato. O sea, tenéis que hacer todo. Los challenges que tenemos ahora mismo son estos 7, no son 6, aunque lo parezca, aunque empieza en cero. Y ya son ejemplos más de la vida real. Antes comentábamos, ¿no? Que, bueno, que el ejemplo de antes era como un ejemplo más de juguete para probar, pero aquí ya son ejemplos que se pueden parecer más a la vida real. De hecho, tenemos el primero, que es desarrollar un NFT, el segundo es una aplicación de Staking, el tercero es vender y comprar y vender tokens. Tenemos el LiceGame, ese me gusta mucho a mí, personalmente. Este juega mucho con el concepto de los números aleatorios, on-chain, que sabéis que es un tema complicado, y os hace hacer un smart contract que ataque otro smart contract para robar el dinero, porque está usando mal, digamos, los números aleatorios. Y de a partir de ahí, ya se empieza a complicar la cosa. Ya es desarrollar un exchange centralizado, un wallet multisig, y un NFT que renderice ese UDG en on-chain. Bueno, ven así un poco para que veáis la plataforma que tengo aquí. Esto no es más que, esto es lo que me gusta mucho del mundo de Web 3, que para registrarte en algo, a veces es simplemente conectar tu wallet, firmar un mensaje con nuestro backend, y ya está, no necesitáis ni correo electrónico ni nada. Entonces es conectar vuestro wallet, y automáticamente ya podéis entrar aquí y ver todos los challenges. La parte de arriba también, hay algún enlace interesante, como un vídeo de, este creo que es Austin, haciendo como un, así conoce Austin, es un crack, un saludo para Austin, y bueno, un enlace a Scaffolders, y luego también un curso que hemos hecho, que después también parecería muy interesante, lo he hecho con Austin y con Eda, que está ahí sentada, viendo, aunque no entiende nada, solo habla inglés. Pero bueno, es un curso que hemos hecho, y está muy bien, porque no sé si lo tengo por aquí, a ver, lo que es el, os lo recuerdo también, está en inglés, o sí, yo creo que en algún momento... Sí, está todo, pero bueno, aquí veis el currículum, y es como te explica desde cómo convertirte en un suelo avanzado, hacería scripting y hacería aplicaciones completas. Está muy bien, además es un poco como estilo no happy path, sino en plan, nos podemos hacer, si se rompe algo, lo arreglamos, y está muy bien, nos lo recomiendo, y también tengo pensado yo hacer en algún momento de mi vida, una versión reducida a ese curso en español. Bueno, aquí tienes los challenges, los challenges son muy sencillos, vais a uno, leéis el ritmi, está todo muy bien explicado, también os recomiendo que os hagáis a veces el ritmi, y bueno, y empiezas a hacer cosas, rompáis alguna cosa, eso querrá decir que, bueno, que vais por buen camino, y una vez que ya lo habéis terminado, tenéis que haber empleado dos cosas, el contrato y el frontend. Aquí lo que haréis es pegar esas dos VRL, la del edil scan, y la del vuestro frontend, y esto va a ser un sistema de automático de grading, donde tengo aquí un builder, por ejemplo, que ha pasado ya los cuatro primeros challenges, y este es como un superfile, ¿no? Podéis ver, digamos, el feedback de cada uno de los challenges. Entonces, ¿qué pasa? Esto, bueno, os va a enseñar mucho, os va a hacer sudar un poquito, si no tenéis mucha experiencia, porque aquí ya se pone una cosa más complicada, ya no es una cosa de prueba, sino que es algo bueno, son conceptos más avanzados. ¿Qué pasa? Que cuando lleguéis a Anday's Game, cuando superéis este, y automáticamente podéis formar parte de Billkilt o de Beatleheedle, ¿no? Depende como lo queréis decir, que esta es la comunidad que os voy a contar ahora, que es la que yo formo parte. Esto ya es para la gente que supera Spiderman Serium. Billkilt somos como una comunidad de desarrolladores, que lo que hacemos es crear sobre todo prototipos, productos, contenido, tutoriales que enriquece el ecosistema de Serium. Tenemos una organización bastante enárquica, no tenemos mucha estructura. Nos juntamos cada dos viernes, no tenemos reuniones ni nada, sino cada persona trabaja un poco en lo que quiere, siempre que sea para aportar a la comunidad, ¿no? Y que sea algo por el bien común. Nos juntamos eso cada dos viernes, hacemos como el Bowtie Friday que le llamamos, que sale Austin con la pajarita, aquí en Colombia creo que le dicen Corbatín, me parece. Y bueno ahí pues enseñamos un poco los bills en los que estamos trabajando y demás. Y entonces es una comunidad perfecta para seguir aprendiendo porque tienes gente pues con mismos intereses, si te interesa de repente un tema en concreto, ¿no? Pues como se hacen firmas para loguearte con un servicio con MetaMash, ¿no? Pues seguro que hay alguien que ha hecho algo parecido, entonces puedes forquear, puedes ver su ejemplo, y bueno a mí me vamos, es maravilloso estar con un rollo de tanta gente que sabe tanto, ¿no? Esto a veces parece parecer como, vale, esta gente que como gana dinero, ¿no? O como se financia. Pues, bueno, Bill Gill está financiado inicialmente por Austin, que lo pagaba de su bolsillo y ahora ya estamos financiados por decir un foundation, o sea que, bueno, muchas gracias a la fundación y a los builders que ya vemos que tienen digamos que empiezan a contribuir, ¿no? al ecosistema, se les ponen lo que se llama un stream. Este es un stream que hay de distintos tamaños, os voy a enseñar a que tenemos como todos los builders ahora mismo que están con stream. Os pongo un ejemplo en mi portfolio, podéis ver mi stream aquí, entonces es una cantidad de id que tú puedes llegar al mes a cambio de tu trabajo, ¿no? Y este trabajo no es para ninguna empresa, sino es trabajo simple, de prototipos, de hacer ideas y de crear repositorios que sean útiles para la gente. Aquí, por ejemplo, veis cosas que he creado yo y somos muy transparentes también a la hora de sacar el dinero. Ahí podéis ver las veces que he sacado yo dinero, con qué motivo, hace cuánto y aquí pues eso es la razón, ¿no? Por ejemplo, si he trabajado en esta púrrico he hecho esto y demás. Entonces, bueno, podéis ver también aquí la parte de builds, aquí es como un listado enorme de las cosas que hemos hecho y a veces pues es decir, mira, pues me interesan los NFTs, pues vais aquí, puedes ver las cosas que se han hecho, puedes entrar en el build, los logis, ¿no? que son mis favoritos. Un saludo para Damu, que es el creador de esto, un argentino. Y bueno, aquí podéis ir al código, al repositorio, ver cómo está hecho, inspirados en esto, forquearlo y usarlo. Entonces, bueno, lo que les decía es un ecosistema muy rico para aprender. Y bueno, espero que con este warship, espero que alguno de aquí se lo hagáis con ganar de hacer speedrun metirium y uno solo a la comunidad. Os esperamos ahí detrás del muro y bueno, os he contado muchas cosas. Creo que, bueno, si os tenéis que dar una sola cosa, quedáis con speedrun metirium, ahí podéis entrar e hilar todo. Y bueno, ahora, bueno, muchas gracias y tenemos tiempo para preguntas si queréis. Voy a estar también por aquí hoy y todos los días, o sea que podéis agarrarme y preguntarme cosas. Y bueno, que muchas gracias.