> ## Documentation Index
> Fetch the complete documentation index at: https://na-36-mintlify-aebde2c5.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Arbitrum RPCs

> Arbitrum One RPC endpoint options for Livepeer orchestrators – provider comparison, rate limits, and configuration.

export const CustomDivider = ({color = "var(--lp-color-border-default)", middleText = "", spacing = "default", style = {}, className = "", ...rest}) => {
  const spacingPresets = {
    default: {
      margin: "24px 0"
    },
    overlap: {
      margin: "-1rem 0 -1rem 0"
    },
    tight: {
      margin: "0 0 -1rem 0"
    },
    section: {
      margin: "0 0 -2rem 0"
    },
    sectionOverlap: {
      margin: "-1rem 0 -2rem 0"
    },
    deepOverlap: {
      margin: "-1rem 0 -1.5rem 0"
    }
  };
  const spacingStyle = spacingPresets[spacing] || spacingPresets.default;
  return <div role="separator" aria-orientation="horizontal" className={className} style={{
    display: "flex",
    alignItems: "center",
    ...spacingStyle,
    fontSize: style?.fontSize || "16px",
    height: "fit-content",
    ...style
  }} {...rest}>
      <span style={{
    marginRight: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
      </span>
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      {middleText && <>
          <Icon icon="circle" size={2} />
          <span style={{
    margin: "0 8px",
    fontWeight: "bold",
    color: color,
    opacity: 0.7
  }}>
            {middleText}
          </span>
          <Icon icon="circle" size={2} />
        </>}
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      <span style={{
    marginLeft: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <span style={{
    display: "inline-block",
    transform: "scaleX(-1)"
  }}>
          <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
        </span>
      </span>
    </div>;
};

export const TableCell = ({children, align = "left", header = false, style = {}, className = "", ...rest}) => {
  const Component = header ? "th" : "td";
  return <Component className={className} style={{
    padding: "0.75rem 1rem",
    textAlign: align,
    border: header ? "none" : "1px solid var(--lp-color-border-default)",
    ...style
  }} {...rest}>
      {children}
    </Component>;
};

export const TableRow = ({children, header = false, hover = false, style = {}, className = "", ...rest}) => {
  const rowId = `table-row-${Math.random().toString(36).substr(2, 9)}`;
  return <>
      {hover && <style>{`
          #${rowId}:hover {
            background-color: var(--lp-color-bg-card);
          }
        `}</style>}
      <tr id={rowId} className={className} style={{
    ...header && ({
      backgroundColor: "var(--lp-color-accent-strong)",
      color: "var(--lp-color-on-accent)",
      fontWeight: "bold"
    }),
    ...style
  }} {...rest}>
        {children}
      </tr>
    </>;
};

export const StyledTable = ({children, variant = "default", style = {}, className = "", ...rest}) => {
  const wrapperVariants = {
    default: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "var(--lp-color-bg-card)",
      overflow: "hidden"
    },
    bordered: {
      border: "2px solid var(--lp-color-accent)",
      backgroundColor: "var(--lp-color-bg-page)",
      overflow: "hidden"
    },
    minimal: {
      border: "none",
      backgroundColor: "transparent",
      overflow: "visible"
    }
  };
  return <div data-docs-styled-table-shell className={className} style={{
    width: "100%",
    padding: 0,
    margin: 0,
    ...wrapperVariants[variant],
    ...style
  }} {...rest}>
      <table data-docs-styled-table style={{
    width: "100%",
    borderCollapse: "collapse",
    borderSpacing: 0,
    margin: 0,
    backgroundColor: "transparent"
  }}>
        {children}
      </table>
    </div>;
};

Livepeer orchestrators require an Arbitrum One RPC endpoint to interact with the protocol – staking, reward calls, ticket redemption, and service registration all happen on Arbitrum. The endpoint is configured via the `-ethUrl` flag.

<CustomDivider />

## Requirements

Your RPC endpoint must:

* Connect to **Arbitrum One** (chain ID `42161` / `0xa4b1`) – not Ethereum L1
* Support standard JSON-RPC methods (`eth_call`, `eth_sendRawTransaction`, `eth_getBlockByNumber`, `eth_getLogs`)
* Handle the request volume your orchestrator generates – active orchestrators with frequent reward calls and ticket redemptions may exceed free-tier limits

<CustomDivider />

## Provider Options

<StyledTable variant="bordered">
  <TableRow header>
    <TableCell header>Provider</TableCell>
    <TableCell header>Free Tier</TableCell>
    <TableCell header>Rate Limit (free)</TableCell>
    <TableCell header>Notes</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[Alchemy](https://www.alchemy.com/)</TableCell>
    <TableCell>Yes</TableCell>
    <TableCell>300 CU/s (\~100 req/s)</TableCell>
    <TableCell>Most commonly used by orchestrators. Arbitrum One supported natively.</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[Infura](https://www.infura.io/)</TableCell>
    <TableCell>Yes</TableCell>
    <TableCell>100k req/day</TableCell>
    <TableCell>Requires separate Arbitrum add-on in dashboard.</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[Ankr](https://www.ankr.com/)</TableCell>
    <TableCell>Yes (public)</TableCell>
    <TableCell>Shared, best-effort</TableCell>
    <TableCell>Public endpoint: `https://rpc.ankr.com/arbitrum`. No API key needed.</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[QuickNode](https://www.quicknode.com/)</TableCell>
    <TableCell>Paid</TableCell>
    <TableCell>Varies by plan</TableCell>
    <TableCell>Low-latency option for high-volume orchestrators.</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[Chainstack](https://chainstack.com/)</TableCell>
    <TableCell>Yes</TableCell>
    <TableCell>25 req/s</TableCell>
    <TableCell>Arbitrum One supported.</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>[Public Arbitrum RPC](https://arb1.arbitrum.io/rpc)</TableCell>
    <TableCell>Yes</TableCell>
    <TableCell>Shared, rate-limited</TableCell>
    <TableCell>Official Arbitrum public endpoint. Suitable for testing only – not recommended for production orchestrators.</TableCell>
  </TableRow>
</StyledTable>

<CustomDivider />

## Configuration

Set the endpoint when starting your orchestrator:

```bash icon="terminal" theme={"theme":{"light":"github-light","dark":"dark-plus"}}
livepeer \
  -network arbitrum-one-mainnet \
  -ethUrl https://arb-mainnet.g.alchemy.com/v2/YOUR_API_KEY \
  -orchestrator \
  -transcoder \
  ...
```

### Verify Your Endpoint

Test that the endpoint is reachable and returns the correct chain ID:

```bash icon="terminal" theme={"theme":{"light":"github-light","dark":"dark-plus"}}
curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \
  YOUR_ETH_URL
```

Expected response includes `"result":"0xa4b1"` (42161 in decimal = Arbitrum One).

<CustomDivider />

## Common Issues

<StyledTable variant="bordered">
  <TableRow header>
    <TableCell header>Problem</TableCell>
    <TableCell header>Cause</TableCell>
    <TableCell header>Fix</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>`dial tcp: connection refused`</TableCell>
    <TableCell>Wrong URL or provider down</TableCell>
    <TableCell>Verify URL, test with `curl`, try alternate provider</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>`could not retrieve chain ID`</TableCell>
    <TableCell>Using Ethereum L1 endpoint instead of Arbitrum</TableCell>
    <TableCell>Switch to an Arbitrum One endpoint</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>`context deadline exceeded`</TableCell>
    <TableCell>Rate-limited or slow provider</TableCell>
    <TableCell>Upgrade plan or switch provider</TableCell>
  </TableRow>

  <TableRow>
    <TableCell>Reward calls failing intermittently</TableCell>
    <TableCell>Free-tier rate limit hit during peak</TableCell>
    <TableCell>Upgrade to paid tier or use a dedicated node</TableCell>
  </TableRow>
</StyledTable>

For detailed troubleshooting, see the [FAQ](/v2/orchestrators/resources/faq#arbitrum-rpc-connection-failing--node-will-not-start).

<CustomDivider />

## See Also

<CardGroup cols={3}>
  <Card title="Arbitrum Exchanges" href="/v2/orchestrators/resources/arbitrum-exchanges" icon="coins" />

  <Card title="Contract Addresses" href="/v2/orchestrators/resources/technical/x-contract-addresses" icon="file-contract" />

  <Card title="FAQ" href="/v2/orchestrators/resources/faq" icon="circle-question" />
</CardGroup>
