Solidity - Библиотеки

Библиотеки похожи на контракты, но в основном предназначены для повторного использования. Библиотека содержит функции, которые могут вызывать другие контракты. В Solidity есть определенные ограничения на использование библиотеки. Ниже приведены ключевые характеристики библиотеки Solidity.

  • Библиотечные функции могут быть вызваны напрямую, если они не изменяют состояние. Это означает, что чистые функции или функции просмотра могут вызываться извне библиотеки.

  • Библиотека не может быть уничтожена, поскольку предполагается, что она не имеет состояния.

  • Библиотека не может иметь переменных состояния.

  • Библиотека не может наследовать ни один элемент.

  • Библиотека не может быть унаследована.

пример

Попробуйте использовать следующий код, чтобы понять, как работает библиотека в 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;
   }
}

Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .

Note - Перед нажатием кнопки развертывания выберите «Тест» в раскрывающемся списке.

Вывод

0: uint256: 3

Использование для

Директива using A for B; могут использоваться для присоединения библиотечных функций библиотеки A к данному типу B. Эти функции будут использовать тип вызывающего объекта в качестве своего первого параметра (идентифицируемого с помощью self).

пример

Попробуйте использовать следующий код, чтобы понять, как работает библиотека в 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;
   }
}

Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .

Note - Перед нажатием кнопки развертывания выберите «Тест» в раскрывающемся списке.

Вывод

0: uint256: 3