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

# MegaETH tooling

> Complete MegaETH tooling guide for Chainstack nodes. Use MetaMask, Hardhat, ethers.js, viem, Foundry, and more to build dApps on MegaETH blockchain.

Get started with a [reliable MegaETH RPC endpoint](https://chainstack.com/build-better-with-megaeth/) to use the tools below.

<Info>
  MegaETH is EVM compatible, so standard Ethereum development tools work. Note that MegaETH uses a multidimensional gas model with separate compute and storage gas components. Use the RPC endpoint for gas estimation rather than local simulation tools, as they may undercount gas.
</Info>

## MetaMask

On [node access details](/docs/manage-your-node#view-node-access-and-credentials), click **Connect wallet**.

## Rabby

[Rabby](https://rabby.io/) is a non-custodial multi-chain wallet with network auto-detection and transaction risk alerts.

1. Install [Rabby](https://rabby.io/) browser extension.
2. In Rabby, navigate to **Settings** > **Custom Network**.
3. Add your Chainstack endpoint with chain ID `4326`.

## Trust Wallet

[Trust Wallet](https://trustwallet.com/) has native MegaETH network support. To use your Chainstack endpoint, open the wallet and navigate to **Settings** > **Network** to add a custom network with your Chainstack RPC endpoint.

## Hardhat

Configure [Hardhat](https://hardhat.org/) to deploy contracts and interact through your MegaETH nodes.

1. Install [Hardhat](https://hardhat.org/) and create a project.
2. Create a new environment in `hardhat.config.js`:

   <CodeGroup>
     ```javascript Javascript theme={"system"}
     require("@nomiclabs/hardhat-waffle");
     ...
     module.exports = {
       solidity: "0.8.19",
       networks: {
         chainstack: {
             url: "YOUR_CHAINSTACK_ENDPOINT",
             accounts: ["YOUR_PRIVATE_KEY"]
         },
       }
     };
     ```
   </CodeGroup>

   where

   * YOUR\_CHAINSTACK\_ENDPOINT — your node HTTPS or WSS endpoint protected either with the key or password. See [node access details](/docs/manage-your-node#view-node-access-and-credentials).
   * YOUR\_PRIVATE\_KEY — the private key of the account that you use to deploy the contract
3. Run `npx hardhat run scripts/deploy.js --network chainstack` and Hardhat will deploy using Chainstack.

See also [Forking EVM-compatible mainnet with Hardhat](https://support.chainstack.com/hc/en-us/articles/900004242406).

## Remix IDE

To make Remix IDE interact with the network through a Chainstack node:

1. Get [MetaMask](https://metamask.io/) and set it to interact through a Chainstack node. See [Interacting through MetaMask](#metamask).
2. In Remix IDE, navigate to the **Deploy** tab. Select **Injected Provider - MetaMask** in **Environment**.

This will engage MetaMask and make Remix IDE interact with the network through a Chainstack node.

For a detailed tutorial with Remix IDE, see [Trust fund account with Remix](/docs/ethereum-tutorial-trust-fund-account-with-remix).

## web3.py

Build DApps using [web3.py](https://github.com/ethereum/web3.py) and MegaETH nodes deployed with Chainstack.

1. Install [web3.py](https://web3py.readthedocs.io/).
2. Connect over HTTP or WebSocket. See also [EVM node connection: HTTP vs WebSocket](https://support.chainstack.com/hc/en-us/articles/900002187586-Ethereum-node-connection-HTTP-vs-WebSocket).

### HTTP

Use the `HTTPProvider` to connect to your node endpoint and get the latest block number:

<CodeGroup>
  ```python Key Protected theme={"system"}
  from web3 import Web3

  web3 = Web3(Web3.HTTPProvider('YOUR_CHAINSTACK_ENDPOINT'))
  print(web3.eth.block_number)
  ```
</CodeGroup>

<CodeGroup>
  ```python Password Protected theme={"system"}
  from web3 import Web3

  web3 = Web3(Web3.HTTPProvider('https://%s:%s@%s'% ("USERNAME", "PASSWORD", "HOSTNAME")))
  print(web3.eth.block_number)
  ```
</CodeGroup>

where

* YOUR\_CHAINSTACK\_ENDPOINT — your node HTTPS endpoint protected either with the key or password
* HOSTNAME — your node HTTPS endpoint hostname
* USERNAME — your node access username (for password-protected endpoints)
* PASSWORD — your node access password (for password-protected endpoints)

See also [node access details](/docs/manage-your-node#view-node-access-and-credentials).

### WebSocket

Use the `WebsocketProvider` object to connect to your node WSS endpoint and get the latest block number:

<CodeGroup>
  ```python Key Protected theme={"system"}
  from web3 import Web3

  web3 = Web3(Web3.WebsocketProvider('YOUR_CHAINSTACK_ENDPOINT'))
  print(web3.eth.block_number)
  ```
</CodeGroup>

<CodeGroup>
  ```python Password Protected theme={"system"}
  from web3 import Web3

  web3 = Web3(Web3.WebsocketProvider('wss://%s:%s@%s'% ("USERNAME", "PASSWORD", "HOSTNAME")))
  print(web3.eth.block_number)
  ```
</CodeGroup>

where

* YOUR\_CHAINSTACK\_ENDPOINT — your node WSS endpoint protected either with the key or password
* HOSTNAME — your node WSS endpoint hostname
* USERNAME — your node access username (for password-protected endpoints)
* PASSWORD — your node access password (for password-protected endpoints)

See also [node access details](/docs/manage-your-node#view-node-access-and-credentials).

See also [WebSocket connection to an EVM node](https://support.chainstack.com/hc/en-us/articles/900001918763-WebSocket-connection-to-an-Ethereum-node).

## ethers.js

Build DApps using [ethers.js](https://github.com/ethers-io/ethers.js/) and MegaETH nodes deployed with Chainstack.

1. Install [ethers.js](https://www.npmjs.com/package/ethers).
2. Connect over HTTP or WebSocket. See also [EVM node connection: HTTP vs WebSocket](https://support.chainstack.com/hc/en-us/articles/900002187586-Ethereum-node-connection-HTTP-vs-WebSocket).

### HTTP

Use the `JsonRpcProvider` object to connect to your node endpoint and get the latest block number:

<CodeGroup>
  ```javascript Key Protected theme={"system"}
  const { ethers } = require("ethers");

  var urlInfo = {
    url: "YOUR_CHAINSTACK_ENDPOINT",
  };
  var provider = new ethers.providers.JsonRpcProvider(urlInfo, NETWORK_ID);

  provider.getBlockNumber().then(console.log);
  ```
</CodeGroup>

<CodeGroup>
  ```javascript Password Protected theme={"system"}
  const { ethers } = require("ethers");

  var urlInfo = {
    url: "YOUR_CHAINSTACK_ENDPOINT",
    user: "USERNAME",
    password: "PASSWORD",
  };
  var provider = new ethers.providers.JsonRpcProvider(urlInfo, NETWORK_ID);

  provider.getBlockNumber().then(console.log);
  ```
</CodeGroup>

where

* YOUR\_CHAINSTACK\_ENDPOINT — your node HTTPS endpoint protected either with the key or password

* USERNAME — your node access username (for password-protected endpoints)

* PASSWORD — your node access password (for password-protected endpoints)

* NETWORK\_ID — MegaETH network ID:

  * Mainnet: `4326`
  * Testnet: `6342`

See also [node access details](/docs/manage-your-node#view-node-access-and-credentials).

### WebSocket

Use the `WebSocketProvider` object to connect to your node WSS endpoint and get the latest block number:

<CodeGroup>
  ```javascript Javascript theme={"system"}
  const { ethers } = require("ethers");

  const provider = new ethers.providers.WebSocketProvider(
    "YOUR_CHAINSTACK_ENDPOINT",
    NETWORK_ID
  );

  provider.getBlockNumber().then(console.log);
  ```
</CodeGroup>

where

* YOUR\_CHAINSTACK\_ENDPOINT — your node WSS endpoint endpoint protected either with the key or password

* NETWORK\_ID — MegaETH network ID:

  * Mainnet: `4326`
  * Testnet: `6342`

See also [node access details](/docs/manage-your-node#view-node-access-and-credentials).

## viem

Build DApps using [viem](https://viem.sh/) and MegaETH nodes deployed with Chainstack.

1. Install [viem](https://www.npmjs.com/package/viem).
2. Connect over HTTP or WebSocket.

### HTTP

Use the `createPublicClient` function to connect to your node endpoint and get the latest block number:

<CodeGroup>
  ```javascript Javascript theme={"system"}
  import { createPublicClient, http } from 'viem'

  const client = createPublicClient({
    transport: http('YOUR_CHAINSTACK_ENDPOINT')
  })

  const blockNumber = await client.getBlockNumber()
  console.log(blockNumber)
  ```
</CodeGroup>

where YOUR\_CHAINSTACK\_ENDPOINT is your node HTTPS endpoint protected either with the key or password

### WebSocket

Use the `createPublicClient` function with WebSocket transport:

<CodeGroup>
  ```javascript Javascript theme={"system"}
  import { createPublicClient, webSocket } from 'viem'

  const client = createPublicClient({
    transport: webSocket('YOUR_CHAINSTACK_ENDPOINT')
  })

  const blockNumber = await client.getBlockNumber()
  console.log(blockNumber)
  ```
</CodeGroup>

where YOUR\_CHAINSTACK\_ENDPOINT is your node WSS endpoint protected either with the key or password

## Foundry

1. Install [Foundry](https://getfoundry.sh/).
2. Use `--rpc-url` to run the operation through your Chainstack node.

<Warning>
  MegaETH's multidimensional gas model means local gas estimation in Forge may undercount. Use `--skip-simulation` with `forge script` and manually specify a gas limit, or rely on the RPC endpoint for estimation.
</Warning>

### Forge

Use `forge` to develop, test, and deploy your smart contracts.

To deploy a contract:

<CodeGroup>
  ```bash Shell theme={"system"}
  forge create CONTRACT_NAME --contracts CONTRACT_PATH --private-key YOUR_PRIVATE_KEY --rpc-url YOUR_CHAINSTACK_ENDPOINT
  ```
</CodeGroup>

where

* CONTRACT\_NAME — name of the contract in the Solidity source code
* CONTRACT\_PATH — path to your smart contract
* YOUR\_PRIVATE\_KEY — the private key to your funded account that you will use to deploy the contract.
* YOUR\_CHAINSTACK\_ENDPOINT — your node HTTPS endpoint protected either with the key or password

### Cast

Use `cast` to interact with the network and the deployed contracts.

To get the latest block number:

<CodeGroup>
  ```bash Shell theme={"system"}
  cast block-number --rpc-url YOUR_CHAINSTACK_ENDPOINT
  ```
</CodeGroup>

where YOUR\_CHAINSTACK\_ENDPOINT is your node HTTPS endpoint protected either with the key or password
