Guías & Documentación thirdweb

Documentación thirdweb: Solidity SDK

thirdweb Solidity SDK proporciona las herramientas necesarias para construir contratos inteligentes personalizados de manera eficiente

thirdweb Solidity SDK

Visión general

thirdweb Solidity SDK proporciona las herramientas necesarias para construir contratos inteligentes personalizados de manera eficiente, ofreciendo un conjunto de contratos base pre-construidos y un conjunto de componentes reutilizables, o extensiones, que se pueden integrar en sus propios contratos inteligentes.

Contratos base

Los contratos base son contratos inteligentes prediseñados sobre los que se puede construir o modificar, como el contrato ERC721Base. Estos contratos funcionan de forma inmediata y no requieren la implementación de ninguna función. Se construyen utilizando extensiones y, por lo tanto, desbloquean funciones inteligentes en los SDK y secciones personalizadas en el Dashboard para interactuar fácilmente con tu contrato inteligente.

Extensiones

Las extensiones son interfaces de Solidity que son reconocibles por el Dashboard y desbloquean la funcionalidad en los SDK. Las EIPs comunes también son reconocibles como extensiones ya que nuestras interfaces se ajustan a los estándares de la industria. Son piezas componibles de lógica que pueden añadirse fácilmente a los contratos inteligentes a través de la herencia.

Estas extensiones requieren distintos niveles de implementación lógica* en el contrato inteligente heredado. Los tres tipos diferentes de extensiones en este SDK son:

  • Contratos de extensión: Estas extensiones son totalmente completas y no requieren la implementación de ninguna lógica. Al heredar de estos contratos, se añade la funcionalidad y, por tanto, la lógica al contrato inteligente heredado.

  • Contratos abstractos: Estas extensiones requieren que se implemente parte de la lógica. Algunas de las funciones de la extensión dependen del caso de uso y, por lo tanto, requieren una lógica personalizada que es específica de tu contrato inteligente heredado.

  • Interfaces: Estas extensiones no tienen una implementación. Proporcionan las directrices para escribir tu propia lógica dándote las funciones, parámetros y tipos de retorno. Esto te permite asegurarte de que tu contrato se ajusta a esta extensión concreta para que puedas desbloquear funciones en los SDK y el Dashboard.

*implementar = escribir la lógica de la función con una firma de función coincidente (nombre, parámetros, visibilidad y tipo de retorno coincidentes).

Extensions

¿Por qué utilizar el SDK de Solidity?

  • Integra sin esfuerzo características comunes de contratos inteligentes, incluyendo EIPs populares como ERC20, ERC721, ERC1155, permissions, contract metadata y más.

  • Simplifica el flujo de trabajo de desarrollo, permitiéndote centrarse en sistemas más intrincados.

  • El uso de los contratos base le proporciona una base optimizada y auditada para construir sus proyectos.

  • Cada extensión que hereda desbloquea SDKs más inteligentes, Dashboards personalizados y feeds de datos a medida.

Por ejemplo, si despliega el contrato ERC721Base, que hereda de múltiples extensiones, incluida ERC721Mintable, desbloqueará el botón mint en el panel de control y podrá utilizar la función mint en el SDK, que carga y fija automáticamente sus metadatos en IPFS.

Primeros pasos

Para empezar a utilizar Solidity SDK, ejecuta el siguiente comando para crear un nuevo proyecto:

npx thirdweb create contract

O bien, instala el paquete de contracts en tu proyecto Solidity existente

Hardhat

npm install @thirdweb-dev contracts

Forge

forge install thirdweb-dev contracts

Uso del SDK de Solidity

El SDK de Solidity puede utilizarse para construir nuevos contratos inteligentes de extremo a extremo, o para añadir funcionalidad a tu propio contrato inteligente existente utilizando extensiones. Todas las funciones de los contratos base y las extensiones pueden modificarse sobrescribiéndolas.

Uso de contratos base

El SDK de Solidity incluye contratos base que son contratos inteligentes totalmente completos que pueden personalizarse sobrescribiendo funciones O añadiendo extensiones.

  1. Para empezar, importa y hereda el contrato base. Puedea encontrar la lista de todos los contratos base disponibles aquí.

  2. Los contratos base esperan que ciertos argumentos del constructor funcionen según lo previsto. Implementa un constructor para tu contrato inteligente y pasa los valores apropiados a un constructor para el contrato base.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@thirdweb-dev/contracts/base/ERC721Base.sol";

contract MyNFT is ERC721Base {
    constructor(
        string memory _name,
        string memory _symbol,
        address _royaltyRecipient,
        uint128 _royaltyBps
    ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}
  1. ¡Ahora ya está todo listo! 🎉 Tu contrato inteligente tiene ahora todas las extensiones proporcionadas por el contrato base que hereda y está listo para ser desplegado en cualquier blockchain EVM de tu elección.

Uso de Extensiones

Las extensiones deben utilizarse mediante herencia - el contrato inteligente de tu proyecto heredará de ellas.

Extensiones adicionales pueden ser añadidas a contratos inteligentes existentes o a los contratos base para añadir funcionalidad extra y desbloquear características en los SDKs y Dashboard.

  1. Para empezar, importa y hereda la extensión. Puede encontrar la lista de todas las extensiones disponibles aquí.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@thirdweb-dev/contracts/base/ERC721Base.sol";
import "@thirdweb-dev/contracts/extension/Permissions.sol";

contract MyNFT is ERC721Base, Permissions {
    constructor(
        string memory _name,
        string memory _symbol,
        address _royaltyRecipient,
        uint128 _royaltyBps
    ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}

Nota:

  • Algunas extensiones son abstractas y requieren la implementación de determinadas funciones*.

  • Algunas Extensiones son Interfaces y requieren que todas las funciones sean implementadas*.

*implementar = escribir la lógica de la función con una firma de función coincidente (nombre, parámetros, visibilidad y tipo de retorno coincidentes).

  1. Utiliza las funciones proporcionadas por la Extensión para cambiar el comportamiento de tu contrato inteligente.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@thirdweb-dev/contracts/base/ERC721Base.sol";
import "@thirdweb-dev/contracts/extension/Permissions.sol";

contract MyNFT is ERC721Base, Permissions {
    bytes32 private constant MINTER_ROLE = keccak256("MINTER_ROLE");

    constructor(
        string memory _name,
        string memory _symbol,
        address _royaltyRecipient,
        uint128 _royaltyBps
    ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}

    /**
     * `_canMint` es una función disponible en `ERC721Base`.
     *
     * Es llamada cada vez que un monedero intenta acuñar NFTs en este contrato.
     * contrato, y le permite definir la condición en la que un
     * intento de acuñar NFTs debe ser permitido, o rechazado.
     *
     * Por defecto, `ERC721Base` sólo permite al propietario del contrato acuñar
     * NFTs. Aquí anulamos esta funcionalidad.
     *
     * Usamos la extensión `Permissions` para especificar que cualquiera que tenga
     * "MINTER_ROLE" pueda acuñar NFTs.
     */
    function _canMint() internal view override returns (bool) {
        return hasRole(MINTER_ROLE, msg.sender);
    }
}

Herencia y sustitución de funciones

La herencia te permite extender las propiedades de tu contrato inteligente para incluir los atributos y propiedades del contrato padre. Las funciones heredadas de este contrato padre pueden ser modificadas en el contrato hijo a través de un proceso conocido como overriding.

Contrato padre: Contrato del que hereda el contrato hijo.

Contrato hijo: El contrato heredado.

Para sobreescribir una función, para añadir tu propia lógica personalizada, simplemente utiliza la palabra clave override al declarar la función, asegurándote de que la firma de la función coincide. Para añadir la lógica original del contrato padre, utilice la palabra clave super.

Por ejemplo, el contrato ERC721Base tiene una implementación de la función mintTo, yo podría sustituir esta función para añadir lógica personalizada y restringir esta función en el contrato myNFT para permitir sólo 1 NFT por monedero:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@thirdweb-dev/contracts/base/ERC721Base.sol";
import "@thirdweb-dev/contracts/extension/Permissions.sol";

contract MyNFT is ERC721Base, Permissions {
    constructor(
        string memory _name,
        string memory _symbol,
        address _royaltyRecipient,
        uint128 _royaltyBps
    ) ERC721Base(_name, _symbol, _royaltyRecipient, _royaltyBps) {}

    function mintTo(address _to, string memory _tokenURI) public override {
        require(balanceOf(_to) < 1, "only 1 NFT per wallet!");
        super.mintTo(_to, _tokenURI);
    }
}

Contratos Base

Listado de contratos base

Extensiones

Listado de extensiones



Referencia completa

Instalación

npm i @thirdweb-dev contracts

Testeando

  1. yarn: instalar dependencias de contratos

  2. forge install: instalar dependencias de pruebas

  3. forge test: ejecutar las pruebas

Este repositorio es un proyecto híbrido de hardhat y forge.

Primero instala las dependencias relevantes del proyecto:

yarn

forge install

Para compilar contratos, ejecuta:

forge build

O, si prefieres hardhat, puedes correr:

npx hardhat compile

Para realizar pruebas:

forge test

Para exportar los ABI de los contratos del directorio contracts ejecuta:

npx hardhat export-abi

Para ejecutar cualquier script del directorio scripts ejecuta:

npx hardhat run scripts/{ruta al script}

Contratos Pre-construidos

Los contratos pre-construidos están escritos por el equipo de thirdweb y cubren los casos de uso más comunes para los contratos inteligentes.

Páginas de publicación de los contratos preconstruidos:

Despliegues

El registro thirdweb (TWRegistry) y la factory (TWFactory) se han desplegado en las siguientes cadenas:

TWRegistry está desplegado en una dirección común en todas las redes mencionadas. TWFactory está desplegado en una dirección común en todas las redes mencionadas excepto Fantom mainnet.

Autores

License

Apache 2.0

Recursos adicionales



Si tienes alguna pregunta, únete a los más de 36.000 creadores de nuestra comunidad de Discord, o ponte en contacto directamente con el equipo para obtener más información sobre cómo empezar con thirdweb.

Y si quieres empezar a construir aplicaciones web3, empieza con las herramientas web3 y SDKs de thirdweb - ¡son gratis!

Loading...
highlight
Collect this post to permanently own it.
thirdweb ES logo
Subscribe to thirdweb ES and never miss a post.
#thirdweb#thirdweb_es#documentacion-thirdweb