# Documentación thirdweb: Solidity SDK

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

By [thirdweb ES](https://paragraph.com/@samusarmiento) · 2023-06-06

thirdweb, thirdweb_es, documentacion-thirdweb

---

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](https://portal.thirdweb.com/solidity/base-contracts) pre-construidos y un conjunto de componentes reutilizables, o [extensiones](https://portal.thirdweb.com/solidity/extensions), que se pueden integrar en sus propios contratos inteligentes.

![](https://paragraph.xyz/editor/callout/information-icon.png)

**Biblioteca de código abierto**

La biblioteca de contratos es de código abierto. Puede consultar el código fuente y contribuir a él en [GitHub](https://github.com/thirdweb-dev/contracts).

[

![](https://opengraph.githubassets.com/090c46ab8872a938067e8e3caf5bf80d889be472885c3fb98ca0f0674dca11e1/thirdweb-dev/contracts)

https://github.com

GitHub - thirdweb-dev/contracts: Collection of smart contracts deployable via thirdweb
--------------------------------------------------------------------------------------

Collection of smart contracts deployable via the thirdweb SDK, dashboard and CLI npm i @thirdweb-dev/contracts yarn: install contracts dependencies forge install: install tests dependencies forge test: run the tests This repository is a hybrid hardhat and forge project.





](https://github.com/thirdweb-dev/contracts)

### Contratos base

Los [contratos base](https://portal.thirdweb.com/solidity/base-contracts) son contratos inteligentes prediseñados sobre los que se puede construir o modificar, como el contrato [ERC721Base](https://portal.thirdweb.com/solidity/base-contracts/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](https://portal.thirdweb.com/sdk) y secciones personalizadas en el [_Dashboard_](https://portal.thirdweb.com/dashboard) para interactuar fácilmente con tu contrato inteligente.

### Extensiones

Las [extensiones](https://portal.thirdweb.com/solidity/extensions) 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](https://portal.thirdweb.com/solidity/getting-started#inheritance-and-overriding-functions).

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](https://storage.googleapis.com/papyrus_images/aaf9ecf13a6f6c9e4ae274b2f78dc42a.png)

### ¿Por qué utilizar el SDK de Solidity?

*   Integra sin esfuerzo características comunes de contratos inteligentes, incluyendo EIPs populares como [ERC20](https://portal.thirdweb.com/solidity/extensions/erc20), [ERC721](https://portal.thirdweb.com/solidity/extensions/erc721), [ERC1155](https://portal.thirdweb.com/solidity/extensions/erc1155), [_permissions_](https://portal.thirdweb.com/solidity/extensions/permissions), [_contract metadata_](https://portal.thirdweb.com/solidity/extensions/contractmetadata) 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](https://portal.thirdweb.com/sdk) más inteligentes, [_Dashboards_](https://portal.thirdweb.com/dashboard) personalizados y feeds de datos a medida.
    

Por ejemplo, si despliega el contrato [ERC721Base](https://portal.thirdweb.com/solidity/base-contracts/erc721base), que hereda de múltiples extensiones, incluida [ERC721Mintable](https://portal.thirdweb.com/solidity/extensions/erc721mintable), desbloqueará el botón `mint` en el panel de control y podrá utilizar la función [_mint_](https://portal.thirdweb.com/typescript/sdk.erc721mintable) en el SDK, que carga y fija automáticamente sus metadatos en [IPFS](https://portal.thirdweb.com/glossary/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](https://portal.thirdweb.com/solidity/base-contracts) 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í.](https://portal.thirdweb.com/solidity/base-contracts)
    
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) {}
    }

3.  ¡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](https://portal.thirdweb.com/deploy) 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](https://portal.thirdweb.com/solidity/extensions) 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í.](https://portal.thirdweb.com/solidity/extensions)
    

    // 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) {}
    }

![](https://paragraph.xyz/editor/callout/information-icon.png)

**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).

2.  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](https://portal.thirdweb.com/solidity/base-contracts)

*   [ERC1155](https://portal.thirdweb.com/solidity/base-contracts/erc1155base)
    
*   [ERC20](https://portal.thirdweb.com/solidity/base-contracts/erc20base)
    
*   [ERC721](https://portal.thirdweb.com/solidity/base-contracts/erc721base)
    
*   [_Smart Accounts_](https://portal.thirdweb.com/solidity/base-contracts/smart-accounts)
    
*   [Staking](https://portal.thirdweb.com/solidity/base-contracts/staking/staking1155base)
    

Extensiones
-----------

[Listado de extensiones](https://portal.thirdweb.com/solidity/extensions)

*   [ERC1155](https://portal.thirdweb.com/solidity/extensions/erc1155)
    
*   [ERC20](https://portal.thirdweb.com/solidity/extensions/erc20)
    
*   [ERC721](https://portal.thirdweb.com/solidity/extensions/erc721)
    
*   [General](https://portal.thirdweb.com/solidity/extensions/batchmintmetadata)
    
*   [Smart Account](https://portal.thirdweb.com/solidity/extensions/base-account)
    

* * *

[

![](https://portal.thirdweb.com/img/portal.png)

https://portal.thirdweb.com

Thirdweb Contracts | thirdweb developer portal
----------------------------------------------

Collection of smart contracts deployable via the thirdweb SDK, dashboard and CLI yarn: install contracts dependencies forge install: install tests dependencies forge test: run the tests This repository is a hybrid hardhat and forge project.





](https://portal.thirdweb.com/contracts)

* * *

Referencia completa
-------------------

*   [npm v3.5.6](https://www.npmjs.com/package/@thirdweb-dev/contracts)
    
*   [Test | passing](https://github.com/thirdweb-dev/contracts/actions)
    
*   [Discord](https://discord.com/invite/thirdweb)
    

### Instalación

    npm i @thirdweb-dev contracts

### **Testeando**[**​**](https://portal.thirdweb.com/contracts#running-tests)

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:

*   [DropERC20](https://thirdweb.com/thirdweb.eth/DropERC20)
    
*   [DropERC721](https://thirdweb.com/thirdweb.eth/DropERC721)
    
*   [DropERC1155](https://thirdweb.com/thirdweb.eth/DropERC1155)
    
*   [SignatureDrop](https://thirdweb.com/thirdweb.eth/SignatureDrop)
    
*   [Marketplace](https://thirdweb.com/thirdweb.eth/Marketplace)
    
*   [Multiwrap](https://thirdweb.com/thirdweb.eth/Multiwrap)
    
*   [TokenERC20](https://thirdweb.com/thirdweb.eth/TokenERC20)
    
*   [TokenERC721](https://thirdweb.com/thirdweb.eth/TokenERC721)
    
*   [TokenERC1155](https://thirdweb.com/thirdweb.eth/TokenERC1155)
    
*   [VoteERC20](https://thirdweb.com/thirdweb.eth/VoteERC20)
    
*   [Split](https://thirdweb.com/thirdweb.eth/Split)
    

### Despliegues

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

*   [Ethereum mainnet](https://etherscan.io/)
    
*   [Rinkeby](https://rinkeby.etherscan.io/)
    
*   [Goerli](https://goerli.etherscan.io/)
    
*   [Polygon mainnet](https://polygonscan.com/)
    
*   [Polygon Mumbai testnet](https://mumbai.polygonscan.com/)
    
*   [Avalanche mainnet](https://snowtrace.io/)
    
*   [Avalanche Fuji testnet](https://testnet.snowtrace.io/)
    
*   [Fantom mainnet](https://ftmscan.com/)
    
*   [Fantom testnet](https://testnet.ftmscan.com/)
    

`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.

*   `TWRegistry`: [0x7c487845f98938Bb955B1D5AD069d9a30e4131fd](https://blockscan.com/address/0x7c487845f98938Bb955B1D5AD069d9a30e4131fd)
    
*   `TWFactory`: [0x5DBC7B840baa9daBcBe9D2492E45D7244B54A2A0](https://blockscan.com/address/0x5DBC7B840baa9daBcBe9D2492E45D7244B54A2A0)
    
*   `TWFactory` (Fantom mainnet): [0x97EA0Fcc552D5A8Fb5e9101316AAd0D62Ea0876B](https://blockscan.com/address/0x97EA0Fcc552D5A8Fb5e9101316AAd0D62Ea0876B)
    

### **Autores**[**​**](https://portal.thirdweb.com/contracts#authors)

*   [thirdweb](https://thirdweb.com/)
    

### **License**[**​**](https://portal.thirdweb.com/contracts#license)

[Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)

Recursos adicionales
--------------------

*   [**Documentación thirdweb**](https://portal.thirdweb.com/)
    
*   [**Blog Oficial**](https://blog.thirdweb.com/)
    
*   [**Guías Oficiales**](https://blog.thirdweb.com/guides/)
    
*   [**Plantillas**](https://portal.thirdweb.com/templates)
    
*   [**Youtube Oficial**](https://www.youtube.com/thirdweb)
    
*   [**Youtube Español**](https://www.youtube.com/@thirdwebes)
    
*   [**Eventos**](https://thirdweb.com/events)
    
*   [**Discord Oficial**](https://discord.com/invite/thirdweb)
    
*   [Support](https://support.thirdweb.com/)
    
*   [Twitter Oficial](https://twitter.com/thirdweb)
    
*   [Twitter Oficial ES](https://twitter.com/thirdweb_es)
    
*   [Twitter Oficial JP](https://twitter.com/thirdweb_jp)
    
*   [Blogs y guías en Español](https://paragraph.xyz/@samusarmiento)
    

* * *

[Subscribe](https://paragraph.xyz/@samusarmiento/subscribe)

* * *

Si tienes alguna pregunta, únete a los más de 36.000 creadores de nuestra comunidad de [Discord](https://discord.com/invite/thirdweb?ref=blog.thirdweb.com), o [ponte en contacto](https://thirdweb.typeform.com/to/ZV3gUhiP?typeform-source=thirdweb.com&ref=blog.thirdweb.com) 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!

[

![](https://thirdweb.com/thirdweb.png)

https://thirdweb.com

thirdweb: The complete web3 development framework
-------------------------------------------------

Web3 Developers use thirdweb Total Contracts Deployed Without thirdweb (88 lines) Anyone can use thirdweb tools without our permission. The code for our contracts, SDKs, dashboard and UI components are open source and available to everyone. Apps and contracts built with our tools are completely owned by you.





](https://thirdweb.com/?ref=blog.thirdweb.com)

---

*Originally published on [thirdweb ES](https://paragraph.com/@samusarmiento/thirdweb-solidity-sdk)*
