Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bc:solidity [2024/09/18 14:29] – thejuanvisu | bc:solidity [2024/09/25 14:04] (actual) – thejuanvisu | ||
---|---|---|---|
Línea 71: | Línea 71: | ||
+ | ==== Enums ==== | ||
+ | Permite la creación de un tipo de datos personalizado con un conjunto de valores constantes de la siguiente manera: | ||
+ | <code c> | ||
+ | contract Enum{ | ||
+ | enum Semana{ | ||
+ | Lunes, //devuelve 0 | ||
+ | Martes, //devuelve 1 | ||
+ | Miércoles, //devuelve 2 | ||
+ | Jueves, //devuelve 3 | ||
+ | Viernes, //devuelve 4 | ||
+ | Sábado, //devuelve 5 | ||
+ | Domingo //devuelve 6 | ||
+ | } | ||
+ | | ||
+ | Semana public semana; | ||
+ | | ||
+ | //función para obtener el valor del enum | ||
+ | function get() pulic view returns (Semana){ | ||
+ | return semana; | ||
+ | } | ||
+ | | ||
+ | //función para modificar el enum | ||
+ | function set(Semana _semana) public{ | ||
+ | semana = _semana; | ||
+ | } | ||
+ | | ||
+ | // | ||
+ | function domingo() public{ | ||
+ | semana = Semana.domingo | ||
+ | } | ||
+ | | ||
+ | //devolver al primer valor | ||
+ | function reset() public{ | ||
+ | delete semana | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Arrays ==== | ||
+ | Permiten almacenar una colección de elementos del mismo tipo, facilita su ordenación, | ||
+ | <code c> | ||
+ | //Array de longitud fija de 10 elementos de tipo uint | ||
+ | uint[10] ArrayFijo; | ||
+ | |||
+ | //Array de longitud fija de 10 elementos de tipo string | ||
+ | sting[10] ArrayString; | ||
+ | |||
+ | //array dinámico | ||
+ | uint[] ArrayDinamico; | ||
+ | |||
+ | //array dinámico de structs | ||
+ | Persona[] personas; | ||
+ | </ | ||
+ | |||
+ | Para manejar Array dinámicos disponemos de las siguientes operaciones: | ||
+ | <code c> | ||
+ | //añadir struct de tipo persona al array | ||
+ | personas.push(manuel); | ||
+ | |||
+ | //crear e insertar un objeto struct al array | ||
+ | personas.push(Persona(34, | ||
+ | </ | ||
+ | |||
+ | ==== Funciones ==== | ||
+ | Las funciones nos permiten modularizar y optimizar el código creando pequeñas funcionalidades personalizadas. En Solidity un ejemplo de función sería el siguiente: | ||
+ | <code c> | ||
+ | //function <nombre de la función> | ||
+ | function nombreFuncion(String memory _nombre, uint _cantidad) public{ | ||
+ | //contenido de la función | ||
+ | } | ||
+ | | ||
+ | //llamada a la función | ||
+ | nombreFuncion(" | ||
+ | </ | ||
+ | |||
+ | Las funciones son siempre públicas de forma predeterminadas lo cual no es muy seguro contra ataques, por lo que se suele recomendar marcarlas como " | ||
+ | * pure: prohíbe el acceso o modificación del estado | ||
+ | * view: deshabilita cualquier modificación de estado | ||
+ | * payable: permite el pago de Ether (ETH) con una llamada | ||
+ | * virtual: este modificador permite cambiar el comportamiento de la función o contratos derivados | ||
+ | * override: Esta función cambia el comportamiento de otra función o contrato. | ||
+ | |||
+ | |||
+ | ==== Funciones útiles ==== | ||
+ | === Devolver variables y valores === | ||
+ | <code c> | ||
+ | String dato = " | ||
+ | function decirDato() public returns (string memory){ | ||
+ | return dato; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Modificadores === | ||
+ | <code c> | ||
+ | function _MultiplicacionIntegers(uint x, uint y) private pure returns (uint){ | ||
+ | return x*y; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Hashing ==== | ||
+ | Una función hash asigna una entrada a una identificación única determinista. cualquier modificación en dicha entrada modificará el valor hash. Sirve para generar números pseudoaleatorios. Ethereum tiene las siguientes funciones hash: | ||
+ | * SHA-256 | ||
+ | * RIPEMD-160 | ||
+ | * keccak256 | ||
+ | |||
+ | Se puede llamar a estas funciones hash de la siguiente forma: | ||
+ | < | ||
+ | keccak256(abi.encodePacked(" | ||
+ | </ | ||
+ | |||
+ | ==== Evetos ==== | ||
+ | Permiten que el Smart Contract reporte que algo ha sucedido en la blockchain al front end de su aplicación. Un evento se puede implementar de la siguiente forma: | ||
+ | < | ||
+ | event IntegerAdded(uint x, uint y, uint result); | ||
+ | function add(uint _x, uint _y) public returns (uint){ | ||
+ | uint result = _x + _y; | ||
+ | emit IntegersAdded(_x, | ||
+ | return result; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Mapas ==== | ||
+ | Tipos de datos complejos similares a las hashtables. En el siguiente ejemplo se puede ver como se alamcena un uint con el saldo de un usuario. El tipo de datos address almacena la clave y uint el valor. | ||
+ | < | ||
+ | mapping(address => uint) public saldo; | ||
+ | </ | ||
+ | |||
+ | ==== Variables especiales y funciones ==== | ||
+ | msg.sender(address): | ||
+ | |||
+ | < | ||
+ | contract NumeroFavorito { | ||
+ | mapping(address=> | ||
+ | | ||
+ | function establecerNumero(uint _numero) public{ | ||
+ | numeroFavorito[msg.sender] = _myNumber; | ||
+ | } | ||
+ | | ||
+ | function CualEsMiNumeroFavorito() public view returns (uint){ | ||
+ | return numeroFavorito[msg.sender]; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Estructuras de control ==== | ||
+ | * if-else | ||
+ | * while | ||
+ | * do-while | ||
+ | * for | ||
+ | |||
+ | < | ||
+ | if(x<1){ | ||
+ | return 0; | ||
+ | } else if (x=0){ | ||
+ | return 1; | ||
+ | } else{ | ||
+ | return 2; | ||
+ | } | ||
+ | </ | ||
===== Hola Mundo en un Smart Contract ===== | ===== Hola Mundo en un Smart Contract ===== | ||
Línea 85: | Línea 247: | ||
</ | </ | ||
Tras eso iremos a la pestaña de solidity compiler y le daremos a compile: | Tras eso iremos a la pestaña de solidity compiler y le daremos a compile: | ||
+ | <wrap column 100%> | ||
{{: | {{: | ||
+ | </ | ||
Después nos movemos a la pestaña de Deploy and Run Transactions y le damos a deploy: | Después nos movemos a la pestaña de Deploy and Run Transactions y le damos a deploy: | ||
+ | <wrap column 100%> | ||
{{: | {{: | ||
+ | </ | ||
Finalmente podemos ir a la pestaña de Deployed Contracts, seleccionar el contrato que acabamos de enviar y pulsar en el botón greet para ver e mensaje; | Finalmente podemos ir a la pestaña de Deployed Contracts, seleccionar el contrato que acabamos de enviar y pulsar en el botón greet para ver e mensaje; | ||
+ | <wrap column 100%> | ||
{{: | {{: | ||
+ | </ | ||
+ | |||
+ |