Solidez – Bibliotecas

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 : 
 

Deploying Library

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: 
 

Deploying Library without using For Keyword

Bibliotecas incorporadas

Solidity tiene algunas bibliotecas incorporadas para la facilidad de los usuarios. Algunas de las bibliotecas se enumeran a continuación: 

  1. Red modular: Esto incluye muchas bibliotecas modulares que son muy útiles para la implementación como ArrayUtils, Token, CrowdSale, Vesting, StringUtils, LinkedList, Wallet, etc.
  2. OpenZeppelin: otras bibliotecas compatibles son Roles, MerkleProof, ECDSA, Math, Address, SafeERC20, ERC165Checker, SafeMath, Arrays, etc., que protegen contra el desbordamiento.
  3. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *