Solidez : aprender los fundamentos para convertirse en un desarrollador inteligente - 2022 | Dave Slater | Skillshare
Buscar

Velocidad de reproducción


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Solidez : aprender los fundamentos para convertirse en un desarrollador inteligente - 2022

teacher avatar Dave Slater, Develop the World that you dream of

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:18

    • 2.

      Lección 1 - Remix IDE y documentos

      11:20

    • 3.

      Lección2 - variables y funciones

      42:29

    • 4.

      Lección 3 - arrayas

      22:38

    • 5.

      Lección 4 - aplastamientos

      23:25

    • 6.

      Lección 5: acondicionamientos y bucles

      34:13

    • 7.

      Lección 6 - Listas enumeradas

      9:23

    • 8.

      Almacenamiento simple

      17:46

    • 9.

      Alquilar un automóvil

      36:15

    • 10.

      Minter

      31:14

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

447

Estudiantes

1

Proyectos

Acerca de esta clase

¿A quiénes está dirigida esta clase?

Esta clase es para cualquier persona que quiera comenzar a aprender un desarrollo inteligente con el lenguaje de solidez. Aquí vamos a cubrir los fundamentos en un método paso a paso.

La mayoría de los tutoriales y cursos a los que seguí se concentran en crear algún tipo de proyecto desde el principio, que es una excelente manera de aprender, pero también pasan muy rápido por lo básico y yo solía encontrarme sin entender por qué escriben código de una manera determinada.

En su lugar, aprenderás los conceptos básicos del lenguaje de codificación de solidez y la estructura básica de contratos inteligentes sencillos, así como cómo leer la documentación de solidez.

El objetivo es completar la clase con la capacidad de comprender los conceptos básicos para que todo te tenga más sentido cuando te sumerjas en temas más complicados.

Lo que aprenderás:

  • Remix IDE, versiones de solidez
  • Tipos de datos, variables y estructuras
  • Función
  • Arrays y mappings
  • Cómo hacer declaraciones si
  • Listas enumeradas y modificadores de funciones

Qué vas a crear:

En el camino vamos a crear algunos contratos inteligentes básicos:

  • Contrato de almacenamiento simple;
  • Controlar un coche
  • Moneda de moneda y transferencia

¡La clase está hecha para cualquier persona con poco o ningún conocimiento de codificación!

Encuentra archivos sobre esta clase

Documentos de solidez: documentos de solidez

IDE de Remix: IDE

Música en la introducción: https://www.bensound.com

Conoce a tu profesor(a)

Teacher Profile Image

Dave Slater

Develop the World that you dream of

Profesor(a)

Hello, I'm Dave. I am a developer advocate, tech enthusiast, pilot, and flight instructor! I have an extensive teaching experience from my flight instructor background. During my programming journey, I learned so much from the community, and I want to do my part to give something back!
Here I will focus on the Solidity language to create smart contracts and python, especially python, to interact with the blockchain.


I have worked on many projects and helped many teams launch their DApps.


What can you expect from me?
- Clear and step-by-step explanations.
- Support and interaction if you have doubts or questions.
- Enjoyable classes that will help you during your coding journey!


I structure my courses to be beginner friendly; if you have zero... Ver perfil completo

Level: Beginner

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: El blockchain es una tecnología increíble. Cuando empecé a aprender solider, estaba muy emocionado con todas las oportunidades son todas las ideas que tenía en mi cabeza. Pero entonces empecé a notar que todos los cursos y todos los tutoriales, enseñan los fundamentos mientras llamaban algún contrato inteligente. Y son simplemente realmente esquema un poco injusto para pegarlo muy rápido. Eso dificulta el aprendizaje de este idioma a menos que tengas algún otro tipo de experiencia en programación. Por eso, decidí hacer este curso para ayudar a todos los que quieran empezar a aprender a codificar contrato inteligente en el lenguaje de solidez, incluso sin experiencia de programación, vamos a repasar la estructura empresarial de un contrato inteligente y las herramientas son simplemente nos da. Aprenderás a usar el IDE de remix y cómo filtrar a través de la documentación. La hoja de ruta principal consiste en todos los fundamentos. Al final de este curso, podrá comprender variables y funciones, matrices, asignaciones, condicionales, bucle, así como un enumerador, lista Y modificadores de función. Entonces en el camino, también codificaríamos algunos contratos inteligentes más prácticos para ayudar a solidificar lo que has aprendido durante el curso, haremos un simple contrato de almacenamiento, un contrato que te permita para realizar un seguimiento y alquilar un auto, e incluso un contrato que permite acuñar y enviar monedas a diferentes direcciones. Me llamo Dave, y espero que disfruten de este curso. 2. Lección 1: Remix IDE y documentos: Empecemos de inmediato. solidez es un lenguaje que debes saber si quieres convertirte en blockchain en el medio ahí. Ahora, solidifica el lenguaje que interactúa con la Máquina Virtual Ethereum. Y ese es el software que entonces va a ir en última instancia e interactuar con el teorema blockchain. Ahora, podemos empezar a aprender sobre solidez a partir de la documentación que publican es en realidad muy extensa y muy útil. Lo puedes encontrar en docs.. org. Si exploramos, este sitio web tiene mucha información que no tenemos que cubrir en este momento y es introducción. Pero una cosa que quiero señalar es la versión que es muy importante. Si vas por aquí, puedes identificar cada versión que publiquen. En este momento estamos seleccionados en la última. Por lo que estamos viendo la documentación para la última versión posible, que es esta 0.80.13. Este de aquí. Si vamos a mirar las otras versiones, por ejemplo, versión en cuatro, aquí, podemos ver que en realidad es muy diferente. Es de hace unos años. Todo es tan diferente, hay mucho menos información. Ahora bien, esto es para resaltar que es muy importante usar la última versión porque realmente cambian la sintaxis. Entonces, por ejemplo, la sintaxis que haces estás usando en versión ocho sabrá trabajar si estás tratando de compilarlo con una versión para compilador. Y veremos más sobre esto más adelante. Pero para ir a hablar más sobre solidez. solidez es un lenguaje de alto nivel y se está inspirando C Plus Python y JavaScript. Por lo que ya estás familiarizado con estos lenguajes te va a ayudar mucho porque la sintaxis es muy similar, sobre todo a JavaScript. Ahora, ¿dónde escribimos solidez? En realidad no tenemos que instalar nada en la computadora, lo cual es genial. Hay un gran sitio web, remix.ethereum.org, que te da todas las herramientas para hacer todo. Podemos escribir el código, podemos compilarlo, podemos desplegarlo en la blockchain y podemos probarlo. Podemos probarlo en un entorno similar al o incluso en un imán. Entonces este es el IDE remix. Aquí. ¿Qué es un ID? Id significa Entorno de Desarrollo Integrado. Y en comparación con solo un resfriado regular que le dará un poco más de herramientas. Por ejemplo, si ya estás familiarizado con la programación, podrías conocer otros softwares como Atom y VS Code. Atom es considerado editor de código regular porque puedes codificar, sí, te da algunas cosas extra en comparación con un editor de texto. Da a tu sintaxis resaltado y cosas así. Pero no te da ninguna herramienta extra. Por ejemplo, VS Code. El código Vs te da un terminal virtual donde puedes probar a ti mismo para fugitivos y remixes. Más o menos lo mismo para la solidez. Tiene una interfaz irregular gratuita al hacer clic en su icono principal donde se pueden notificar archivos abiertos y cosas por el estilo. Si estamos tratando de conseguir un nuevo archivo, aquí ya está arriba y nos da un ejemplo. Aquí. Se trata de un contrato. ¿ Verdad? Ahora. Podemos hacer frente en este entorno. También podemos elegir un compilador y compilarlo. Y aquí, por ejemplo, es donde entran las versiones, entran en juego. Además de compilarlo. Podemos desplegado y probado. Ahora hablemos un poco más las versiones que hoy quiero cubrirlo. Aquí. Cada contrato, cada vez que empieces a codificar solidez, comenzarás con estas dos líneas. Este es un comentario para identificar la licencia de este contrato inteligente que estás codificando. Entonces para dar un poco de historia aquí y por qué al compilador le gusta tener ese identificador de licencia. Y lo superior es porque la blockchain es esencialmente un entorno de código abierto. Y tener una fuente donde viene tu código es muy importante. Si vas a buscar el identificador de licencia ESP edX en Google te va a llevar a la página web que te da ejemplos de todas las diferentes licencias que puedes tener. Cuando vamos a llamarlo nuestras cosas. En este curso, vamos a utilizar la licencia del MIT porque es el código más abierto. Puedes. Si podemos tomar este código y hacer absolutamente lo que quieras con él. La línea de círculo que siempre va a estar ahí es la solidez pragma. La solidez le da al compilador la versión del código que estás usando. Por ejemplo, estas líneas que tienen aquí donde tienen líder a igualar 40416 menos de 0.9 significa que este contrato funciona con el compilador desde la versión 0.4.1 hasta quemar en 0.9. Por lo que esencialmente la última versión posible. Siempre vamos a ver algunos libres como este o por estos contrastes ¿vamos a escribir durante este curso? Voy a escribir algo un poco diferente a la primera versión. Y sólo voy a dejarlo así, mientras que dice, En realidad hicimos ocho. Este formato aquí le dice al compilador que toda la versión del compilador trabajo tardío. Pero ahora estás diciendo ¿cómo elijo al compilador? Bueno, Rubrics lo tiene ya en la interfaz. Entonces si pasamos a la página del compilador, verás aquí que puedes escoger la versión piloto de forma automática siempre está alcanzando el máximo de la 0.6.6. Tantas veces podríamos querer codificar así porque entonces evita este paso aquí. Pero si queremos compilar con una versión diferente, acabamos de seleccionar. Estos trabajos con toda la versión a partir de las ocho. Si elegimos 0.80.13 y compilamos, debería funcionar. Y de hecho aparece el ícono que dice recompilar correctamente. Ahora, por qué estaba mencionando que es importante recordar qué versión estás usando es porque si tratamos de compilarla con un compilador que está fuera de esta versión, entonces no va a funcionar. Ahora este va a ser el principal entorno donde vamos a estar codificando nuestro contrato. Pero la segunda parte que es muy buena sobre el remix es que tiene una sección donde se puede desplegar transacción incorrecta. Esto es genial porque te permite probar el Congreso inmediato ya sea en una máquina virtual o en una red de pruebas, e incluso usando MetaMask en la prueba. Por lo que es una gran herramienta. Ahora, verás cómo está aquí el comprador. Usted recoge el medio ambiente aquí arriba en la parte superior. Y por lo general lo falso. Por lo que esta Máquina Virtual JavaScript en préstamos en Oberlin, JavaScript Virtual Machine, VM significa que estamos probando y probando el código en un entorno virtual. Estos conectados desde testículo. Si nosotros, por ejemplo, queremos usar nuestras matemáticas para probar, no sé, en la RNC sea testlet. Aquí lo tengo seleccionado cuenta principal por fuera. Es sólo la cuenta que uso para las pruebas. Temas. Muéstrale cualquiera aquí. Si seleccionamos el anillo B test cuello, verás que tengo algún eith en la prueba. Entonces si recogemos ambiente de inyectado con tres, entonces verá que aquí muestra nuestra red cerebral PI. Incluso podemos usar las matemáticas para desplegar e intentar probar nuestras transacciones. En. Este sistema es muy bueno para nuestro desarrollo entonces es el, más o menos lo único que vamos a usar. Entonces además de que además de estas dos cosas en línea, hay tantos buenos recursos para aprender solidez como es un lenguaje relativamente nuevo. Y es de código muy abierto. Este sitio web aquí para tolerancia point.com es muy bueno en usar libremente, muchas veces tiene un muy buen diseño de todo lo que toda la sintaxis básica que necesitas algún espectáculo. Muchos ejemplos fueron muchas explicaciones también. Así que realmente recomiendo demasiado profundo para éste también. Estos son el artículo o sitio web aquí. Blog x.com, y chicos la solidaridad es muy buena. Así que no tengas miedo de buscar recursos y otros tutoriales que te ayudará a aprender. Hoy, pasamos por los mismos fundamentos del lenguaje es tener una idea de lo que significa el lenguaje de la solidez. Y exploramos un poco la interfaz de remix que vamos a utilizar durante este curso. Entonces en la siguiente lección, vamos a empezar básicamente de nuevo la grabación. En la siguiente lección, codificarás tu primer contrato inteligente. Vamos a repasar todas las variables que principalmente vamos a utilizar, así como una introducción a las funciones. Las funciones son muy importantes en solidez o uso, uso mucho. Quiero presentarlos temprano para empezar a tener una bastante buena comprensión de ellos. Nos vemos en la siguiente. 3. Lección 2: variables y funciones: Hola y bienvenidos de vuelta. El día de hoy es la primera lección real donde comenzaremos a codificar y escribir algo en el ID del remix. Repasaremos variables y funciones en Solidez. Solidez, al igual que cualquier otro lenguaje tiene muchas variables disponibles. Hoy vamos a explorar la sintaxis, los diferentes tipos, y te mostraré algún ejemplo bastante bueno. Así que vamos. Vale, empecemos a mirar algún código. Así que una vez que abras lo realmente emocionante siempre va a aparecer con este contrato de ejemplo la forma en que en este momento solo puede cerrar. Si vamos a ver la interfaz regular aquí es bastante sencillo. Podemos simplemente dar click aquí en nuevo archivo. Al igual que cualquier otro editor de código espacios de trabajo disponibles. Y acabo de crear uno para estos cursos. Puedes, puedes usar uno de los entornos de muestra o hacer el tuyo propio. Depende de ti. Realmente no hace ninguna diferencia. Ahora, aquí, tendremos un pequeño botón para crear un nuevo archivo o podemos crear una reforma grandemente desde aquí, nuevo archivo. Y podemos empezar con un nombre. Entonces en solidez, es un procedimiento común nombrar el expediente con una inicial capital. Por ejemplo, vamos a nombrar a éste aquí, variables, variables, esas sal. Por lo que cada archivo de Solidity va a tener la extensión. Por cierto, en la descripción de este curso, encontrarás el enlace a mi repositorio de GitHub donde encontrarás todos los archivos que vamos a anotar aquí, que es para muchos más comentarios. Comentarios generalmente nuestros, no, nuestros comentarios son muy buena práctica, pero no se quiere exagerar. Y en estos archivos que encontrarás en el repositorio la manera exagerada solo porque quiero tener una forma de tener un archivo estático sin el video que explique muchas cosas. Una vez guardemos el expediente va a ser MTN, como mencionamos ayer. Cada contrato inteligente de solidez siempre va a empezar con las mismas dos líneas. La certeza más bonita, el fuego, y la solidez, el recto. El identificador se va a escribir con los dos selección hacia adelante de las dos slashes adelante solidez son los caracteres para comentarios. Cuando quieras comentar algo, siempre vas a iniciarlo con los dos slash hacia adelante. Aquí vamos a hacer las dos hormonas. Identificador Pdx. Como mencionamos ayer, siempre va a utilizar. En esta lección. Siempre vamos a utilizar las licencias del MIT es la más frecuente. Entonces la directiva pragma va a venir después. Y como mencionamos en la última diapositiva, una versión. Aquí usaremos la palabra clave pragmas solidez. Y como se puede ver, el editor de código realmente da una sugerencia. Entonces esta es una forma muy eficiente de hacer frente. Y solo puedes presionar Tab y va a compararla solidez. Tener la versión. Entonces en este caso sólo vamos a utilizar el, todos los compiladores conversión ocho, para que podamos usar el personaje que el pequeño acento superior. Y luego 0 punto ocho punto 0, y terminan con un punto y coma. Cada instrucción en Solidity termina con un punto y coma, al igual que en JavaScript. Esta primera instrucción le dice al compilador que toda la versión muerta ocho debería funcionar. Entonces podemos escribir, por ejemplo, si quieres codificar esto, lo siento, si quieres comentar estos dos tienen una referencia para más tarde para que no te olvides, puedes hacer las dos slash de terror y con ello lo que quieras, lo que pongas en los comentarios ahora se va a ejecutar como código. Entonces aquí por ejemplo, es decir colas, la versión de solidez. Tendrás un recordatorio para más tarde. A continuación, se trata del contrato real sal la instrucción en el contrato abarcado en la palabra clave del contrato hará un contrato. Entonces después de que la palabra clave contradicen viene el nombre del contrato. En solidez es también una gran práctica nombrar al contrato lo mismo que el expediente. Entonces en este caso lo llamaremos V mayúscula, variables. Variables. Aquí los dos corchetes. Entonces cada vez que las estructuras están dentro de los dos corchetes del contrato. Ahora empecemos a hablar de variables. Por lo que solo dice en cualquier otro lenguaje hay muchas variables son las variables pueden ser números, que en el mundo de la programación que comúnmente se conocen como enteros, no pueden ser cadenas que son solo una colección de caracteres, como letras, nombres, pero los números también se pueden usar como cadenas. Simplemente no van a ser reconocidos como números. Y así no vas a poder usar esos números para hacer operaciones matemáticas. Hay variables booleanas. Las variables booleanas son solo un verdadero o falso. que puedas configurar una variable para que sea verdadera o falsa, y eso se puede usar para tal vez desencadenar otra instrucción más adelante. solidez tiene un real, en realidad unas pocas variables especiales que son un poco más específicas de la blockchain. Por lo que tiene una variable de dirección que sólo acepta los números de dirección. Y tiene por 32, que es solo cadenas, pero se convierte en bytes, y es un poco más eficiente. Hablaremos más adelante. Ahora, empecemos a explorar la primera causa la sintaxis. Entonces, ¿cómo escribimos una variable, la novia más antigua que tipo variable primero, luego el nombre igual a un valor que puede ser una cadena, un número, o lo que sea que la variable esté arriba. Y luego el punto y coma. Ahora en solidez, si sólo escribimos el tipo y el nombre así, se va a inicializar directamente a 0. Entonces, por ejemplo, si quieres tener una variable entera que empiece en 0 cuando se inicia el contrato, se lanza o cuando las instrucciones com, entonces solo lo sacaremos así. Ahora repasemos la sintaxis real. Entonces si queremos hacer una variable para un entero, vamos a escribir algo como int, el número de nombre. Llamemos a esta variable número igual diez. En este caso, acabamos crear número de nombre de variable entera, que es igual a diez. Entonces una cosa para explicar sobre el signo igual aquí. Si no estás familiarizado con los lenguajes de programación, igual, No es realmente un nuevo colon, este caso, desigual aquí es más como una asociación. Estamos asociando el número diez a la variable llamada número. Ahora, en Solidity, los números tienen diferentes tamaños. Y como es posible que sepas por la arquitectura general de la computadora, los datos en las computadoras son más que pujas. Y así cuando tienes un entero como este nombre, solo int, significa que esta variable puede aceptar números con un signo que puede ser menos o más hasta 256 bits. ¿ Por qué querrías especificar el tamaño del número? Bueno, porque en cripto y blockchain, hemos trabajado con números muy grandes en todo tu trabajo con números y tal vez tengamos 18 decimales y cosas así. Tendrás que asegurarte de que la variable que usas excepto el tamaño correcto. Ahora, si conoces el, vas a trabajar con un número menor. No tienes que usar los 256 bits. Puedes usar uno más pequeño. Puedes crear un int donde solo hay ocho bits y vas a la sintaxis que puedes tener incrementos de ocho. Entonces podrías tener en ayuda, puede tener en 16, y luego lo nombrarás otro número igual a uno, por ejemplo. Ahora una cosa que quiero explicar un poco más es que veas cómo escribí el num, el nombre aquí, otra comenzando con la inicial no capital y luego la siguiente palabra. Es con letra mayúscula. Esta es otra convención en programación. Se llama CamelCase, jugando camelCase typing, donde básicamente haces separaciones entre diferentes palabras solo desde la inicial. Por lo que verá la mayoría de las variables, mayor parte del nombre de la variable. Verás mecanografiado de una manera similar a ésta, donde la primera palabra es inicial minúscula, y luego va a la iniciativa en mayúsculas. Por ejemplo, es una variable entera. La salinidad también puede tener otro tipo entero que se llama un entero sin signo. N suele ser el que más lo verá aislado. Y lo escribes, tecleándote y luego el nombre, número sin firmar, sin firmar. Igual a 50, por ejemplo. Esto básicamente nos dice que sólo podemos usar números positivos en éste aquí, por ejemplo, int número que podemos llamarlo. Podríamos asociarlo a décimo negativo y funcionará muy bien. Pero el uint8, solo se puede asociar con números positivos o números no firmados. Entonces la próxima vez, cuando mencionamos anteriormente, será un booleano. Boolean es empezar con la palabra clave rule. Podemos llamar a este nombre booleano igual a verdadero. Cuando vamos a recordar estas variables, por ejemplo, en una función más adelante durante el contrato. La función sabe que este valor es cierto y así podemos usar esto. Que la función haga algo. No sé si la variable booleana es verdadera, entonces escribe algo. Siguiente variable que podemos mirar su dirección. Las direcciones son muy comunes en solidez. S es la forma de transferir monedas. Cómo trabajar con el contraste. Entonces misma sintaxis. Dirección, mi dirección. como mencionamos, ésta sólo acepta direcciones. Lo vamos a poner entre las dos cotizaciones. Digamos que quiero usar, en este caso, sólo voy a usar la dirección que tengo aquí en mi copia matemática. Ahora esta dirección variable llamada Mi dirección está asociada a esta dirección del teorema aquí mismo. Y luego más adelante también lo haremos, también veremos cómo, por ejemplo, hacer que el contrato escoja a los demás automáticamente cuando se desplegado y reutilice posteriormente. Cosas que es, la última variable no quieren mencionar en este momento es la Treinta y dos. Treinta y dos es un tipo de variable. Podemos simplemente escribir algunos bytes, igual a una cadena. Eso puede ser aquí tenemos una cuerda regular. En realidad, olvidé mencionar la cuerda regular de la que hablaremos de eso después de esto. Entonces aquí tenemos una cepa. Como mencionamos, una cadena es sólo una colección de caracteres. La diferencia es que en este caso, compra 30 para convertir estas cadenas en bytes. Y simplemente básicamente para este software es un poco más eficiente. Normalmente es una buena práctica porque cada vez que tu código en, en solidez, más código tienes un más pesado los números son y los personajes son, cuesta más gas usar mi transacción. Si puedes hacerlo mejor, de manera eficiente, es bueno porque entonces lo harás los clientes o el contrato, usaremos menos gas. Entonces esto se va a convertir en sesgo y necesitarás tener un front-end para convertirlo de nuevo en cadena. Pero de todos modos, el último en realidad aquí, es un tipo de cadena. Eso es sólo una cuerda. Y dijimos que una cadena es una colección de caracteres. Así que sólo esto puede ser una palabra o una carta o cualquier cosa con un personaje. Aquí están las principales variables que puedes tener en solidez. Y justo en un poco después de esto, exploraremos. Otras variables ahora son capaces de asumir una, como se puede ver aquí, estas variables aquí están bien en el contrato, no están dentro de las funciones. Entonces estas variables aquí se denominan variables de estado. La variable estatal es una variable que está disponible para todo el contrato. Podemos, por ejemplo, llamar a estas funciones. Las llamadas se llaman a estas variables función perma sin tener que tal vez escribirla nuevo o sin tener que especificarla de nuevo, porque ya está disponible para todo el contrato. Si tenemos variables que están dentro de la función, esas se denominan variables locales. Y estas variables solo están disponibles dentro de la función, por lo que tendrás que tener cuidado con donde especifiques tus variables ¿verdad? Ahora en Solidity tiene un extra, digamos una instrucción extra para variables porque las variables pueden ser miradas desde dentro del contrato inteligente o desde fuera del contrato inteligente. Entonces cuando escribimos aquí una variable, digamos que queremos escribir a la derecha. Por lo que hacemos int segundo número igual a 20. Ahora podemos especificar si este número puede ser visible desde fuera del contrato. Entonces por todos o simplemente dentro del contrato. Aquí entre el nombre y el tipo de variable. Podemos agregar otra palabra clave. En este caso, no podemos hacer público. Y público significa que esta variable puede ser llamada o puede ser leída desde fuera del contrato donde puede ser una aplicación. Puede ser otro contrato o algún otro tipo de software puede acceder a estas variables, leer el contenido. En este caso, incluso se puede modificar. Para que todos puedan ver y cambiar, lo cual no siempre es ideal. A la visibilidad. Tipos de visibilidad que podemos tener internos y privados. Ahora si hacemos una u que sea interna. Ahora estas palabras clave internas significa que esta variable sólo puede ser modificada por el contrato n por los contratos correctos. El contrato es sólo otro contratado es heredar los valores de este contrato que mencioné un poco más sobre eso después. Interno sólo puede ser modificado por este contrato. Contrato. El último que tenemos disponible para variables es privado. Lo mal escrito, llamemos a la privada. Es un poquito ver moral, interna. Pero esto significa que el privado, sólo exclusivamente este contrato puede modificar estos contratos. Esto significa que estas variables no pueden ser estrechadas encabezadas por otro contrato o producto. Podrías, pero entonces el otro contrato no puede cambiarlo. A estas se les llama discapacidades. Estado se puede aplicar a variables y funciones. Cuando anotamos nuestra variable, podemos aplicar un estado de visibilidad para asegurarnos de que haga las cosas que queremos que hagan. Ahora. Ahora que hemos hablado de variables y sabemos escribir una variable. Hablemos brevemente de funciones. Podría sentir que estamos introduciendo funciones un poco demasiado temprano pero aisladas que son muy importantes porque básicamente haces todo solo con las funciones. Quiero empezar a pasar por ellos pronto. Cuando hacemos algunos finalistas se entiende y tiene una comprensión de lo que está pasando. Entonces vamos a pasar por la sintaxis. Entonces el diseño de una función regular estará empezando por el tipo o con la función de palabra clave. Siempre empezamos con la función de palabra clave, luego el nombre de la función, paréntesis. El paréntesis, podemos teclear parámetro. Parámetro. Un parámetro en una función es simplemente algo que pasará. La función, siempre tuve problemas entender este concepto en el principio. Digamos que queremos hacer una función que tome un número y le añada diez. Algo puede ser algo inútil. Pero da el ejemplo. Si tomamos, si queremos darte un número y luego sumar diez, pasaremos el número aquí. Dislocación como parámetro. Cuando especifica un parámetro y una función, hay algo que siempre quieras poner el tipo de parámetro? Entonces el nombre del parámetro. Por ejemplo, digamos que queremos pasar en un número y te sacaremos si quieres un entero sin signo. Y luego el nombre de la variable. En este caso, el nombre no es sumamente importante en el sentido que a menos que queramos pasarlo algo que ya se conoce, sólo podemos llamarlo como queramos. Después del paréntesis y el parámetro jalará el estado de visibilidad. Que para las funciones pueden ser solo variables y puede ser pública, interna, privada. Entonces tendremos la mutabilidad estatal. Las funciones pueden hacer cosas en la blockchain. En las habilidades de declaración se especifica lo que puede hacer la función. Y tenemos, tenemos diferentes opciones. Podemos entender la usabilidad. La usabilidad puede ser pura, lo que significa que la función no hace nada en la blockchain. No tiene acceso a ella. No lee nada de la blockchain, no escribe nada en la blockchain. Entonces, ¿cuándo usarías esto? Los usaremos en caso sólo estemos haciendo algo internamente. Por ejemplo, esta función que mencioné ya que pasamos en un número y queremos agregarle un número. Habrá una función pura porque simplemente hace todo el cómputo internamente sin tocar nunca la blockchain. Entonces otro estado de mutabilidad que tenemos es la vista. View significa que la función leyó algo de la blockchain, pero no cambia. Por ejemplo, si quieres llamar a una función que lea variables que escribimos, queremos tomar una función a la que puedas acceder desde fuera del contrato y llamarla y leer qué esto, qué hay en este variable y otro número, entonces habrá una función de vista porque estamos leyendo algo fuera de la blockchain. Entonces después de especificar el estado de mutabilidad, podemos tener nuestra palabra clave return. Ahora return se usa en caso que desee que la función devuelva algún tipo, algún tipo de valor. Cuando usas la devolución, en realidad aquí hay devoluciones. Y cuando utilice el retorno aquí en el encabezado de la función, tendrá que especificar el tipo que desea devolver. Puede ser querer devolver un bajo, entonces usted escribirá adentro o usted él. Después de aquí, tendremos los corchetes. Y dentro de los corchetes tendremos la consola de funciones real es solo una sintaxis general de diseño para una función. Aquí. Antes de escribir la función real, noté que tenía algunos errores y lo que escribí antes aquí donde escribimos este tren, me doy cuenta de que antes pongo cadena como nombre. Entonces no lo hizo, no le gusta eso porque string es un tipo de variable, por lo que la reconocerá. Esperará un nombre, pero piensa contaminaron las cosas que trataste de escribir otro tipo, solo cambia el nombre a otra cosa caracteres o algo que no sea tipo Up de variable. Y otro error que noté fue que la dirección era tipo entre abrigos, que no va a funcionar. Porque ¿qué vinculas entre cotizaciones como esta? String no va a usar la cadena como dirección. Entonces, qué pasa si te vas, déjalo así cuando intentes compilarlo , te va a dar un error. Hay un ejemplo bastante bueno de cómo re-mix puede ayudarte porque identifica a todo el mundo te dice incluso voltea las áreas por ejemplo, en este caso. Dice que la cadena es, el tipo es una cadena y no se puede convertir a una dirección. Entonces, ¿qué tienes que hacer para arreglar esto? Acabamos de quitar la cotización. Ahora, continuemos con la función. Tipo. La función. Empezaremos con la palabra clave function. Queremos hacer una función, como mencionamos anteriormente, que pasemos un número y nos da un valor del número más algo más. Por ejemplo, lo nombraremos, agregaremos un número. Siempre haz la conversión CamelCase. Vamos a pasar un parámetro. Queremos pasar un tipo de número. Pasamos nuestra vista int nombre. En este caso, dado número. Aquí pongo un subrayado frente al nombre. Por lo que una de las otras convenciones en solidez es nombrar un parámetro se utiliza en la variable de configuración con un guión bajo delante de él. Es posible que veas que lo es. Si exploras nuestro contrato, Eso es justo lo que significa, es solo una convención para nombrar el parámetro. Entonces queremos que esta función sea pública. Porque queremos acceder a esta función desde fuera de la blockchain. Ahora, esta mutabilidad va a ser pura porque esta función no va a leer ni cambiar nada de la blockchain. Esto sólo va a tomar un número la forma ceder a otro número que ya tiene la función. Entonces hace todo lo interno. Y entonces esta función va a devolver Ru it porque queremos ser para recuperar otro número. Ahora la palabra clave aquí es regresa con el S. Recuerde, luego después del ritmo de paréntesis entre paréntesis, el espacio entre paréntesis después la definición de la función simplemente no es una convicción en solidez. Si vas a través de la documentación se va a explicar todas estas cosas bajo el estilo. Creo que es sólo una forma común de hacerlo. Ahora cómo le decimos a la función que queremos tomar el número que daría, tirarlos. Hacer muestreo. En primer lugar, podemos añadir otra variable en ella. Entonces vamos a añadir el número completo dentro la variable se puede llamar valor. Le asignamos el valor de diez. Ahora, estos uint8 dentro la función, alguna variable local. Esto solo se puede usar dentro esta función si intentas llamarla desde fuera, la función no va a funcionar. No va a poder ver, dar instrucción a la función. Queremos tomar aquí el valor de este número y añadirlo a cualquier número por el que pasemos. Entonces, ¿cómo hacemos eso? Escribimos el nombre de la variable que queremos cambiar, igual a y luego instrucciones. Entonces, ¿qué queremos hacer? Queremos tomar valor, el número que le pasaría, más el número de punto y coma. Esta es la operación real, operación matemática que se va a hacer. Y luego cómo le decimos a la función que queremos tener una manera de ver cuál es el resultado de eso. Utilizamos la palabra clave return. Regreso. ¿ Qué queremos devolver valor? Por lo que ahora esta función, se va a llevar un número que le damos diez para luego devolver el resultado que podemos ver. Una vez que estemos completos, terminamos con esta variable. Podemos intentar compilarlo y probarlo. Entonces ahora, ¿cómo hacemos eso? Vamos en la página del compilador. Aquí. Tenemos que decidir qué obligado a usar el compilador estándar ese tema aparece si no hizo nada más antes de que sea 6.6. Bueno, estamos usando la versión ocho. Tendremos que cambiar a una de la versión a. usaré 8.13. Y entonces este botón que puedes compilar, el archivo, podría compilar. Y si todo va bien, que no aparece con un poco de cinta verde, pero nos da un error. Entonces veamos lo que estos iteran. Y te dice que esperaba que un punto y coma consiguiera corchetes. Entonces, ¿puedes ver lo que extraño aquí? Sí, aquí era un punto y coma. Ahora, estos compilarán o deberán compilar. Entonces lo estamos intentando de nuevo, si no quieres ir a la página y clic en Compile variables cada vez que solo puedas hacer Control S, que es lo que suelo hacer. Control S, lo guarda un compuesto y como se puede ver esta ocasión es la pequeña garrapata verde. Eso significa que lo compilado correctamente y no hubo error al probarlo. Podemos pasar a desplegar y ejecutar la página de transacciones. Mencionamos esta lección anterior, algo sobre esto. Pruébalo así. Vamos a usar ambiente arbitrario. Por lo que sólo podemos mantener la VM JavaScript que tenemos aquí. Quién te va a dar un montón de cuentas disponibles. Por lo que tiene todas estas cuentas están disponibles para que pueda llegar al punto contratos y probarlos. Y cada cuenta tiene un éter de 100. Hará deslizar primero el estándar 1. Y aquí podemos salir. Si hacemos clic en Desplegar, podemos ver aquí en el tablero aquí que hay una garrapata verde. Eso significa que el control se desplegó con éxito para ver lo que hemos hecho aquí. Y va a mostrar lo que el público va a mostrar básicamente todas las funciones y variables públicas. Por ejemplo, aquí podemos ver que tenemos un número público, que es una función, que es nuestra función aquí. Y número, tenemos algo más que podemos ver. Segundo número, ¿por qué es eso? Es porque aquí especificamos una variable que es pública. Para que podamos ver qué pasa cuando miro, cuando haga clic aquí, me va a decir qué hay dentro de la variable. Aquí. Se puede ver que me está diciendo que la variable está asociada. Queríamos mirar nuestra función. Vamos a ampliar esto para que tengamos un poco mejor. ¿ Qué hace esto? Podemos llamar a esta función insertando un número aquí, ver si funciona. Dijimos que queríamos sumar un número que pasaríamos a esta pestaña. Entonces si agrego otros diez, nos debe dar un valor de 21. Lo llamamos, lo llamamos aquí, nos da 201525 y vio estos ejemplo muy simple y básico de cómo podría funcionar una función. Entonces una vez que leamos este contrato, probando, si sólo podemos destruirlo y va a volver, va a desaparecer. Y podríamos redistribuir informe de cuantificación de momento y así sucesivamente a los estudiantes. Una cosa que quiero resaltar aquí, está aquí en esa cuenta. Recuerda que cuando empezamos, teníamos 108 y ahora tenemos 99.9 algo. ¿ Por qué es eso? Recuerda que cada vez que hagas un cambio en la blockchain, que se puede leer incluso de ella. Va a usar algo de gas. Recuerda, especificamos que nuestra función es pura, por lo que la función no hace nada en la disfunción blockchain no debe usar gas. Pero aquí llamamos el valor de estas variables estatales públicas. Eso es lo que consumió sobre el gas. Así que solo tenlo en cuenta. Más cosas que colon aquí más alto va a ser el gas. Ahora antes de terminar la lección, quiero mencionar un tipo más de variable que no mencioné con todas las demás. Simplemente porque hay un poco más complicado y confuso, nacimiento va a ser muy, muy útil para muchas cosas. Estas variables denominan struct. Struct es un tipo de variable que permite almacenar múltiples variables en ella. Eso entonces se puede llamar capa de funciones y otras cosas. Es muy útil. Ahora cómo llamamos distracción es sólo una variable, ¿verdad? Entonces va a haber, la sintaxis va a ser como si fueran variables. Empezaremos con el tipo de variable que el tipo es struct name. Digamos que queremos crear una estructura. En el interior tiene nombres y colores de febrero de las personas. Podemos llamar a este nombre, lo siento, podemos llamar a este camionero pueblos. Gente estructurada. Lo llamamos gente struct. Ahora, convencionalmente nombre instruir la letra mayúscula para el todo, para la primera palabra. Así como un recordatorio ahí. Ahora, tendremos los corchetes y dentro de los corchetes, podemos escribir las variables que tenemos dentro. Entonces dijimos que queríamos tener una estructura con los nombres y colores de febrero. Esas son dos cuerdas. Entonces tendremos el nombre de cadena, punto y coma, y luego stream. Llamar. coma. Aquí, acabamos de crear una estructura. Struct nos permite mantener esta información dentro. Ahora esta estructura aquí no tiene ninguna información porque no la pasamos. Y una de las siguientes lecciones vamos a revisar o mejor dicho ver cómo agregar información al tramo desde funciones. Pero podemos inicializar esta información pregrabada en camión. El sintaxis para hacer eso está empezando por el nombre del tramo. Por lo que los alumnos ataron. Podemos hacerlo público para que podamos ver qué información hay ahí. Después agregaremos el nombre. Lo estamos haciendo ahora es simplemente mantener nuestra variable dentro de la estructura con la información que tenemos ahí. Queríamos tener un nombre, así que llamemos a la variable Dave. Esta variable va a tener, va a ser fortalezas de las personas. Entonces volvemos a poner el nombre de la struct para decir que esto es lo que hay ahí dentro. Y luego pasamos los parámetros por paréntesis. Hay dos cuerdas. El primero va a ser un nombre. El segundo va a ser un color, naranja. Digamos. Entonces no olvidemos el punto y coma. Por lo que ahora hemos inicializado los puntales. Entonces eso significa que dentro de las estrategias son variables llamadas día. Ha asociado el nombre de la cadena hoy, incluso el color de la cadena a naranja. Podemos probarlo e intentar desplegarlo. Entonces si intentas desplegar Control S, vemos que no hay errores. Sí queríamos tomar. Podemos volver a la página de despliegue y desplegarla. Podemos ver que el éxito puede ir a comprobar. Ahora tenemos aquí una variable extra natural llamada Dave. Si lo llamamos, se va a mostrar que tenemos un nombre, nombre variable llamado Dave en ella, y variable de cadena llamada o un color, naranja. Y sólo podemos sumar más información a este tracto como este. Puedes copiarlo pegarlo. Y otro, por ejemplo, Charlie. Digamos que el color favorito de Charlie es el rojo. Vuelva a compilar con Control S, Nosotros los cubanos contratamos aquí para desplegarlo. Comprobamos. Tenemos a Charlie. Charlie está asociado con Charlie y rojo. Ahora bien, esta es una forma muy ineficiente de usar un estreptocótico. Y en la siguiente lección veremos una forma más eficiente de hacerlo. En conclusión aquí hoy, pasamos por los diferentes tipos de variables. Fuimos a variables estatales y locales. Esta visibilidad de amigo afirma. Entonces también pasamos por función, función básica. Quería repasar esto en su mayoría por la sintaxis y solo lo básico bajo. En la siguiente lección vamos a repasar matrices, cómo podemos usarlas en diferentes situaciones. 4. Lección 3: matrices: Hola y bienvenidos a la lección sobre una carrera. Por lo que hoy vamos a hablar de qué son las matrices y cómo podemos usarlas en Solidity. Aquí tenemos remakes abiertos y comenzaremos con las dos líneas habituales con el identificador de licencia y la versión de solidez. También creé un nuevo archivo aquí llamado carrera por si acaso, en caso de que quieras escribirlo en un nuevo archivo, lo contrario solo puedes escribirlo en el fichero variable que creamos. ¿ Cuáles son la carrera? A los rayos son en realidad un objeto muy común en la programación, y en esencia son sólo una lista de elementos. Podemos utilizar matrices para almacenar múltiples objetos en ellos. Puede ser números, puede ser cuerdas. Y en Solidez puede incluso ser struct, u otros tipos de variables que tenemos. En solidez. Contamos con dos tipos diferentes de matrices. El primero se llama matriz de tamaño fijo. Array de tamaño dinámico. El tamaño dinámico. Entonces, ¿cuál es la diferencia? El tamaño fijo tiene tamaño declarado. Por lo que significa que sólo puede contener la cantidad especificada de elementos que declaramos al principio. Si declaramos que las matrices solo hechas de tres elementos, digamos tres u, y entonces no podemos poner cuatro en ellas porque te va a dar un error solo pueden ser tres. Si bien el tamaño dinámico significa que los elementos pueden ser cualquiera como los queremos, exploraremos y mostraremos una función de cómo agregar los elementos. Cómo iniciamos este contrato que vamos a escribir, vamos a escribir un contrato hoy llamado las matrices. Aquí se hace nuestro control. Ahora veamos la sintaxis para escribir una carrera es una variable para que podamos iniciarla igual cualquier otra variable con el tipo de matriz que queremos. Entonces digamos que queremos tener una matriz de tipo fijo que contenga para ti. Y comenzaremos con el tipo uint8. Entonces los corchetes. Los corchetes es una especie de signo o símbolo universal para matrices o listas en lenguajes de programación. Y luego dentro de los corchetes definimos el tamaño fijo. Entonces en este caso pondremos cuatro. Si quisiéramos tener un tamaño dinámico, entonces no pondríamos nada entre los paréntesis. Entonces fuiste a por, vamos a declarar este aquí como público para que podamos acceder desde ella fuera del contrato, le daremos un nombre. Entonces digamos que queríamos poner números y llamémoslo números, números de matriz. Para poner algunos datos en ella, sólo podemos hacer ellos iguales corchetes y luego ponemos los datos, digamos que queremos poner 1234 separados por comas. Y así que aquí lo tenemos. Aquí tenemos matriz de tamaño fijo que tiene cuatro enteros sin signo en ella. Digamos que queremos crear una matriz de cadenas. ¿ Cómo vamos a hacer eso? Escribiremos cadena los corchetes. Entonces podemos poner dentro. Vamos a darle. Queremos tener otro fijo, solo un elemento en él. Habrá público de nuevo para que podamos acceder a él, le dará un nombre string array dentro. Sólo podemos tener una cuerda dentro de las comillas de doble, y digamos que es color amarillo. Esta es otra vez otra matriz de tamaño fijo y solo puede contener un elemento porque especificamos que es solo uno. Tratemos de codificar matriz de tamaño dinámico. Haremos eso. Hagamos una matriz de tamaño dinámico para números de nuevo. Entonces vamos a hacer U int porque es del tipo. Y esta vez fui como lo escribí mal. Esta vez vamos a dejar los corchetes vacíos porque se trata de una matriz de tamaño dinámico, podemos cambiar probará con el público de nuevo, y esto es dinámico. Arreglos dinámicos, el nombre. Pongamos el número diez en ella. Pero recuerda que olvidé aquí el punto y coma. Pero recuerda que debido a que se trata de una matriz de tamaño dinámico, podemos agregar cuántos elementos queremos en ella. Esta matriz, así. Es lo que se llama una matriz unidimensional porque solo tienen, es solo una matriz ahí. También podemos crear algo que se llame a las matrices, o matrices bidimensionales. Y esencialmente esos son simplemente una matriz que contiene otras matrices. Hay algunos límites en la solidez. Podemos hacer matrices con el, los estamos llamando anidación. Estamos llamando a esto lo siguiente. Entonces hay matrices anidadas. Podemos anidar hasta 15 matrices, y todas deben estar del mismo tipo. Digamos que queremos crear matriz dinámica de matrices. Por lo que creamos una matriz dinámica. Entonces esta será la primera. Y luego dentro anidamos otras matrices. Y digamos que sólo volvemos a poner dos mal deletrear esto. Esto es público. Entonces lo llamamos estima. Ahora, ¿cómo funciona esto? Acabamos de declarar una matriz. Esta, esta parte aquí declaramos una matriz, tiene dos matrices en ella. Entonces, ¿cómo podemos captar esto? Aquí está la primera matriz, y luego tiene otros dos dentro de uno, coma n2. Y luego estas dos matrices pueden tener números en ellos porque estos son todos uint8, por lo que 123123. Aquí vamos. Aquí ahora tenemos una matriz 2D que contiene dos matrices. ¿ Y cómo podemos acceder a la información dentro de la derecha? Ese es un tema muy importante porque necesitamos poder sacar de ella la información y los datos. Entonces las matrices son lo que llamamos basado en índices significa que cada elemento dentro de una matriz corresponde a un índice. Arreglos en Solidez son lo que se llaman basados en cero. Índice. Basado en cero significa entonces que el recuento de los elementos comienza desde 0. Entonces si tomamos esto primero aquí con la ONU, y tiene cuatro, si queremos acceder a las matrices, ahora vamos a encontrar el número uno. Estás buscando el índice número uno, comienza desde 0, por lo que éste será 0, éste será uno sobre V2, y éste será tres. Ya veremos cuando implementemos el contrato que queremos acceder a esta matriz. Si queremos tomar el número uno, habrá que escribir el 0. Si queremos tomar el número dos tendremos dos tipo uno y así sucesivamente. Ahora acabamos de ver cómo estructuramos una matriz y cómo podemos, podemos sintaxis uno, pero ¿cómo agregamos cosas en ella? Digamos que tenemos estos. Ahora este de aquí no se puede añadir porque está fijo. Pero digamos que queremos agregar números a estos array dinámicos aquí, tendremos que escribir una función para hacer eso. ¿ Cómo hacemos eso? Escribimos una función igual que estábamos haciendo la última vez. Y llamemos a la función agregar número. Escribiríamos la función, la palabra clave function, el nombre, y luego queremos agregar un número a esa matriz. Por lo que necesitaremos pasar un parámetro aquí. Vamos a pasar en la función son uint8. Llamamos a numero. Así que el número de subrayado porque subrayado porque lo usamos dentro de la función incluso si realmente no tiene una diferencia en el nombre. Y esta función es pública para que podamos acceder desde fuera o en realidad podemos sumar nuestro número. En este caso, ahora vamos a devolverlo porque no vamos a poner el retorno porque no necesitamos tirar ningún número. Y si te das cuenta, ahora vamos a verter cualquier estado modificador porque esta función realmente va y cambia algo en la blockchain. Entonces la vista y lo puro no sabrían hacen tu trabajo porque si recuerdas, puro significa que la función no hace nada en la blockchain en absoluto. Y ver significa que sólo estamos leídos. Si bien en este caso vamos a escribir realmente sobre él. Entonces los dos corchetes aquí. Para agregar elementos a matrices, utilizamos el método push. ¿ Cómo usamos métodos es que tomamos el nombre de la matriz. En este caso el punto de matriz dinámica empuja estos la sintaxis. Y lo que esto hace es tomar el parámetro que pasará a través la función y lo empuja a la matriz. Y sólo va a sumar básicamente el número. Siguiente. Vamos a pasar el parámetro que escribimos, nombre de la función, el encabezado de la función. Y eso es punto y coma. Aquí. Esta es una función muy simple para agregar un número al número original aquí. Ahora estamos listos para probarlo. Sal, prueba el contrato. Ahora vamos a tener que compilarlo. Vayamos a revisar. Nuestro compilador es primero la versión correcta, porque estamos escribiendo solidez versión ocho. Y podemos ver que tenemos el compilador para la versión ocho, por lo que podemos seguir adelante y compilarlo. Aquí solo hay control de prensa S Eso es un poco más rápido. Ir a desplegar en sección de transacciones. Tenemos nuestra máquina virtual JavaScript cuenta y seguir adelante y desplegarla. Recibió la transacción fue exitosa, se desplegó el control. Ahora si exploramos el contrato, verá que tenemos un montón de cosas. Y eso es porque casi todas las variables y funciones que tenemos aquí se expresa como pública. Para que podamos verlos a todos. Ahora, empecemos desde la primera matriz, el número justo aquí. Verás que el nombre va a estar un poco más mezclado. Creo que es sólo porque los muestran en orden alfabético, pero eso realmente no marca la diferencia. Empecemos desde la matriz de números aquí, que va a ser éste aquí. Dijimos que para extraer un elemento, podemos utilizar un índice ya que las matrices están indexadas lugar y se basan en ceros a partir de 0. Entonces si queremos extraer los dos aquí, por ejemplo, qué índice vamos a tener que escribir aquí comenzará a partir del 01. Entonces si escribimos uno en matriz de números y lo llamamos a eso, entonces nos va a mostrar aquí mismo en extraer el formulario. Vamos a tener que extraer 0123. Si lo llamamos. Aquí, tenemos el formulario. Lo que pasa si tratamos de llamar a una industria no existe. Por ejemplo, éste es fijo. Una matriz de tamaño fijo con solo cuatro elementos. Entonces, ¿y si tratamos de llamar a un quinto elemento? Escriba los cuatro aquí, aquí va a dar un error. Se dirá que la convocatoria no tuvo éxito. Aquí no va a mostrar nada porque éste de aquí es de la llamada anterior. Lo mismo funciona para la otra carrera. Por ejemplo, la matriz de cadenas aquí. Sólo tiene un elemento. Entonces si vamos a buscar los próximos ceros, se va a mostrar que tenemos amarillo ahí dentro y nuestra matriz dinámica. Lo mismo que un solo elemento. Así que si vamos por 0, va a tener el diez. Ahora, la matriz anidada es un poco más interesante porque recuerda que estos son anidados matriz anidada. Entonces tenemos matrices en una matriz. Y aquí se puede ver que está pidiendo dos entradas, es el mismo principio con el índice basado en cero, donde la primera entrada, está preguntando básicamente por qué matriz estamos buscando, si es esto uno o éste. El segundo insumo es pedir la posición del elemento real que queremos ver. En este caso, digamos que queremos extraer los tres aquí. Queremos destructivo desde la primera matriz. Habrá en la posición 0. Entonces queremos extraer el tercer elemento. Entonces 012, b dos aquí. Si lo llamamos, aquí vamos. Hemos extraído los tres. Y lo mismo se puede hacer con el otomano. Si quieres extraer el archivo. Pasaremos uno aquí porque es la segunda matriz y 01 llamada. Y vamos a tener los cinco. Así es como explorarás matrices anidadas anidadas. Se puede ver cómo puede llegar a ser tema bastante complicado puede tener un máximo de 15 matrices ahí dentro, y luego hay que empezar a llamarlo por 15 matrices dentro de otras matrices. Puede referirse a lo complicado. Pero exploremos y veamos nuestra función. Eso es si trabajas. Entonces diseñamos disfunción para agregar un elemento a la matriz dinámica. Veamos aquí. ¿ Qué es pasar una superestrella? Se supone que tenemos que poner un número aquí, transacción mayor, y luego deberíamos poder recordar por otro número fuera de aquí, digamos que queremos sumar 100. Hicimos la transacción, fueron considerados como transacción fue exitosa. Ahora en teoría, deberíamos tener dos elementos en esta matriz dinámica. Entonces, ¿cómo llamamos al limón y al número dos, vamos a tener que ir a llamar por uno aquí. Y aquí desde en lugar de diez, debería mostrar 100, que por lo tanto, podemos simplemente seguir agregando números como nos plazca. Digamos 60. Y luego llamaremos y vimos. Ahora tenemos una, una matriz dinámica que tiene múltiples elementos en ella. Pero, ¿ cómo sabemos cuántos elementos? Porque para éste sólo tiene tres. Si tiramos, si tratamos de llamar a otro, no va a funcionar porque dice que realmente no dice nada en realidad, pero es porque no tenemos más de tres números en este momento. Entonces, ¿cómo sabemos la longitud de la matriz? Cuántos elementos podemos escribir una función para eso. Así que volvamos al editor y escribimos otra función. Podemos ejecutar una función llamada contar elementos. Contará cuántos elementos hay en la matriz. En esta función, por ejemplo, no tenemos que pasar nada porque no estamos tratando de agregar elementos ni nada por el estilo. Sólo estamos tratando de ver cuántos elementos hay ahí. Tendremos visibilidad pública porque queremos acceder a ella. Ya que no estamos escribiendo cosas, sólo estamos leyendo de ella va a ser visto. Queremos recibir el número de vuelta un resultado. Entonces en este caso va a ser devoluciones y va a devolver un uint8. Muy bien. Ahora, hay otro método. Vimos el método push para agregar elementos a una matriz. Podemos tener otro método para ver cuántos elementos hay ahí, y eso se llama el elemento length. La función también es muy simple. Podemos simplemente hacer esta función que devuelva el nombre de la matriz. Entonces la longitud dinámica del punto, recuerda punto es como accedes a los métodos y a los métodos de acceso de punto y coma, pondrás el nombre de la variable a la que quieres acceder dot el método. Y entonces podemos compilarlo para que podamos destruir a estos controladores de contrato para compilarlo. Y verás que funciona como NADH aquí quiero mostrarte algo sobre solidez en la idea de los micrófonos de la sala. Dijimos que esta función solo lee desde la blockchain, por lo que no necesitamos escribir nada y podemos ponerla a la vista. Pero, ¿qué pasa si no lo hacemos? ¿ Qué pasa si no ponemos View? Tratamos de compilarlo. Se va a compilar de todos modos, verás que no te da un error fatal. El icono es naranja. Básicamente significa compilado con una advertencia, digamos compilar compilación terminó con éxito con advertencia. Remix te da básicamente sugerencias sobre tu código. Por ejemplo, en este caso, es capaz de entender qué hace la función y cómo se puede restringir. Por ejemplo, la advertencia dice que la estabilidad de la declaración de función se puede restringir a ver porque entiende que estas función no está escribiendo en la blockchain estaba leyendo. Te dice, hey, ¿por qué no lo pones como vista? Y sólo lo hace un poco más limpio. Continuemos aquí con la prueba. Estamos listos para desplegar ahora ya está compilado. Estamos listos para desplegar como despliegue. Y aquí tenemos estos aquí ahora es para restablecer. El contrato se restablece al principio. En la matriz dinámica solo tenemos un número. Si sí contamos elementos, vamos a mostrar uno porque dice, Hey, solo hay un elemento ahí. Vamos a agregar, añadir un montón de ellos. Digamos que sumamos 40. Después sumamos dos. Y sumamos 1 mil. Ahora, no hicimos un seguimiento de cuántos elementos hay ahí o simplemente no sabemos. Podemos llamar a los elementos de conteo de funciones. Y no se ve, hay cinco elementos. Y digamos que quieres saber cuál es el cuarto? El cuarto será el 0123. Por lo que ahora puedes ir en la matriz dinámica y llamar al elemento en la posición número tres. Y esto va a llevar el elemento data es 89. Si llama a posición para el elemento es 1000 y así sucesivamente. Entonces esta es una situación que puede ser útil cuando tienes una matriz con muchos elementos y simplemente quieres entender qué valor está en un índice específico. No lo sé. Tendrás una matriz de direcciones y sabes que la dirección en el índice 25 tiene que hacer algo. Y luego puedes ir y tomar ese índice y recordar el número para los demás en ese caso. Aquí teníamos un resumen rápido sobre matrices y cómo podemos montarlos y cómo podemos hacer que funcionen. La siguiente lección va a ser sobre mappings. asignaciones son elemento o variable muy, muy importante en solidez porque nos permite asociar valores juntos. Es una lección muy importante. Nos vemos la próxima vez. 5. Lección 4: metraje: Hola y bienvenidos de nuevo a lo básico. Hoy vamos a explorar mappings. El mapeo es un tipo de datos muy importante en solidez y en realidad es similar a una base de datos. En cierto sentido, los mappings están hechos de qi a valor. Ahí está por lo que tendrá una clave con un número asociado a un valor específico. Si estás pensando que habrá similares a matrices, no es del todo porque como recordamos, matrices comienzan desde el espacio de índice 00 mientras que las asignaciones o no, empezaron desde uno al igual que podría ser una base de datos, la SQL, parten desde uno. De alguna manera se puede ver como una base de datos, pero está en la blockchain. Al mirar la sintaxis básica, cómo contratarás, los llamaremos mapping. Empezarás con un mapeo de palabras clave. Entonces los parámetros de mappings están dentro de paréntesis. Y dijimos que tenemos una clave asociada al valor habrá que especificar qué VIA qué variables, qué tipo de variables queremos tener. Entonces digamos que queremos asociar número a una cadena. Entonces tendremos u int que es un número. Entonces el igual y más grande que. Eso es. Hace un estrecho en este caso. Y el segundo tipo de datos, lo siento, tipo de variable al que se asocia. Entonces necesitaremos tener el estado de visibilidad y el nombre. Entonces en este caso sólo podemos llamarlo ejemplo punto y coma. Por lo que esta será la sintaxis básica. Y ahora podemos iniciar nuestro contrato y llamaremos a eso un poco más ejemplos. El contrato se reinicia como de costumbre con el contrato de palabra clave. Lo llamaríamos mappings. Aquí vamos. Ahora, vamos a ponerlos en envolver el mapeo. En este caso, simplemente lo usaremos no lo hace igual que el ejemplo, su Int asociado a una cadena. Pero lo que queremos hacer es que queremos asociar un número, número datos a un color. Digamos que queremos tener colores. Estás planeando hacer una app que describa y enumera al jugador elegir diferentes colores. Por lo que querrás ponerlo a través de un mapeo. Podemos llamarlo colores. Aquí tenemos el mapeo. El mapeo, obviamente está vacío porque no le pusimos nada. Existen diferentes formas de codificar datos, datos en nuestro mapeo. Una forma es una función especial que no hemos visto hasta ahora. Se llama la función constructor. Puedes escribirlo solo con el constructor de palabras clave, el paréntesis y los corchetes. Entonces, ¿qué es una función constructor? La llamada se define como una función especial porque sólo se ejecuta una vez al inicio del contrato cuando la conducta es diploide. Y así podemos utilizarlo para, por ejemplo, asociar la dirección que despliega el contrato como propietario. O podemos usarlo para colocar algunos datos estándar en ella. Y en este caso, podemos utilizarlo para llenar el mapa en uno cuando se desplegado el contrato. A partir de aquí. ¿ Cómo llenamos un mapeo? En este caso, los nombres de mapeo, colores. Y los mappings también están indexados, pero simplemente no comienzan desde 0. Entonces, ¿cómo definimos los diferentes pares clave-valor pondrán el nombre del mapeo, el valor de la clave igual al valor al que se asocia. este momento queremos tener un uint8, el asociado a un color, registrando que en nuestro caso quiere ser un color. Hagamos un informe. Tres de ellos harán llamadores. El segundo, el segundo colores, color, lo siento, el tercer color, verde. Por convención, queremos usar cotizaciones dobles para cadenas. Esta es una función constructora simple. Entonces cuando implementemos el contrato, vamos a llenar el mapeo automáticamente. Menos pruébalo y ver cómo funciona. Podemos compilarlo con Control S. Siempre olvido cambiar. El compilador visitas virtuales. Entonces pondré la última versión del compilador, la recompillaré. No da ningún error. Y vayamos al curso con éxito. Entonces vamos, veamos cómo se ve esto. Verás aquí tenemos nuestro mapeo llamado colores y lo podemos ver porque es público. Cualquiera recibe un uint8. Entonces digamos que queremos recordar qué valor está asociado a la clave número dos, entonces vamos a escribir dos lo llamaría. Voy a tener amarillo. Llamamos número uno, habremos leído. Y si llamamos tres, tendremos verde. Estas son muy, muy buena manera de asociar diferentes tipos de datos. En este momento reemplazado o usted en asociado con una cadena. Pero podemos colocar cadena o cadenas, o podemos colocar direcciones eran números y cadenas. Y veremos algunas de estas opciones más adelante durante el, durante esta lección. Ahora, esta es una forma. Esta es una forma de inicializar o llenar un mapeo, pero podemos ejecutar una función para ello, podemos ejecutar una función para cualquier cosa. Vamos a escribir una función que nos permita agregar valores, pares clave-valor al mapeo. Empezaremos con la función. Lo llamaremos a color. En este caso, tendremos que pasar algunos parámetros, ¿verdad? Tenemos dos parámetros que pasar porque queremos agregar una clave y un valor. Los parámetros serán un uint8, aunque podemos llamar index porque este será el índice del mapeo de una cadena. Ahora, esta es la primera vez que vemos cómo pasar una cadena a través de una función. Siempre que pasemos cadenas, tendremos que decirle a la función qué tipo de memoria utilizamos. Cuando escribimos memoria, significa que el parámetro se va a almacenar solo durante la llamada de la función y no está permanentemente, permanentemente almacenado en la blockchain. Y esta es la forma preferida porque ahorra fase gaseosa. Y luego solo escribiremos el nombre del color variable. En disfunción pasará un número de índice que va a ir en esta parte aquí del mapeo y tensado con un color que va a ir en esta parte del mapeo. Podemos hacer pública la función. Queremos llamarlo desde fuera del contrato. El principio es exactamente el mismo que usamos aquí. Escribiremos el nombre del mapeo, en este caso el índice. En lugar de codificar de forma manual un número que escribiremos, pasaremos en el índice de variable, y se asociará con cualquier cadena por la que pasemos. Ahora podemos, podemos combinarlo, Control S, compilado correctamente, eso es gratis. Desplegarla. Deberíamos tener una función disponible también. Aquí está. Veamos, volvemos a llamar al número tres. Aparece como verde. Digamos que queremos sumar una cuarta donde podamos E14 coma y luego queremos tener naranja en su lugar. Entonces llamamos a la función en la columna. Se lo procesó correctamente. Entonces ahora si llamamos número cuatro, aquí tenemos naranja. Y bueno, en este caso es sólo una cadena o podemos escribir realmente donde queramos. Si escribo Apple todavía va a pasar el aeropuerto porque es sólo una cuerda. Una función interesante es que básicamente podemos anular los contenidos anteriores. Entonces digamos que ya no quiero haber leído el número uno. Pero el número uno quiero tener morado. Número uno, morado. Ese proceso. Ahora si voy a buscar qué es el número uno y cómo es púrpura. Entonces esta es una forma más dinámica construir mappings porque podemos pasar funciones a través de ellas ¿verdad? Ahora. Estas son una nueva forma de explicarlo. Ahora hagamos algo un poco más elaborado con mappings que solían tener. Otra forma. Lo interesante y por qué lo hace tan poderoso es que podemos asociar mappings con casi cualquier variable. Para que podamos hacer un mapeo con clave asociada a una struct. Y dentro de la estructura podemos tener múltiples variables. Entonces digamos que estamos haciendo un juego, nuestro juego el funciona en la blockchain donde los jugadores pueden tener autos para jugar con carrera. Entonces empecemos a anotar una estructura que va a mantener, vamos a hacer un seguimiento de lo que los autos tiene cada jugador. Podemos tener un nombre struct. Coche tendrá dos variables de cadena dentro de la struct, tendremos un creador de nombre variable, donde podamos salvar la marca del auto. Austriaco con el modelo, el auto. Aunque tenemos aquí tenemos nuestras fortalezas. Por lo que ahora podemos, podemos crear un mapeo que asocia jugador con un auto. Digamos. Vamos a crear una función. Primero. Crearemos un mapeo. Hará un mapeo. Por ahora, vamos a mantenerlo más simple. Apenas asociamos el número a la estructura igual que lo hicimos antes. Tendremos un uint8. Tenían una gasa asociada con, en este caso, el carro struct así. Y entonces será público. Y renombrar autos. ¿ Qué hacemos aquí? Sólo estamos codificando que esta base de datos que podemos tener va a tener un número como índice y la struct como valor. Entonces cada vez que llamemos a este índice, estas dos variables van a aparecer. Obviamente ahora tenemos que hacer una función a este curso, al enema struct. Ahora, podemos llamarlo ADKAR. Habrá que pasar tres parámetros esta vez, porque tendremos que pasar el uint8 para el índice y los dos parámetros del para la propia struct. Entonces el primero de BUN, y podemos llamarlo de nuevo índice porque es una buena mnemónica para nosotros. Después pasaremos unas dos cuerdas. Recuerda que la cuerda es mamaria. Podemos llamarlo fabricante de subrayados. Después pasaremos la segunda memoria de cadena. Modelo de subrayado. Esta va a ser una función pública también. Mismo principio del mapeo regular. No vamos a llamarlo rumbo esta vez. Es el mapeo esta vez se llama autos. Déjame desplazarme un poco hacia abajo. Apenas nombrados autos. Llamamos a los autos cartográficos donde vamos a asociar el índice. Aquí. Tendremos que construir la estructura. Struct. El miembro estructural es coche de nombre con un C. mayúscula Pasará el modelo Maker de dos variables. Ahora hemos hecho se completó la función para llenar este mapeo. Vamos a compilarlo y probarlo. Desplegarla. Aquí. Ahora tenemos el otro mapeo con el ADKAR. Estos mapeos aquí están vacíos. No pusimos nada dentro todavía. Si lo llamamos autos. Si recordar algo en los autos, no va a mostrar nada, solo dice que hay una cadena, un maker en un modelo de nombre stream, pero no hay nada asociado con ella. Vamos a agregar, vamos a extender esto para que lo haga un poco más fácil. Entonces digamos que el índice número uno, tenemos un bin WWW, agregaremos Albion W, y el modelo es de tres tercios. Empezamos la transacción y fue exitosa. Por lo que ahora si intentamos, tratamos de leer la primera posición en los autos de mapeo, vamos a demostrar que tenemos nuestro BMW y 330. Entonces podemos sumar al Lamborghini. Transacción y número dos, y si la comprobamos. Entonces este es un ejemplo de cómo podrías usar mappings para transferir o realizar un seguimiento de múltiples datos. Ahora vamos a revisar aquí algo interesante. Obviamente, en la blockchain trabajamos con direcciones de billetera. ¿ Por qué no crear un mapeo? Siempre podemos usarlo para el auto, digamos para el juego de autos, donde asociamos en lugar de solo un índice que llamamos manualmente, asociamos una dirección. Por lo que podemos hacer que asociemos dirección IP de quien llame a la función. Para llenar caliente, hacer un modelo de autos que tengan tendrá que crear otro mapeo para esto, porque vamos a crear un mapeo de otro mapeo es algo así como un éster mapeo. Vamos a tener el mapeo donde el primer tipo de variable va a ser una dirección. En cambio. La clave va a ser una dirección y los valores van a ser otro mapeo. El mapeo se va a hacer de la struct, básicamente que creamos. El struct va a tener la uint8. Este segundo mapeo va a tener dentro de la ONU. Y el auto va a ser un mapeo público. Podemos llamarlo autos jugadores. Aquí también tendrá que hacer una función a esta información. Va a ser muy similar a la R1. Podemos llamarlo coche jugador. El auto de capa. En este caso, volvemos a pasar solo tres parámetros. En realidad podemos simplemente copiar desde aquí porque vamos a ser lo mismo. Porque la dirección se va a tomar automáticamente de la transacción. Y te mostraré en un segundo cómo hacer eso. El público también. Ahora, ¿cómo tomamos la dirección? Hay un comando sencillo en solidez. Habrá, queremos llenar los jugadores, mapeo de autos de jugador. Entonces el índice de este lado aquí, la dirección va a ser m ya que G. Remitente es una nueva palabra clave que estamos viendo ahora, MSG center significa Message Center, y básicamente toma la dirección desde la billetera que llama a una función y la almacena. En este caso, lo que hacemos es que tomemos la dirección y la pongamos aquí en este primer lado del mapeo. Entonces en este otro lado, porque estamos creando un mapeo átomo en él, tendremos el índice. El otro mapeo. De este lado tendremos el auto struct. Dentro del auto, tenemos el fabricante, el módulo. Aquí vamos. Podemos compilarlo. Funcionó el punto de contrato. Ahora el punto aquí va a mostrar algunas cosas más. Tendrá un jugador autos mapeando aquí abajo. No voy a jugar tu auto. El coche jugador tiene tres variables porque queremos agregar un índice aquí. Acabo de empezar el spot número uno. Vamos a sumar en W de nuevo tres tercios. Si realizamos la transacción, veremos que pasó correctamente. Ahora, debido a que llamamos a estos transacción, estos primer spot en el mapeo con el BMW 330 está asociado a nuestra dirección. Si vuelvo aquí arriba y nos llevamos estos datas que usamos, si lo copiamos, lo pegamos aquí y el coche jugador, también podemos el índice. Nosotros lo llamamos, demuestra que hemos sido W3 30. Ahora, podríamos hacerlo simplemente asociado a la dirección. Solo quería en este caso, solo quería mostrar cómo podíamos poner un mapeo en el inicio de sesión y mapeo. Pero para que sea un poco más funcional, podríamos simplemente usar la dirección sin usar el otro mapeo. Recuerda que el remitente del mensaje es una cualidad muy importante porque lo vamos a utilizar mucho para asociar direcciones con datos. Por ejemplo, si tomamos una dirección de asunto y tratamos de pasar un año, cuando lo llamamos, nada aparece porque no hay nada asociado a esta dirección. Aquí hay mappings. Yo recomendaría ir a leer parte de la documentación en solidez sobre mappings porque estos son un sistema muy potente, muy potente que vamos a usar mucho. Próximas lecciones, vamos a pasar por si estados condicionales y bucles. Y así estos van a envolver un poco de lo básico. Y luego después de eso, vamos a empezar a escribir algún contrato inteligente que en realidad haga algo un poco más práctico. 6. Lección 5: condicionales y bucles: Hola y bienvenidos a la lección sobre condicionales y bucles. Las declaraciones condicionales y los bucles son una parte muy importante y la mayor parte de tomar decisiones y realizar automatizaciones a través del código. Entonces, ¿qué son los condicionales? Condicionales manejaron decisiones. Entonces básicamente una declaración condicional devolverá un verdadero o falso. Y luego con base en el valor de retorno, podemos desencadenar algún otro tipo de instrucción. Digamos que queremos comprobar que una dirección de otro firmar un contrato sea el propietario del contrato antes de activar una función específica, o de una manera más simple y abstracta. Digamos que tenemos una variable y queremos comprobar que la variable es más grande que otra. Por ejemplo, cuando quieras enviar monedas a otra dirección, mientras que tendremos que comprobar que el saldo es mayor que el monto solicitado. Entonces en ese caso entonces, si tienes suficiente equilibrio y puedes activar la función y enviar monedas. Vamos a revisar cómo hacemos condicionales. En Solidity, los condicionales son simplemente la declaración if y else. Entonces sólo la sintaxis regular sería si se cumplen algunas condiciones, luego desencadenar algo más. Si no se cumplen, desencadene otra cosa. Vamos a crear un contrato. Aunque podemos llamar condicionales. Vamos a escribirlo igual o probamos el mismo nombre en el expediente. Condicionales. Escribimos una función en ella. Entonces digamos que queremos tener una función que pase un número y verifique si este número es mayor o menor que un valor específico. Si es más grande, vuelve verdadero, y si es más pequeño devuelve falso. Podría ser una muy simple, Es una función muy simple solo para ver cómo puede funcionar la declaración. Hemos hecho una función, podemos llamarla gran número. Gran número. Y dijimos que queríamos pasar un número en él para que podamos revisarlo contra un preset, otro valor preestablecido. Por lo que será un uint8. Y podemos llamarlo numero esta función. Queremos tenerlo público porque queremos acceder a ella. Esta función va a hacer todo dentro la propia función para que podamos escribirla como pura. Y vamos a devolver algo. Vamos a teclear devoluciones. Ahora normalmente regresamos hasta ahora acabamos de devolver una ONU, hoy vamos a devolver un valor diferente porque dijimos que las declaraciones condicionales devuelven un valor verdadero o falso. Y si te acuerdas de la, una de las primeras lecciones, los valores verdaderos y falsos son los booleanos. Va a devolver un bool. Va a devolver una variable bool. ¿ Cómo escribimos el código? Empezaremos con la palabra clave si. Y luego en el paréntesis vamos a tener las condiciones. Ahora queremos comprobar que el parámetro que pasamos es el parámetro que pasamos es el parámetro que pasamos es más pequeño o más grande en comparación con un número. Entonces digamos que queremos comprobar si el número que pasamos es mayor que cinco. Este es sólo un número arbitrario que dijimos. Ahora como ejemplo, entonces tenemos los corchetes. Después de la declaración if. Y entre corchetes, vamos a escribir las instrucciones que se van a ejecutar si se cumple esta condición, digamos que el camino pase un número que es diez, la función va a comprobar, es diez más grande que cinco? Sí, y luego devuélvete algo. En este caso, dijimos que devolvemos una variable bool, simplemente vamos a volver verdadero. Else es una segunda palabra clave que indica lo que va a ser una devolución en caso de que la condición no se cumpla corchetes y dentro de los corchetes devolveremos false. Entonces, lo que hace esta función, nuevamente, pasamos un parámetro en ella. Comprobamos si el parámetro es mayor que cinco, si es cierto, va a devolver true y es falso, va a devolver false. Y luego después de esto, en base a lo que recuperemos, podríamos desencadenar otra cosa. Por ejemplo, el número. Si esta función devuelve true, entonces Llama a otra función o agrega algunos otros datos. Vamos a probarlo. Podemos compilarlo. Control S me va a dar un error porque no cambié el compilador, lo sabía. Vamos a asegurarnos de que ponemos la versión ocho compilador. Podemos compilar. Es. Parece que olvidé algo más. Vamos a leer por el aire o por lo general olvidarnos. Trabajo mucho en Python. Y Python realmente no usa semi-colones al final de la instrucción. Así que siempre olvido, intentémoslo de nuevo. Ahora bien, esta vez compila correctamente. Vamos desplegados tendrá a los ojos nueva dirección con desplegado, desplegado con éxito. Y vamos a revisar qué hay en el contrato. Aquí tenemos un nombre de función, gran número, y aceptamos un uint8. Entonces si ponemos cuatro, que es menor que cinco, debemos devolver falso, lo que en verdad lo hace. Si ponemos siete, volverá verdadero. Por lo que estos son forma muy abstracta y sencilla ver cómo funcionan estos condicionales. Pero eso es realmente sólo las declaraciones condicionales básicas. Ahora, hablemos de bucles. Los bucles son una parte muy importante porque te permiten básicamente iterar a través de múltiples datos todo a la vez. Y luego puedes combinarlo con declaraciones condicionales, como si para desencadenar algunas instrucciones. Entonces intentemos hacer esto. Queremos crear una función que lea una matriz y cuente cuántos elementos hay en ella en esa matriz. Entonces, ¿cómo haríamos eso? Tendremos que empezar a escribir una matriz. ¿ Cómo reemplazamos la matriz? Escribimos el tipo de matriz, uint8. Va a ser array dinámico, público. Llamémoslo valores. Podemos jugar algunos valores en ella. O simplemente podrías escribir una función que primero devaloriza como hicimos en la lección anterior, y luego quizá cuente a través de ellas. Apenas escribimos algunos valores y escribimos diez números en él. Ahora queremos tener una función que itera a través estos números y a través de estos elementos y contar cuántos de ellos hay ahí. Hagamos eso. Escribiremos aquí una función que podamos llamar números, contar elementos. Esta función no va a tomar ningún parámetro porque es sólo una función que hace algo sin el, sin que nos inputamos. Va a ser público porque queremos, queremos acceder a ella. Y éste hace algo en la cadena de bloques. Este lee fuera de la cadena de bloques porque esta matriz está en la blockchain, ¿verdad? Esta va a ser una función de vista. Te va a devolver int. Debido a que queremos bucle e iterar a través de esta matriz, contar cuántos elementos en ella. Y entonces queremos recuperar el número, nos va a devolver. Ahora esta función tiene que comenzar con una variable. Guardan camiones de los bucles. O más bien el realizar un seguimiento de cómo de los elementos en la matriz. Entonces esto se llama, esto se define generalmente como una variable de conteo y va a ser un número. Así que va a ser un uint8. Entonces podemos llamar a conteo. Simplemente podemos dejarlo así porque cuando empieza se inicializa a 0, o podrías escribir recuento igual a 0, pero solo podemos inicializarlo así para que veamos cómo funciona esto. Entonces tenemos que mentir para escribir el bucle. En este caso, vamos a usar un for-loop. Cuatro bucles básicamente sigue las instrucciones que damos y bucle a través de cuantas veces queremos. Cómo nos sintaxis que vamos a poner los paréntesis aquí. Y tuvimos que decirle el, tenemos que decirle al bucle por dónde empezar. Tener un uint8. Podemos llamar IA que podría representar índice, pero recuerda que estos números son arbitrarios. Puedes escribir, puedes llamarlos como quieras. Se iniciará en I es igual a 0. Esto significa, Hey, empieza el recuento de tus bucles desde 0. Y luego queremos escribir algún tipo de condición aquí. Di: Oye, sigue adelante hasta que pase algo. En este caso, vamos a seguir adelante hasta el índice de la cuenta. El bucle coincide con cuántos elementos hay en la matriz. Para esto, usamos un método en la matriz. Ese es el punto de matriz. Longitud. Longitud básicamente devuelve cuántos artículos hay ahí. Si hacemos menos que valores, longitud de punto. Entonces esto significa seguir adelante hasta que el índice del bucle for coincida con cuántos elementos hay en la matriz. Entonces el punto después de eso, después de cada bucle voy a hacer más, más yo plus, plus significa al final de cada bucle agrega uno, sumar uno a este recuento, pasará por estos elementos y luego añadimos uno, y luego pasamos por estos elementos y sumamos uno hasta que coincidamos con la longitud. Estos también podría ser yo igual I más uno. Eso es lo que significa el plus plus. Básicamente significa agregar uno al recuento anterior. Pero podemos escribirlo así. Se ve un poco más eficiente. Tendremos los paréntesis o corchetes. Y esta es la instrucción que cuenta cómo debe trabajar el Loeb dentro de esta estructura aquí. Pero luego dentro de los corchetes, diremos lo que hace cada vez que atraviesa. ¿ Qué queremos hacer? Queremos contar cuántos, así que queremos hacer eso. Cada vez que lope garganta, agregamos uno al conteo aquí que podamos hacer un seguimiento de cuántos elementos hay ahí. ¿ Cómo va a funcionar eso? Vamos a hacer lo siento. Sólo vamos a contar. Además, más significa agregar uno a lo que sea el ingreso. Entonces si contar ahora es igual a tres, mientras que después de la siguiente cima va a ser cuatro y así sucesivamente. Y luego fuera de los corchetes devolveremos el valor del conteo. Por lo que esto significa una vez que se hace el bucle, devolver el conteo fue olvidando un punto y coma a, bien, vamos a compilador o Control S y ver si podemos probarlo, va a destruir este contrato que fuimos desplegados. Y ahora tenemos algunos elementos más. Aquí tenemos valores, que es la matriz que nosotros, que creamos. Recuerda cómo podemos utilizarlos para acceder a la matriz. Entonces digamos que queremos ver un número está en la posición 5012345 debe ser seis. Si ponemos la posición cinco, nos da seis. Pero ahora no sabemos cuántos elementos hay ahí. ¿ Cómo lo verificamos? Escribimos una función para eso sí contar elemento. Y el bucle nos va a decir, Hey, ahí hay diez elementos. Va a recorrer cada uno de ellos y hacer un seguimiento de ello. Ahora si sumamos algunos de ellos, redistribuir el contrato y volver a probar. Ahora tenemos 12. Hay un for-loop muy simple para hacer un seguimiento de algo. Ahora, combinemos un for-loop con la declaración condicional. Digamos que todavía tenemos esta matriz, pero queremos contar cuántos de estos números son mayores que cinco, por ejemplo. Entonces vamos a ejecutar una función que combine los dos de ellos. ¿ Cómo hacemos eso? Estamos escribiendo la función. Podemos llamarlo. Sólo llamémoslo cuántos. Llámenlo ¿cuántos? Esta función no hace una boquilla ni otra vez, ningún parámetro porque sólo va a hacer todo internamente. Es función pública, es vista porque vamos a acceder a la matriz. Y va a devolver un uint8 también. Porque queremos devolver ¿cuántos números son mayores que cinco? Tendrás que definir un par de variables más de nuevo. Aquí. Estamos tratando de contar algo. Tendremos que usar otra variable de cuenta al igual que hicimos antes de tu evento y lo llamamos contar de nuevo. Y igual que antes, va a empezar desde 0. Entonces podemos escribir el bucle, el bucle for. Va a ser más o menos lo mismo que antes. Porque todavía vamos a recorrer todos los valores ahí dentro. Por lo que sólo podemos copiar este anterior para bucle que escribimos y pegarlo aquí. Ahora, podemos hacerlo de un par de maneras. Hacia la declaración condicional. Simplemente podríamos tomar el valor de I, compararlo con una condición codificada, codificada en duro. Entonces podríamos hacer si, bueno, tendremos que extraer el contenido de i La vista conyugal será lo que hay en el índice de la matriz. Entonces valor, lo haré si lo que hay en la matriz, es más grande que cinco. Bueno entonces haz algo. ¿ Qué hacemos? Añadimos aquí un número para contar. contrario no va a hacer nada en este caso porque realmente no necesitamos hacer nada más en caso de que el valor no sea mayor que cinco. Pero aún vamos a devolver un uint8. Por lo que queremos volver después de que se haga el bucle, queremos devolver el conteo. No se olvide de los aquí para. Esta función va a recorrer la matriz. Y si el valor que lee de la matriz es mayor que cinco, lo va a agregar para contar. Entonces en este caso, cuántos números son mayores que 51234, 567 números son mayores que cinco. Cuando llamamos a esta función, debemos conseguir siete. Como resultado. Tratemos de compilarlo, a ver si va. No lo hace. ¿ Qué hice aquí? Escribí mal el nombre de la matriz C. Escribí el valor. ¿ Por qué el nombre de los valores de la matriz? Vamos a compilarlo de nuevo con controladores. Esta vez funcionó. Podemos aplicarlo. Llamemos a la función de cuántos números son mayores que cinco, y aquí obtenemos siete. Nuestros trabajos condicionales. Podríamos hacerlo de otra manera porque aquí ya tenemos una función, ya estamos aquí arriba. Ya escribimos una función que comprueba si un número es mayor que cinco. Entonces, ¿cómo podríamos usar esta función en lugar de codificarla así? Bueno, dentro de la declaración if, los valores, sólo podemos pasarla por la función. A la función se le llama el gran número. Entonces solo pasamos el valor de, solo pasamos el valor del elemento en la matriz a través de la función gran número, que ya se ha ido y verificamos si el número es mayor que cinco. Si se vuelve a compilar se descarga y ya desplegado. Vamos a ver cuántos y en su lugar nos da siete. Esta es una forma un poco mejor hacerlo porque entonces podríamos cambiar esta función para comprobar como quieras. Vamos a golpear cada en vez de cinco, queremos revisar números que son más grandes tres para volver a compilarlo y volver a desplegarlo. Entonces tenemos un número mayor porque ahora estamos comprobando si los números son más grandes que tres en su lugar. Muy bien. De acuerdo, así que continuemos. Y presenté el último bucle que quiero mencionar hoy. Antes de irnos, solo quería mencionar que estas explicaciones y estoy haciendo son muy, sé que se sienten muy lentas, muy tontas, pero solo quiero asegurarme de que le expliqué la lógica de cómo estas piezas funcionan paso a paso. Y por si acaso estás siguiendo. No está familiarizado con esta consecuente ya. Programación de algunos otros lenguajes. Estos conceptos son muy, muy opuestos, especialmente la estructura for-loop como este código de tema en JavaScript es más o menos la misma, pero hay uno. Me aseguraré de que cubra todo paso a paso para que puedas entender mejor cuando realmente quieras usar esos. Ahora hablemos del bucle while. Entonces la diferencia entre el bucle for y while es que en el bucle while, simplemente continuamos el bucle todo el camino hasta que se cumpla una condición específica. Vamos, vamos a mostrar un ejemplo de eso. Escribimos una función que circula hasta un número. Es rico en nuestra variable. Escribimos una función que llamamos go-to 0. Ir a la función 0. Esta función realmente no va a conseguir nada. Va a ser una función pública. Será puro porque estamos haciendo todo internamente a la función va a devolver un uint8. ¿ Cómo hacemos la sintaxis de while loop? Usaremos la palabra clave while y luego dentro de la palabra clave while. No tenemos las instrucciones. Sólo decir esto. Antes de continuar con eso, tendremos que sumar un par de variables igual que lo hicimos en el R1. Por lo que esta vez podemos establecer cuántas veces queremos que vaya el bucle. Podemos simplemente crear una variable, variable U int, aunque podemos llamarla veces que podrían soportar cuántas veces queremos bucle. Y digamos que queremos que el bucle vaya diez veces. Entonces tendremos otra variable. Podemos llamar a cuántos. Por ejemplo, estas variables van a hacer un seguimiento de cuántas veces va el bucle. Sé que esto no es extra práctico en el mundo real, mientras que esto para mostrar un ejemplo de cómo funciona esto. Entonces lo que queremos hacer es que queremos hacer un bucle diez veces. Queremos que este bucle vaya todo el camino hasta que estos tiempos variables sean iguales a 0. Haremos si los tiempos son más grandes que 0, luego seguir haciendo bucle. Y luego podemos escribir las instrucciones aquí. Entonces, ¿cómo estructuramos esto? Queremos decir, queremos contar cuántas veces va a recorrer, pero solo queremos contar, solo queremos hacer un bucle todo el camino hasta este que sea 0. Lo que haremos es que cada vez que haya un bucle, vamos a sumar 12. Cuantas, cuántas variables serán, cuántos más, más. Porque queremos contar cada bucle por el que pasamos. Y al mismo tiempo, tendremos que cambiar la variable por dos veces menos una. Entonces básicamente lo que sucede aquí es cada vez que pasamos, agregamos una a esta variable y retomamos una de esta variable. Entonces básicamente esto es efectivamente con el contador de cuántos bucles harán. Entonces fuera del bucle, devolveremos el valor de cuántos básicamente comprobaremos cuántas veces lo hará. Esta podría ser sólo una función muy simple de imprimir, determinar cuántas veces queremos hacer algo. Podemos hacer Control S para compilarlo. Tenemos una advertencia. Aquí, dice esta declaración las sombras en estos las sombras de colisión y existen en la pregunta. Es porque lo estamos cambiando. Y pero como es sólo una advertencia todavía va a funcionar, acabo de decir, Hey, no es una, no es óptima, pero todavía va a funcionar. Solo un ejemplo para ver cómo funciona el bucle while. ¿ Qué pasa? Aquí tenemos dos variables. Wonder dice que 101 sí es 0. Cuando llamamos a esta función, simplemente deberíamos ver que el cuántos, porque esta es la única que devolvemos, que cuántas variables apenas equivale a diez? Podemos decirlo diez. Ahora si queremos bucle 20 veces, podemos hacer eso. Cambió los tiempos variables 20. Aquí muestra cómo looped 20 veces. Ahora para comprobar que esto realmente funciona, vamos a cambiar las condiciones aquí. Siempre seguimos haciendo bucle y todo el camino hasta que el tiempo sea igual a 0. Pero si cada bucle, en lugar de tomar uno, tomemos dos. Esto significa que técnicamente solo deberíamos bucle diez veces, pesar de que tenemos aquí los 20 seleccionados. Así que intentemos eso. Redesplazado. Si lo comprobamos, solo deberíamos ver diez, que vemos diez. Este fue un ejemplo de cómo usar un bucle while. Muy bien. Ahora quiero mostrarte algo más interesante que este concepto abstracto. Podemos eliminar todas estas cosas. Quiero mostrarles algo con la declaración condicional. Digamos que queremos asociar la dirección que crea un contrato a una variable para que podamos recordarlo más adelante como propietario. Y luego queremos crear una función que verifique si. Un específico se dirige al propietario o no. Esto puede ser útil en caso de que esté creando un contrato inteligente para monedas de menta o un contrato para una moneda. Y se crea una función principal. Obviamente, no se quiere tener a ninguna persona que actúe como contrato para poder conocer nuevas monedas. Sólo tendrás a la persona que posee el contrato o la entidad denota al país haciendo eso. ¿ Cómo podemos hacer eso? Bueno, en primer lugar, podemos utilizar una función constructor para asociar la variable cubital con la dirección que crea el contrato. Entonces como recordamos, la función constructor se llama así con el constructor de construcción de palabras clave. Recuerde que la función constructor solo se ejecuta una vez cuando se crea el contrato. Alguna vez tendríamos instrucciones ahí dentro. ¿ Cómo podemos escoger la dirección de quien llame a estos la creación del contrato? Bueno, tenemos el remitente del mensaje. Podemos crear una variable llamada propietario, habrá que crearla fuera de la construcción. Entonces vamos a crear una variable que es una variable de dirección llamada propietario. Podemos hacer que éste sea público para que podamos acceder y ver qué dirección es el propietario. Entonces dentro de la construcción, simplemente asociamos el propietario variable con el Centro de Mensajes. Por lo que MSG dot remitente. En este caso, en cuanto se crea el contrato, tenemos el campo propietario variable con la dirección que está creando el contrato. Ya sabemos cuál es la dirección del propietario. Ahora, vamos a crear una función para comprobar si un otro específico que llama a esta función es el propietario, llamará a la función, y podemos llamarla es propietaria. No estamos pasando nada por esto porque lo lee automáticamente. Y ésta va a ser una función pública para poder acceder a ella. Se va a ver porque podemos ver algo desde la blockchain. Y éste volverá, nuevo una variable de bola porque queremos comprobar si algo es verdadero o falso. ¿ Cómo lo verificamos? Podemos usar una declaración if, lo haremos si remitentes de mensajes. Entonces MSU, esos remitentes, si los otros que llaman a esta función es lo mismo el propietario de la dirección que no es el propietario. Aquí en esto. En declaraciones condicionales, para comprobar si algo es igual a otra cosa, usamos un doble igual. Como recuerdan en la primera lección sobre las variables, estábamos diciendo que lo igual que usamos para las variables realmente no significa. Igual significa más como una asociación. Esto es esto. bien queremos comprobar si algo es igual, entonces usamos el doble igual, tantos iguales. Entonces, ¿qué queremos hacer si el remitente del mensaje es el mismo que éste de aquí, entonces volvemos verdadero. De lo contrario devolver falso. En este caso. No olvidemos los puntos y coma. En este caso, si alguien intentó llamar a esta función no es el dueño va a dar falso y luego reconstrucción del sistema para permitir que estos otros hagan algún financiamiento, tal vez no otra cosa. Vamos a probarlo. Tratemos de compilarlo. Control S. Escribí retornos en lugar de retornos. Tantos errores, incluso cuando ya sabes cómo funcionan las cosas, todavía vas a cometer muchos errores. Ahora vamos a compilar correctamente. Veamos ahora aquí tenemos todas estas direcciones. Esta dirección aquí terminando en C4 es la otra. Entonces lo usaremos para desplegar, desplegar. Fue desplegado con éxito. Vamos a revisar qué hay en el contrato. Ahora tenemos estas dos, estas dos cosas a las que podemos acceder. El primero aquí, el segundo aquí es la variable propietario. A pesar de que aquí especificamos. Si hace click en éste, deberíamos poder ver la dirección que creó un contrato. Por lo que estamos creando CNES en C4. Decimos, está bien, esta es la dirección que posee el contrato. Y si llamo a la función es propietaria, porque estamos usando estas nutrias que deberían devolver true? ¿ Qué golpe de retorno? Ahora digamos que accedemos a esta función desde una segunda dirección, ésta aquí. Y luego en CB2, el dueño sigue siendo los artistas anteriores. Y si llamamos falso al análisis de funciones porque no somos el honor, estos van a ser una estructura muy útil que verás a menudo En funciones. Dos significa monedas o mantener de t o hacer algo que no quieres que nadie solo sea capaz de hacer. Ofertas fue una introducción a los bucles y condicionales. Sé que podría ser un poco confuso. Si vas en la documentación de solidez, probablemente puedas encontrar más información que podría explicar y aún más ejemplos. Siguiente lección va a ser sobre lista enumerada. Y luego después de eso, solo nos enfocaremos en los contratos cognitivos e inteligentes. 7. Lección 6: listas enumeradas: Hola y bienvenidos a la lección seis. Hoy vamos a hablar lista de enumeradores y veremos cómo podemos usarlos para crear una aplicación que realice un seguimiento de los estados. Una lista de enumeradores simplemente restringe cuántos estados variable puede tener. En el ejemplo de hoy, planearemos crear una app. Manejan un registro de las puertas o todos adoran. Podemos hacer un seguimiento de la puerta para ver si está abierto o cercano y asociado a la blockchain. La sintaxis para una lista de numeradores comienza con la palabra clave enum, seguida del nombre que queremos dar a estas variables. Entonces tendremos el nombre, y luego tendremos una lista de las condiciones o estados variables. Entre corchetes. Tendremos un estatus. Podemos fusionar un estatus y luego otro estatus y así sucesivamente. Y esto significa que las variables que llamamos asociadas a estos lista enumeradores sólo pueden tener estos dos estados que tenemos que hemos seleccionado. Empecemos con el contrato. Comenzará con el contrato habitual, y podemos llamarlo. Empecemos a poner la primera variable que vamos a crear. Como mencionamos, una lista de enumeradores para hacer un seguimiento de una puerta. Podemos crear una lista de enumeradores llamada enum. Enum. Podemos llamarlo condición oscura. Una convención es utilizar la inicial de capital para la condición de lista de enumeradores. Entonces entre corchetes, pondremos los dos estados. Entonces la primera vez que vamos a tener una variable es cerrada, las puertas se cierran y se abren. La puerta está abierta. Lista de enumeradores, o al menos la declaración no necesita el punto y coma al final. Entonces si te acostumbras a poner semi-colones de lo que podrías obtener un error que es fácil de resolver. Ahora después de eso, podemos crear variables que podemos usar asociadas. Es lista de enumeradores que hicimos. Entonces comenzaremos a crear una variable de puerta. Simplemente podemos llamarlo, comenzaremos colonia la lista enumeradora, condición de puerta, y luego espacio y el nombre que queremos usar para la variable. En este caso, podemos llamarla puerta. Permítanme cambiar esto. Podemos llamarlo puerta. Podemos hacer múltiples cosas. Podemos crear otro para una ventana si queremos hacer un seguimiento de una ventana también, por ejemplo. Ahora, necesitamos tener formas de asociar esta puerta ancho variable. Una de las condiciones que hemos declarado, creamos una función para eso. La función comenzará con la función de palabra clave habitual, y la llamaremos puerta abierta. No tenemos que pasar ningún parámetro por la puerta abierta. Lo hará público para que podamos acceder a ella desde fuera. Así es como cambiamos el estado de la puerta. La variable, vamos a nombrar el nombre de la variable igual condición de puerta, que es el nombre de la con el fin de enumerar punto uno son los estados. Entonces en este caso podemos abrir. Así es como esta función modificará cualquier estado en este momento para abrir. Y podemos hacer lo mismo por tener una función que la declare como cerrada. Por lo que tenemos función es sólo se puede llamar cerrar puerta pública también. Y será lo mismo, puerta igual dork condición punto cerrado. Perfecto. Ahora tenemos estas dos funciones que nos permiten cambiar el estado de la puerta o cualquier variable que esté haciendo un seguimiento. Ahora, ¿cómo sabemos cuál es la condición actual? Supongo que lo que tendremos que crear una función para eso. solidez es una gran cantidad de funciones. Por lo que podemos hacer una función llamada Get condition va a ser pública. Éste podemos escribirlo como vista, ya que va a leer algo de la blockchain va a leer qué? Está haciendo, va a devolver algo también. ¿ Qué va a regresar? Este va a devolver la lista de enumeradores va a devolver la condición aquí. Podemos poner eso va a devolver la condición de puerta tipo de variable. Los textos de la función simplemente van a devolver la puerta. que significa devolver cualquier variable de condición que sea. ¿Ahora mismo? No sabemos, no tenemos forma de saber qué condición es el estándar. Podríamos hacerlo como constructor. Entonces antes deberíamos preguntar, alterar las variables, podríamos poner una función constructor. Hará constructor. El constructor sí. Recuerde que el constructor solo se ejecuta una vez cuando se crea la cantidad. Y podemos seleccionar en qué condición están, la puerta va a ser sólida. Decir eso como norma. Cuando se crea lo contrario, queremos que la puerta se considere abierta. Me estoy perdiendo algo aquí afuera. Por lo que tenemos que hacer es sólo declarar que la puerta estará abierta. Condición que se abra. Estos aseguran que cuando se crea el contrato, la puerta ya está abierta. Vamos a probarlo. Trataremos de compilarlo. Y vamos a ver si la versión del compilador es la correcta y no es cambiarla. Control-s para compilarlo no da ningún error. Entonces esa es una buena señal. Y venimos aquí y Desplegar, desplegar su contrato con éxito. Y vamos a revisarlo. Tenemos todas estas cosas a las que podemos acceder. Ahora, digamos que queremos revisar y asegurarnos de que la puerta esté realmente abierta. Entonces nosotros, asumimos que está abierto porque el constructor es, vamos a usar la función Get condition. Podemos chequear. Por lo que vamos a hacer Obtener condición nos da uno. Entonces uno es el segundo elemento dentro de los diferentes estados. Entonces estas son obras un poco como las matrices 0 index base. Entonces el primer elemento va a ser 0, el segundo elemento va a ser uno. Lo siento, nos dice uno. Por lo que sabemos que la puerta está abierta aquí. Ahora. Queremos cerrarla. Por lo que lo llamamos la puerta cerrada de moda pasó. Entonces en teoría ahora la puerta debe estar cerrada y si llamamos la condición se vuelve a cerrar. Podemos utilizar la función de condición de Open Door para reabrir la puerta y así sucesivamente. Esta es una buena manera de hacer un seguimiento de algo en la blockchain. En las próximas lecciones donde realmente vamos a codificar algunos contratos. Vamos a ver cómo podemos, cómo podemos decir la blockchain y las aplicaciones externas. Aquí hay algo cambiado en este estado. Estas fueron una especie de lección corta ya que sólo había para cubrir la lista de enumeradores. En la siguiente lección, realidad vamos a codificar como mi contrato. Quiero decir, hemos sido atrapados en contratos inteligentes hasta ahora, pero vamos a codificar como contrato inteligente. Podrían tener una utilidad real potencial en la práctica. Y va a ser muy simple. Eres CA, será sólo unas pocas líneas se llaman. Te veré en la próxima lección. 8. Simplestorage: Hola, Bienvenido a la lección de almacenamiento único. Hoy, escribiremos un contrato, un contrato real que podríamos usar para algo y en realidad es un contrato muy común. Entonces también puedes encontrar en la documentación de solidez, se conoce normalmente como almacenamiento simple y lo usaremos para almacenar y recuperar datos. Empecemos a cavar un poco más en el lado profesional y ver cómo podemos planificar y diseñar contratos. Por lo general, los contratos se diseñan siguiendo algún tipo de pasos. Siempre tendrás la directiva embarazada encima, luego el nombre de los contratos. Y luego especificaremos todos los datos y las variables. Y luego tendremos las funciones. Siempre es este tipo de estructura. Y así en los próximos videos, sólo vamos a trabajar en coordinar contratos inteligentes. Y siempre vamos a utilizar este tipo de estructura y disposición. La primera versión que vamos a crear un simple contrato de almacenamiento simplemente va a estar almacenando un número. Vamos a crear un contrato que tenga una variable numérica, luego una función para almacenar el número y una función para recuperarlo, Eso es todo. Entonces vamos a trabajar en la segunda versión donde podamos planear tal vez hacer algo que podría ser útil para una app de contacto donde almacenarás y poder recuperar nombre y números de teléfono. Empecemos a menos que estén siguiendo la estructura que mencionamos. Dijimos que siempre vamos a empezar con esta solidez con la directiva primaria. Entonces eso es lo que tenemos aquí listo. Y luego escribiremos el nombre del contrato, la palabra clave del contrato, y luego llamaremos a este simple almacenamiento. Entonces la primera parte del contrato, dijimos que siempre son datos en variables. Hoy sólo tenemos una variable y va a ser un uint8. Podemos llamar, fue demasiado lejos. Ahí. Podemos llamar al número de usuario , por ejemplo, porque es el número que queremos almacenar. Aquí. No lo asociamos a nada, por lo que siempre se inicializa a 0 al principio cuando se crea el contrato. Entonces necesitamos dos funciones, una para almacenarla y otra para recuperarla. Por ahora probablemente incluso puedas mecanografiar esas funciones por ti mismo. Entonces vamos a hacer la palabra clave función lo llamará store, habrá que pasar un número a través de ella. Iba a ser una ONU a la que podamos llamar número. Entonces esta función tiene que ser pública porque queremos acceder a ella. Y eso es todo porque esta función va a hacer cambios en la blockchain, porque esto va a cambiar esta variable aquí. Entonces el siguiente paso es debe ser muy sencillo. Simplemente tomamos nuestro número de usuario variable y asociado a cualquier variable que pasemos A través del número de función. Y eso es todo. Si bien la segunda función va a ser la función para recuperarla. Podemos crear una función, podemos llamarla retrieve. En esta función no estamos pasando ningún parámetro porque solo estamos buscando tomar un número que ya está ahí. Es público y vista porque vamos a leer algo de la blockchain y también tiene que devolver cosas. Porque queremos devolver nuestra uint8. Y ahora sólo tenemos que hacer una instrucción de retorno y queremos devolver qué? El número de usuario que se almacena en el contrato. Y eso es todo. En tan solo estas pocas líneas, creamos un contrato funcional que en realidad sigue una estructura que se ve en un contrato inteligente real real. Algo más que pudiéramos ver en un contrato inteligente real serán comentarios. Vamos a ver algo como esto. Si vas en el escaneo de éter y sacas un contrato de una criptomoneda o algún otro protocolo, entonces verás que Verá comentarios como este a un cierre de funciones obviamente. En este caso aquí es un poco superfluo porque estas funciones son muy obvias. Pero verás algo como esto en un contrato real. Función para almacenar un número. Aquí, sólo un simple comentario. Y luego otro comentario aquí dice función para recuperar el número. Ahora podemos empezar a sumar comentarios. Un poco de explicaciones. Obviamente esto es todo, esto es bastante común y obvio para ti. Pero digamos que llamaste este contrato y luego alguien más tiene que trabajar en él. Es muy buena práctica dejar algunos comentarios para que puedan entender lo que está pasando. Obviamente no empieces a comentar absolutamente todo como poner aquí. A u en variable. Aquí, asocie el número. Habrá un poco exagerándolo. Y en realidad puedes ser un poco confuso para las personas que lo leen desde fuera, pero algunos, algunos comentarios básicos para entender la lógica detrás del contrato es muy buena práctica y Te recomiendo hacerlo cuando no puedas. Ahora, los archivos que mires ahí, los encuentras. El GitHub tendrá muchos comentarios y eso es sólo porque están tratando de explicar algo que vamos a probar este contrato y podemos compilarlo. Control S es siempre. Esta vez. Pensé que era el compilador saber que esta vez es uno de los errores habituales que cometa. Compilado correctamente. Podemos matarlos En anterior contribuir tenemos de aquí, poner desplegar de nuevo. Aquí está nuestro contrato. Podemos almacenar un número. Digamos que queremos almacenar 50. Después recuperamos el número 50. Muy bien. 100. Lo recuperamos en un 100. Muy bien. También mal escrito recuperar. Esta es la lógica detrás de estos contratos muy simples. Ahora, hagamos que este contrato vaya un paso más allá. Vamos a crear un contrato que podríamos usar para almacenar información y tal vez relacionar a los usuarios de una app. Y tal vez podamos almacenar el nombre y los números de teléfono. Tratemos de hacer eso. Tendencia a pensar antes de seguir adelante y tratar de pensar por un segundo, ¿cómo podríamos hacer esto? ¿ Basado en lo que hemos aprendido antes? Podríamos usar structs, podemos juntar diferentes variables. Podríamos usar matrices, podríamos usar mappings. En este contrato, vamos a utilizar todos esos. Y así podemos hacer las cosas de diferentes maneras. Ahora, vamos, ya no vamos a necesitar esas y esas funciones aquí más. Voy a borrar esos y la variable también. Empecemos de nuevo con la segunda versión del contrato. Recuerda, las variables van en la cima. Empezaremos con el primero. Podemos tener una estructura. Y así destructar se puede llamar gente porque queremos tener, no estoy seguro de por qué está resaltando eso es un poco molesto, pero queremos tener múltiples variables en lo relacionado con clientes o usuarios. Queremos almacenar nombres y número de teléfono. La primera variable será una cadena que podamos llamar name. La segunda variable sería una uint8. Podemos llamar al número. Aquí está nuestra estructura de gente ya hecha. La segunda variable que vamos a necesitar es una matriz. Porque en este caso, podemos tener una matriz donde podamos almacenar todos estos camiones. Por lo que podemos recordar todas las informaciones relacionadas con todos. Podemos tener una matriz, aunque podemos llamar a personas o dinámicas, para que podamos agregar cosas. Será público para que podamos acceder a ella desde fuera. Podemos llamarlo, en realidad, cometí un error aquí. Este solo podemos llamar a personas de TI y luego a la matriz real que la llamamos matriz People. Sólo haz eso. Porque queremos crear una matriz de estructuras, resuelve estas variables aquí. Este tipo de variable tiene que ser una struct. Es la matriz frontal de la gente. Entonces la siguiente y última función que lo siento, variable que necesitamos es un mapeo. Podemos hacer un mapeo. Por lo que podemos asociar directamente nombre dos números. Por lo que el array y el strike se utilizarán para tener una visión general de los usuarios que podemos tener. Y el mapeo va a ser más como una búsqueda de base de datos tipo de cosa que donde podamos ingresar un nombre y recuperar el número. Empezaremos con el mapeo. Estos mapeos en el interior van a tener una cadena porque queremos poder ingresar un nombre que esté asociado al número que fue. Podemos hacerlo público para que podamos acceder a ella. Vamos a llamarlo de nombre a número. Así. Muy bien. Ahora tenemos todas las variables en la configuración de datos. Tenemos una estructura donde vamos a tener un nombre y un número dentro. Entonces tendremos una matriz. Si vamos a tener toda la estructura dentro, entonces un mapeo donde podamos, podemos asociar nombre y número y luego podemos buscarlos. Ahora vamos a crear la función. Esta función se va a utilizar para hacer dos cosas. Uno para agregar la información a la correa y luego agregar la estructura en la matriz. Lo hacemos todo en la misma, en la misma función. Entonces vamos a empezar con función, lo llamaremos add person. Esta función va a tomar dos parámetros. El primero va a ser el nombre. Entonces vamos a tener una cuerda. Recuerda cuando ponemos cadenas de entrada, tenemos que declarar la memoria, por lo que será tensa memoria y podemos llamarla nombre. El segundo va a ser un uint8. Aunque podemos llamar al número. Esto será público. No necesitamos devolver nada y no estamos haciendo una revisión pura porque en realidad vamos a escribir cosas en la blockchain. Estas cosas. De todos modos. ¿ Recuerdas cómo agregamos cosas en la matriz? Utilizamos el método push, tomaremos el nombre de la matriz, la gente, dot push. Ese es el método. ¿ Qué estamos tratando de hacer en la matriz de personas empujará una estructura. Struct también se llama gente. La gente lee el nombre y el número asociados en él, así. En la misma función, también vamos a añadir el mismo nombre y número dos, la struct, lo siento, tomé el mapeo y ahí habrá tomar el nombre del mapeo, nombre a número. El primer lado será el nombre asociado al número. Entonces este es en realidad un contrato que podríamos usar para desarrollar parte de una app para hacer un seguimiento de los contextos. Veamos si funciona. Podemos podemos compilarlo con Control S no funciona o me perdí esta vez? Parte de esto sucedió porque lo escribí así. Traté de tirar del tipo de variable en lugar de nombre. Aquí. En realidad tengo que poner a la gente al nombre aquí. Perdón por eso. Compuesto el trabajo del espectáculo. Y de hecho sí dice que el ID es muy útil porque ayuda mucho con los errores. Ahora con aplicado, aquí tenemos nuestro contrato. Entonces en este momento no tenemos ningún nombre y número. Y podría ser yo iniciar el contrato con la función constructor si quisiéramos tener alguna entrada predeterminada ahí. Pero ahora mismo tenemos que añadirlo. Entonces voy a expandirlo aquí para que podamos verlo. Lo siento, podemos verlo un poco mejor. Tuvimos que sumar el nombre y un número. Vamos a sumar. Y hagamos una hipótesis. Estos son el número de teléfono. Empezaremos una transacción que esté completa. Entonces vamos a añadir otro nombre por completo. Charlie tiene otro número de teléfono. No lo sé. Don. Donante tiene otro número de teléfono. Ahora deberíamos tener tres entradas o tres variables diferentes dentro de la matriz. Si vamos a buscar el spot 0, vemos que tenemos a Dave con el número de teléfono, Spot Run. Tenemos a Charlie con los números telefónicos pero tres lo siento, spot a tres, inexistente todavía lo hemos hecho. Ahora digamos que teníamos el nombre y queremos tener el número de teléfono. Bueno entonces solo lo escribiremos aquí. Top Charlie. Y va a recuperar el número de teléfono. Y recuperamos el número de teléfono. Así como esto, creamos un simple contrato de almacenamiento. Muy bonito. Estos concluyen esta parte donde pudimos estructurar y hacer un contrato inteligente. En el siguiente video, haremos algo incluso un poco más interesante. Acordó crear un contrato. ¿ Dónde vamos a hacer un seguimiento y permitir rentar un auto? En el video, vamos a ver pocos usos extra para funciones donde vamos a hablar también de eventos Y modificadores de funciones. Entonces te veré en ese video. 9. Alquilar un automóvil: Hola, Bienvenido al segundo video del proyecto que tendremos hoy en esta audiencia. Lo vamos a llamar otro contrato que tiene un poco más de un propósito práctico para mostrar todo lo que aprendimos hasta ahora. Haremos una contradicción, por ejemplo, ser usado y vinculado a una siesta. Verificarán la disponibilidad de algo. En este caso. Hoy vamos a fingir que tenemos un auto. Vamos a fingir que tenemos a Rambo y queremos rentarlo. Este contrato nos va a permitir comprobar si el auto está disponible y si está disponible para recibir un pago por renta en el mismo. Y en ese momento, si se recibe al padre, el estatus del Gameboy se va a cambiar a un no disponible. Esto va a ser muy buen contrato porque podemos introducir un par de cosas nuevas. En primer lugar, introducimos el estatus pagadero o variable. Eso significa que podemos, podemos especificar si una variable es una variable de una función o se paga una función. Vamos a pasar por eso ahora mismo. Empecemos con el contrato habitual y llamaríamos a un amble de alquiler. Simplemente renderice lumbar. Ahora si recuerdas del video anterior donde discutimos la estructura de un contrato inteligente, queremos tener todas las variables, los datos, la parte superior, resolver por ahora mismo en este momento, en esta versión, por el contrario, vamos a hacer, sólo tenemos dos variables. Necesitaremos tener una dirección que reciba el pago. Entonces necesitaremos tener una lista enumerada para que podamos hacer un seguimiento de cuál es el estado del auto. Empecemos a crear la dirección para el propietario. Creará una variable de dirección. En este caso, antes de hacerla pública o poner un nombre, tendremos que definir que esta variable es pagadera con la palabra clave pagadera. Esto significa que esta variable puede recibir pagos, hará pública para que podamos llamarla desde fuera y podemos llamarla titular del contrato. Contrato. Ahora tenemos una variable que define específicamente la dirección que recibimos, el pago, la lista de enumeradores. Y podemos llamar a las condiciones lumbares. La idea de esto contribuye a rentar un auto, ¿verdad? Por lo que necesitamos saber si ya está alquilado o si está disponible. Estarán disponibles las dos condiciones. Alquilado. Eso es todo. Vamos a llamar a estos lista enumeradores apenas lambda real tienen que recordar el número de condiciones y luego le daremos un nombre. Ahora, ¿cómo sabemos quiénes contratan los coronarios? Bueno, podemos inicializarlo con un constructor igual que lo hicimos en el anterior. Entonces comenzaremos con la función constructor, ese constructor de contrato. Función Constructor que si lo recuerdas, solo ejecuta el primer lugar. La primera vez que el contrato es aleatorio. Queremos hacer dos cosas en este constructor. Queremos asociar el constructor, lo siento, queremos asociar la dirección de la dirección de la billetera crea el contrato a la variable propietario. Queremos también inicializar una situación estándar para la lista de enumeradores. Tomaremos el contrato en nuestra variable. Vamos asociados a la dirección pagadera. Por lo que ahora solo quiero hablar un segundo sobre una cosa aquí antes de proceder. Estamos usando versión de solidez. En este caso el tema puede recordar en la lección anterior, tomaremos la dirección del contrato. construcción desde el remitente del mensaje será algo así. El remitente. Ahora estos en, en Solidez, 78 no funcionarán porque la instrucción del remitente del mensaje ya no se paga como era antes, tendremos que emitir aquí el funcionamiento pagadero para el remitente de mensajes. Si lo echamos así ahora va a funcionar. Si estás usando una versión de solidez antes de las siete, no necesitas poner aquí el pagadero. También podemos inicializar. Con el fin de enumerar. Considerando que lambda será igual a lambda condición punto disponible porque cuando creamos el contrato, el auto estará disponible para ser rendido. Aquí está bastante estándar hasta ahora. Ahora como de costumbre, vamos a necesitar unos pocos haciendo algo mal aquí. Necesitaremos unas cuantas funciones para hacer un seguimiento de todo lo que está pasando. Primero, vamos a crear una función que devuelva un estado del auto para que podamos entender qué comenzó como n si está disponible o no. Crearemos la función. Lo llamaremos Obtener condición. Condición. Ahora vamos a pasar cualquier parámetro a través de él. Y esta va a ser una vista de función pública porque va a leer algo y queremos devolver algo. Entonces regresa. Lo que es una variable que está regresando es la lista de enumeradores que se llamará desde la condición lumbar. A su vez, la variable lumbar que creamos gira. Así como eso. Ahora tenemos una función que nos puede decir, que nos puede decir si el auto está disponible o no. Ahora, ¿cómo reservamos el auto? Primero necesitamos recibir un pago. Vamos a tener que crear una función que pueda recibir la función de pago. Y podemos llamar a la renta lambda2, porque la función que en realidad va a emitir la renta igual que la dirección que va a hacer. Creamos un aquí. Esta función tiene que ser pagadera. Significa que puede recibir el, en este caso, va a ser público para que podamos llamarlo desde fuera también. Tan simple como eso. Ahora, idealmente, queremos hacer un par de cosas antes de continuar aquí. Porque no quieres simplemente crear una función que reciba un pago sin revisar un par de cosas. En primer lugar, vamos a necesitar comprobar que el auto está disponible, ¿verdad? Porque si los portadores ya orientados, ahora podemos llamar de nuevo a esta función. De lo contrario alguien más tendrá que reservar el auto. Entonces obviamente podrías crear un sistema de horarios, pero este no es el punto de este video. ¿ Cómo podemos comprobar si se cumple una condición? Tenemos una palabra clave que podríamos usar. La palabra clave es require. Básicamente lo que esto hace es que requiere una cierta condición para cumplirse. Por lo que en este caso, queremos asegurarnos de que el auto aún no esté orientado, que los transportistas estén disponibles. Entonces, ¿cómo podemos hacer eso? Podemos comprobar el estado de la variable lambda2 es igual a disponible. Podemos hacer eso así. No pusimos el nombre del punto de lista enumerador disponible. Ahora, antes de que esta función desencadena, vamos a comprobar primero que se cumpla esta condición. Lo genial de lo requiere que incluso podamos darles un mensaje de error. Por ejemplo, aquí podríamos poner la lambda ya se renderiza. Si alguien intenta llamar a esta función mientras el auto no está disponible, va a recibir, la función no se va a completar. Y también va a recibir estos mensajes de error que dice, oye, no se puede hacer eso porque ya se renta. Eso es muy bonito. Y luego el segundo cheque que queremos hacer es que queremos asegurarnos de que recibamos la cantidad correcta ahí por la que queremos correr el auto. Vamos a usar otra declaración require para comprobar si el valor que es la persona está enviando es al menos igual a lo que queremos. Por lo que vamos a crear otro requieren. Ahora estamos introduciendo algo nuevo que recuerdas cómo podemos capturar la dirección o host llamando a la función con este remitente de mensaje, podemos hacer lo mismo con el valor que son diciendo que eran valor de mensaje. Por lo que simplemente lo escribirás como este valor de mensaje. Y queremos asegurarnos de que el valor del mensaje sea al menos igual, sea mayor o igual a, digamos dos semanas. Podemos precisar ahí así para éter, así como esto. Y entonces si no es el caso, parece que lo escribí mal. Muchas cosas están mal. Éter. Y si ese es el caso, vamos a dar un mensaje que diga tampoco lo suficiente. No es suficiente. Así que ahora mismo así es bastante bueno. Porque antes de lanzar la función, estamos asegurándonos de que se cumplan las condiciones que queremos. Ahora, ¿cómo la función realmente envía dinero al propietario? Vamos a utilizar el método de transferencia básicamente tomará la variable propietario del contrato. ¿ Por qué hace esa variable contractual? Vamos a usar un método de transferencia. Haremos transferencia de puntos, y luego transferiremos el valor del mensaje que ahora está asociado a esta función, así, lo que hace esta instrucción es que toma el valor, que es la dirección descendente y ascendente n es nombre de transferencia a estas variable propietario del contrato aquí. Después de que eso se haga, podemos cambiar el estado del auto a ninguno disponible. Haremos propietario igual a las condiciones lumbares. Condiciones punto concedido. Ahora esta función va a manejar todas las cosas de los pagos. N va a cambiar el auto el estado del auto para rentarlo. Entonces si esto sucede y luego tratamos de llamar a esta función de nuevo, intenta ejecutar el código de nuevo, no va a pasar. El último pedazo de lógica que necesitaremos es una forma de devolver el estatus a 12 capaces. Y cuatro ahí solo podemos hacer checkout o check-in en lugar de funcionar donde, donde lo estamos llamando cuando devolvemos el auto, vamos a hacer función. Podemos llamarlo regreso lambda2. Además, esta función realmente no va a obtener ningún parámetro a través de ella. Lo tenemos público porque queremos poder llamarlo. La función sí es que toma lambda, lo vuelve a estar disponible. Simplemente decir que este punto, básicamente tenemos un contrato inteligente terminado. Podemos, podemos usar como prototipo para nuestra app. Tratemos de compilarlo. Pruébalo. Estamos usando en ocho, así que vamos a asegurarnos de que usamos para tu nombre, compilarlo Control S se compila correctamente. Mientras estamos aquí, tal vez pueda mostrarte lo que te estaba contando sobre la diferencia de las diferentes versiones. Mencioné que esto pagadero aquí es necesario ahora que usamos la versión ocho para ello, hay otra situación similar que podrías encontrar unos años mayor o más reciente en comparación con una versión más reciente de solidez. Y está en el constructor. este momento se puede ver que estamos indicando cada estado de visibilidad en las funciones, pero no en el constructor. Eso se debe a que la versión ocho ya no requiere eso. Entonces, por ejemplo, podríamos poner público aquí. Podríamos decir que la función constructor es pública, y si tratamos de compilarla, todavía va a funcionar, pero nos va a dar una advertencia. Aquí dice que el constructor de visibilidad en la visibilidad para la estructura de costos se ignora. Y nos da alguna otra información que podríamos usar, aún yendo a trabajar, pero nos da una advertencia. Y esto fue diferente. Por ejemplo, en la versión seis, Digamos que usamos solidez versión seis. Entonces moveremos el compilador vector versión 66 por seis. Si eliminamos público en realidad va a dar un error porque la versión seis requiere que se especifiquen las visibilidades . Y escuchando, me dice, Hey, no se especifica visibilidad. ¿ Quisiste agregar una cosa extra que quería mencionar solo para dar un ejemplo de la diferencia entre las versiones, volvamos a darle la vuelta al control de versiones en cuanto a recompilarlo es correcto. Despliquemos el contrato y veamos qué pasa. Tenemos nuestra máquina virtual de direcciones con desplegada aquí, se despliega el contrato. Aquí tenemos todas nuestras variables y funciones. Así que primero revisemos quién es el propietario del contrato y verificemos si el constructor funcionó. Si llamamos al propietario del contrato, va a darnos una dirección, que aquí puedes ver tus manos para DC para esa es la dirección que usamos. Esto nos dice que somos el propietario del contrato y eso también significa que podemos recibir el pago. Ahora en el constructor, también especificamos que el auto tiene que estar disponible cuando se lanza. Si sí conseguimos condición nos va a dar 0 que sea igual al lado disponible. Trabaja hasta el momento. Ahora, vamos a comprobar si la función para rentar el auto y hacer el pago funciona. Y si nota este aquí que se paga es rojo comparado con los otomanos. Ahora vamos, intentemos hacer una transferencia. Se trata de una sección de la página que utilizó para especificar realmente cuánto desea enviar. Y puedes ver aquí que tenemos diferentes medidas, asegúrate de que TI o éter. Y tratemos de mandar un éter. Nuestra función especifica que queremos tener que hacerlo. En teoría, si todo funciona bien, tratamos de enviar un éter. No debería funcionar, debería darnos un error. Veamos qué pasa. Volveremos aquí abajo. Tenemos un Ethan, vamos a correr madera. ¿ Adivina qué? Aquí tenemos un error. Nos proporciona un mensaje, no suficiente. Parece que nuestro sistema funciona hasta ahora. Ahora vamos a tratar de enviar a ver si eso funciona. Ponemos dos Rambo. Ahora trabajé. Si hice algo tonto aquí porque no cambié su consejo, básicamente nos mandamos el Ethernet a nosotros mismos. Vamos a cambiar la cuenta. Podemos usar otra cuenta y volvamos a hacerlo. Bueno, en realidad no podemos. Esto va a ser, va a haber otra flecha es genial para probar la siguiente, la siguiente parte que quería probar. Si corremos lumbar ahora que ya lo alquilamos, nos va a dar otro error ¿es por qué? Bueno, la lumbar ya está rentada. ¿ Cómo hacemos eso? Bueno, podemos llamar a la función para devolver la Lambda. Ahora el está de vuelta. Entonces intentemos usar esta segunda dirección para renderizar Lambda. Nuevamente. Enviaremos el a leer lambda2. Trabajó. Por lo que ahora frecuento chequeo aquí podemos ver cómo ahora el segundo adder tiene 1970 y el dueño del contrato tiene 101. Entonces así es exactamente como funciona esto. De nuevo, si ahora tomamos otra dirección y decimos, Hey, soy una tercera persona, quiero correr el Rambo. Oh espera, puedo alguien ya lo tiene. En este caso, realmente no verificamos si la persona que rentó el terreno era la misma. Es decir, haciendo la función de retorno. Eso es algo que podríamos implementar para que sea un poco más funcional. Con cualquier retorno libre, el Lanval, entonces alguien más puede rentar el auto. Esta es una visión bastante buena de cómo funcionan las funciones pagaderas. Función a pagar, variables pagaderas. Pero vamos a dar un paso a esto una muesca. Vamos a introducir un par de mecánicas más que harán que este contrato sea un poco mejor y un poco más real. Por lo que en primer lugar, El requieren declaración aquí. Vale, forma de asegurarnos de que cumplimos algunos requisitos, pero no es la forma preferida porque digamos que tenemos una app que hace esto muchas veces. Digamos que tenemos ahí arriba tiene diez lambda, tenemos una corriente de los tiene diez número. Entonces querrás tener una función específica para cada uno de ellos o algo que queremos renderizar Groenlandia donde queremos correr la madera roja y así sucesivamente. Esto significa que tendrás que escribir estos códigos. Para cada función, que es factible. Funcionará, pero será muy repetitivo. Y en realidad va a, el gas p es bastante porque estamos escribiendo cada vez más código para usar. Para superar esta situación, usamos algo que se llama el modificador. Modificador o vamos a colocarlo aquí justo antes del modificador de función constructor o es el modificador de función llamado comienza con el modificador de palabra clave. Y básicamente lo que hace, nos permite colocar estos requieren dentro de este modificador y luego podemos simplemente El modificador a cada función que queremos tener ese jaque mate para. Entonces ahora, te mostraré aquí ahora, digamos que el primero es asegurarte de que el estado esté disponible, va a crear un modificador, aunque podemos llamarlo sutil Sarah. Error de estado. Lo que vamos a hacer aquí, solo tomamos, déjame hacer esto un poco más pequeño. Simplemente toma el requerimiento que escribimos antes. Lo cortamos y lo pegamos aquí en el código modificador. Y eso es todo. Así es como lo transferimos. Cuando usamos un modificador, también tenemos que asegurarnos de que esto sea correcto. Cuando usamos un modificador, también teníamos otros dos caracteres especiales en él. Habrá un subrayado después de los cheques. Nosotros queremos. Estos subrayados. Básicamente dice después de que esto se haya comprobado, luego ejecute la función. Y si no se cumple, entonces obtendrás el error. Después creamos un segundo modificador para el pago. Hará modificador. llamaremos error de pago. Básicamente es no ser lo mismo. Tomaremos el pago requerido. Lo hemos cortado y lo pegamos aquí. Y luego agregaremos el guión bajo para asegurarnos de que la función se agote a la lista de verificación completa. Podemos limpiar esto aquí. Muy bien, por lo que la función para rentar lo único que queda es la transferencia real n cambio de condición. ¿ Cómo le decimos a esta función que queremos acceder a estos modificadores antes? Bueno, simplemente los agregamos. Simplemente los agregamos dentro de la cabeza. Aquí. Apenas vamos a sumar comenzado a decir error de pago. En realidad, acabo de darme cuenta de que tenemos que hacer una modificación de diapositiva aquí en la permanente o porque ahora la función está pasando por algo, ¿verdad? Porque es el valor del mensaje. En lugar de especificar aquí el pago que se especificará aquí. Ahí vamos a poner dos éter aquí en el require tendrá que algo. El modificador aquí necesitará agregar un parámetro porque el error de pago pasa el valor que queremos agregar, podemos agregar un parámetro llamado valor. Y luego aquí, el require comprobará que el valor del mensaje sea al menos igual o mayor que eso. Ahora eso va a funcionar. Este fue el siguiente paso que queríamos mostrar. Comprobemos si funciona. Mataremos este contrato. Esencialmente estos contenidos deberían funcionar de la misma manera que antes. Control S para compilar. Cometimos un error o no se equivocaron, hacemos identificador no encontrado o no único o el dy du. Déjame revisar esto. Aquí, lo pillo. Aquí. No especificamos el tipo de variable. Ahora intentemos compilarlo de nuevo. Perdón por eso. Podemos desplegar el contrato. Esta vez lo desplegamos para estos son de estas otras direcciones aquí, así que ese va a ser el dueño. Podemos comprobar que somos el dueño. El lumbar es 0 está disponible para ser rentado. Veamos si podemos usar estas otras primeras hijas para rentarla. Esta vez. Cambiamos la dirección, intentaremos trasladar para rentar el auto y trabajaste. El pago se está haciendo y tenemos la situación como era antes. Tratemos de devolver el Landow y probemos si esto funciona. Empecé a transmitir tu octava esta vez. Cuando tratamos de rentarlo. No podemos. Y el modificador también te va a dar el no hay suficiente, comer lo suficiente. Igual que antes. Si tratamos de rentarlo de nuevo, esto da otro error, colorea otro error porque estamos pasando, no estamos pasando lo suficiente para que desencadena primero el valor. Pero si lo sacamos a comer y lo intentamos de nuevo, bueno, no se supone que suceda. Ok. Hice algo mal ahí a la alarma ya está clasificada y sí, eso funciona. No revisé para asegurarme de que pasara por estos exactamente lo mismo que antes. Simplemente tiene estructuras un poco mejores, un poco más flexible porque entonces si tenemos nuestra 10ª función que hacen lo mismo, entonces tendremos un poco más limpio y código. Ahora, agreguemos una última cosa para que sea un poco más utilizable. Y vamos a explicar el evento. Un evento que sí es que permite que una aplicación externa escuche la blockchain para cambios específicos. En este caso, podríamos tener un software seguro conectado a una pieza de hardware que escucha la app en la blockchain y cada vez que se alquila el auto. Y así cada vez que pasó el pago y esta función aquí, la función rank lambda, se completa correctamente. Entonces tal vez puedas activar algún mecanismo automático para darte la llave del auto. Entonces, ¿cómo podemos hacer eso? Utilizamos un evento. Entonces aquí arriba en las variables, pondremos una variable de evento. Podemos llamarlo rentado. Y rentada va a tener un par de cosas en ella. El evento va a tener información. Vamos a tener que necesitar una dirección y una cantidad tendrá una variable de dirección uint8, que no nombré. La dirección se puede asociar a una variable llamada cliente, la uint8 a una variable llamada monto. Porque queremos asegurarnos de que la cantidad que cuando el software que lista y la cantidad sea correcta. Entonces tuvimos el advenimiento aquí. ¿ Y cómo podemos desencadenar esto? Podemos hacerlo en esta función lambda roja con evento Emmett. El carne es la palabra clave para desencadenar el evento. Una vez que el hilo, una vez pasadas estas instrucciones, podemos emitir. Básicamente nos encontramos con el evento que alquilamos. Los dos parámetros por los que pasamos , el remitente del mensaje. Porque pasamos la dirección y el valor del mensaje. De esta manera. La app que está escuchando desde fuera del contrato puede ver quién, quién dijo qué. Entonces entonces puedes autorizar la liberación de la clave o algo así. Ahora, también vamos a requerir esta función aquí, Rambo. Ser externo. Si queremos, si lo hacemos externo, entonces no tenemos que llamar realmente a la función por sí misma. Así que retrocedamos un segundo aquí. Voy, me estoy adelantando a mí mismo. De esta manera simplemente somos una reunión del evento. Ahora. Esta función en este momento tiene que llamarse manualmente. Entonces alguien tendrá que hacer un pago y llamar manualmente a esta función. ¿ Y si queremos tener una función que se active automáticamente? Si se hace un padre, podemos hacerlo usando otra función especial. Es el mismo constructor de principio porque es una función especial y se llama la recepción. Cuando usamos la función de recepción, visitante dirá el retail, el país, hey, cada vez que se reciba nuestro pago, no necesitas tener a alguien haciendo clic en este botón, solo haz la cosa automáticamente. Ahora esta función de recepción aquí tiene que ser externa. Externo es otra condición, otro estado de visibilidad que es sólo una variable para funciones. Y así básicamente dice en una app desde fuera, el contrato puede llamar a la función. Tenemos que hacer esto pagadero también. Vamos a tener que sumar los dos modificadores porque aún queremos revisar para asegurarnos de que todo esté bien. Por lo que vamos a utilizar el error de estado aquí modificador. Estos son un buen ejemplo de cómo, uh, por qué es mejor usar un modificador, porque de lo contrario tendremos que volver a escribir todo el código del modificador dentro de él. Error de estado y error de pago. También queremos recibir dos éter para esto. Ahora, el código dentro de aquí, va a ser el mismo que tenemos en esta función. Copia esto, pegarlo aquí. Si tratamos de compilarlo, Control S. ¿Qué hice? Supongo que olvidé algo. Esperaba un modificador de hamburguesas de punto y coma porque creé el evento, pero no lo cerré con un punto y coma, guarde el control S. Ahora está compilado si desplegamos. Si miras esto, puedes ver que esta función de recepción no es, no aparece aquí. Debido a que esta función de recepción, solo está disponible desde fuera del contrato. No podemos llamarlo desde dentro del contrato es desde fuera. Y así cada vez que le estamos enviando algo, entonces se va a activar automáticamente. Por el emit. Si hay una app, escúchala, entonces puede dar instrucción a otra cosa. Este contrato aquí fue un poco más largo, un poco más complejo, pero ilustra muchas, muchas cosas a nuestro alcance en sólido. Siguiente contrato que vamos a mostrar, es probablemente el más, un poco más emocionante porque vamos a mostrar cómo hacer un contrato para realmente significa la moneda de transferencia entre cuatro abajo. 10. Minter: Hola y bienvenidos al último video de este curso. Hoy vamos a armar todo lo que hemos aprendido hasta ahora e incluso vamos a añadir un nuevo elemento en la mezcla. Vamos a comprobar cómo podemos revertir la transacción en caso de que me condicione se haya fallado al igualar. Lo que vamos a hacer hoy va a ser vamos a crear un contrato inteligente donde podamos significar y enviar monedas a direcciones de agua. Siempre que tratabas de hacer un contrato. Es bueno. O es prácticamente necesario que hagas un plan general. Por lo que quieres tener una idea clara de lo que hace el contrato. Entonces por ejemplo, aquí podemos ver cómo podemos hacer la estructura. Queremos hacer un contrato que pueda significar monedas. Las monedas se pueden mantener y enviar a nuestras direcciones. Ahora queremos agregar un poco de funcionalidad. Entonces vamos a hacer al menos tener el introducido en primer lugar. La función principal solo puede ser llamada por el propietario. Eso es bastante esencial. De lo contrario, toda persona que actúe como los contratos solo puede crear nuevas monedas y no queremos tener eso. Entonces queremos tener una función que pueda enviar las monedas. Y antes de que la función sea validada y terminada, queremos asegurarnos de que el saldo en la renta de la cuenta para enviar monedas sea suficiente. Por lo que no tenemos cuentas con 1000 monedas tratando de enviar 5 mil, lo contrario no voy a trabajar. Y luego queremos tener un evento. Queremos poder emitir eventos cuando se transfieran las monedas o cuando se llame a una transacción para enviar monedas. Porque entonces podemos tener apps que puedan escuchar eso y hacer algo de relleno cuando eso suceda, no lo sé. Tal vez puedas tener un mensaje de confirmación. Estás enviando monedas para otra persona y hay alguien que puede recibir un mensaje de confirmación basado en eso. Entonces al final, también queremos tener una función externa que pueda comprobar el saldo de las direcciones desde otras apps externas para que podamos tener, podamos acceder al contrato desde otra aplicación y comprobar los saldos de las direcciones que se podía ver que casi como como éter escaneo tipo de aplicación. Empecemos por dólar para esto. Empezaremos, lo siento, hacer el contrato habitual tendrá las palabras clave del contrato y lo llamaremos Mentor de moneda. Mentor. Aquí está nuestro contrato. Ahora, en el primero, el contrato establecemos todas las variables y vamos a tener unas cuantas. El primero que queremos tener es la dirección para el propietario tendrá una variable de dirección que sea pública. Para que se pueda acceder y lo llamaremos dueño. Éste por ahora es inicializadores 0 o nada. Entonces vamos a colocar, vamos a asociar esa variable a la dirección del propietario cuando se desplegado el contrato. Entonces la segunda variable que necesitamos es un mapeo. Podemos asociar direcciones con cantidad de monedas que tienen y podemos revisar sus saldos. Entonces llamaremos a esto un mapeo. Dentro de este mapeo vamos a tener dos variables. Vamos a tener una variable de dirección. Esta dirección se va a asociar a un uint8 porque solo queremos tener una dirección asociada a la cantidad de monedas en estas monedas se comprueban en números. El mapeo es público. Podemos llamarlo balances, porque este es el mapeo que usamos para comprobar el saldo de la dirección. Entonces los dos siguientes van a ser el evento. Porque recordamos que queríamos tener una forma de emitir un evento. Las aplicaciones de soldadura pueden verificar si una transacción se ha centrado, no el evento. Podemos llamarlo enviado. Vamos a llamarlo enviado con mayúscula S. Vamos, vamos a enviar, o vamos a cumplir con tres variables diferentes. Por lo que vamos a enviar tres información diferente a través de esto. Vamos a mandar la dirección donde el aroma, las monedas hay una las recibió y la cantidad. Tendremos dos variables, dirección en su domicilio. Y estos van a ser llamados desde porque esto va a asociar las arterias ascienden a las monedas. Entonces la segunda variable de dirección va a ser dos, que es quien recibe la dirección, recibida, las monedas , y la segunda, Lo siento, soy, la última, será una pista de que podemos llamar cantidad. Porque esta va a ser la cantidad que se envía. Entonces la última variable que necesitamos va a ser variables de error. Entonces estamos introduciendo este sistema. En esta lección, en las lecciones anteriores, comprobamos cómo tener función, asegura de que cada condición se cumpliera usando un modificador. En este caso, usamos un error porque el error nos permite revertir la transacción. Cuando invierte la transacción, significa que no es no se transfiere, no es validada por la blockchain. Eso significa que no se desperdicia gas. Por lo que esta función fallará si en este caso, el saldo de la cuenta no es suficiente, pero no va a desperdiciar el gas. Entonces esta es una buena característica que no podemos hacer nuestro contrato. Voy a ser una variable de error como esta. Y podemos llamarlo equilibrio insuficiente. Suficiente. Vamos a revisar dos cosas. El monto solicitado, una cantidad de variables. Entonces tendremos que uint8 dentro de esto. Podemos llamarlo solicitado. El segundo uint8 se llamaría el disponible. Básicamente estamos chequeando el saldo de la dirección c, cuánto se solicita. Y si hay suficiente, podemos enviar transacción. Muy bien. Ahora, tenemos todas las variables que necesitamos. Por lo que la segunda parte de los contratos son las funciones. La primera función que queremos agregar si necesitamos una, es un constructor. En este caso, queremos tener una función constructor porque queremos tener la dirección que crea el contrato asociado para que sea el propietario para que puedan crear las monedas. Comenzará con la función constructor. Esto debería ser bastante simple por ahora. Apenas estableceremos la variable propietaria para que sea igual al remitente del mensaje. Por lo que ahora cada vez que se desplegado el contrato , que se desplieguen arterias va a ser el dueño del contrato. Y así estas direcciones van a poder monedas de menta. De lo contrario, si no hay dominio coincide, entonces realmente no los puedes tener. La siguiente función que vamos a hacer como función principal porque queremos tener las monedas. Vamos a crear una función que podemos llamar Mint. Un mínimo local. Esta función va a obtener dos parámetros, una dirección y una uint8. Una dirección, porque queremos enviar estas monedas que estaban destinadas a y direcciones. Puede ser, digamos que el dueño quiere mantener un montón de monedas para sí mismos. Pueden empezar a hacer algo, luego colocarán sus propias áreas. Digamos que el propietario quiere significar monedas para enviar a otros usuarios de la plataforma. Entonces esta función permite hacer las monedas y enviarlas automáticamente de inmediato. La primera variable que tendremos va a ser una variable de dirección, y podemos llamarla receptora. El segundo va a ser una ONU, donde tenemos la cantidad que llamamos las mujeres. Entonces esta función va a ser pública, por lo que se puede llamar desde fuera del contrato. Pero recuerda que sólo el, sólo el propietario puede, puede significar que esta hierba no mental puede llamar esta función al empleo que va a utilizar un require requerirá requerirá que el mensaje remitentes. Por lo que requerimos la dirección que causa la función. Es el dueño. Dicha lijadora igual, igual dueño. Esa parte está hecha. Ahora, sólo el propietario del contrato puede llamar a esta función. Y entonces lo que queremos hacer aquí es que estamos manteniendo monedas. Lo que vamos a hacer es que vamos a tomar la dirección que se pasa por la función y añadir la cantidad a su saldo aquí. Entonces básicamente vamos a sumar en el mapeo. Entonces vamos a hacer eso. Llamando al balance de mapeo, saldos. En el primero, en el primer lado del mapeo, vamos a asociar al receptor. Entonces esa es la dirección y recibe las monedas. Y lo vamos a hacer, es que vamos a sumar la cantidad de monedas a su saldo. Haremos más cantidad igual. Recuerda que el plus igual significa que tomamos lo que ya está ahí y sumamos la nueva cantidad. Técnicamente, si queremos, también podríamos escribirlo así. Monto más monto. Pero queremos hacerlo así porque es un poco más eficiente, es un poco más elegante. Ahora, tenemos la función principal. Esto significa que realmente podemos significar y enviar monedas a una dirección. Estos son índices. Tendremos un saldo de algo en este caso, ahora mismo, solo con esto, no podemos transferir las monedas, sólo podemos conocerlas, así que crearlas y enviarlas. Me di cuenta de que podría decir significaba sin explicar lo que es en caso de que no sepas lo que significa. Significa. Significa crear como si quisieras decir un NFT, creas un NFT, te refieres a monedas, creas monedas. Básicamente estás creando monedas a partir del aire delgado en este caso. Entonces por eso queremos tener una restricción Hutu ¿ quién puede hacer eso? Porque ahora si tienes un contrato donde estas monedas están asociadas a un valor monetario real real, entonces cambiarás el valor manteniendo estas monedas extra. Ahora, tenemos la función crear y enviar las monedas sobre los demás, pero queremos tener la capacidad de llamar a esto continúa este contrato para enviar monedas entre direcciones. Entonces vamos a crear una función para eso. Crearemos la función a la que podemos llamar send. Y de nuevo, vamos a tomar dos parámetros aquí. Básicamente lo mismo que la función media porque queremos tomar una cierta cantidad de monedas y enviarla a una dirección. El parámetro que va a ser el mismo en realidad. Va a haber otra es que podamos llamar al receptor. Y esto está bien tener los mismos nombres porque hay diferentes funciones y se hacen en estos parámetros al interactuar entre sí. El primero va a ser de nuevo el receptor y el segundo va a ser de nuevo, la cantidad. Olvidé algunas cosas aquí. Queremos tenerlo público también. Entonces los corchetes. Ahora, esta es una función bastante bastante simple, pero tenemos que agregar la funcionalidad de asegurarnos que el saldo de la dirección sea suficiente para poder enviarla. Entonces digamos que tenemos y otros que tienen sólo tiene unas 1000 monedas pero trata de enviar 2 mil de ellas, entonces eso no está permitido, eso no va a ser posible. Así que vamos a hacer, vamos a usar una declaración condicional aquí. Lo vamos a utilizar si comprobamos si el monto que intentamos enviar es mayor que el saldo que tenemos en la dirección, entonces va a revertir la transacción. Y va a usar esto como una forma de hacerlo. Va a revertir la transacción usando el saldo suficiente. Haremos si la cantidad que estamos tratando de enviar es mayor que el saldo del remitente del mensaje. ¿ Qué estamos haciendo aquí con esta instrucción? Esta instrucción, se nos toma la cantidad que estaban tratando de pasar por la función y coincidir con el remitente del mensaje dentro de este mapeo. Y obviamente si no hay cuenta en el mapeo, entonces mostrará 0. Por lo que aún, seguirá funcionando porque todavía va a demostrar que no tiene, no ha acuñado a lo mismo. Pero digamos que las direcciones en el mapeo y tiene unas 1000 monedas, entonces va a comprobar, se va a llevar a los exteriores, lugares aquí medidos contra él y ver cuántas monedas hay ahí dentro. Así es como podemos comprobar eso. Entonces vamos a hacer eso. Si ese es el caso. Entonces revertimos la transacción, usaremos una palabra clave revertir. Usaremos el error de saldo insuficiente. Para hacer eso así. Entonces queremos hacer dentro del error Sufi suficiente equilibrio. Entonces también podemos agregar alguna información aquí. Estos errores tienen estos parámetros ahí. Lo que podemos hacer es que podamos igualar las solicitudes esa cantidad, la cantidad que estamos tratando de enviar así. Aquí, sólo necesit.com. Simplemente puedes escribirlo en una línea, pero esto lo hace un poco más agradable. Entonces. Hay cantidad variable que tenemos lo igualará con el saldo del centro, al igual que revisamos aquí. M como centro G. Así como eso. Entonces no olvides aquí poner el punto y coma en lo contrario ahora va a funcionar, lo que esto hace es que comprueba que tenemos suficientes monedas. Si no tenemos, va a revertir la transacción y llamar a este error y así sucesivamente los zapatos de constelación muestran que estamos tratando de escoger lo que estamos tratando de mandar estas muchas monedas. Pero sólo tenemos estos muchos y por eso no puede funcionar. Y luego cuando esa condición no se cumpla en su lugar, entonces podemos hacer el traslado. ¿ Cómo hacemos eso? Es que tomamos, básicamente tomamos la cantidad que está en el mapeo asociado a los demás, lo quitamos, lo asociaremos a, tomaremos ese número m medidores básicos acreditados en asociado a otra dirección en el mapeo. Cómo hacemos eso, llamaremos el mapeo de saldos. En primer lugar, vamos a tomar la cantidad de peso del remitente, va a hacer el remitente MSG. En este caso, vamos a usar el menos igual. Oops, lo siento por esto. Presiono para ejecutar el operador menos igual. Y esto significa que estamos tomando lo que hay ahí dentro y eliminando la cantidad de ella. Entonces vamos a hacer menos c cantidad igual porque esa es la cantidad que estamos tratando de enviar y vamos a acreditarlo al receptor. Will todo otra vez, vamos a llamar los saldos. Pero en lugar de tener el remitente tendrá el receptor en su lugar. Haremos lo contrario aquí. Haremos más monto igual porque se lo acreditamos a ellos. Por lo que ahora en este punto, la dirección que está enviando las monedas, retirar el monto y la dirección que está recibiendo la moneda va a obtener el monto. Luchó ahí porque me di cuenta de que este es el equivocado aquí no se requiere, se recibe. Ahora va a funcionar mejor. Quiero decir, tiene que funcionar en absoluto. Recibido. También dijimos que queríamos emitir un evento cada vez que se realice la transacción. Por lo que podemos tener una app tal vez decir, Hey, recibirás estas muchas monedas. Así que déjame hacer evento como este y emitirá Enviado. Entonces vamos a tomar el remitente del mensaje, la dirección del receptor, receptor. Y la cantidad. Estas van a ser la información que se transfieren a través del advenimiento. El domicilio lo envía. Quién los está recibiendo, y cuántos n es más o menos lo que tenemos aquí de a una cantidad. Muy bien. Por lo que ahora tenemos la función hecha para transferir las monedas. Y podría parecer un poco complicado, pero una vez que lo pases, una vez que lo pienses un par de veces y una vez que realmente probamos va a ser muy comprensible. Este es un código muy simple en general. Ahora la última función que queríamos tener es una función que puede llamar a los saldos de las diferentes direcciones desde el exterior. Entonces si tenemos la dirección de una cuenta que queremos revisarlas podemos utilizar podemos usar esta función para ver cuántas monedas hay ahí, similar a la cadena Explorer ether scan type de cosa llamará a esta función. Voy a crear esta función y podemos llamarla buen equilibrio. Buen equilibrio, y sólo tendremos una variable, un parámetro aquí solo necesitamos los demás. Tendrá la dirección y podemos llamarla cuenta. La cuenta a la que llamamos. Estas funciones van a ser externas. Esto significa que podemos llamarlo desde una aplicación externa o a ella solo desde una aplicación externa va a ser vista porque esto realmente no cambia nada en la blockchain y solo lo lee desde la blockchain y regresa, devolverá una interfaz de usuario en porque queremos devolver una cantidad de violencia. Cuántas monedas hay en una muy simple sólo va a volver sin las orejas, los saldos porque queremos llamarlos mapeo, ¿verdad? Entonces llamaremos al mapeo, solo buscaremos la dirección de la cuenta, para la dirección llamada dot count on. Sigue haciendo eso. Para el tocado. Pasar por estos parámetros. Eso es todo. Por lo que ahora nuestro contrato está completo. Todavía no lo probamos, por lo que podría haber algunos errores de sintaxis. Toda la lógica debe estar bien. Si tenemos algunos errores, más probable es que sólo algunos errores de sintaxis. Por lo que quiero sólo quiero que eche un vistazo a la estructura por un segundo. Eliminemos todos estos comentarios solo para que podamos tener un poco mejor formateo. Mira cómo hicimos este país. Tenemos el nombre del contrato, el nombre identificador direccionado de solidez, y luego tenemos todas las variables en la parte superior. Entonces teníamos la función constructor, y luego todas las otras funciones diferentes. Entonces este es el diseño general que verás cuando estés buscando diferentes contratos inteligentes. Ahora si ponemos, digamos que queremos poner para dejarlo más claro para nosotros mismos. Porque a veces me entero que es un poco más claro. Digamos que quiero tirar de las variables asociadasa las variables asociadas esta función justo por encima la función y así sucesivamente se podría hacer todavía está funcionando. Pero entonces si alguien más va y mira a través del contrato de contenido, digamos que necesitas tener otro desarrollador te ayude a hacer algo o trabajar contigo, entonces va a ser más confuso para ellos porque lo más probable es que estén acostumbrados a tener un formato como este. De acuerdo, así que intentemos probarlo. Veamos si podemos compilarlo como asegurarnos de que teníamos el compilador adecuado. Tenemos versión 8.103 Control S. Ve si funciona y tenemos algunos errores. Por supuesto, diría yo. Ahora veamos cuáles son esos. De acuerdo, así que antes que nada, hice el primer error de sintaxis aquí. Estamos tratando de llamar a un mapeo o usar una montaña llamada balance, pero no tenemos un mapeo. Violencia fría, tenemos un golpe llamado equilibrios. Apenas sumará la S ahí y eso va a funcionar. Veamos cuáles son estas flechas. Estos aquí. Nuevamente, solo errores por sintaxis. Éste aquí debería ser receptor ahora recibido, no sé cómo me perdí eso porque el parámetro que pasamos receptor de código, llamamos a este receptor. El último. ¿ Quisiste decir arena, menta o arena? Por lo que ahora el advenimiento, se envía con una S. mayúscula Así que ten cuidado con los errores 0. Todavía vamos a hacerlos. Es, para mí es raro que nuestros escriban un montón de código todo a la vez. Y funciona sin esto más errores. Pero el ID del remix y este saludado compiladores son muy buenos si te das cuenta, se tardó un segundo para el bug, el código porque te dice que te dice lo que hizo, qué intentaste hacer todo está mal. ¿ Probablemente quisiste hacer esto? Y lo hace por ti mismo. Ahora si haces Control S, ni una palabra, lo compilamos y vamos a tratar de desplegarlo y probarlo. Tomemos eso como su primera. Vamos a desplegar desde este primero otros, EDD C4 en 108. Entonces este va a ser el dueño del contrato. Y voy a extender esto un poco así que tenemos un poco más. Podemos ver un poco mejor. Apliquemos. El control fue desplegado y lo tenemos aquí abajo. Voy a extenderla un poco. Y aquí tenemos todas las disfunciones. Ahora estas dos funciones son de color naranja y hacen algo, y estas son sólo otras funciones que acabas de leer cosas. Por ejemplo, los balances, podemos leer el balance, el mapeo y así sucesivamente. Y la puerta equilibra la externa que se va a leer de una fuente externa. Así que primero revisemos que el dueño uno trabaja. Llamemos al dueño. Y aquí tenemos el lado exterior es el dueño y tenemos EDD C4, que es nuestra dirección. Somos el propietario del contrato. Eso significa que también podemos significar monedas. Así que intentemos crear, quiero decir, no sé, 10 mil monedas, entonces podemos usar cómo queremos. Vamos aquí, copiamos nuestra dirección aquí, y esto va a extenderla. Entonces es un poco más, un poco más claro. Entonces la función principal, necesita un receptor y una cantidad que el receptor va a estar sobre auto pegará la dirección aquí. Y no nos referimos a 10 mil monedas. Si llamamos a la transacción va a funcionar porque somos el propietario. Y si ahora vamos a tomar nuestra dirección de nuevo, revisaremos nuestro saldo. Entonces pegamos las arterias aquí. Deberíamos tener 10 mil monedas, y de hecho lo hacemos. Ahora vamos a tratar de decir 2 mil monedas a las direcciones de agua porque son usuario de nuestras plataformas y podemos, queremos enviarlas para que puedan hacer cosas en la plataforma, se llevarán esta segunda dirección. Lo copiamos. Queremos enviarlo. El remitente va a, esta transacción va a necesitar dos variables, va a necesitar a quien reciba las monedas. Cuántos servicios que queremos centrar. Ahora vamos a tener que llamarlo desde el primero. Porque de lo contrario no vamos a tener suficientes monedas ¿verdad? Ahora si realizamos la transacción fue exitosa. Y si tomamos esta dirección y verificamos el saldo de la misma, entonces tenemos 2 mil monedas. Muy bonito. Ahora intentemos ver si la sección In, si funciona el error. Por lo que ahora nos quedan unas 1000 monedas en esta cuenta. Digamos que tratamos de enviar 10 mil de ellos a este mismo, a las mismas zonas. Cuando llamamos a la función, va a dar un error. Si nos desplazamos un poco hacia arriba, podemos ver qué está pasando. Aquí. Estamos tratando de llamarlo y luego se revirtió. La transacción ha sido revertida al estado inicial. Entonces esto ahora va a usar gas. El error va a dar estos parámetros solicitados 10 mil, pero disponible es de sólo 10 mil. Por eso lo codificamos de esa manera. Y así tenemos una información que oh, espera un segundo, estoy tratando de mandar demasiados. Eso no va a funcionar. Ahora. Podemos intentarlo. Podemos usar estas arterias. Acaban de recibir 2 mil monedas para enviarla a otra. Podríamos cambiar su dirección y dijo que queremos enviársela a este tipo. Copiemos esto. Ponlo aquí. Entonces fue la segunda dirección. Por lo que ahora cuando tratamos de enviar 500 monedas, que debimos haber hecho funcionó la transacción, y ahora otras deberían tener 500 monedas. Vamos a usar la función externa para revisar esta aquí. Estos consiguen botones. Es una función externa que debería hacer básicamente lo mismo de esto, de mirar en el mapeo. Será la única diferencia que podemos llamarlo desde una aplicación externa. Ahora replay, pegamos aquí la dirección. Llamaremos al saldo. Y tenemos 500 monedas. Nuestro contrato para acuñar y enviar monedas funciona tal y como se pretendía. Entonces estos son contratos bastante simples, pero creo que es muy bueno juntar toda esta información diferente. Obviamente, los contratos para si T y monedas que funcionan pueden NADH y tienen un valor antinatural asociado y hacen las cosas son mucho más complicados. Estos son justamente qué, 40 iones o código en comparación con un centenar que encontrarás en un contrato regular. Ahora, deberías tener suficiente conocimiento para poder al menos entender lo que está pasando dentro de su contrato. Entonces lo que recomendaré hacer es ir a buscar contrato para fichas y monedas con las que estás familiarizado. Los puedes encontrar en escaneo de éter, en ese escaneo o en cualquier cadena Explorer que quieras explorar. Y trata de leerlo y ver si entiendes lo que está pasando. Obviamente, no vas a entender todo, pero deberías poder tener una buena idea o al menos lo que hacen estas funciones y qué están tratando de hacer. Bueno. Esto está concluyendo nuestro curso de fundamentos. Realmente espero que lo hayas disfrutado y fue divertido para mí crearlo. Ha sido, he estado pensando en esto por un tiempo porque cuando he empezado a aprender solidez, solo pude encontrar cosas bastante complicadas o de cualquier manera cursos y tutoriales, realmente no explicar lo básico, cómo necesitaba. Y así realmente espero que este curso vaya a ayudar a alguien lo hizo como, ya que están tratando de aprender a convertirse en un desarrollador. Ahora esta fue la primera que creé aquí sobre esta teoría. Estoy trabajando en otro sobre las interacciones de la Web tres. Así que estad atentos para eso. Ese va a estar trabajando con Python y vamos a usar la biblioteca Web tres en Python para poder acceder a la blockchain y hacer cosas con Python, que es un mayor riesgo para gris idioma. Bueno, muchas gracias por seguir y nos vemos la próxima vez.