Solidity - Bibliotecas

As bibliotecas são semelhantes aos contratos, mas destinam-se principalmente à reutilização. Uma Biblioteca contém funções que outros contratos podem chamar. O Solidity tem certas restrições ao uso de uma Biblioteca. A seguir estão as principais características de uma Biblioteca Solidity.

  • As funções da biblioteca podem ser chamadas diretamente se não modificarem o estado. Isso significa que funções puras ou de visualização só podem ser chamadas de fora da biblioteca.

  • A biblioteca não pode ser destruída, pois é considerada sem estado.

  • Uma biblioteca não pode ter variáveis ​​de estado.

  • Uma biblioteca não pode herdar nenhum elemento.

  • Uma biblioteca não pode ser herdada.

Exemplo

Experimente o código a seguir para entender como uma biblioteca funciona no 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;
   }
}

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Note - Selecione Teste no menu suspenso antes de clicar no botão implantar.

Resultado

0: uint256: 3

Usando Para

A diretiva using A for B; pode ser usado para anexar funções de biblioteca da biblioteca A a um determinado tipo B. Essas funções usarão o tipo de chamador como seu primeiro parâmetro (identificado usando self).

Exemplo

Experimente o código a seguir para entender como uma biblioteca funciona no 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;
   }
}

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Note - Selecione Teste no menu suspenso antes de clicar no botão implantar.

Resultado

0: uint256: 3