Las computadoras, al igual que las personas, se comunican en una variedad de idiomas. Solidity y Vyper son dos lenguajes notables en el ámbito de la cadena de bloques Ethereum. Presentamos Vyper, un lenguaje de programación de contratos inteligentes de Ethereum, y lo comparamos con Solidity en la lección 1. En cambio, en esta sección profundizaremos en la sintaxis de Vyper, que es sorprendentemente similar a la de Python. Uno de los objetivos de Vyper es facilitar la codificación de contratos inteligentes manteniendo una buena seguridad. Su sintaxis pretende ser lo más simple y directa posible. Te sentirás como en casa si eres un codificador de Python. Incluso si no lo eres, la sintaxis similar a Python de Vyper es fácil de aprender. Veamos los principales componentes sintácticos de Vyper.
Python
# Este es un comentario en Vyper
@external
def saludar(nombre: cadena[10]) -> cadena[30]:
return concat("Hola", nombre, "!")
Los tipos de datos son los componentes básicos de cualquier lenguaje de programación. Definen qué tipo de datos se pueden almacenar y manipular dentro de un programa. Repasemos algunos tipos de datos básicos que ofrece Vyper:
flag: bool = True
int128
. Ejemplo: count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
En resumen, algunos valores disponibles en Vyper:
booleano
int128
uint256
decimales
DIRECCIÓN
bytes32
bytes
Cadena
Python
# @version ^0.3.7
b: public(bool)
i: public(int128) # -2 ** 127 a (2 ** 127 - 1)
u: public(uint256) # 0 a 2 * * 256 - 1
dec: público(decimal) # -2 ** 127 a (2 ** 127 - 1), 10 decimales
dirección: público(dirección)
b32: público(bytes32)
bs: público(Bytes [100])
s: public(String[100])
@external
def __init__():
self.b = Falso
yo.i = -1
yo.u = 123
self.dec = 3.14
self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e 26ae84b525cdacb
self.bs = b"\x01"
self.s = "Hola Vyper"
Las funciones en Vyper, al igual que en muchos otros lenguajes, son bloques de código reutilizable que realizan una tarea específica. Proporcionan una mejor modularidad para su aplicación y permiten la reutilización del código.
En Vyper, puedes definir una función usando la palabra clave def
, como en Python. Las funciones también tienen una lista de parámetros y un tipo de retorno. Aquí hay una función Vyper simple:
Python
@external
def agregar (a: int128, b: int128) -> int128:
devolver a + b
El decorador @external
hace que esta función sea invocable desde fuera del contrato (mediante una transacción u otro contrato). Sin este decorador, la función solo sería invocable dentro del contrato donde está definida.
Las funciones @internal
solo se pueden llamar dentro del contrato.
Las funciones @external
solo se pueden llamar desde fuera del contrato.
Ejemplo:
Python
# @version ^0.3.7
# Las funciones internas solo se pueden llamar dentro de este contrato
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
return x + y
@external
@view
def extFunc() -> bool:
return True
# Las funciones externas solo se pueden llamar desde fuera de este contrato
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
# No se puede llamar a otra función externa
# self.extFunc()
# puede llamar a funciones internas
z: uint256 = self._add(x, y)
return (x + y) / 2
@internal
@pure
def _sqr(x: uint256) -> uint256:
return x * x
@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
devuelve self._sqr(x) + yo._sqr(y)
Las estructuras de control se utilizan para realizar diferentes acciones basadas en diferentes decisiones. Vyper ofrece varias estructuras de control, incluidas if, for loop y while loop.
La declaración if
es la estructura de control más básica. Ejecuta un bloque de código sólo si una condición especificada es verdadera.
Python
@external
def is_greater_than_ten(a: int128) -> bool:
si a > 10:
devuelve Verdadero
de lo contrario:
devuelve Falso
El bucle for
en Vyper tiene la misma sintaxis que en Python. Puede ejecutar un conjunto de declaraciones, una vez para cada elemento de una lista, tupla, conjunto, etc.
Números de Python
: int128[5] = [1, 2, 3, 4, 5]
@external
def sum_numbers() -> int128:
suma: int128 = 0
para i en el rango(5):
suma + = self.números[i]
suma de devolución
El bucle while
en Vyper ejecuta repetidamente una declaración de destino siempre que una condición determinada sea verdadera.
Python
@external
def count_to_ten() -> int128:
conteo: int128 = 0
mientras conteo < 10:
conteo += 1
devuelve conteo
En programación, el manejo de errores es crucial para abordar los errores de tiempo de ejecución y proporcionar mensajes de error significativos al usuario. Vyper usa la declaración assert
para manejar errores.
Python
@external
def dividir (a: decimal, b: decimal) -> decimal:
afirmar b! = 0, "No se puede dividir por cero"
devolver a/b
En el código anterior, si b
es cero, se generará un mensaje de error "No se puede dividir por cero" y se revertirá la transacción. En caso contrario se procederá a la operación de división.
Vyper también proporciona la instrucción revert
que se puede utilizar para detener la ejecución de la llamada actual y revertir los cambios de estado, al mismo tiempo que proporciona un mensaje de error.
Este es un resumen rápido de la sintaxis y los principios fundamentales de Vyper. La clave para dominar Vyper, como ocurre con cualquier lenguaje de programación, es la práctica. Recomiendo el uso de estas técnicas para escribir aplicaciones simples. En la siguiente sesión, veremos cómo usar Vyper para construir y mantener contratos inteligentes. ¡Estar atento!
¡Felicitaciones por completar con éxito la Lección 2! Ha logrado un enorme progreso en la comprensión de la sintaxis y las construcciones fundamentales de Vyper. Hemos repasado una introducción a la sintaxis de Vyper, funciones y tipos de datos básicos, estructuras de control y manejo de errores en Vyper. Recuerde que cada uno de estos componentes es la base de cualquier programa Vyper. Es fundamental tener una comprensión firme de estos componentes centrales y la mejor manera de hacerlo es practicar y explorar. Cree programas simples que incorporen lo que ha aprendido hoy. No existe otra alternativa para la experiencia práctica cuando se trata de codificación.
Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum. Comprenda que el mundo de la tecnología blockchain es amplio y cambia constantemente. Como ingeniero de blockchain, su viaje de descubrimiento y aprendizaje nunca termina realmente. Estás en el camino hacia la maestría y cada paso adelante, por pequeño que sea, es un paso adelante. ¡Continúa con tu excelente esfuerzo y nos vemos en la Lección 3!
Las computadoras, al igual que las personas, se comunican en una variedad de idiomas. Solidity y Vyper son dos lenguajes notables en el ámbito de la cadena de bloques Ethereum. Presentamos Vyper, un lenguaje de programación de contratos inteligentes de Ethereum, y lo comparamos con Solidity en la lección 1. En cambio, en esta sección profundizaremos en la sintaxis de Vyper, que es sorprendentemente similar a la de Python. Uno de los objetivos de Vyper es facilitar la codificación de contratos inteligentes manteniendo una buena seguridad. Su sintaxis pretende ser lo más simple y directa posible. Te sentirás como en casa si eres un codificador de Python. Incluso si no lo eres, la sintaxis similar a Python de Vyper es fácil de aprender. Veamos los principales componentes sintácticos de Vyper.
Python
# Este es un comentario en Vyper
@external
def saludar(nombre: cadena[10]) -> cadena[30]:
return concat("Hola", nombre, "!")
Los tipos de datos son los componentes básicos de cualquier lenguaje de programación. Definen qué tipo de datos se pueden almacenar y manipular dentro de un programa. Repasemos algunos tipos de datos básicos que ofrece Vyper:
flag: bool = True
int128
. Ejemplo: count: int128 = 10
price: decimal = 123.45
name: string[20] = 'Alice'
numbers: int128[5] = [1, 2, 3, 4, 5]
En resumen, algunos valores disponibles en Vyper:
booleano
int128
uint256
decimales
DIRECCIÓN
bytes32
bytes
Cadena
Python
# @version ^0.3.7
b: public(bool)
i: public(int128) # -2 ** 127 a (2 ** 127 - 1)
u: public(uint256) # 0 a 2 * * 256 - 1
dec: público(decimal) # -2 ** 127 a (2 ** 127 - 1), 10 decimales
dirección: público(dirección)
b32: público(bytes32)
bs: público(Bytes [100])
s: public(String[100])
@external
def __init__():
self.b = Falso
yo.i = -1
yo.u = 123
self.dec = 3.14
self.addr = 0x704534A22F03Ea46f76A07a195568D115E2e6d52
self.b32 = 0xada1b75f8ae9a65dcc16f95678ac203030505c6b465c8206e 26ae84b525cdacb
self.bs = b"\x01"
self.s = "Hola Vyper"
Las funciones en Vyper, al igual que en muchos otros lenguajes, son bloques de código reutilizable que realizan una tarea específica. Proporcionan una mejor modularidad para su aplicación y permiten la reutilización del código.
En Vyper, puedes definir una función usando la palabra clave def
, como en Python. Las funciones también tienen una lista de parámetros y un tipo de retorno. Aquí hay una función Vyper simple:
Python
@external
def agregar (a: int128, b: int128) -> int128:
devolver a + b
El decorador @external
hace que esta función sea invocable desde fuera del contrato (mediante una transacción u otro contrato). Sin este decorador, la función solo sería invocable dentro del contrato donde está definida.
Las funciones @internal
solo se pueden llamar dentro del contrato.
Las funciones @external
solo se pueden llamar desde fuera del contrato.
Ejemplo:
Python
# @version ^0.3.7
# Las funciones internas solo se pueden llamar dentro de este contrato
@internal
@pure
def _add(x: uint256, y: uint256) -> uint256:
return x + y
@external
@view
def extFunc() -> bool:
return True
# Las funciones externas solo se pueden llamar desde fuera de este contrato
@external
@view
def avg(x: uint256, y: uint256) -> uint256:
# No se puede llamar a otra función externa
# self.extFunc()
# puede llamar a funciones internas
z: uint256 = self._add(x, y)
return (x + y) / 2
@internal
@pure
def _sqr(x: uint256) -> uint256:
return x * x
@external
@view
def sumOfSquares(x: uint256, y: uint256) -> uint256:
devuelve self._sqr(x) + yo._sqr(y)
Las estructuras de control se utilizan para realizar diferentes acciones basadas en diferentes decisiones. Vyper ofrece varias estructuras de control, incluidas if, for loop y while loop.
La declaración if
es la estructura de control más básica. Ejecuta un bloque de código sólo si una condición especificada es verdadera.
Python
@external
def is_greater_than_ten(a: int128) -> bool:
si a > 10:
devuelve Verdadero
de lo contrario:
devuelve Falso
El bucle for
en Vyper tiene la misma sintaxis que en Python. Puede ejecutar un conjunto de declaraciones, una vez para cada elemento de una lista, tupla, conjunto, etc.
Números de Python
: int128[5] = [1, 2, 3, 4, 5]
@external
def sum_numbers() -> int128:
suma: int128 = 0
para i en el rango(5):
suma + = self.números[i]
suma de devolución
El bucle while
en Vyper ejecuta repetidamente una declaración de destino siempre que una condición determinada sea verdadera.
Python
@external
def count_to_ten() -> int128:
conteo: int128 = 0
mientras conteo < 10:
conteo += 1
devuelve conteo
En programación, el manejo de errores es crucial para abordar los errores de tiempo de ejecución y proporcionar mensajes de error significativos al usuario. Vyper usa la declaración assert
para manejar errores.
Python
@external
def dividir (a: decimal, b: decimal) -> decimal:
afirmar b! = 0, "No se puede dividir por cero"
devolver a/b
En el código anterior, si b
es cero, se generará un mensaje de error "No se puede dividir por cero" y se revertirá la transacción. En caso contrario se procederá a la operación de división.
Vyper también proporciona la instrucción revert
que se puede utilizar para detener la ejecución de la llamada actual y revertir los cambios de estado, al mismo tiempo que proporciona un mensaje de error.
Este es un resumen rápido de la sintaxis y los principios fundamentales de Vyper. La clave para dominar Vyper, como ocurre con cualquier lenguaje de programación, es la práctica. Recomiendo el uso de estas técnicas para escribir aplicaciones simples. En la siguiente sesión, veremos cómo usar Vyper para construir y mantener contratos inteligentes. ¡Estar atento!
¡Felicitaciones por completar con éxito la Lección 2! Ha logrado un enorme progreso en la comprensión de la sintaxis y las construcciones fundamentales de Vyper. Hemos repasado una introducción a la sintaxis de Vyper, funciones y tipos de datos básicos, estructuras de control y manejo de errores en Vyper. Recuerde que cada uno de estos componentes es la base de cualquier programa Vyper. Es fundamental tener una comprensión firme de estos componentes centrales y la mejor manera de hacerlo es practicar y explorar. Cree programas simples que incorporen lo que ha aprendido hoy. No existe otra alternativa para la experiencia práctica cuando se trata de codificación.
Prepárese para profundizar en el mundo de los contratos inteligentes de Ethereum con Vyper en el futuro. En la Lección 3, veremos principios de Vyper más sofisticados. Adoptaremos un enfoque más práctico, concentrándonos en diseñar, implementar e interactuar con contratos inteligentes en la red Ethereum. Comprenda que el mundo de la tecnología blockchain es amplio y cambia constantemente. Como ingeniero de blockchain, su viaje de descubrimiento y aprendizaje nunca termina realmente. Estás en el camino hacia la maestría y cada paso adelante, por pequeño que sea, es un paso adelante. ¡Continúa con tu excelente esfuerzo y nos vemos en la Lección 3!