Las bibliotecas en solidez son similares a los contratos que contienen códigos reutilizables. Una biblioteca tiene funciones que pueden ser llamadas por otros contratos. La implementación de un código común mediante la creación de una biblioteca reduce el costo del combustible. Las funciones de la biblioteca se pueden llamar directamente cuando no modifican las variables de estado, es decir, solo las funciones puras y de vista se pueden llamar desde fuera de la biblioteca. No puede ser destruido porque se asume como apátrida. La biblioteca no tiene variables de estado, no puede heredar ningún elemento y no se puede heredar.
Crear biblioteca
Un contrato de biblioteca se define utilizando la palabra clave de biblioteca en lugar de un contrato general. Las bibliotecas no tienen ningún almacenamiento, por lo que no pueden contener variables de estado, funciones alternativas o de pago tampoco se pueden crear dentro de la biblioteca, ya que no puede almacenar éteres. Las bibliotecas no son para cambiar el estado del contrato, solo se pueden usar para realizar operaciones básicas basadas en entradas y salidas. Sin embargo, puede implementar algunos tipos de datos como estructuras y enumeraciones que están definidas por el usuario y variables constantes que se almacenan en una pila de Ethereum, no en el almacenamiento.
Sintaxis:
library <libraryName> { // block of code }
Ejemplo: en el siguiente ejemplo, se crea la biblioteca libraryExample para demostrar el procedimiento para crear una biblioteca.
Solidez
// Solidity program to demonstrate // how to create a library pragma solidity ^0.5.0; // Library Definition library libraryExample { // Defining structure struct Constants { // Declaring variables uint Pi; uint EulerNb; uint PythagoraConst; uint TheodorusConst; } }
Implementación de la biblioteca usando la palabra clave ‘For’
Una biblioteca se puede definir en el mismo contrato y también se puede importar desde el exterior mediante las declaraciones de importación.
Ejemplo:
import <libraryName> from “./library-file.sol”;
Un solo archivo puede contener varias bibliotecas que se pueden especificar mediante llaves en la declaración de importación separadas por una coma. Se puede acceder a una biblioteca dentro del contrato inteligente usando la palabra clave ‘for’.
Sintaxis:
<libraryName> for <dataType>
La declaración anterior se puede usar para adjuntar funciones de biblioteca a cualquier tipo. libraryName es el nombre de la biblioteca que se desea importar, dataType es el tipo de variable por el que queremos acceder a la biblioteca. Todos los miembros de la biblioteca también pueden ser utilizados por el operador comodín (*).
Ejemplo: en el siguiente ejemplo, se crea el contrato libraryExample para demostrar cómo implementar una biblioteca usando la palabra clave ‘For’.
Solidez
// Solidity program to demonstrate // how to deploy a library pragma solidity ^0.5.0; // Defining Library library LibExample { // Function to power of // an unsigned integer function pow( uint a, uint b) public view returns ( uint, address) { return (a ** b, address(this)); } } // Defining calling contract contract LibraryExample { // Deploying library using // "for" keyword using LibExample for unit; address owner = address(this); // Calling function pow to // calculate power function getPow( uint num1, uint num2) public view returns ( uint, address) { return num1.pow(num2); } }
Producción :
Implementación de la biblioteca sin usar la palabra clave For
Ejemplo: en el siguiente ejemplo, se crea el contrato libExample para demostrar cómo implementar una biblioteca sin usar la palabra clave ‘For’.
Solidez
// Solidity program to demonstrate // how to deploy library // without using for keyword pragma solidity ^0.5.0; // Defining library library libraryExample { // Defining structure struct strings { // Declaring variables string str1 ; string str2 ; string str3 ; } // function to concatenate // 2 strings function concatenate( string memory _In1, string memory _In2) public view returns( string memory){ return string( abi.encodePacked(_In1, _In2)); } } // Defining calling contract contract libExample{ // Deploying the library // without using "for" keyword libraryExample.strings data = libraryExample.strings("Geeks", "For", "Geeks"); // Function to calculate and display // the result of string concatenation function getResult( ) public view returns(string memory){ string memory result = libraryExample.concatenate(data.str1, data.str2); result = libraryExample.concatenate(result, data.str3); return result; } }
Producción:
Bibliotecas incorporadas
Solidity tiene algunas bibliotecas incorporadas para la facilidad de los usuarios. Algunas de las bibliotecas se enumeran a continuación:
- Red modular: Esto incluye muchas bibliotecas modulares que son muy útiles para la implementación como ArrayUtils, Token, CrowdSale, Vesting, StringUtils, LinkedList, Wallet, etc.
- OpenZeppelin: otras bibliotecas compatibles son Roles, MerkleProof, ECDSA, Math, Address, SafeERC20, ERC165Checker, SafeMath, Arrays, etc., que protegen contra el desbordamiento.
- Dapp-bin: creado por Ethereum incluye bibliotecas interesantes y útiles como DoublyLinkedList, StringUtils, IterableMapping, etc.
Publicación traducida automáticamente
Artículo escrito por jeeteshgavande30 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA