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

# EVM Integration

> Use Para Server SDK with Ethereum and EVM-compatible chains

export const Link = ({href, label, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  return <a href={href} target={newTab ? '_blank' : '_self'} rel={newTab ? 'noopener noreferrer' : undefined} className="not-prose inline-block relative text-black font-semibold cursor-pointer border-b-0 no-underline" onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      {label}
      <span className={`absolute left-0 bottom-0 w-full rounded-sm bg-gradient-to-r from-orange-600 to-purple-600 transition-all duration-300 ${isHovered ? 'h-0.5' : 'h-px'}`} />
    </a>;
};

Para Server SDK provides seamless integration with Ethereum Virtual Machine (EVM) compatible chains through popular libraries like Ethers.js and Viem. Once you've set up and authenticated your Para Server client, the EVM integration works identically to the client-side implementation.

<Note>
  Before using these integrations, ensure you've completed the server setup by importing a client session or creating a pregenerated wallet. See the <Link label="Server Setup Guide" href="/v3/server/setup" /> for details.
</Note>

<Info>
  Sepolia examples need testnet ETH before sending transactions. Server SDK and REST SDK flows can call `requestFaucet` with `{ walletId, chain: "ETHEREUM_SEPOLIA" }` after resolving the wallet ID. If `chain` is omitted, the faucet defaults to `ETHEREUM_SEPOLIA`. See [Fund Testnet Wallet](/v3/react/guides/web3-operations/evm/fund-testnet-wallet) for the same request shape in a UI flow.
</Info>

## Installation

Install the required dependencies for your preferred EVM library:

<CodeGroup>
  ```bash Ethers.js theme={null}
  npm install @getpara/ethers-v6-integration ethers --save-exact
  ```

  ```bash Viem theme={null}
  npm install @getpara/viem-integration viem --save-exact
  ```
</CodeGroup>

## Implementation

### Ethers.js Integration

The Para Ethers Signer acts as a drop-in replacement for standard Ethers signers:

```typescript theme={null}
import { Para as ParaServer } from "@getpara/server-sdk";
import { createParaEthersSigner } from "@getpara/ethers-v6-integration";
import { ethers } from "ethers";

// Para server client (already authenticated)
const paraServer = new ParaServer("YOUR_API_KEY");

// Set up the provider with your RPC URL
const provider = new ethers.JsonRpcProvider("YOUR_RPC_URL");

// Create the Para Ethers Signer
const signer = createParaEthersSigner({ para: paraServer, provider: provider });

// Now you can use the signer with any Ethers.js operations
const balance = await provider.getBalance(await signer.getAddress());
console.log(`Balance: ${ethers.formatEther(balance)} ETH`);

// Sign a message
const signature = await signer.signMessage("Hello from Para Server!");

// Send a transaction
const tx = await signer.sendTransaction({
  to: "0xRecipientAddress",
  value: ethers.parseEther("0.001")
});
```

### Viem Integration

Para's Viem integration provides a custom Viem client compatible with all Viem operations:

```typescript theme={null}
import { Para as ParaServer } from "@getpara/server-sdk";
import { createParaViemAccount, createParaViemClient } from "@getpara/viem-integration";
import { http } from "viem";
import { sepolia } from "viem/chains";

// Para server client (already authenticated)
const paraServer = new ParaServer("YOUR_API_KEY");

// Create a Para Account
const account = await createParaViemAccount(paraServer);

// Create the Para Viem WalletClient
const walletClient = createParaViemClient(paraServer, {
  account: account,
  chain: sepolia,
  transport: http("https://ethereum-sepolia-rpc.publicnode.com"),
});

// Now you can use the walletClient with any Viem operations
const hash = await walletClient.sendTransaction({
  to: "0xRecipientAddress",
  value: 1000000000000000n // 0.001 ETH
});
```

## Best Practices

* Use environment variables for API keys and RPC URLs
* Implement proper error handling for network failures
* Consider gas price management for production applications
* Cache network calls where appropriate to reduce RPC usage

## Learn More

For detailed examples of using Para with EVM chains, including smart contract interactions, ERC-20 transfers, and more, refer to our web documentation:

<Card title="Web EVM Integration Guide" imgUrl="/images/v3/network-evm.png" href="/v3/react/guides/web3-operations/evm/setup-libraries" description="Comprehensive guide to using Para with Ethereum and other EVM chains" horizontal />

## Examples

Explore our server-side EVM integration examples:

<CardGroup cols={2}>
  <Card title="Ethers.js Server Example" imgUrl="/images/v3/signer-ethers.png" href="https://github.com/getpara/examples-hub/blob/3.0.0/server/with-node/src/routes/signWithEthers.ts" description="Complete example of using Para with Ethers.js in a Node.js server" horizontal />

  <Card title="Viem Server Example" imgUrl="/images/v3/signer-viem.png" href="https://github.com/getpara/examples-hub/blob/3.0.0/server/with-node/src/routes/signWithViem.ts" description="Complete example of using Para with Viem in a Node.js server" horizontal />
</CardGroup>
