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:42] – thejuanvisu | bc:solidity [2024/09/25 14:04] (actual) – thejuanvisu | ||
|---|---|---|---|
| Línea 134: | Línea 134: | ||
| //crear e insertar un objeto struct al array | //crear e insertar un objeto struct al array | ||
| personas.push(Persona(34, | 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; | ||
| + | } | ||
| </ | </ | ||
| Línea 149: | 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%> | ||
| {{: | {{: | ||
| + | </ | ||
| + | |||
| + | |||