Ayúdanos a actualizar esta página.

🌏

Disponemos de una nueva versión de esta página, pero solo está en inglés por ahora. Ayúdanos a traducir la última versión.

Esta página está incompleta. Si eres un experto en el tema, por favor edita esta página y esparce tu sabiduría.

Librerías de contratos inteligentes

Última edición: , Invalid DateTime
Edit page

No es necesario que escribas cada contrato inteligente de tu proyecto desde cero. Hay muchas bibliotecas de contratos inteligentes de código abierto disponibles, que proporcionan bloques de construcción reutilizables para tu proyecto que pueden salvarte de tener que reinventar la rueda.

Requisitos previos

Antes de adentrarte en las bibliotecas de contratos inteligentes, te recomendamos que comprendas bien la estructura de estos documentos. Dirígete a Anatomía del contrato inteligente, si aún no lo has hecho.

¿Qué hay en una biblioteca?

Normalmente puedes encontrar dos tipos de bloques de construcción en las bibliotecas de contratos inteligentes: comportamientos reutilizables que puedes añadir a tus contratos, e implementaciones de varios estándares.

Comportamientos

Cuando escribas contratos inteligentes, hay una gran posibilidad de que te encuentres escribiendo patrones similares una y otra vez, como asignar una dirección de administrador para realizar operaciones protegidas en un contrato, o añadir un botón de paro de emergencia en caso de producirse un problema inesperado.

Las bibliotecas de contratos inteligentes suelen proporcionar implementaciones reutilizables de estos comportamientos como bibliotecas o a través de herencia en Solidity.

Como ejemplo, a continuación se muestra una versión simplificada del contrato de propietario de la biblioteca de contractos OpenZeppelin, que diseña una dirección como el propietario de un contrato y proporciona un modificador para restringir el acceso a un método únicamente a dicho propietario.

1contract Ownable {
2 address public owner;
3
4 constructor() internal {
5 owner = msg.sender;
6 }
7
8 modifier onlyOwner() {
9 require(owner == msg.sender, "Ownable: caller is not the owner");
10 _;
11 }
12}
13
Mostrar todo
📋 Copiar

Para utilizar un bloque de construcción como este en tu contrato, primero tendrás que importarlo y, a continuación, ampliarlo en tus propios contratos. Esto te permitirá utilizar el modificador proporcionado por el contrato base "poseíble" para asegurar sus propias funciones.

1import ".../Ownable.sol"; // Path to the imported library
2
3contract MyContract is Ownable {
4 // La siguiente función solo puede solicitarla el propietario
5 function secured() onlyOwner public {
6 msg.sender.transfer(1 ether);
7 }
8}
9
📋 Copiar

Otro ejemplo popular es SafeMath o DsMath. Se trata de bibliotecas (en oposición a los contratos base) que proveen funciones aritméticas con controles de desbordamiento, que no proporciona el lenguaje. Recomendamos utilizar cualquiera de estas bibliotecas en lugar de operaciones aritméticas nativas para proteger tu contrato contra desbordamientos, que pueden tener consecuencias nefastas.

Estándares

Para facilitar la composibilidad e interoperabilidad, la comunidad Ethereum ha definido varios estándares en forma de ERC. Puedes leer más sobre ellos en la sección de estándares.

Al incluir un ERC como parte de sus contratos, recomendamos buscar implementaciones estándar, en lugar de intentar desplegar las tuyas. Muchas bibliotecas de contratos inteligentes incluyen implementaciones para los ERC más populares. Por ejemplo, el ubicuo ERC20 fungible token estándar puede encontrarse en HQ20, DappSys y OpenZeppelin. Adicionalmente, algunos ERC también proveen implementaciones canónicas como parte del propio ERC.

Vale la pena mencionar que algunos ERC no son autónomos, sino adiciones a otros ERC. Por ejemplo, ERC2612 añade una extensión a ERC20 para mejorar su usabilidad.

Cómo agregar una biblioteca

Consulta siempre la documentación de la biblioteca que estás incluyendo para obtener instrucciones específicas sobre cómo incluirla en tu proyecto. Varias bibliotecas de contratos de Solidity están empaquetadas usando npm, así que puedes simplemente instalar npm de ellas. La mayoría de las herramientas para compilar contratos buscarán en tu node_modules las bibliotecas de contratos inteligentes, así que puedes hacer lo siguiente:

1// Esto cargará la biblioteca @openzeppelin/contracts desde tu node_modules
2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
3
4contract MyNFT is ERC721 {
5 constructor() ERC721("MyNFT", "MNFT") public { }
6}
7
📋 Copiar

Independientemente del método que utilices, al incluir una biblioteca, siempre vigila la versión del lenguaje. Por ejemplo, no puede utilizar una biblioteca para Solidity 0.6 si estás escribiendo tus contratos en Solidity 0.5.

Cuándo se debe utilizar

Usar una biblioteca de contratos inteligentes para tu proyecto tiene varias ventajas. En primer lugar y principalmente, te ahorra tiempo al proporcionarte los bloques de construcción listos para que los puedas incluir en tu sistema, en lugar de tener que codificarlos tú mismo.

La seguridad también es un beneficio importante. Las bibliotecas de contratos inteligentes de código abierto también suelen ser objeto de un severo escrutinio. Dado que muchos proyectos dependen de ellos, existe un fuerte incentivo por parte de la comunidad para mantenerlos bajo una constante revisión. Es mucho más común encontrar errores en el código de aplicación que en las bibliotecas de contratos reutilizables. Algunas bibliotecas también son sometidas a auditorías externas por seguridad adicional.

Sin embargo, el uso de bibliotecas de contratos inteligentes conlleva el riesgo de incluir código con el que no estés familiarizado en tu proyecto. Es tentador importar un contrato e incluirlo directamente en tu proyecto, pero sin entender bien lo que hace ese contrato, puedes estar introduciendo inadvertidamente un problema en tu sistema debido a un comportamiento inesperado. Asegúrate siempre de leer la documentación del código que estás importando y, a continuación, revisa el código antes de incluirlo en tu proyecto.

Por último, al decidir si incluir o no una biblioteca, considera su uso general. Si seleccionas una que se suela adoptar con frecuencia la ventaja será que, como la utiliza una comunidad de personas mayor, hay más ojos controlando los posibles errores. La seguridad debe ser tu enfoque principal durante la redacción de contratos inteligentes.

Contratos de OpenZeppelin: **La biblioteca más popular para el desarrollo seguro de contratos inteligentes.**

DappSys: **Bloques de creación simples, flexibles y seguros para contratos inteligentes. **

HQ20: **Un proyecto de Solidity con contratos, bibliotecas y ejemplos para ayudarte a construir aplicaciones distribuidas con todas las características para el mundo real.**

Más lectura

¿Conoces algún recurso en la comunidad que te haya servido de ayuda? Edita esta página y añádelo.