> For the complete documentation index, see [llms.txt](https://base-es.gitbook.io/base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://base-es.gitbook.io/base/overview/guias/deployando-un-contrato-inteligente/corriendo-un-nodo-en-base.md).

# Corriendo un Nodo en Base

[thirdweb](https://thirdweb.com/) es un marco de desarrollo que te permite incorporar funcionalidad web3 en tus aplicaciones.

En esta guía, te daremos una visión general de cómo usar la [CLI de thirdweb](https://portal.thirdweb.com/cli) para desplegar un contrato en la red de prueba Base Goerli.

**Objetivos**&#x20;

Al final de esta lección, deberías ser capaz de:

* Crear un proyecto con un contrato inteligente usando thirdweb.
* Desplegar contratos inteligentes usando thirdweb.
* Interactuar con contratos inteligentes desplegados usando thirdweb.

**Prerrequisitos**&#x20;

La interfaz de [línea de comandos interactiva de thirdweb](https://portal.thirdweb.com/cli) tiene todo lo que necesitas para crear, construir y desplegar contratos inteligentes y aplicaciones en Base.

Recomendamos usar npx para obtener siempre la última versión. Alternativamente, puedes instalar la CLI como un comando global en tu máquina:

```css
cssCopy code
npm i -g @thirdweb-dev/cli

```

**Creando un proyecto**

&#x20;Puedes usar la [CLI](https://portal.thirdweb.com/cli) de thirdweb para crear un nuevo proyecto que contenga un contrato inteligente, o alternativamente, puedes desplegar un contrato preconstruido para NFTs, Tokens o Marketplace directamente desde la página de [Explorar](http://thirdweb.com/explore) de thirdweb.

Para crear un nuevo proyecto usando la CLI, ejecuta:

```lua
luaCopy code
npx thirdweb create contract

```

Esto iniciará una serie interactiva de preguntas para ayudarte a comenzar:

* Dale un nombre a tu proyecto.
* Selecciona Hardhat como el marco.
* Selecciona ERC721 como el contrato base.
* Selecciona Ninguno para extensiones opcionales.

**Explorando el proyecto**

&#x20;El comando de creación genera un nuevo directorio con el nombre de tu proyecto. Abre este directorio en tu editor de texto.

Dentro de la carpeta de `contracts`, encontrarás un archivo `Contract.sol;` ¡este es nuestro contrato inteligente escrito en Solidity!

Si echamos un vistazo al código, puedes ver que nuestro contrato está heredando la funcionalidad de [ERC721Base](https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base), al:

* [Importar](https://solidity-by-example.org/import/) el contrato.
* [Heredar el contrato](https://docs.soliditylang.org/en/v0.8.17/contracts.html#inheritance); declarando que nuestro contrato es ERC721Base.
* Implementar cualquier [método requerido](https://portal.thirdweb.com/contractkit/base-contracts/erc-721/erc721base#implementing-the-contract), como el [constructor.](https://docs.soliditylang.org/en/v0.8.17/contracts.html#constructors)

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

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

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

```

Este patrón de herencia nos permite usar funcionalidad de otros contratos dentro del nuestro, modificarla y agregar lógica personalizada.

Por ejemplo, nuestro contrato actualmente implementa toda la lógica dentro del contrato [ERC721Base.sol](https://github.com/thirdweb-dev/contracts/blob/main/contracts/base/ERC721Base.sol); que implementa el estándar [ERC721A](https://github.com/thirdweb-dev/contracts/blob/main/contracts/eip/ERC721A.sol) con varias [extensiones](https://portal.thirdweb.com/contractkit/extensions) útiles.

**Desplegando el contrato**

&#x20;Puedes usar la [CLI](https://portal.thirdweb.com/cli) de thirdweb para desplegar un contrato inteligente en Base.

Para desplegar tus contratos inteligentes, desde el directorio raíz de tu proyecto, ejecuta:

```
Copy code
npx thirdweb deploy

```

Ejecutar este comando:

* Compilará todos los contratos en el directorio actual.
* Te permitirá seleccionar qué contrato(s) deseas desplegar.
* Subirá el código fuente de tu contrato ([ABI](https://docs.soliditylang.org/en/v0.8.17/abi-spec.html)) a I[PFS.](https://docs.ipfs.tech/concepts/what-is-ipfs/)
* Abrirá el flujo de despliegue en el panel de control. Desde el panel de control, primero deberás ingresar los valores para el constructor de nuestro contrato:
* `_name:` El nombre de nuestro contrato.
* `_symbol:` El símbolo o "ticker" dado a los tokens de nuestros contratos.
* `_royaltyRecipient:` La dirección de la billetera que recibirá las regalías de las ventas secundarias.
* `_royaltyBps:` Los puntos básicos (bps) que se darán al destinatario de las regalías por cada venta secundaria, por ejemplo, 500 = 5%. Finalmente, selecciona la [red d](https://blog.thirdweb.com/guides/which-network-should-you-use/)e prueba Base Goerli como la red a la que deseas desplegar y haz clic en Desplegar Ahora.

**INFO**

&#x20;Para despliegues en producción / mainnet selecciona `Base (`mainnet) como la red en lugar de `Base Goerli.`

Una vez que tu contrato esté desplegado, serás redirigido a un [panel de control para gestionar tu contrato.](https://portal.thirdweb.com/dashboard)

**Interactuando con tu contrato**

&#x20;Thirdweb proporciona SDKs para varios lenguajes de programación, incluyendo [React](https://portal.thirdweb.com/react), R[eact Native](https://portal.thirdweb.com/react-native), [TypeScrip](https://portal.thirdweb.com/typescript)t, [Python,](https://portal.thirdweb.com/python) [Go](https://portal.thirdweb.com/go) y [Unity.](https://portal.thirdweb.com/unity)

Para interactuar con tu contrato inteligente, puedes usar la [CLI](https://portal.thirdweb.com/cli) de thirdweb para crear una aplicación web que esté preconfigurada con el [SDK de React de thirdweb.](https://portal.thirdweb.com/react)

Para crear una aplicación web preconfigurada con el SDK de thirdweb, ejecuta:

```lua
luaCopy code
npx thirdweb create app –evm

```

Esto iniciará una serie interactiva de preguntas para ayudarte a comenzar:

* Dale un nombre a tu proyecto.
* Selecciona `Create React App` como el marco.
* Selecciona `TypeScript` como el lenguaje.

**Explorando el proyecto**

El comando de creación genera un nuevo directorio con el nombre de tu proyecto. Abre este directorio en tu editor de texto.

Dentro del archivo [`index.tsx`](https://github.com/thirdweb-example/cra-typescript-starter/blob/main/src/index.tsx#L17-L19), encontrarás el [ThirdwebProvider](https://portal.thirdweb.com/sdk/set-up-the-sdk/frontend#manual-installation) envolviendo toda la aplicación.

Este envoltorio nos permite usar todos los hooks y [componentes de UI](https://portal.thirdweb.com/react/react.web3button) del [SDK de React](https://portal.thirdweb.com/react) a lo largo de la aplicación, así como configurar una activeChain; que declara a qué cadena están desplegados nuestros contratos inteligentes.

Dado que desplegamos nuestro contrato inteligente en la red Base, configuraremos la `activeChain` a `BaseGoerli:`

```jsx
javascriptCopy code
...
import { BaseGoerli } from "@thirdweb-dev/chains";
import { ThirdwebProvider } from "@thirdweb-dev/react";

const container = document.getElementById("root");
const root = createRoot(container!);
root.render(
 <React.StrictMode>
   <ThirdwebProvider activeChain={BaseGoerli}>
     <App />
   </ThirdwebProvider>
 </React.StrictMode>
);

```

**Interactuando con el contrato**&#x20;

Para conectarte a tu contrato inteligente en la aplicación, proporciona la dirección de tu contrato inteligente (que puedes obtener desde el [panel de control)](https://portal.thirdweb.com/dashboard) al hook `useContract` de esta manera:

```jsx
javascriptCopy code
import { useContract } from '@thirdweb-dev/react';

export default function Home() {
  const { contract } = useContract('<DIRECCIÓN_DEL_CONTRATO>');

  // ¡Ahora puedes usar el contrato en el resto del componente!
}

```

Ahora puedes llamar a cualquier función en tu contrato inteligente con los hooks `[useContractRead](<https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#read-contract-data>)` y [`useContractWrite.`](https://portal.thirdweb.com/sdk/interacting-with-contracts/custom-contracts/using-contracts#write-transactions)

Por ejemplo, puedes llamar a `useContractRead` para obtener el nombre del contrato:

```jsx
javascriptCopy code
const { data, isLoading } = useContractRead(contract, 'name');

```

El SDK de thirdweb también proporciona hooks para varias interfaces y [extensiones](https://portal.thirdweb.com/contractkit/extensions) que facilitan la lectura y escritura de datos. Por ejemplo, podríamos usar los hooks de [ERC721](https://portal.thirdweb.com/sdk/interacting-with-contracts/erc721) para obtener los metadatos de nuestro contrato NFT.

Para obtener más información sobre cómo interactuar con contratos inteligentes usando el SDK de thirdweb, visita la [documentación para desarrolladores de thirdweb.](https://portal.thirdweb.com/react)

**Desplegando el proyecto**&#x20;

Para [alojar tu aplicación en IPFS,](https://blog.thirdweb.com/guides/how-to-host-your-web-app-on-ipfs/) ejecuta el siguiente comando:

```
Copy code
yarn deploy

```

Este comando utiliza [Storage](https://portal.thirdweb.com/storage) para:

* Crear una versión de producción de tu aplicación.
* Subir la versión a IPFS.
* Generar una URL donde tu aplicación está alojada permanentemente. ¡Eso es todo! ¡Ahora tienes una aplicación web que interactúa con contratos inteligentes desplegados en Base!
