Solidity 101 in Spanish: Updraft Study Session, Part 1
Cyfrin Updraft Solidity 101 Study Sessions — Spanish · 1:02:41
Write and run a first Solidity contract in this Spanish study session led by Antonio Moreno. Using Remix and the SimpleStorage example, the workshop introduces compiler and license declarations, integer variables, function visibility, state changes and reading stored values. Learner questions accompany deployment and interaction in a local virtual machine. Basic programming and a general understanding of Ethereum are helpful.
Speakers
Topics
From Cyfrin Updraft Solidity 101 Study Sessions — Spanish, hosted by Cyfrin.
Transcript
Y en especial wait let's uh participants are writing. Ok sounds good. Thank you so much for joining us today guys. I'm going to be here to support you guys. Nito, Nacho, and Ena will be here to support you. And uh I work at Crin as a dev and uh also work at Crin. She leads our designs, the perfect designs around the world. You
can see her like designs, scraps, graphics and t-shirt designs as well. She will introduce yourself herself to you guys and Nito and Nacho will be leading the Spanish study session. And thank you so much for joining us again. See you later. I'm be here. Bye. Thank you so much, Elif. Pues nada, e estoy muy contento de estar haciendo esto porque como ya sabemos hoy en día la información está muy accesible. Es decir, que cualquiera que pueda que quiera aprender sobre blockchain o sobre en particular Solidity, eh hay muchísima información ahí en internet y especialmente hoy en día con
inteligencia artificial. Así que eh el único motivo por el cual hacer un directo o hacer un curso sería porque queremos darle ese toque humano y ese toque humano viene con historias. Entonces iré contando un montón de historias a lo largo de este ratito que vamos a echar hoy. No sé, entre 40, 50 minutos, una hora. Así que me introduciré a mí mismo y luego, bueno, hablaremos un poco con Nacho y con Ana eh sobre el curso. Pues eh en particular me voy a presentar yo primero. Eh soy Nito Moreno eh del sur de España. Eh llevo trabajando en blockchain alrededor de 7 años. Eh, por suerte, por desgracia, sigo trabajando en blockchain. Significa
que sigue habiendo trabajo a día de hoy y significa que todavía que no invertí y no me hice nunca millonario. Así que ayudo a que otros inviertan prácticamente. Una de las cosas por la que aprender blockchain y me salto a la segunda pregunta que tenemos aquí es para mí de un principio, creo que es una de las disciplinas que son más, por así decirlo, sexis hoy en día dentro de la ingeniería del software y eso es porque tiene un fundamento matemático muy fuerte. Es decir, todo lo que vemos en el blockchain es como matemáticas aplicada y muy palpable. Entonces es muy fácil de ver toda aquella criptografía, todos aquellos procesos matemáticos,
curvas elípticas y tal aplicado y eso no es tan fácil de verlo en otros en otras áreas de la ingeniería informática como la vemos en Otra de las cosas por las que me gusta trabajar en blockchain es porque la cantidad de datos con la que trabajamos es inmensa. es inmensa en cuanto a volumen, porque alguien me puede decir, bueno, en Netflix cualquier serie son varios gigabes y en el blockchain varios gigab es mucha información, pero sí es intensa en cuanto a throatput, eh, a cantidad de transacciones. Cuando trabajamos con blockchain no es raro ver millones de transacciones en una hora y todo eso tiene que pasar por nuestras aplicaciones que programamos, con lo cual es bastante
interesante. En cuanto a mí, pues como he dicho, soy del sur de España. Nací, crecí en Málaga, como se diría en inglés, y alrededor de 2017 trabajaba en una empresa aquí en Málaga y me dijeron que si me quería ir a Londres, con lo cual el movimiento hacia Londres fue muy sencillo porque me llevaron ellos. Y una vez allí empecé a trabajar en chain analisis, que a la gente que esté un poco en el blockchain le sonará. Es una empresa que le llamo web eh 2.5 2.5 porque está como en la mitad justo, ¿no?
I análisis se trata de regular o de trazar todas las criptomonedas que hay. Y ya después de ahí salté a Chinlink, que es uno de los proveedores más famosos de Oráculos, que a lo largo de estas de estos vídeos pues veremos lo que es. Pero hoy estamos aquí porque vamos a hablar de CFREN y en particular de la parte de Updraft de CFR y para mí es que a día de hoy es de los mejores cursos que se pueden encontrar y encima es gratuito en internet eh para aprender blockchain.
Hay diferentes cursos, no solamente para aprender Solidity, sino también para aprender algunos frameworks, porque igual que tenemos en el frontend que tenemos JavaScript y luego tenemos React, en el mundo de Solidity tenemos Solidity y luego tenemos eh Foundry, por ejemplo, que sería uno de los framework más utilizados. No solamente está Solidity, sino que eh todo el mundo que haya escuchado hablar de Solana también está Rust, que es este lenguaje un poco especial que está muy famoso últimamente. Y nada, una de las cosas por las que más me gusta Cyfring o que quizás me llevaron incluso a Chainlink en el pasado es que el CEO o fundador de
eh de CFIN es Patrick Collins, que es uno de los creadores de contenido más famosos y diría más generosos que tenemos hoy en día. Y digo generosos porque ha creado cursos totalmente gratuitos e ha colaborado con otros canales eh totalmente gratuitos y para mí son los mejores cursos y más entretenidos y sus vídeos son eh los mejores que hay. Así que nada, si no lo conocéis, echadle un ojo. Lo he visto en persona y también como Anacho y a mí, no sé si a Ana le gusta mucho el deporte, con lo cual también compartimos eso con con Patrick.
Vale, pues sin más dilación, lo que vamos a hacer es eh el objetivo de hoy era eso, que me conocieseis. Eh, Nacho, ¿quieres decir algo? Sí. Bueno, si cuento brevemente mi historia, no no tiene no tiene absolutamente nada que ver con blockchain, la verdad, pero bueno, yo empecé en un mundo totalmente distinto porque empecé estudiando traducción e interpretación y luego un máster en estudio ingleses, absolutamente nada que ver con la tecnología, pero bueno, por cosas de la vida, pues me cambié de sector. La verdad que ahora estoy super encantado. Hice un grado superior en desarrollo de aplicaciones
multiplataformas. Ahora estoy en tercero de ingeniería informática y llevo ya 2 años y medio trabajando, pero como desarrollador de software. Soy desarrollador de software back en una multinacional alemana en Decra y la verdad es que estoy muy contento. Y bueno, Ñito me comentó hace pues hace cosa de tres semanas o así que que iba a dar este curso. La verdad que yo siempre quiero eh seguir aprendiendo cosas nuevas relacionadas con la tecnología, así que dije, bueno, vamos para adelante y aprender cosas nuevas. Genial. Pues eso es. Eh, Nacho es el claro ejemplo de eh persona al que al al que le serviría este tipo de curso, ¿no?
Porque él ya sabe programar, eh, está se sigue formando y en algún momento puede dar el salto o bien a programador Solidity o bien a lo que hago yo, que lo diré al final, que no es relacionado 100% con Solidity, pero sí en empresas de blockchain. Y Ana, ¿tú te quieres introducir? ¿Qué haces en Sframe? Sí. Eh, hola, me llamo Ana. Eh, soy mitad inglesa, mitad española. Vivo en Londres, pero mi familia es del sur de España, es de son de Badajo. Soy diseñadora en CFRIN, entonces todo lo que ves, las plataformas eh Updraft, Codehawks e las páginas web, todos los las he creado yo, básicamente, eh, o las
he diseñado. Y no sé, siempre me ha gustado el tema blockchain porque empodera a los usuarios poder manejar su dinero y tener control sobre su vida financiaria. Em, y no sé, hay un montón de eventos en el mundo que están pasando ahora mismo que justifica el uso de de las criptomonedas y el blockchain y no voy a entretenerlas todas porque hay un montón, pero por eso estoy aquí, por eso trabajo aquí, porque queremos arreglar los problemas de esta industria que hay varias, pero también e enseñar a otra gente usar estas
plataformas, eh escribir contratos en Solidity y de todo. Entonces, aquí estoy para ayudar. Si hay feedback sobre las plataformas, preguntas, todo. Aquí estoy. Genial. Superinesante, Ana. Y superinesante también que sea eh del sur de España como como Nache, como yo. Em, pues uno de los eventos que dice Ana que está ocurriendo en el mundo ocurrió ayer en España, que se apagó todo España y por lo tanto yo no podía usar mi tarjeta de crédito e el servidor donde se hospeda mi banco pues no funcionaba. Mi madre estaba en la peluquería, mitad haciéndose el pelo allí y se le soltó la
luz y no pudo hacer nada. Y ahora toda mi familia vive en Madrid y en Madrid todas las casas son apartamentos enormes y mi madre vive en el décimo piso, entonces tuvo que subir 10 pisos porque no había ascensor. Exacto, exacto. Pues con eso justo voy a empezar, que es la diferencia entre Bitcoin y Ethereum. Eh, hay muchas monedas en el mundo, pero me voy a enfocar en estas dos, que de hecho son las eh dos primeras en capitalización y las dos más famosas. Y es una de las preguntas que siempre me hacen en las comunidades familiares de en cuál tengo que invertir. Yo no voy a dar ese
consejo, pero simplemente la pregunta, la la diferencia fundamental entre Bitcoin y Ethereum eh en Bitcoin básicamente funciona con lo que le llamamos Ucho. Ah, que es une expend. Le voy a escribir aquí porque mi pronunciación nunca es la mejor. sería ocho y viene de unspendent transaction output y lo que va a hacer es que es tal cual funcionaban los cheques bancarios antiguamente, los talones donde yo le ponía 1 € o una peseta a Nacho, lo firmaba y se lo daba y entonces lo que podía hacer es volver a firmar y decía, pues le doy a Ana esta peseta y lo
firmaba. Y entonces va eh de esa forma se van firmando transacciones y esas transacciones se ponen en el blockchain. Esto es lo que conocemos como entrraje y salida de una transacción que son estos cuchos. Evidentemente spent viene de que no se ha gastado y sería la parte de entrada de las transacciones porque no están gastadas. La parte de salida es ya esos eh inputs están gastados y van a la parte de salida. E para que sea más seguro, normalmente estas direcciones van cambiando, con lo cual no es raro ver que en mi billetera voy a tener como un montón de outputs no gastados deos y esto le llamamos la fragmentación del
wallet y esto es Bitcoin. Una de las ventajas que tienen es que el acceso a esta moneda es totalmente democrático. Es decir, aunque nos lo parezca que es democrático a día de hoy, pero cuando vamos a un banco le tenemos que dar toda nuestra información y ellos pueden decidir si abrirnos nuestra cuenta o no. Y esto es un problema para países, por ejemplo, desbanquerizados que le llamamos. Por ejemplo, la República Centrocana tenía problemas con esto. Eh, también es un problema porque monedas fiduciarias están en control de gobiernos o centralizados y tenemos problemas con de inflación, por ejemplo, ¿no? Como ha ocurrido pues en toda la parte de de Sudamérica. Eh, Bitcoin, sin embargo, eh es una base de datos que está totalmente
replicada y como está replicada en cualquiera de los usuarios que quisiera leerlo, no lo puedo modificar. Es una de las razones por las que no se puede modificar, porque si yo tengo una libreta eh o un bloc de notas que está duplicado muchas veces o triplicado, cuadriplicado, no puedo modificarlo porque no sé quién tiene una copia de ese bloc de notas para decirle que lo tiene que modificar, ¿no? Y por eso decimos que el blockchain es inmutable. Bitcoin solamente sirve eh fue la original. Eh, hablamos de finales de 2008 y empieza a funcionar el 3 de enero de 2009, pero luego más tarde aparece Etherium, que lo que venía a decir es, "Okay, si Bitcoin es sobre
transacciones de movimiento de capital o de dinero o de esta moneda llamada Bitcoin y lo que vamos a hacer es que va a funcionar sobre una máquina virtual y esto ya es un concepto más informático." Entonces, le vamos a decir que cada nodo de Etherium, anteriormente cada nodo de Bitcoin lo que hacía era reenviar transacciones y comprobar que estuvieran bien. Cada nodo de Etherium lo que va a hacer es ejecutar código, con lo cual lo que estamos democratizando ahora es la ejecución de programa. Cuando Nacho escribe una aplicación para su empresa, para Decran, normalmente la tiene que desplegar en un servidor y ese servidor va a estar en un centro de datos. Eh, y hoy en día los más famosos pues son
Amazon, Google o Microsoft. En el caso de Etherum, cuando yo escribo un contrato, se va a desplegar en toda la red de Etherum. ¿Y qué quién va a ejecutar eso? Quien quiera, quien tenga un nodo en su casa. ¿Cómo se va a beneficiar esa persona a tener un nodo? Pues hay un concepto que es gas, que cada vez que se ejecuta ese programa eh se paga como una comisión y esa comisión la recibe la persona que está gastando ese cómputo, esa electricidad en correr esos programas. Con lo cual, lo que estoy diciendo ahora es que todos mis programas van a ser totalmente inmutables. Yo igual que tengo una transacción de Bitcoin que cuando la publico ya no la puedo borrar, cuando tengo un programa como Solidity, cuando lo publico ya no lo puedo borrar. Y ese programa entonces ahora va a ser
totalmente público. ¿Qué ocurriría si pudiésemos acceder a los programas que corren los bancos? pues que encontraríamos un montón de errores y podríamos hackearlos incluso, ¿no? Eh, Nacho cuando programa corre con la premisa de que nadie va a acceder a ese código de programación, pero imaginaros que ahora estamos programando en Solidity y todo el mundo puede acceder a ese código porque es público, pues es ahí donde han ocurrido un montón de ataques y siguen ocurriendo a día de hoy. Ya hemos escuchado muchas cosas, por ejemplo, en Corea del Norte, que hay un montón de de orígenes de de hackeos y, por ejemplo, el Running Bridge, que fue una
tecnología, se robaron hace ya un tiempo 600 millones de dólares. Luego hubo otro de Bybit, pero ese era un poco diferente y Patrick Collins lo explica. Entonces, Patrick, lo que ha creado durante un tiempo y de ahí se trata el trabajo de de Ana, de Updrafts y de Code House es de trabajar en una empresa que lo que hace es análisis de seguridad sobre los smart contracts antes de ser publicado. Entonces, igual que en el mundo web 2 tenemos el pen testing, que ponemos a prueba hackers de gorro blanco intentan hackear los programas. En el mundo del blockchain tenemos esta auditorías de seguridad donde hacemos blockchain
auditing y donde podemos comprobar que el contrato está lo mejor posible, perfecto, antes de publicarlo, porque ya sabemos que cuando lo publiquemos todo el mundo lo va a intentar atacar. Este tipo de auditoría hay dos formas de hacerlo. Una es contratar a expertos como en CFIN y otro es usar plataformas donde yo puedo publicar mi contrato y la gente va a competir por encontrar vulnerabilidades y estas vulnerabilidades se le van a pagar. Eso es otra de las plataformas que tiene Shring también, donde podemos nosotros si queremos participar podemos competir en nuestro tiempo libre y conseguir eh dinero a cambio de haber revisado contratos.
para elaborar un poco más sobre eso también creo que hay tres distintos niveles a fre bueno, cuatro. Primero hay como el servicio separado donde hacemos el auditing, donde revisamos los contratos y nos aseguramos que son seguros para exponer al mundo, supongo. Y esa es como una parte de la compañía, pero después tenemos las dos otras partes. Primero donde te educas en UPDRAFT para aprender sobre estos temas, sobre las mejores prácticas, todo eso. Y después te puedes pasar a Code Hawks, que es lo que has dicho que son competiciones más que nada.
Entonces, lo que estamos intentando hacer es resolver el problema de seguridad en blockchain con varias varios ángulos. Entonces, hay una de educación, hay otra de análisis de los contratos como un servicio, pero después hay las competiciones donde tú te puedes mejorar. eh los emprendimientos que tienes, pero también puedes eh analizar y segurar esos contratos como live en directo. Entonces son como varios niveles, varios ángulos, varias formas. E eso es lo que tratamos de resolver porque es un problema enorme, como has dicho, hay un montón de
hacks que ocurren. Eso es. Pues muchas gracias por por mejorar la explicación y y por traer una vez más a Appdraft, que que como digo son los cursos que desde mi punto de vista son mejores y donde una mejor educación puede evitar mucho hackeo en todos los aspectos, en incluso en scam, sin nada y y tal. Bueno, pues eh de nuevo, sin más dilación, eh lo que vamos a hacer es irnos a remix. Eh, para hacerlo con vosotros, me voy a venir a voy a buscar [Música] en Google mismamente, voy a decir remix ID y lo primero que me voy a encontrar
es remix y nos aseguramos que es el puntoirim.org y se me va a abrir un editor de programación. Principio te va a hacer alguna pregunta si estás aprendiendo y tal. Yo le dije que que era para learning y me va a abrir directamente esto. Voy a cerrar todas las pestañas. Voy a cerrar el AI. Vale. Y ahora lo primero que voy a hacer, ya tengo un editor aquí, eh, tengo todos mis ficheros aquí a la izquierda. Yo simplemente voy a seleccionarlos todos y voy a a borrarlos.
No necesito nada de esto. Y si os fijáis, tengo un editor muy parecido a Visual Studio Code para los que hayamos programado en frontend y el lenguaje así un poco más moderno. Una de las preguntas que me podéis hacer es, ¿en la vida real se programan este editor online? No tal que así. Se usa Visual Studio Code mayormente, pero es uno de los mejores editores porque ya está todo configurado y sobre todo porque vamos a desplegar nuestros contratos de forma muy sencilla, como ahora veremos. Entonces, sin más, eh, voy a crear un nuevo fichero. Para eso le voy a dar aquí a la a la ventanita que que aparece aquí. Crea nuevo fichero. Le voy a llamar
storage sol y el sol viene de solidity. que es el el lenguaje, como hemos dicho, más famoso y que se suele usar para Etherium. Y esto ya me va a crear eh pues un feo donde puedo empezar a programar. Solidity está fuertemente inspirado en JavaScript, con lo cual cada vez que estemos programando parecerá que estamos programando en JavaScript. Y lo primero que me va a pedir aquí un warning, que me va a pedir que pongamos eh un tema de licencia, le voy a dar barra barra, que sería los comentarios, igual que en JavaScript, ispdx license identifier, le voy a poner meet.
Vale, y ahora lo que voy a hacer es voy a seguir escribiendo, voy a voy a poner Pragma Solidity y le voy a poner este tilde y le voy a poner 0 8 26. Lo que le estoy diciendo que el contrato que voy a hacer a partir de ahora tiene que ser compatible con Solidity de esta versión en adelante. Es decir, toda la funcionalidad que voy a usar es de esta función en adelante. Y si nos fijamos, si hacemos si estamos en Mac comando S, si no en Windows será control S. Cada vez que le doy a salvar me lo va a compilar, eh, me va a escribir aquí un
montón de ficheros, pero de eso me da todo igual. Si no encontramos el atajo de teclado, pues le puedo dar aquí arriba compile o compilar si lo tenéis en español. Y de esa forma estaría compilado. ¿Y por qué está compilado? Cuando se ejecuta esto en la Etherium Virtual Machine, como habíamos dicho anteriormente, eh, que es la EVM, siempre se va a ejecutar en un byte code, es decir, en un código de bytes, eh, que está que ejecuta entonces agnóstico al lenguaje. Esto es muy parecido a los que hayamos escuchado hablar de Java, pues Java se se compila también al Java byte Code y se ejecuta por la JVM, es decir, en lugar de EVM sería JVM.
Ahora lo siguiente que voy a escribir es mi contrato y para eso le voy a poner contract y le voy a llamar simple storage, por ejemplo. Abro corchete y cierro corchetes y ya tendría mi primer contrato, por así decirlo. De nuevo, si lo doy a salvar, pues me lo está compilando y están por aquí los artefactos que se van guardando. Yo todo eso lo ignoro por ahora. Y mi contrato va a ser como la unidad mínima de programación que voy a tener siempre que hablo de smart contracts. Es decir, todos los programas que nos imaginemos los smart contract, incluso las DAPS, cuando nos conectamos para eh hacer swaps o para comprar monedas que
son descentralizadas, que son dentro de Defi, lo que tienen por debajo son uno o muchos contratos. Los contratos dentro lo que van a tener son eh dos cosas mayormente, variables y funciones. Entonces, vamos a empezar escribiendo una variable. Una variable va a tener va a ser tipo, va a ser identificador eh modifier, que lo voy a llamar modificador y le va a tener un nombre. Yo, por ejemplo, voy a escribir como tipo int 256 y le voy a decir que es public y le voy a llamar
favorite number y nada más. Y voy a acabar en un punto y coma parecido a JavaScript. Y ahora vamos a razonar sobre esto. IN es la US de unsigned, es decir, que no tiene símbolo, siempre va a ser positivo. Un número entre cero hacia delante, número natural, int, les estoy diciendo eso, que es unign integer. 256 el número de bits que va a tener esa variable. Con lo cual, si tengo un u int de 256, voy a poder representar un número entre 0 y 2 elevado 256 - 1, es decir, un número bastante grande. ¿Puedo usar otro tipo de número? Sí, puedo usar, por ejemplo,
la variable u int, que serían 8 bits únicamente y, si no me equivoco, eh, sería hasta 127 de 0 a 127, si no me falla los cálculos mentales. Pero yo en este caso para curarme en salud, por así decirlo, lo voy a poner a 256. Ya tengo un identificador que es eh un modificador que es public y puedo tener diferentes modificadores. Puedo tener public, puedo tener private y puedo tener internal. A efectos de lo que vamos a ver hoy, internal y private es lo mismo, pero lo que va a decir es que hay unos contratos que se llaman
contratos derivados, que son contratos que este contrato puede heredar. Y en el caso de internal, esta variable lo podrían leer todos los contratos derivados. En el caso de private solamente podrían leer esa variable, este contrato. En el caso de public, eh, de publiceramente diferente porque lo pueden leer desde fuera del contrato, es decir, cualquier usuario accediendo al blockchain puede leer esta variable. ¿Alguna pregunta, Nacho Yana? Que lo tengo por aquí.
Cuando escribo public, el contrato me va a generar automáticamente un getter, es decir, me va a generar eh una forma eh de acceder a esa variable desde fuera. Yo voy a poder emitir un evento al blockchain y me va a poder dar el resultado de esa variable. Me lo ha borrado. Lo ponemos de nuevo. Vale. No le he dado un valor inicio. Pregunta, ¿es común ir variando en cuanto a los bits del wind o la o la mayor parte del tiempo se usa el 256?
Eso es muy buena pregunta. Eh, casi siempre vamos a empezar en el safe side, en el lado seguro, empezando con valores grandes. Y luego, eh, el hecho de modificar ese número de bits va a venir de dos cosas. Uno es del auditor de seguridad, porque si tengo un overflow, es decir, es decir, si me he pasado del máximo número, puedo tener cosas como muy aleatorias. Imaginaos que voy almacenando una cantidad de dinero en un contrato y de golpe cuando llega a un valor muy alto, a 1 millón vuelve a cero. Pues entonces eso sería un error común. El otro caso en el que podría reducirlo es que evidentemente este contrato se va a ejecutar en un nodo.
Ese nodo cuanta más memoria ocupe más me va a cobrar. Y ese es el concepto de gas que tenemos. Entonces, la menor cantidad de información moviéndose por ahí y ejecutándose el menor gas que me van a cobrar. Con lo cual, muchas veces decimos, vamos a usar Uniswap en lugar de sushi swap. Lo estoy inventando. Y la gente dice, ¿por qué? Porque cobran menos comisión. esa cantidad de comisión va en cuestión de la ejecución, de la cantidad de ejecución que se está haciendo. Entonces, dirías que la mayoría de la gente como empieza escribiendo 256 y después cuando van a medias del contrato lo han acabado, lo están revisando, van modificando los
números para para ajustar. Eso es. Y el 256 es como el formato más grande o tipo más grande posible de tener números o no sé. Yo yo también estoy aprendiendo, chicos. Yo no sé escribir contratos ni nada. Pues eso es muy buena pregunta y me lleva a recomendaros esta página. Si buscamos en Google eh Solidity docs eh cheat y me voy a la que empiece por docs.lang.org.
Aquí voy a ver muy resumido eh un montón de cosas sobre Solidity, así que lo podemos tener casi siempre abiertos y ver e modificadores. Lo que os he contado del interna, del private, del public están por aquí. Todos los tipos están aquí. En integers, por ejemplo, aquí me está diciendo que el más grande es el 256 y que si le llamamos u int internamente lo va a representar como un 256, pero no son explícitos. Y luego para ver qué tamaño puedo representar ahí, pues sería estas fórmulas que las pongo
por aquí. que lo podría llevar de 2 elevado 228 -1. El -1 es porque el 0 lo contamos que los informáticos somos muy especiales y para ver qué valor es ese, pues sería bueno 3 elevado a + 38. Es bastante grande. Esa sería la forma. Entonces no hay casi ninguna situación donde vas a tener que pasar por más de 256 lo que estás diciendo. Yo creo que sería más dinero que 10 pesos o que los más eh vale genial. Entonces, ahora lo
que vamos a hacer es antes de proseguir, si nos vamos aquí a la izquierda, el cuarto sería deploy and run transactions, ¿vale? Y aquí ya vemos que pone environment y pone un montón de eh de opciones. Nosotros el que tiene por defecto que es Cancún y si abrimos las cuentas, hay un montón de cuentas y ponen 100 eer en todas ellas. Eso es porque remix tiene por defecto unas blockchains que son totalmente locales, son locales a vuestro navegador y como son locales pueden imprimir dinero, por así decirlo.
Entonces cada una de las cuentas tiene 100 e 100 ets y esto me va a servir para pagar el gas de ir desplegando mi contrato y de ir eh lanzando transacciones en mi contrato. Entonces, en mi caso, ya sabéis que cada vez que le damos a guardar o comando ese se va a salvar, si no lo puedo compilar de nuevo, pero de desplegar le tengo que hacer manualmente. Entonces, si le hago deploy aquí abajo veo deployed contracts y voy a ver pues nada que se ha desplegado mi contrato. Aquí voy a ver una transacción aquí abajo y voy a ver cuánto gas he mandado. Pues si os fijáis está funcionando como si fuera una
blockchain totalmente pública, como la blockchain de verdad Etherium Maet que es la de verdad. Entonces, para esta transacción, eh, Remix ha mandado 104,240 de gas, pero lo que ha costado en realidad han sido 90,643, con lo cual el resto se ha quedado en eh en mi cuenta. Para nosotros eso da igual porque de nuevo, como digo, eh teníamos 100 Etherums y aquí vemos como ya no tengo 100, ya tengo 99,999 porque estoy gastando dinero en en transacciones. Aquí, si os fijáis, como favorite number era público, lo puedo ver desde fuera. Esta sería la visión que tendría un consumidor del contrato.
Y aquí lo único que puedo hacer ahora mismo es llamar a este getter, que he dicho que como era público y el contrato iba a generar un getter por sí mismo, lo puedo llamar y si os fijáis me dice que es cero, que es el valor por defecto de la variable. puedo ver esta petición o esta llamada y si nos fijamos pues aquí estaría eh el output que viene en formato hexadecimal, pero bueno, hexadecimal cer es cero siempre. ¿Vale? Bueno, pues ahora lo que vamos a hacer es una función para poder modificar este valor, ¿vale? Entonces, nada, ¿cómo escribimos funciones en solidity? Pues muy sencillo, escribimos function para
empezar. Le vamos a dar un nombre y le voy a poner store o para darle un poco más de emoción lo voy a poner en español. Almacenar. Y ahora lo que vamos a hacer es introducirle los parámetros. Le voy a poner in 256 porque lo que quiero hacer es que cuando le mandemos un número, ese número se guarde en favorite number. Entonces, le voy a poner el tipo y le voy a poner el nombre. Tenemos una convención en Solidity y lo voy a poner este parámetro en inglés y es que todos los parámetros o argumentos, en este caso serían parámetros de las funciones, lo voy a nombrar empezando
por gu bajo, ¿vale? Y esto es porque ahora lo veremos, si no nos podríamos confundir al asignar este parámetro o argumento a mi variable pública que tengo definida a nivel de contrato. Me está diciendo que tengo un error y es que me falta el modificador final. Le voy a decir que la función es public de nuevo. ¿Vale? Entonces ahora lo que voy a hacer es dentro de la función voy a almacenar en favorite number el parámetro que el usuario me ponga cuando llama al contrato y punto y coma. ¿Qué ocurre? Esta eh convención de empezar por undore o guaj todas las
nombres de los parámetros es super importante porque si no ahora aquí ya me quedaría de esta forma y me quedaría un poco lioso. Me quedaría favorite number igual a favorite number y esto me quedaría así bastante feo. Entonces si lo pongo de esta forma me queda mucho más claro lo que está haciendo mi función. ¿Alguna pregunta? Vale, que la función sea public, pues como el nombre indica, significa que puede ser llamado desde fuera del contrato. También podría ser private y solamente podría ser llamado desde dentro del contrato. Si le doy a salvar, de nuevo, lo va a compilar y ahora ya me puedo venir a desplegarlo y le vuelvo a hacer un deploy. Esto vuelve a lanzar una
transacción al blockchain de verdad con un montón de datos. Ya sabéis que los datos que le está mandando no es más que el byte code de la compilación. Lo manda todo al blockchain y ya con ese byte code puedo ejecutar la última, el último de los despliegues. Tengo ya la función que es almacenar, que me pide que tenga un eh un input, ¿verdad? Pu, en el input puedo poner lo que yo quiera. Voy a poner 23. Le doy a transaccionar.
Clico en almacenar y nada, esto ha lanzado una transacción que tiene pues eh su transaction has, tenemos el número de bloques, si os fijáis, si os vais a la red de Etherium, ahora mismo tiene muchísimos bloques. Nuestra blockchain, en mi caso, tiene tres bloques porque lo que va a hacer es que cada vez que mande una transacción va a minar un bloque porque los únicos que estamos haciendo actividad en esta blockchain somos nosotros. En el mundo real esto no ocurre. Hay mucha gente haciendo actividad, con lo cual se ejecuta un bloque cada cierto tiempo.
Eh, no espera que haya actividad. En el caso de Etherium, hay otras blockchain que lo hacen en función de la actividad. En el caso de Bitcoin, por ejemplo, tenemos los famosos 10 minutos, que sería una de cada 10 minutos. Eh, aquí tenemos también eh todo lo que nos ha costado la transacción en término de gas y el input que le hemos dado. Bueno, pues ahora lo que puedo hacer es preguntar por mi número favorito y si nos fijamos aquí tenemos 23 porque es lo que hemos almacenado. Y no solo eso, sino que si me vengo a todo lo que me ha devuelto en e en la transacción, nos fijamos que tenía un input, que era la parte de
llamar a esta función, eh la parte de llamar a la función que me hace el getter de esa variable, de la variable favorite number, pero que tengo un output que es 17. ¿Cómo? Si era 23, es 17 porque está en hexadecimal. Yo me vengo a aquí, por ejemplo, y le digo ex to decimal y le digo que me ha devuelto 17 y que me lo convierta. Fijaos que en decimal sería 23 porque en la blockchain siempre va a funcionar en exadecimal. Todo bien hasta ahora. Sí.
Vale, pues dentro de eh de almacenar yo puedo hacer ya lo que quiera y aquí es donde entra la parte de eh nuestra creatividad. Entonces, fijaos que yo favorite number, bueno, pues cuando alguien me diga que su favorite number 23, por ejemplo, yo lo que voy a hacer es voy a incrementarlo con uno, ¿vale? Entonces, eh, lo puedo compilar, lo puedo desplegar y ahora cuando almaceno 23 y luego hago la petición, fijaos que tengo 24, ¿vale? Porque lo que he hecho es en una primera instancia he cogido el
argumento que me viene en el parámetro favorite number. siempre yo soy muy fundamentalista del de la ingeniería del software. Argumento es cuando ya esté instanciado el parámetro. Entonces, cuando instancia el parámetro con 23, el 23 lo almaceno en mi variable public y luego lo que voy a hacer es que ese 23 que ya estaría aquí almacenado, 23 + 1, 24, lo vuelvo a almacenar en Febina. Vale, esto no tiene mucho sentido porque me está dejando una función que me pone a almacenar, pero en realidad está haciendo almacenar e incrementar en uno, con lo cual no queda muy bien. Así que nada, lo dejo comentado y para comentar pues el slash slash el doble barra hacia delante.
Ahora lo que voy a hacer es voy a escribir una función que le voy a llamar retrief, que lo que va a hacer es obtener ese valor. Entonces, le voy a llamar function. retrif y le voy a decir que se llame eh que me va a devolver nada y le voy a poner que es pública, pero que es una vista y que devuelve una view y que devuelve un u in 256 y esto me va a devolver pues favorite number. Está en un error.
Ah, ¿por qué me dice que falle aquí? Returns. Genial. Y eso me va a devolver favorite number. Genial. Pues e, ¿qué está diciendo aquí? Voy a tener una función retrift que es pública, es decir, puedo llamarla desde fuera del contrato, tiene el modificador view, que ahora vamos a ver lo que es, y que me va a devolver algo que es de tipo u 256.
¿Por qué in 256? Porque es justo el valor que tiene mi favorite number. Yo esto lo compilo. De nuevo, me voy a deploy y lo despliego. Ahora voy a tener una nueva versión de mi contrato donde yo puedo almacenar 45 y puedo llamar a retrief y me devuelve 45. Vale, la diferencia es que estoy usando aquí una de las cosas nuevas que hemos visto es view. Y view lo que significa es que no puedo modificar el estado de mi contrato. Es decir, dentro de view yo no puedo hacer favorite igual a 1. Esto me daría un error y justo el
error que me está diciendo, eh, esta expresión está modificando el estado. ¿Por qué esto es muy importante? Porque lo que dice Solidity es que si escribimos view, yo me aseguro o se va a asegurar el lenguaje que no va a modificar el estado, pero lo que va a hacer es que cualquier persona que llame a esa función no va a tener que pagar gas. Y eso es muy importante porque cuando estamos desde programas desde fuera leyendo los valores de los contratos, nosotros como usuarios si queremos ver el valor por ejemplo de una transacción no queremos pagar por ello.
Entonces cuando escribimos view no va a consumir ningún tipo de gas. De hecho, si yo este retrief que he hecho este call, si miro cuánto gas ha gastado, no me pone nada de gas porque es una un simple call al blockchain. Pero si le doy almacenar, si os fijáis, se lanza ya una transacción y entonces es cuando hemos mandado 27000 de gas. dudas hasta ahora en la función de retrip, porque tienes que redefinir el win 256 porque ya lo has definido en la variable.
Eso es eso eh es algo muy particular de los lenguajes fuertemente tipados y estáticamente tipados que es que te van a pedir que le pongas el tipo a todo. En el caso del blockchain, Solidity es fuertemente tipado y en el caso de Solana e con Rust igual. Y eso es porque quieren hacerlo muy seguro. Eso es el motivo en que si yo pongo que esto va a devolver un string, por ejemplo, pues aquí me va a decir e este es un poco particular, pero si le digo que es buleano, pues le digo, "Vale, yo como he definido mi función, imaginaos que estoy escribiendo la la asignatura de mi función y le digo, "Vale, voy a escribir una función que es retrief, no modifica
el estado, le voy a poner view y va a devolver un buleano." y luego no le devuelvo un buleano, le devuelvo un un entero. Pues fijaos que el compilador en compilation time me va a chillar y me va a decir, "Te has equivocado en el tipo porque hay un mismatch de los tipos." Entonces, de esa forma, mi especificación con mi programación eh tienen que estar de acuerdo en compilation time. Si no se diera cuenta en compilation time, esto llegaría a la ejecución y entonces chillarían los programas una vez que ya se ejecuta la función porque claro, yo estaría esperando un entero cuando en realidad me ha venido un bulean o viceversa.
¿Alguien te ha preguntado cuánto es mucho gas? mucho gas. Eh, depende, depende, pero no tengo e no tengo una explicación para eso, pero sí tengo una explicación para este tipo de para una cosa que voy a explicar ahora sobre el gas y sobre el view, he dicho que el view es no consume gas y que es totalmente gratuito llamar a esas funciones. Es totalmente gratuito llamarlo desde fuera del blockchain.
Pero, ¿qué ocurre? Si aquí, por ejemplo, eh voy a llamar a almacenar bien, ¿cuánto gas ha consumido? Eh, transaction cost 23,840. Bien. Y ahora lo que voy a hacer es eh si mi trackpad. Bueno, un segundo. Bien. Y ahora lo que voy a hacer es desde la función almacenar voy a llamar a retrief.
¿Vale? Fijaos que desde la misma función estoy llamando al retrief que era gratuito porque era view. Antes teníamos 23,840 y ahora lo que voy a hacer es eh salvarlo, desplegarlo y a la nueva versión le voy a decir almacenar 45 para que no haya ninguna trampa. Y si nos fijamos transaction cost, bastante más. Y es porque decimos que, vale, todas las pews desde fuera del blockchain las puedo leer sin pagar, pero si dentro del blockchain desde una función me vas a llamar a otra que es
view, eso es parte de la computación, con lo cual no quiero ni trampa ni cartón y me vas a pagar por ello. Entonces con eso hay que tener un poco de cuidado. El gas como siempre ya sabéis que va variando y hay muchas empresas pues que hacen ese tipo de predicción y es que si buscamos gas costón de páginas scam por ejemplo pues nada te va diciendo más o menos cuánto cuánto va costando y eso ya sabemos que cuando lanzamos transacciones o interaccionamos con contratos, cuanto más gas paguemos E antes va a ser atendida nuestra
transacción porque, por supuesto, la gente que está corriendo nodos va a querer ganar más dinero, con lo cual es un sistema ahí muy capitalista en el que si pagas un poco más tu transacción se adelanta. Por eso aquí eh en el en este caso te va diciendo conforme vas pagando eh cuánto va tardando en segundos tu transacción ¿vale? Pues [Música] fijaos, eh, aquí ahora lo que voy a hacer es voy a cambiarle la visibilidad a private, le voy a dar almacenar y recordad que aquí mi versión anterior tenía almacenar favorite number porque
tenía un getter que yo había dicho si escribimos public va a tener un getter y tiene retrief porque es por así decirlo como un getter que yo he escrito en forma de view que es totalmente gratuito. Y ahora voy a desplegar mi contrato. La única diferencia es que he modificado el modificador de mi variable de public private y mi nuevo contrato ya no tiene la variable favorite number, está totalmente oculta. ¿Vale? Por eso al escribirle private ya no es público al blockchain, ya es público a mi código interno. Entonces ahora ya si pongo 45, la única forma de acceder a ella es haciendo el retrief, pero no usando el getter de esa variable que anteriormente era public.
preguntas, ¿no? Bueno, pues hemos avanzado un montón, hemos hecho variables, funciones y ahora vamos a hacer eh lo último que son tipo arrise y el próximo día seguimos desde ahí. Luego digo si queréis seguir por Updraft, toda la parte del curso que hemos hecho aquí en español, pero lo podéis volver a ver en inglés escuchando a Patrick Collins que lo explica mejor que yo. Con subtítulos en castellano. Ah, o con subtítulo en castellano. Entonces, subtítulos subtítulos en todos los idiomas, como más de 20 creo que son, pero sí. Entonces, en inglés estaría genial porque así también aprendemos inglés, que como ya sabéis, las mejores ofertas de trabajo, los
mejores trabajos siempre van a ser posibles en en inglés, ¿vale? E bien, pues ahora voy a hablar de tipos. Eh, hay un montón de tipos y todos están aquí. Eh, pero así si me preguntáis, me decís que puedo explicarlo yo de con mis palabras, pues nada, tenemos los tipos básicos de todos los lenguajes, que son buleanos enteros, eh, y ya está. Y luego tenemos algunos tipos que me lo da el framework, como sería el tipo string, que me permite almacenar cadenas de caracteres. Eh, luego yo puedo definir cualquiera de los tipos que quiera y para poder definir un tipo le tengo que
empezar con la palabra reservada structura y le voy a definir un tipo, por ejemplo, que sea person. Y fijaos, le puedo decir que una persona tiene un número favorito y otra cosa que puede tener una persona es un nombre. Con lo cual, de esta forma estoy definiendo el tipo persona como una persona con su nombre y su número favorito. Y luego, pues podría tener aquí una variable que fuera person, ¿verdad? Ya el tipo no sería. Sí, creo creo que no estás compartiendo ahora.
Mucho mejor. Pues entonces había escrito stru personría en ningún momento de la hora. Digo, raro es. es que estaba demasiado atento. Entonces, tengo el struck person donde había definido el favorite number y el nombre de esa persona. Y ahora ya fijaos que puedo definir una variable incluso privada o o public eh con ese tipo. Es decir, he definido un nuevo tipo dentro de este lenguaje y ya puedo usar pues ese tipo donde quiera. que no tengo que escribir u in 256, sino que puedo escribir directamente person. Y esa ese tipo de persona lo
podría también almacenar. Eh, podría poner string, luego voy a eso y nombre. Y podría de esta forma pues almacenar esa persona y decirle, lo ha autocompletado, pero digo, mi favorite person y su nombre es el nombre que me han dado y mi favorite person su número favorito sería el número favorito que me han dado e como parámetro o como argumento para que sea más breve La explicación lo voy a cambiar a public y esto habíamos dicho que lo que me iba a
hacer es que me va a definir un getter. Entonces, de esta forma ya si compilo si despliego, el nuevo contrato ya me permite almacenar un algo, me permite almacenar algo que tiene un nombre y un número. Entonces, le voy a poner 23 y el nombre le voy a poner Nacho, por ejemplo. Lo mando como transacción y luego ya puedo hacerle la petición de My favorite person. y me va a devolver, pues fijaos, Favorite number 23 y un string de tipo un in 256 y un string de nombre nacho, lo cual de esa forma puedo
definir todos los tipos que quiera y esto es muy útil porque a la mínima que se complique un poco el contrato, lo mejor es tenerlo todo superestructurado en tipos. Ya por último, lo que vamos a ver es a Rise. Es que alguien me puede decir, claro, pero esto es un poco raro, ¿no? Porque si ahora queremos almacenar a Ana, también tenemos que definir otra variable y desplegar el contrato. Y esto en la vida real así no puede funcionar, sino que tengo que tener algo que sea como dinámico, ¿no? Escalable. Pues ahí justo es donde entra eh la palabra reservada memory, que luego podemos leerlo también en la documentación, pero memory lo que me va a decir es que para
cada tipo eh dinámico tengo que decirle dónde se va a almacenar esos datos, si viene en memoria, si viene en el estado, en fin, eso lo veremos en la siguiente clase. Y lo que vamos a decir aquí que nada, que lo almacen en memoria y que luego se olvide de ello, que no lo deja en el estado. porque los tipos dinámicos ya no sabemos cuánta memoria van a consumir, con lo cual el lenguaje es muy estricto en que le digamos eh dónde almacenarlo. En el caso de buleanos o 256 sabe exactamente cuánto va a ocupar, que son 256 bits. String que es un tipo dinámico porque es una cadena de caracteres que no sabemos qué longitud va a tener, no sabemos si es un nombre o un
libro. Bien. Y ahora el tema de los ar pues muy sencillo. Si queremos tener una lista de personas, le voy a poner list ofs people. Y de esa forma e no estoy diciendo nada porque un nombre no es más que el identificador, pero lo que sí me va a definir que es una lista o una Ray es el abrecierra corchete cuadrado. ¿Vale? Entonces, de esta forma lo que estamos diciendo que voy a tener una ray. Hay dos tipos de array, los arrays dinámicos, que es tamaño no definido, y los arrays eh estáticos, que es con un tamaño
fijo. Entonces, en el caso de los arrais dinámicos, lo vamos a definir de esta forma. abre, cierra, eh, corchete. En el caso de los arrays estáticos, le vamos a poner un número aquí que sería solamente permitimos que haya tres personas. Vamos a dejarlo como dinámico. Y aquí lo único que tenemos que variar un poco es la forma en la que añadimos personas porque ahora tenemos una Ray y entonces lo veremos con más detenimiento en la próxima clase. Pero básicamente lo que vamos a hacer aquí es un push que vamos a añadirle algo a esa lista y lo que le
vamos a añadir pues es una persona con favorite number y nombre. Y si nos fijamos, esto de aquí, que puede ser un poco lioso, esto no es más que la definición de la persona nueva, que lo que hemos definido es como una instancia de ese objeto. Entonces, fijaos que aquí definimos new person y luego lo añadimos. Me está pidiendo el memory. Genial.
Y de esta forma eh, lo que estamos diciendo es, vale, cada vez que me llames a almacenar, créame una nueva persona con su nombre y su número favorito, créame este objeto persona y luego añádelo a la lista. Yo lo que he empezado haciendo es la forma reducida, que es esto. Lo puedo copiar directamente aquí y dejadme que lo haga, que se quede ahí almacenado. Esto lo puedo añadir directamente aquí. Y entonces Solidity lo que va a decir, va a saber que primero tienen que crear una persona y luego añadirle a la lista de personas, ¿vale? Y nada, como siempre, compilo,
despliego y ahora ya aquí el último, pues puedo añadir 23 y Ana almaceno. Bien. y luego 41 y nacho almaceno y luego si le pido la lista de personas del que está en la posición cero, pues fijaos que me está dando 23 y Ana. Si digo el que está en la posición uno de la lista 41, si digo el que está en la posición dos, pues nadie.
De hecho, fijaos que dice, "La transacción ha sido revertida porque ha ocurrido un error." El error es que no hay ninguna persona en la posición dos. Puedo ahora poner el nito y el número 42. Si lo almaceno y hago la petición con dos, pues me dice eh 42 inito. Pero si le vuelvo a hacer tres pues ya me da error de nuevo.
Dudas. Aparte ya es cuando se empieza a poner más interesante. Así que eh lo dejamos aquí. Y ahora lo que iba a decir es, vale, si quiero seguir aprendiendo antes de la siguiente clase, ¿dónde puedo ir? Pues me vengo a CFINENP Draft, que simplemente podéis escribir esto en Google, me vengo a todos los cursos y lo que hemos hecho hoy es la parte de Solidity. ¿Sigues en la página anterior? Ahora sí, ahora.
Entonces, esta sería la página inicial. Le doy a explorar todos los cursos. Voy a hacer un login. Eh, vale, un segundo. Podéis entrar con lo que queráis. Yo voy a entrar con Google. Y ahora ya va a cargar. pod empezar el curso y nos hemos quedado justo en los arris que seguir
genial. ¿Qué más cosas? Eh, nada más. Eh, ¿cómo seguir mejorando? Pues yo no lo tendría, no tendría duda. Completaría el curso de Solidity en Updraft y luego eh hablaría mucho con CH GPT, que yo lo suelo hacer para que me vaya explicando todos los errores y dudas y me vaya elaborando mi hoja de ruta para seguir aprendiendo. Y luego una última reflexión que es lo que yo hacía en chin análisis, lo que hago en Chainlink, no siempre trabajar con blockchain significa programar en Solidity, sino entenderlo un poco y poder hacer programas alrededor de Solidity. Por ejemplo, los eh desarrolladores de seguridad pues analizan estos contratos que otras personas han creado, que es lo
que se hace alrededor de todo el framework y de todas las herramientas y perspectivas de de Sframe. En el caso de Chinlink, por ejemplo, mi trabajo consiste en usando estas llamadas de call que hemos visto que no gastan gas, leer todo lo que va ocurriendo en los contratos y ponerlo en una base de datos para que luego pueda ser legible desde un frontend, desde una UI. Por ejemplo, si me vengo aquí a data dochanglink y me vengo a data fits y me vengo a ver un valor. Aquí pone 94,000, pero ese 94,000 no está en el blockchain porque si estuviera en el blockchain yo habría tenido que conectar mi billetera o hacer algo eh relacionado con con web
3. Y aquí no hemos hecho nada, hemos accedido directamente. Estos datos son los que eh en mi día a día lo que hacemos es hacer esos call a los contratos, ver el valor que hay ahí, ponerlo en una base de datos y luego desde un frontend simplemente se llama esa base de datos. Entonces de esa forma eh podemos trabajar en el blockchain sin trabajar realmente en Solidity, pero la idea es que sigamos aprendiendo Solidity para que podamos estar lo mejor formado posible que podamos y podamos acceder a tanto trabajos alrededor de Solidity o en Solidity.
¿Alguna pregunta hasta ahora? Pues si queréis lo dejamos aquí. Eh, espero que os haya gustado y nada, cualquier cosa, cualquier duda que tengáis, ya sabéis dónde encontrarme. Eh, o bien en el Discord de Cfre también es superactivo, un montón de estudiantes intentando aprender y aprendiendo. Y si no, pues en mis redes sociales, LinkedIn o donde queráis también estoy por ahí. Así que nada, muchísimas gracias. Muchas gracias.
Muchas gracias. Lo has explicado fenomenal. Yo sé 100 veces más que antes. O sea, bueno, si sabemos solamente una cosa más, pues no hemos nada. Por eso me doy por satisfecho que hayamos aprendido algo. Al menos pues eso, hemos conocido del uno al otro. Genial. Pues sin más lo dejamos aquí y nos vemos pues nos vemos en las redes, al otro lado de internet. Gracias. Chao.