Solidez - Bibliotecas

Las bibliotecas son similares a los contratos, pero están destinadas principalmente a la reutilización. Una biblioteca contiene funciones que otros contratos pueden llamar. Solidity tiene ciertas restricciones sobre el uso de una biblioteca. A continuación se presentan las características clave de una biblioteca de solidez.

  • Las funciones de la biblioteca se pueden llamar directamente si no modifican el estado. Eso significa que las funciones puras o de visualización solo se pueden llamar desde fuera de la biblioteca.

  • La biblioteca no se puede destruir ya que se supone que no tiene estado.

  • Una biblioteca no puede tener variables de estado.

  • Una biblioteca no puede heredar ningún elemento.

  • Una biblioteca no se puede heredar.

Ejemplo

Pruebe el siguiente código para comprender cómo funciona una biblioteca en Solidity.

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;
      
      //search if value is present in the array using Library function
      uint index = Search.indexOf(data, value);
      return index;
   }
}

Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.

Note - Seleccione Prueba en el menú desplegable antes de hacer clic en el botón de implementación.

Salida

0: uint256: 3

Usando para

La directiva using A for B; se puede usar para adjuntar funciones de biblioteca de la biblioteca A a un tipo B dado. Estas funciones usarán el tipo de llamador como su primer parámetro (identificado usando self).

Ejemplo

Pruebe el siguiente código para comprender cómo funciona una biblioteca en Solidity.

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++)if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   using Search for uint[];
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;      
      
      //Now data is representing the Library
      uint index = data.indexOf(value);
      return index;
   }
}

Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.

Note - Seleccione Prueba en el menú desplegable antes de hacer clic en el botón de implementación.

Salida

0: uint256: 3