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.
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.
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).
¿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.
Para empezar, importa y hereda el contrato base. Puedea encontrar la lista de todos los contratos base disponibles aquí.
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) {}
}
¡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.
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).
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
Extensiones
Referencia completa
Instalación
npm i @thirdweb-dev contracts
Testeando
yarn
: instalar dependencias de contratosforge install
: instalar dependencias de pruebasforge 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.
TWRegistry
: 0x7c487845f98938Bb955B1D5AD069d9a30e4131fdTWFactory
: 0x5DBC7B840baa9daBcBe9D2492E45D7244B54A2A0TWFactory
(Fantom mainnet): 0x97EA0Fcc552D5A8Fb5e9101316AAd0D62Ea0876B
Autores
License
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!