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.