Knoppia

Wiki de Informática y otras historias

Herramientas de usuario

Herramientas del sitio


bc:solidity

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bc:solidity [2024/09/18 14:29] thejuanvisubc: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;
 +  } 
 +  
 +  //actualizar a un día de la semana específico
 +  function domingo() public{
 +    semana = Semana.domingo
 +  }
 +  
 +  //devolver al primer valor
 +  function reset() public{
 +    delete semana
 +  }
 +  
 +}
 +</code>
 +
 +
 +==== Arrays ====
 +Permiten almacenar una colección de elementos del mismo tipo, facilita su ordenación, iteración y búsqueda. Existen los siguientes tipos:
 +<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;
 +</code>
 +
 +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, "Alberto"));
 +</code>
 +
 +==== 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>(<variables de entrada>) <visibilidad>
 +function nombreFuncion(String memory _nombre, uint _cantidad) public{
 +    //contenido de la función
 +  }
 +  
 +//llamada a la función
 +nombreFuncion("nombre", 123);
 +</code>
 +
 +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 "private". Las funciones pueden contener alguno de los siguientes modificadores:
 +  * 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 = "dato"
 +function decirDato() public returns (string memory){
 +  return dato;
 +}
 +</code>
 +
 +=== Modificadores ===
 +<code c>
 +  function _MultiplicacionIntegers(uint x, uint y) private pure returns (uint){
 +    return x*y;
 +  }
 +</code>
 +
 +
 +==== 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:
 +<code>
 +  keccak256(abi.encodePacked("nombre"));
 +</code>
 +
 +==== 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:
 +<code>
 +event IntegerAdded(uint x, uint y, uint result);
 +function add(uint _x, uint _y) public returns (uint){
 +  uint result = _x + _y;
 +  emit IntegersAdded(_x, _y, result);
 +  return result;
 +}
 +</code>
 +
 +==== 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.
 +<code>
 +mapping(address => uint) public saldo;
 +</code>
 +
 +==== Variables especiales y funciones ====
 +msg.sender(address): se refiere al remitente del mensaje que invocó la función actual. Se puede utilizar para actualizar un mapping:
 +
 +<code>
 +contract NumeroFavorito {
 +  mapping(address=>uint) numeroFavorito;
 +  
 +  function establecerNumero(uint _numero) public{
 +    numeroFavorito[msg.sender] = _myNumber;
 +  }
 +  
 +  function CualEsMiNumeroFavorito() public view returns (uint){
 +    return numeroFavorito[msg.sender];
 +  }
 +}
 +</code>
 +
 +==== Estructuras de control ====
 +  * if-else
 +  * while
 +  * do-while
 +  * for
 +
 +<code>
 +if(x<1){
 +  return 0;
 +} else if (x=0){
 +  return 1;
 +} else{
 +  return 2;
 +}
 +</code>
  
 ===== Hola Mundo en un Smart Contract ===== ===== Hola Mundo en un Smart Contract =====
Línea 85: Línea 247:
 </code> </code>
 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%>
 {{:bc:pasted:20240918-135604.png}} {{:bc:pasted:20240918-135604.png}}
 +</wrap>
 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%>
 {{:bc:pasted:20240918-135912.png}} {{:bc:pasted:20240918-135912.png}}
 +</wrap>
 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%>
 {{:bc:pasted:20240918-140206.png}} {{:bc:pasted:20240918-140206.png}}
 +</wrap>
 +
 +
bc/solidity.1726669790.txt.gz · Última modificación: 2024/09/18 14:29 por thejuanvisu