Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translation chapters 16 to 30 to spanish #27

Closed
wants to merge 21 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
09b571f
done chapter 21
Apr 21, 2024
f3a613f
Add chapters 16 to 20 in spanish
Apr 29, 2024
69c8a0d
Update readme files for chapters 16 to 20
Apr 29, 2024
4450335
Add translation to es for chapters from 26 to 30
Apr 30, 2024
0fc52f2
Update images for chapters 26 to 30
May 1, 2024
fcad85f
Update selector readme link on main readme
May 1, 2024
976091d
Merge pull request #8 from jonthdiaz/translation-chapters-16-to-20
jonthdiaz May 3, 2024
579df9e
Merge branch 'main' into translation-chapters-26-to-30
jonthdiaz May 3, 2024
2052bd7
Merge pull request #9 from jonthdiaz/translation-chapters-26-to-30
jonthdiaz May 3, 2024
4bb3bd2
Merge branch 'WTFAcademy:main' into main
jonthdiaz May 3, 2024
7414fc9
Merge pull request #10 from scguaquetam/ch21To25
jonthdiaz May 3, 2024
7e8a00f
Translation chapters 22 to 25
May 4, 2024
273e46a
Merge pull request #11 from jonthdiaz/translation-chapters-22-25
jonthdiaz May 4, 2024
87a2922
Update Languages/es/19_Alternativa_es/readme.md
jonthdiaz Jun 8, 2024
ff18c27
Update Languages/es/19_Alternativa_es/readme.md
jonthdiaz Jun 8, 2024
c25c0e0
Apply suggestions from code review
jonthdiaz Jun 8, 2024
8be483b
feat: Improve translation chapter 15 to 30
Jun 8, 2024
353f299
Merge branch 'WTFAcademy:main' into main
jonthdiaz Jun 8, 2024
8747c68
Merge branch 'main' into feat-translation-chapter-15-30-apply-suggest…
jonthdiaz Jun 8, 2024
f1b7cc2
Merge pull request #12 from jonthdiaz/feat-translation-chapter-15-30-…
jonthdiaz Jun 8, 2024
e01eed4
Merge branch 'WTFAcademy:main' into main
jonthdiaz Jun 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Languages/es/03_Funcion_es/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ Aquí definimos una función `internal minus()`, `number` disminuirá en 1 cada
}
```

Definimos una función `external payable minusPayable()`, la cual llama a `minus()` y devuelve el `balance de ETH` del contrato actual (la palabra clave`this` nos permite consultar la dirección del contrato actual). Dado que la función es `payable`, podemos enviar 1 `ETH` al contrato al llamar a `minusPayable()`.
Se define una función `external payable minusPayable()`, la cual llama a `minus()` y devuelve el `balance de ETH` del contrato actual (la palabra clave `this` permite consultar la dirección del contrato actual). Dado que la función es `payable`, se puede enviar 1 `ETH` al contrato al llamar a `minusPayable()`.

![](./img/3-5.png)

Expand All @@ -173,4 +173,4 @@ Podemos ver que el balance del contrato es 1 `ETH` en el mensaje de retorno.

## Resumen

En esta sección, introducimos el tipo de función en `Solidity`. Las palabras clave `pure` y `view` son difíciles de entender, ya que no son comunes en otros lenguajes de programación. No necesitas pagar tarifas de gas por llamar a funciones `pure` o `view`, ya que no modifican los datos en la cadena de bloques.
En esta sección, introducimos el tipo de función en `Solidity`. Las palabras clave `pure` y `view` son difíciles de entender, ya que no son comunes en otros lenguajes de programación. No necesitas pagar tarifas de gas por llamar a funciones `pure` o `view`, ya que no modifican los datos en la cadena de bloques.
2 changes: 1 addition & 1 deletion Languages/es/13_Herencia_es/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ contract Identifier is Base1 {
}
```

El contrato `Identifier` puede usar directamente el modificador `exactDividedBy2And3`, por que hereda del contrato `Base1`. También podemos reescribir el modificador del contrato.
El contrato `Identifier` puede usar directamente el modificador `exactDividedBy2And3`, por que hereda del contrato `Base1`. También se puede reescribir el modificador del contrato.

```solidity
modifier exactDividedBy2And3(uint _a) override {
Expand Down
4 changes: 2 additions & 2 deletions Languages/es/14_Interfaces_es/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,9 @@ interface IERC721 is IERC165 {


### ¿Cuándo usar una interfaz?
Si sabemos que un contrato implementa la interfaz `IERC721`, podemos interactuar con él sin conocer su implementación detallada.
Si sabe que un contrato implementa la interfaz `IERC721`, se puede interactuar con él sin conocer su implementación detallada.

El Bored Ape Yacht Club `BAYC` es un NFT `ERC721` que implementa todas las funciones de la interfaz `IERC721`. Podemos interactuar con el contrato `BAYC` con la interfaz `IERC721` y su dirección de contrato, sin conocer su código fuente.
El Bored Ape Yacht Club `BAYC` es un NFT `ERC721` que implementa todas las funciones de la interfaz `IERC721`. Se puede interactuar con el contrato `BAYC` con la interfaz `IERC721` y su dirección de contrato, sin conocer su código fuente.
Por ejemplo, se puede usar `balanceOf()` para consultar el saldo de `BAYC` de una dirección, o usar `safeTransferFrom()` para transferir un NFT `BAYC`.


Expand Down
6 changes: 3 additions & 3 deletions Languages/es/15_Errores_es/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Solidity tiene muchas funciones para el manejo de errores. Los errores pueden oc

### Error
La declaración `error` es una característica nueva en solidity `0.8`. Ahorra gas e informa a los usuarios por qué la operación falló. Es la manera recomendada de lanzar un error en Solidity.
Los errores personalizados se definen utilizando la declaración de error, que se puede usar dentro y fuera de los contratos. A continuación, creamos un error `TransferNotOwner`, que lanzará un error cuando el usuario que realice la transacción no sea el `propietario` del token.
Los errores personalizados se definen utilizando la declaración de error, que se puede usar dentro y fuera de los contratos. A continuación, se crea un error `TransferNotOwner`, que lanzará un error cuando el usuario que realice la transacción no sea el `propietario` del token.

```solidity
error TransferNotOwner(); // error personalizado
Expand Down Expand Up @@ -93,7 +93,7 @@ Después de desplegar el contrato `Error`.

![15-1.png](./img/15-1.png)

2. `require`: Ingrese un número `uint256` y una dirección no cero, y llame la función `transferOwner2()`. La consola lanzará un error y mostrará el mensaje de error `"El usuario no es el propietario del token"`.
2. `require`: Ingrese un número `uint256` y una dirección no cero, y llame la función `transferOwner2()`. La consola lanzará un error y se mostrará el mensaje de error `"El usuario no es el propietario del token"`.

![15-2.png](./img/15-2.png)

Expand All @@ -114,4 +114,4 @@ Se puede ver que `error` consume menos gas, seguido por `assert`, mientras que `
Por lo tanto, `error` no solo informa al usuario sobre el mensaje del error, sino que también ahorra gas.

## Resumen
En este capítulo, introdujimos 3 declaraciones para manejar errores en Solidity: `error`, `require` y `assert`. Después de comparar su consumo de gas, la declaración `error` es la más barata, mientras que `require` tiene el consumo de gas más alto.
En este capítulo, Se introdujo 3 declaraciones para manejar errores en Solidity: `error`, `require` y `assert`. Después de comparar su consumo de gas, la declaración `error` es la más barata, mientras que `require` tiene el consumo de gas más alto.
19 changes: 19 additions & 0 deletions Languages/es/16_Sobrecarga_es/Overloading.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
contract Overload {
function saySomething() public pure returns(string memory){
return("Nothing");
}

function saySomething(string memory something) public pure returns(string memory){
return(something);
}

function f(uint8 _in) public pure returns (uint8 out) {
out = _in;
}

function f(uint256 _in) public pure returns (uint256 out) {
out = _in;
}
}
Binary file added Languages/es/16_Sobrecarga_es/img/16-1.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
73 changes: 73 additions & 0 deletions Languages/es/16_Sobrecarga_es/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
Título: 16. Sobrecarga
tags:
- solidity
- advanced
- wtfacademy
- overloading
---
# Tutorial WTF Solidity: 16. Sobrecarga

Recientemente, he estado revisando Solidity y escribiendo tutoriales en "WTF Solidity" para principiantes.

Twitter: [@0xAA_Science](https://twitter.com/0xAA_Science) | [@WTFAcademy_](https://twitter.com/WTFAcademy_)

Comunidad: [Discord](https://discord.gg/5akcruXrsk)|[Wechat](https://docs.google.com/forms/d/e/1FAIpQLSe4KGT8Sh6sJ7hedQRuIYirOoZK_85miz3dw7vA1-YjodgJ-A/viewform?usp=sf_link)|[Sitio web wtf.academy](https://wtf.academy)

La traducción al español ha sido realizada por Jonathan Díaz con el objetivo de hacer estos recursos accesibles a la comunidad de habla hispana.

Twitter: [@jonthdiaz](https://twitter.com/jonthdiaz)

Los códigos y tutoriales están como código abierto en GitHub: [github.com/AmazingAng/WTFSolidity](https://github.com/AmazingAng/WTFSolidity)

-----

## Sobrecarga
`solidity` permite la sobrecarga de funciones (`overloading`). Es decir, funciones con el mismo nombre pero diferentes tipos de parámetros de entrada pueden existir al mismo tiempo,
y se consideran funciones diferentes.
Note que `solidity` no permite la sobrecarga de modificadores (`modifier`).

### Sobrecarga de Funciones
Por ejemplo, se podría definir dos funciones llamadas `saySomething()`:
una sin argumentos y que devuelva `"Nothing"`, la otra que tome un argumento de tipo `string` y devuelva un `string`.

```solidity
function saySomething() public pure returns(string memory){
return("Nothing");
}

function saySomething(string memory something) public pure returns(string memory){
return(something);
}
```

Después de compilar, todas las funciones de sobrecarga se convierten en selectores de funciones diferentes debido a los diferentes tipos de parámetros.
Para ver el contenido específico del selector de una función, consultar [WTF Solidity Tutorial: 29. Function Selector](https://github.com/AmazingAng/WTFSolidity/tree/main/29_Selector)

Tomando el contrato `Overloading.sol` como ejemplo, después de compilar y desplegar en Remix.
Después de llamar a las funciones de sobrecarga `saySomething()` y `saySomething(string memory something)` respectivamente,
se pueden ver diferentes resultados, ya que las funciones se consideran diferentes.

![](./img/16-1.jpeg)

### Coincidencia de Argumentos

Cuando se llama a la función de sobrecarga, el tipo de variable se emparejará entre el parámetro de entrada y los parámetros de la función.
Se generará un error si hay múltiples funciones de sobrecarga coincidentes,
El siguiente ejemplo tiene dos funciones llamadas `f()`, una tiene el parámetro `uint8` y la otra tiene `uint256`:

```solidity
function f(uint8 _in) public pure returns (uint8 out) {
out = _in;
}

function f(uint256 _in) public pure returns (uint256 out) {
out = _in;
}
```
El número `50` se puede convertir tanto a `uint8` como a `uint256`, por lo que se generará un error si se llama a `f(50)`.

## Resumen
En esta lección, se presento el uso básico de la función de sobrecarga en `solidity`:
las funciones con el mismo nombre pero diferentes tipos de parámetros de entrada pueden existir al mismo tiempo,
y se consideran funciones diferentes.
78 changes: 78 additions & 0 deletions Languages/es/17_Libreria_es/Library.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;

library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

/**
* @dev Convierte un `uint256` a su representación decimal ASCII `string`.
*/
function toString(uint256 value) public pure returns (string memory) {
// Inspirado en la implementación de OraclizeAPI - licencia MIT
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}

/**
* @dev Convierte un `uint256` a su representación hexadecimal ASCII `string`.
*/
function toHexString(uint256 value) public pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}

/**
* @dev Convierte un `uint256` a su representación hexadecimal ASCII `string` con longitud fija.
*/
function toHexString(uint256 value, uint256 length) public pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: insuficiente longitud hexadecimal");
return string(buffer);
}
}


// Llamando a otro contrato de biblioteca con una función
contract UseLibrary{
// Usando la biblioteca con el comando "using for"
using Strings for uint256;
function getString1(uint256 _number) public pure returns(string memory){
// Las funciones de la biblioteca se agregan automáticamente como miembros de las variables de tipo uint256
return _number.toHexString();
}

// Llamado directamente por el nombre del contrato
function getString2(uint256 _number) public pure returns(string memory){
return Strings.toHexString(_number);
}
}
158 changes: 158 additions & 0 deletions Languages/es/17_Libreria_es/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
---
Título: 17. Biblioteca
tags:
- solidity
- advanced
- wtfacademy
- library
- using for
---

# Tutorial WTF Solidity: 17. Biblioteca: Pararse sobre los hombros de los gigantes

Recientemente, he estado revisando Solidity y escribiendo tutoriales en "WTF Solidity" para principiantes.

Twitter: [@0xAA_Science](https://twitter.com/0xAA_Science) | [@WTFAcademy_](https://twitter.com/WTFAcademy_)

Comunidad: [Discord](https://discord.gg/5akcruXrsk)|[Wechat](https://docs.google.com/forms/d/e/1FAIpQLSe4KGT8Sh6sJ7hedQRuIYirOoZK_85miz3dw7vA1-YjodgJ-A/viewform?usp=sf_link)|[Sitio web wtf.academy](https://wtf.academy)

La traducción al español ha sido realizada por Jonathan Díaz con el objetivo de hacer estos recursos accesibles a la comunidad de habla hispana.

Twitter: [@jonthdiaz](https://twitter.com/jonthdiaz)

Los códigos y tutoriales están como código abierto en GitHub: [github.com/AmazingAng/WTFSolidity](https://github.com/AmazingAng/WTFSolidity)

-----

En este capítulo se usará el contrato de biblioteca `String` referenciado por `ERC721` como ejemplo para introducir el contrato de biblioteca en `solidity`,
y luego resumir las funciones de biblioteca comúnmente utilizadas.


## Funciones de biblioteca

Una librería es un contrato especial que existe para mejorar la reutilización en `solidity` y reducir el consumo de `gas`.
Los contratos de biblioteca son generalmente una colección de funciones útiles (`funciones de biblioteca`),
que son creadas por los grandes proyectos o personas que trabajan en ellos.
Solo se necesita pararse sobre los hombros de los gigantes y usar esas funciones.

![Biblioteca de contratos: Pararse sobre los hombros de los gigantes](https://images.mirror-media.xyz/publication-images/HJC0UjkALdrL8a2BmAE2J.jpeg?height=300&width=388)

Es diferente de los contratos ordinarios en los siguientes puntos:

1. Las variables de estado no están permitidas
2. No puede recibir ether
3. No puede heredar ni ser heredado
4. No puede ser destruido

## Contrato de biblioteca de cadenas

`String Library Contract` es una biblioteca de código que convierte un `uint256` al tipo `string` correspondiente. El código de ejemplo es el siguiente:

```solidity
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

/**
* @dev Convierte un `uint256` a su representación decimal ASCII `string`.
*/
function toString(uint256 value) public pure returns (string memory) {
// Inspirado en la implementación de OraclizeAPI - licencia MIT
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}

/**
* @dev Convierte un `uint256` a su representación hexadecimal ASCII `string`.
*/
function toHexString(uint256 value) public pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}

/**
* @dev Convierte un `uint256` a su representación hexadecimal ASCII `string` con longitud fija.
*/
function toHexString(uint256 value, uint256 length) public pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: insuficiente longitud hexadecimal");
return string(buffer);
}
}
```

Principalmente contiene dos funciones, `toString()` convierte `uint256` a `string`,
`toHexString()` convierte `uint256` a `hexadecimal`, y luego lo convierte a `string`.

### Cómo usar contratos de biblioteca
Se usa la función toHexString() en la función de biblioteca String para demostrar dos formas de usar las funciones en el contrato de biblioteca.

**1. Usar comando `for` **

El comando `using A for B` se puede usar para adjuntar funciones de biblioteca (de la biblioteca A) a cualquier tipo (B). Después de la instrucción,
la función en la biblioteca `A` se agregará automáticamente como miembro de la variable de tipo `B`,
que se puede llamar directamente. Nota: Al llamar, esta variable se pasará a la función como el primer parámetro:

```solidity
// Usando la biblioteca con el comando "using for"
using Strings for uint256;
function getString1(uint256 _number) public pure returns(string memory){
// Las funciones de la biblioteca se agregan automáticamente como miembros de las variables de tipo uint256
return _number.toHexString();
}
```

**2. Llamado directamente por el nombre del contrato de biblioteca**
```solidity
// Llamado directamente por el nombre del contrato de biblioteca
function getString2(uint256 _number) public pure returns(string memory){
return Strings.toHexString(_number);
}
```

Se despliega el contrato y se ingresa `170` para probar,
ambos métodos pueden devolver la cadena `hexadecimal` correcta "0xaa",
¡demostrando que llamamos a la función de la biblioteca con éxito!
jonthdiaz marked this conversation as resolved.
Show resolved Hide resolved

![Llamando a la función de la biblioteca con éxito](https://images.mirror-media.xyz/publication-images/bzB_JDC9f5VWHRjsjQyQa.png?height=750&width=580)

## Resumen

En este capítulo, se ha introducido el contrato de biblioteca en `solidity` y resumido las funciones de biblioteca comúnmente utilizadas.
99% de los desarrolladores no necesitan escribir contratos de biblioteca ellos mismos, pueden usar los escritos por personas con más experiencia.
Lo único que se necesita saber es qué contrato de biblioteca usar y dónde es más adecuada usarlo.

Algunas bibliotecas comúnmente utilizadas son:
1. [String](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/4a9cc8b4918ef3736229a5cc5a310bdc17bf759f/contracts/utils/Strings.sol):Convertir `uint256` a `String`
2. [Address](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/4a9cc8b4918ef3736229a5cc5a310bdc17bf759f/contracts/utils/Address.sol):Determinar si auna dirección es una dirección de contrato.
3. [Create2](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/4a9cc8b4918ef3736229a5cc5a310bdc17bf759f/contracts/utils/Create2.sol):Uso más seguro de `Create2 EVM opcode`
4. [Arrays](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/4a9cc8b4918ef3736229a5cc5a310bdc17bf759f/contracts/utils/Arrays.sol):Funciones de biblioteca con arreglos.
Loading