# 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!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://base-es.gitbook.io/base/overview/guias/deployando-un-contrato-inteligente/corriendo-un-nodo-en-base.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
