solidity embedded library in a contract and link a library to a contract on the blockchain

Crypto Market Pool – Bibliotecas en contratos inteligentes de solidez

Publicado por
Comparte en redes sociales

 

¿Qué son las bibliotecas de solidez?

Las bibliotecas en los contratos inteligentes de Solidity son bloques de código reutilizable. Contienen funciones utilizadas por otros contratos en la red blockchain. Promueven la programación orientada a objetos, lo que permite a los desarrolladores ser modulares con su diseño.

Hay ventajas en el uso de bibliotecas en los contratos inteligentes de Solidity. La mayor ventaja es la reutilización del código en todos los contratos. Dado que las bibliotecas son reutilizables, ayudan a evitar la duplicación de código. Además, las bibliotecas ahorran gas ya que el mismo código no se implementa varias veces en la cadena de bloques.

Las bibliotecas son una forma especial de contrato que:

  • Son singletons
  • No se permite ningún almacenamiento o variables de estado que cambien
  • No puede tener funciones de respaldo
  • No tener registros de eventos
  • No sostengas el éter
  • Son apátridas
  • No se puede usar destruir
  • No se puede heredar ni se puede heredar

Las bibliotecas en Solidity le permiten agregar funcionalidad a los tipos. Por ejemplo, puede utilizar una biblioteca para mejorar la funcionalidad de una variable de tipo uint en un contrato.

Una biblioteca es un bloque de código aislado. Una función de contratos de biblioteca utiliza el almacenamiento del contrato de llamada. Durante la ejecución de una función de biblioteca, el código de llamada se ejecuta en el contexto del contrato de llamada. Puede acceder a las variables de estado de un contrato de llamada si se proporcionan explícitamente.

Por ejemplo, considere una biblioteca de solidez que realiza las funciones de una calculadora básica (sumar, restar, multiplicar y dividir). El contrato de llamada envía las entradas 5 y 5 a la función de adición de bibliotecas. La función de adición de biblioteca se ejecuta y devuelve 10 al contrato de llamada.

Cómo crear un contrato de biblioteca en Solidity

Para crear una biblioteca, defina el contrato con la palabra clave biblioteca y no con la palabra clave del contrato.

pragma solidity ^0.8.6;

library libraryName {

Las bibliotecas pueden admitir varios tipos de datos diferentes. Los tipos admitidos son:

  • Las bibliotecas admiten variables definidas como constantes porque son inmutables. Las variables de la biblioteca se almacenan en código de bytes, no en el almacenamiento en la cadena de bloques.
  • Struts y Enums definidos por el usuario.

La biblioteca de ejemplo a continuación llamada MathLibrary contiene una operación de multiplicación básica. Un contrato de llamada pasaría dos enteros sin firmar a la función de multiplicación. La biblioteca devolvería un resultado al contrato de llamada.

pragma solidity ^0.8.6;

library MathLibrary {

     function multiply(uint a, uint b) public view returns (uint, address) {
          return (a * b, address(this));
      }
}

Cómo implementar una biblioteca en Solidity

Las bibliotecas en Solidity se implementan como contrato codificado o vinculado incrustado.

  1. Incrustar un biblioteca en un contrato – Si una biblioteca solo tiene interno funciones, entonces la biblioteca se incluye en el contrato que la utiliza. No es necesario implementar un contrato separado para la biblioteca. En el diagrama de abajo ver contrato Z que es un ejemplo del código de llamada y la biblioteca, todo en un contrato.
  2. Vincular una biblioteca a un contrato – Si una biblioteca tiene funciones públicas o externas, se puede implementar por separado. El contrato de llamada que utiliza la biblioteca debe hacer referencia a la dirección del contrato de la biblioteca. En el diagrama de abajo ver contrato X y Y enlace al contrato de la biblioteca. La siguiente imagen ilustra la reutilización del código del contrato y menos código implementado, lo que se traduce en un ahorro de gas.
biblioteca integrada de solidez en un contrato y vincular una biblioteca a un contrato en la cadena de bloques

Para ilustrar estos dos conceptos, revisaremos ambos métodos a continuación utilizando contratos de muestra.

Leer también  Cómo crear y vender sus propios NFT en BSC con AirNFT

Cómo usar una biblioteca en un contrato inteligente de Solidity

Incrustar la biblioteca en un contrato

Para comenzar, debajo de la declaración pragma incluya el código de su biblioteca. Puede escribir el código de su biblioteca directamente en el contacto inteligente o puede guardar el código de su biblioteca en un archivo separado e importarlo.

Opción 1: uso de la importación

Cuando se utiliza la palabra clave «importar» en un contrato, el compilador copiará el código del archivo directamente en el contrato inteligente.

pragma solidity ^0.8.6;

//if your library is in another file you can import it into the contract
import LibraryName from “./libraryfile.sol”;

or
//to import all libraries in the file use the pattern below
import "./libraryfile.sol";

Opción 2: código de la biblioteca directamente en el contrato

Las bibliotecas se pueden escribir en la parte superior del contrato para usarlas en múltiples funciones de llamada.

pragma solidity ^0.8.6;

library MathLibrary {

    //function that returns a * b and the requesting address 
    function multiply(uint a, uint b) internal view returns (uint, address) {
        return (a * b, address(this));
    }
}    

Para usar una biblioteca dentro de un contrato inteligente, use la siguiente sintaxis:

utilizando LibraryName por escribe;

Esta directiva se usa para adjuntar funciones de la biblioteca (LibraryName) a cualquier tipo de datos (Escribe) del contrato de convocatoria.

  • LibraryName – es el nombre de la biblioteca que desea utilizar en el contrato
  • Escribe – el tipo de variable para usar la biblioteca (uint, cadena, dirección, etc.). Usa el comodín * para adjuntar funciones de la biblioteca a todos los tipos.

A continuación se muestra un contrato de muestra que utiliza una biblioteca. Tome nota de cómo la directiva «using MathLibrary for uint;» llama a la biblioteca. Esto significa adjuntar la función de MathLibrary para todos los tipos de uint.

pragma solidity ^0.8.6;

library MathLibrary {

    //function that returns a * b and the requesting address 
    function multiply(uint a, uint b) internal view returns (uint, address) {
        return (a * b, address(this));
    }
}    
 

contract exampleContractUsingLibrary {

    //use the syntax - using LibraryName for Type
    //this can be use to attach library functions to any data type.
    using MathLibrary for uint;
    address owner = address(this);

    
    //function calls the function multiply in the MathLibrary above
    function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);
    }
}

Pruébalo en Remezclar

Leer también  Crodex (CRX) Token ¿Qué es, cómo comprar y precio?

Cómo una función llama a una biblioteca

Para usar una función de biblioteca, la sintaxis es:

variable.libraryFunctionName (argumento)

  1. Determine la variable que desea pasar a la función de biblioteca
  2. Agrega un «.» seguido del nombre de la función de biblioteca que queremos usar
  3. La solidez pasa implícitamente en el primer parámetro a la función

Por ejemplo:

//variable _a use the multiply function in the library
//_a.multiply(_b) which means multiply a * b
//_a is implicitly passed in as the first parameter
//_b is passed in as the second parameter
function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);

Vincular una biblioteca implementada a un contrato inteligente usando Remix

A continuación, usemos Remix para vincular un nuevo contrato a una biblioteca implementada. El proceso es el siguiente:

  • Implementar contrato de biblioteca en una red de prueba
  • Configurar Remix con la dirección de la biblioteca implementada
  • Implementar contrato de llamadas

Antes de comenzar a vincular contratos, debe ocurrir la siguiente condición previa:

  • Implementó y verificó un contrato de biblioteca
  • Tienes la dirección del contrato de la biblioteca
  • El contrato de llamada tiene la importación «./libraryfile.sol»; en la parte superior y está listo para el despliegue

Remix configuración para vincular un contrato de biblioteca

De forma predeterminada, Remix no genera un archivo de metadatos de contratos. Para generar un archivo de metadatos de contratos, vaya al módulo de configuración y seleccione generar metadatos.

Vincular una biblioteca implementada a un contrato inteligente usando Remix

Luego, vaya al compilador de solidez y vuelva a compilar el contrato inteligente de llamada para asegurarse de que no haya errores y genere el archivo de metadatos.

A continuación, vaya a la carpeta de artefactos en el explorador de archivos de Remix y abra el archivo callcontract.json.

Vincular una biblioteca implementada a un contrato inteligente usando Remix

El comportamiento predeterminado de Remix es implementar automáticamente una biblioteca y vincularla al contrato de llamada (autoDeployLib: true). Este comportamiento predeterminado de Remix funciona bien.

Modifique el comportamiento de Remix para vincular una biblioteca al contrato de llamada. Edite el archivo de metadatos del contrato de llamada.

Vincula una biblioteca implementada a un contrato inteligente usando Remix. autoDeployLib

Usando la dirección de la biblioteca reemplace la etiqueta

de la red en la que nos estamos implementando con la dirección real de la biblioteca. En nuestro ejemplo, estamos implementando en una red de prueba, por lo que en el archivo de metadatos edite las etiquetas apropiadas.

También necesitamos actualizar la configuración de autoDeployLib para que Remix no implemente automáticamente la biblioteca cuando implemente el contrato de llamada. Establecer autoDeployLib para falso.

Leer también  Rocket Pool: una plataforma de staking de criptomonedas que apuesta por la facilidad de uso

Implementar el contrato en Remix

En Remix, seleccione Injected Web 3 como ubicación de implementación, seleccione el contrato y haga clic en implementar. Verifique su contrato y pruebe el proceso.

Utilice los archivos de muestra a continuación. Implemente la biblioteca y luego vincúlela a un contrato inteligente implementado por separado.

Ejemplo de contrato de biblioteca

//name this file MathLibrary.sol
pragma solidity ^0.8.6;


library MathLibrary {
   
    function multiply(uint a, uint b) public view returns (uint, address) {
        return (a * b, address(this));
    }
}

Pruebatelo Remezclar

Ejemplo de contrato de llamada

pragma solidity ^0.8.6;

 
import './MathLibrary.sol';

 
contract exampleContractUsingLibrary {
    using MathLibrary for uint;
    address owner = address(this);

    
    function multiplyExample(uint _a, uint _b) public view returns (uint, address) {
        return _a.multiply(_b);
    }
}

Pruébalo en Remezclar

Recursos

Redes Blockchain

A continuación se muestra una lista de redes de cadena de bloques Mainnet y Testnet compatibles con EVM. Cada enlace contiene la configuración de la red, enlaces a múltiples faucets para probar ETH y tokens, detalles del puente y recursos técnicos para cada blockchain. Básicamente, todo lo que necesita para probar e implementar contratos inteligentes o aplicaciones descentralizadas en cada cadena. Para obtener una lista de los foros y aplicaciones de chat populares de Ethereum, haga clic aquí.

Ethereum prueba la configuración de la red y prueba la información del grifo ETH
Configuración optimista de Mainnet y Testnet de Ethereum, detalles del puente, etc.
Configuración de la red principal y de la red poligonal de la red poligonal, llaves para los tokens MATIC de prueba, detalles del puente, etc.
Configuración de Binance Smart Chain Mainnet y Testnet, faucets para pruebas de tokens BNB, detalles del puente, etc.
Configuración de Mainnet y Testnet de Fanton networt, grifos para tokens FTM de prueba, detalles de puentes, etc.
Configuración de Kucoin Chain Mainnet y Testnet, faucets para pruebas de tokens KCS, detalles del puente, etc.

Bibliotecas de software Web3

Puede utilizar las siguientes bibliotecas para interactuar con una cadena de bloques compatible con EVM.

Nodos

Aprenda a ejecutar un nodo Geth. Lea cómo comenzar con Geth para ejecutar un nodo Ethereum.

Arreglar una transacción

Cómo arreglar una transacción pendiente atascada en Ethereum o en una cadena compatible con EVM

Si quiere puede hacernos una donación por el trabajo que hacemos, lo apreciaremos mucho.

Direcciones de Billetera:

- BTC: 14xsuQRtT3Abek4zgDWZxJXs9VRdwxyPUS 

- USDT: TQmV9FyrcpeaZMro3M1yeEHnNjv7xKZDNe 

- BNB: 0x2fdb9034507b6d505d351a6f59d877040d0edb0f

- DOGE: D5SZesmFQGYVkE5trYYLF8hNPBgXgYcmrx 

También puede seguirnos en nuestras Redes sociales para mantenerse al tanto de los últimos post de la web:

-Twitter

- Telegram

Disclaimer: En Cryptoshitcompra.com no nos hacemos responsables de ninguna inversión de ningún visitante, nosotros simplemente damos información sobre Tokens, juegos NFT y criptomonedas, no recomendamos inversiones

Dejar un comentario

Tu dirección de correo electrónico no será publicada.