Solidité - Bibliothèques

Les bibliothèques sont similaires aux contrats mais sont principalement destinées à être réutilisées. Une bibliothèque contient des fonctions que d'autres contrats peuvent appeler. Solidity a certaines restrictions sur l'utilisation d'une bibliothèque. Voici les principales caractéristiques d'une Solidity Library.

  • Les fonctions de bibliothèque peuvent être appelées directement si elles ne modifient pas l'état. Cela signifie que les fonctions pures ou vues ne peuvent être appelées que depuis l'extérieur de la bibliothèque.

  • La bibliothèque ne peut pas être détruite car elle est supposée être apatride.

  • Une bibliothèque ne peut pas avoir de variables d'état.

  • Une bibliothèque ne peut hériter d'aucun élément.

  • Une bibliothèque ne peut pas être héritée.

Exemple

Essayez le code suivant pour comprendre le fonctionnement d'une bibliothèque dans 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;
   }
}

Exécutez le programme ci-dessus en suivant les étapes fournies dans le chapitre Application Solidity First .

Note - Sélectionnez Test dans la liste déroulante avant de cliquer sur le bouton de déploiement.

Production

0: uint256: 3

Utilisation pour

La directive using A for B; peuvent être utilisées pour attacher des fonctions de bibliothèque de la bibliothèque A à un type donné B. Ces fonctions utiliseront le type d'appelant comme premier paramètre (identifié en utilisant self).

Exemple

Essayez le code suivant pour comprendre le fonctionnement d'une bibliothèque dans 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;
   }
}

Exécutez le programme ci-dessus en suivant les étapes fournies dans le chapitre Application Solidity First .

Note - Sélectionnez Test dans la liste déroulante avant de cliquer sur le bouton de déploiement.

Production

0: uint256: 3