¿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.
- 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.
- 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.
Para ilustrar estos dos conceptos, revisaremos ambos métodos a continuación utilizando contratos de muestra.
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
Cómo una función llama a una biblioteca
Para usar una función de biblioteca, la sintaxis es:
variable.libraryFunctionName (argumento)
- Determine la variable que desea pasar a la función de biblioteca
- Agrega un «.» seguido del nombre de la función de biblioteca que queremos usar
- 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.
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.
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.
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.
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:
- 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