> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plasma.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Configura el entorno de desarrollo

> Configura tus herramientas y conéctate a Plasma para el desarrollo de smart contracts.

Plasma es totalmente compatible con EVM, lo que te permite usar el tooling estándar de Ethereum mientras te beneficias de funcionalidades optimizadas para aplicaciones nativas de stablecoins. Para conocer más sobre los detalles de arquitectura de Plasma, consulta la sección [Resumen de arquitectura](../../plasma-chain/architecture/system-overview.mdx).

## Verifica la conectividad RPC

Hay endpoints RPC públicos disponibles para ambas redes de Plasma:

```shell theme={null}
# Mainnet (recommended)
curl --location https://rpc.plasma.to --header 'Content-Type: application/json' --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}'

# Testnet (optional)
curl --location https://testnet-rpc.plasma.to --header 'Content-Type: application/json' --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}'
```

Las respuestas de la mainnet se verán similares a:

```output theme={null}
{"jsonrpc":"2.0","id":1,"result":"0x11180f"}
```

<Tip>
  Los endpoints públicos tienen límite de tasa. Para uso en producción o solicitudes de alta frecuencia, considera usar un [proveedor RPC asociado](../../plasma-chain/tools/rpc-providers).
</Tip>

## Configuración de herramientas de desarrollo

A continuación se muestran ejemplos para [Hardhat](#hardhat) y [Truffle](#truffle-configuration):

### Hardhat

Crea o modifica tu archivo `hardhat.config.js` para incluir ambas redes de Plasma:

```javascript theme={null}
require("dotenv").config();

module.exports = {
  networks: {
    plasmaMainnet: {
      url: process.env.MAINNET_RPC_ENDPOINT || "https://rpc.plasma.to",
      chainId: 9745,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    },
    // Optional: enable the testnet for staging.
    plasmaTestnet: {
      url: process.env.TESTNET_RPC_ENDPOINT || "https://testnet-rpc.plasma.to",
      chainId: 9746,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    }
  },
  solidity: {
    version: "0.8.28",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  }
};
```

### Configuración de Truffle

Si usas Truffle, actualiza tu `truffle-config.js`:

```javascript theme={null}
const HDWalletProvider = require('@truffle/hdwallet-provider');

module.exports = {
  networks: {
    plasmaMainnet: {
      provider: () => new HDWalletProvider(
        "<YOUR_MNEMONIC_HERE>",
        process.env.MAINNET_RPC_ENDPOINT || "https://rpc.plasma.to",
      ),
      network_id: 9745,
      gas: 5500000,
    },
    plasmaTestnet: {
      provider: () => new HDWalletProvider(
        "<YOUR_MNEMONIC_HERE>",
        process.env.TESTNET_RPC_ENDPOINT || "https://testnet-rpc.plasma.to",
      ),
      network_id: 9746,
      gas: 5500000,
    }
  },
  compilers: {
    solc: {
      version: "0.8.28",
      settings: {
        optimizer: {
          enabled: true,
          runs: 200
        }
      }
    }
  }
};
```

## Integración con wallets

### Integración con Web3.js

```javascript theme={null}
const Web3 = require('web3');
const web3 = new Web3(process.env.MAINNET_RPC_ENDPOINT || 'https://rpc.plasma.to');

// Check connection
web3.eth.getBlockNumber()
  .then(blockNumber => console.log('Connected to Plasma node. Current block:', blockNumber))
  .catch(error => console.error('Connection error:', error));
```

### Integración con Ethers.js

```javascript theme={null}
const { ethers } = require('ethers');
const provider = new ethers.JsonRpcProvider('https://testnet-rpc.plasma.to');

// Check connection
provider.getBlockNumber()
  .then(blockNumber => console.log('Connected to Plasma node. Current block:', blockNumber))
  .catch(error => console.error('Connection error:', error));
```

## Valida la configuración

Crea un script simple para verificar que tu entorno de desarrollo está correctamente configurado:

```javascript theme={null}
const { ethers } = require('ethers');
require('dotenv').config();

async function testSetup() {
  // Connect to the Plasma node.
  const provider = new ethers.JsonRpcProvider('https://testnet-rpc.plasma.to');
  
  // Get network information.
  const network = await provider.getNetwork();
  console.log('Connected to network:', network);
  
  // Get current block number.
  const blockNumber = await provider.getBlockNumber();
  console.log('Current block number:', blockNumber);
  
  // Optionally, print address and balance if PRIVATE_KEY is set.
  if (process.env.PRIVATE_KEY) {
    const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
    const balance = await provider.getBalance(wallet.address);
    console.log('Account address:', wallet.address);
    console.log('Balance:', ethers.formatEther(balance), 'XPL');
  } else {
    console.log('Set PRIVATE_KEY to also print address and balance.');
  }
}

testSetup()
  .then(() => console.log('Setup test completed successfully'))
  .catch(error => console.error('Setup test failed:', error));
```

## Solución de problemas

| Problema                         | Acción                                                                                      |
| :------------------------------- | :------------------------------------------------------------------------------------------ |
| **Conexión rechazada**           | Confirma que el endpoint RPC sea correcto y accesible                                       |
| **Falló la estimación de gas**   | Asegúrate de que la wallet tenga suficiente XPL                                             |
| **Error de versión de Solidity** | Actualiza la configuración para coincidir con la versión de compilador soportada por Plasma |
| **La transacción falla**         | Verifica la URL del RPC y el chain ID correcto                                              |
