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:49] – thejuanvisu | bc:solidity [2024/09/25 14:04] (actual) – thejuanvisu | ||
---|---|---|---|
Línea 148: | Línea 148: | ||
</ | </ | ||
- | 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 " | + | 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 ==== | ==== 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 167: | 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%> | ||
{{: | {{: | ||
+ | </ | ||
+ | |||
+ |