# Network Configuration

Everything you need to connect your development tools, wallets, and applications to Armchain.

## Armchain Devnet

| Parameter               | Value                             |
| ----------------------- | --------------------------------- |
| **Network Name**        | Armchain Devnet                   |
| **Chain ID**            | `55`                              |
| **Currency Symbol**     | ARM                               |
| **Currency Decimals**   | 18                                |
| **RPC URL (HTTP)**      | `https://www.armchain.org/devnet` |
| **Transaction Type**    | Type 3 (PQC)                      |
| **Signature Algorithm** | ML-DSA44                          |

## Armchain Local (Fakenet)

| Parameter             | Value                   |
| --------------------- | ----------------------- |
| **Network Name**      | Armchain Local          |
| **Chain ID**          | `55`                    |
| **Currency Symbol**   | ARM                     |
| **Currency Decimals** | 18                      |
| **RPC URL (HTTP)**    | `http://localhost:4000` |
| **WebSocket URL**     | `ws://localhost:4500`   |
| **Block Explorer**    | -                       |

> See [Fakenet Setup](/node-operators/fakenet.md) for instructions on running a local development network.

## Connecting Tools

### Hardhat

> **⚠ Partial Compatibility**: Hardhat's built-in signers use ECDSA and **cannot sign Armchain transactions**. Configure network connectivity as below, but use `@armchain-ethersv6/ethers` for all signing operations. Do **not** use `hre.ethers.getSigners()` or `hre.ethers.getContractFactory().deploy()` as they will fail.

```javascript
// hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: {
    version: "0.8.24",
    settings: { evmVersion: "london" },
  },
  networks: {
    armchain: {
      url: "https://www.armchain.org/devnet",
      chainId: 55,
      // Do not set 'accounts' here - use @armchain-ethersv6/ethers for signing
    },
    "armchain-local": {
      url: "http://localhost:4000",
      chainId: 55,
    },
  },
};
```

### Armchain Ethers SDK

```typescript
import { JsonRpcProvider, Wallet } from "@armchain-ethersv6/ethers";

// Connect to devnet
const provider = new JsonRpcProvider("https://www.armchain.org/devnet");

// Connect to local network
const localProvider = new JsonRpcProvider("http://localhost:4000");

// Create a wallet
const wallet = new Wallet(privateKey, provider);

// Check balance
const balance = await provider.getBalance(wallet.address);
console.log("Balance:", balance.toString(), "wei");
```

### Standard ethers.js (Read-Only)

For read-only operations (querying balances, reading contract state), standard ethers.js can connect to Armchain RPC:

```typescript
import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider("https://www.armchain.org/devnet");

// Read-only operations work with standard ethers
const balance = await provider.getBalance("0x...");
const blockNumber = await provider.getBlockNumber();
```

> **Important**: Signing transactions requires `@armchain-ethersv6/ethers` with ML-DSA44 support. Standard ethers.js cannot produce valid Armchain signatures.

### curl (Direct RPC)

```bash
# Get latest block number
curl -X POST https://www.armchain.org/devnet \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# Get balance
curl -X POST https://www.armchain.org/devnet \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xYOUR_ADDRESS","latest"],"id":1}'

# Get chain ID
curl -X POST https://www.armchain.org/devnet \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
```

## Default Ports

When running your own node, these are the default ports:

| Port    | Protocol | Description                        |
| ------- | -------- | ---------------------------------- |
| `5050`  | TCP/UDP  | P2P (devp2p) network communication |
| `18545` | TCP      | HTTP JSON-RPC                      |
| `18546` | TCP      | WebSocket JSON-RPC                 |

When running a Fakenet demo:

| Port Pattern | Description                      |
| ------------ | -------------------------------- |
| `3000 + i`   | P2P port for validator `i`       |
| `4000 + i`   | HTTP RPC port for validator `i`  |
| `4500 + i`   | WebSocket port for validator `i` |

## API Namespaces

Armchain supports the following JSON-RPC API namespaces:

| Namespace  | Description                                         |
| ---------- | --------------------------------------------------- |
| `eth`      | Standard Ethereum API (transactions, blocks, state) |
| `net`      | Network information                                 |
| `web3`     | Web3 utility methods                                |
| `personal` | Account management (lock/unlock)                    |
| `txpool`   | Transaction pool inspection                         |
| `debug`    | Debugging and tracing                               |
| `admin`    | Node administration (peers, etc.)                   |
| `arm`      | Armchain-specific methods                           |
| `dag`      | DAG-specific queries                                |

## Gas Configuration

| Parameter                        | Value                                      |
| -------------------------------- | ------------------------------------------ |
| **Minimum Gas Price**            | 1 Gwei (`1000000000` wei)                  |
| **Max Block Gas**                | 20,500,000                                 |
| **Default Gas Limit (transfer)** | 21,000                                     |
| **Gas Price Model**              | EIP-1559 (dynamic base fee + priority fee) |

## Next Steps

* [Quickstart](/get-started/quickstart.md) to deploy your first contract
* [JSON-RPC Reference](/api-reference/json-rpc.md) for full API documentation
* [Node Types](/node-operators/node-types.md) for GC modes, sync modes, and resource requirements


---

# 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://docs.armchain.org/get-started/network-configuration.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.
