> ## 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>;
};

export const Card = ({imgUrl, title, description, href, horizontal = false, newTab = false}) => {
  const [isHovered, setIsHovered] = useState(false);
  const handleClick = e => {
    e.preventDefault();
    if (newTab) {
      window.open(href, '_blank', 'noopener,noreferrer');
    } else {
      window.location.href = href;
    }
  };
  return <div className={`not-prose relative my-2 p-[1px] rounded-xl transition-all duration-300 ${isHovered ? 'bg-gradient-to-r from-[#FF4E00] to-[#874AE3]' : 'bg-gray-200'}`} onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      <a href={href} onClick={handleClick} className={`not-prose flex ${horizontal ? 'flex-row' : 'flex-col'} font-normal h-full bg-white overflow-hidden w-full cursor-pointer rounded-[11px] no-underline`}>
        {imgUrl && <div className={`relative overflow-hidden flex-shrink-0 ${horizontal ? 'w-[30%] rounded-l-[11px]' : 'w-full'}`} onClick={e => e.stopPropagation()}>
            <img src={imgUrl} alt={title} className="w-full h-full object-cover pointer-events-none select-none" draggable="false" />
            <div className="absolute inset-0 pointer-events-none" />
          </div>}
        <div className={`flex-grow px-6 py-5 ${horizontal ? 'w-[70%]' : 'w-full'} flex flex-col ${horizontal && imgUrl ? 'justify-center' : 'justify-start'}`}>
          {title && <h2 className="font-semibold text-base text-gray-800 m-0">{title}</h2>}
          {description && <div className={`font-normal text-gray-500 re leading-6 ${horizontal || !imgUrl ? 'mt-0' : 'mt-1'}`}>
              <p className="m-0 text-xs">{description}</p>
            </div>}
        </div>
      </a>
    </div>;
};

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="/v2/server/setup" /> for details.
</Note>

## 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/v2/network-evm.png" href="/v2/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/v2/signer-ethers.png" href="https://github.com/getpara/examples-hub/blob/2.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/v2/signer-viem.png" href="https://github.com/getpara/examples-hub/blob/2.0.0/server/with-node/src/routes/signWithViem.ts" description="Complete example of using Para with Viem in a Node.js server" horizontal />
</CardGroup>
