Skip to main content
Send ETH and ERC-20 token transfers securely using Para’s wallet infrastructure.

Prerequisites

You need Web3 libraries configured with Para authentication.

Setup Web3 Libraries

Sepolia examples need testnet ETH before sending transactions. Get requestFaucetAsync from useRequestFaucet() and call requestFaucetAsync({ chain: "ETHEREUM_SEPOLIA" }) after the user has an EVM wallet. If chain is omitted, the faucet defaults to ETHEREUM_SEPOLIA. See Fund Testnet Wallet for the full example.

Send ETH

import { useParaEthersSigner, useParaEthersSendTransaction } from "@getpara/react-sdk";
import { ethers, JsonRpcProvider } from "ethers";

const provider = new JsonRpcProvider("https://ethereum-sepolia-rpc.publicnode.com");

function SendETH() {
  const { ethersSigner } = useParaEthersSigner({ provider });

  const {
    sendTransactionAsync,
    isPending,
    data: receipt,
  } = useParaEthersSendTransaction(ethersSigner);

  return (
    <div>
      <button
        onClick={() =>
          sendTransaction({
            to: "0x742d35Cc6634C0532925a3b844Bc9e7595f7BBB2",
            value: ethers.parseEther("0.01"),
          })
        }
        disabled={isPending}
      >
        {isPending ? "Sending..." : "Send 0.01 ETH"}
      </button>
      {receipt && <p>Transaction Hash: {receipt.hash}</p>}
    </div>
  );
}

Send ERC-20 Tokens

import { useParaEthersSigner, useParaEthersWriteContract } from "@getpara/react-sdk";
import { ethers, JsonRpcProvider } from "ethers";

const ERC20_ABI = [
  "function transfer(address to, uint256 amount) returns (bool)"
];

const provider = new JsonRpcProvider("https://ethereum-sepolia-rpc.publicnode.com");

function SendToken({
  tokenAddress,
  decimals,
}: {
  tokenAddress: string;
  decimals: number;
}) {
  const { ethersSigner } = useParaEthersSigner({ provider });

  const {
    writeContractAsync,
    isPending,
    data: receipt,
  } = useParaEthersWriteContract(ethersSigner);

  return (
    <button
      onClick={() =>
        writeContract({
          address: tokenAddress,
          abi: ERC20_ABI,
          functionName: "transfer",
          args: [
            "0x742d35Cc6634C0532925a3b844Bc9e7595f7BBB2",
            ethers.parseUnits("10", decimals),
          ],
        })
      }
      disabled={isPending}
    >
      {isPending ? "Sending..." : "Send 10 Tokens"}
    </button>
  );
}

Next Steps

Execute Transactions

Get Transaction Receipt

Estimate Gas