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

# useSendEth Hook

> Send native ETH transactions on supported chains

# useSendEth Hook

The `useSendEth` hook allows you to send native ETH on any supported chain through the Crefy Connect API.

## Usage

```tsx theme={null}
import { useSendEth } from "crefy-connect";
import { useState } from "react";

export default function SendEthExample() {
  const { sendEth, loading, error, data } = useSendEth();
  const [address, setAddress] = useState("");
  const [amount, setAmount] = useState("");

  const handleSend = async () => {
    try {
      await sendEth({
        to: address,
        value: amount,
        chain: "sepolia",
        mode: "fast",
      });
    } catch (err) {
      console.error("Send ETH failed:", err);
    }
  };

  return (
    <div>
      <h2>Send ETH</h2>
      <input
        type="text"
        placeholder="Recipient address"
        value={address}
        onChange={(e) => setAddress(e.target.value)}
      />
      <input
        type="text"
        placeholder="Amount in ETH"
        value={amount}
        onChange={(e) => setAmount(e.target.value)}
      />
      <button onClick={handleSend} disabled={loading}>
        {loading ? "Sending..." : "Send ETH"}
      </button>

      {error && <p style={{ color: "red" }}>Error: {error}</p>}
      {data && <p>Transaction sent! Hash: {data.txHash}</p>}
    </div>
  );
}
```

## Hook Returns

| Property  | Type                                       | Description                                    |
| --------- | ------------------------------------------ | ---------------------------------------------- |
| `sendEth` | `(params: SendEthParams) => Promise<void>` | Function to send ETH transaction               |
| `loading` | boolean                                    | Whether a transaction is currently in progress |
| `error`   | string \| null                             | Error message if transaction failed            |
| `data`    | SendEthResponse \| null                    | Transaction response data                      |

## SendEthParams

| Parameter | Type                           | Required | Description                                    |
| --------- | ------------------------------ | -------- | ---------------------------------------------- |
| `to`      | string                         | ✅        | Recipient wallet address                       |
| `value`   | string                         | ✅        | Amount to send in ETH (as string, e.g., "0.1") |
| `chain`   | string                         | ✅        | Blockchain network ("sepolia" or "mainnet")    |
| `mode`    | "slow" \| "standard" \| "fast" | ❌        | Transaction speed mode (default: "standard")   |

## SendEthResponse

```typescript theme={null}
interface SendEthResponse {
  txHash: string;
  // ... other response fields
}
```

## Examples

### Basic Send Transaction

```tsx theme={null}
import { useSendEth } from "crefy-connect";

export default function SendButton() {
  const { sendEth, loading } = useSendEth();

  const handleSend = async () => {
    await sendEth({
      to: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      value: "0.1",
      chain: "sepolia",
    });
  };

  return (
    <button onClick={handleSend} disabled={loading}>
      {loading ? "Sending..." : "Send 0.1 ETH"}
    </button>
  );
}
```

### With Error Handling

```tsx theme={null}
import { useSendEth } from "crefy-connect";
import { useState } from "react";

export default function SendForm() {
  const { sendEth, loading, error } = useSendEth();
  const [recipient, setRecipient] = useState("");
  const [amount, setAmount] = useState("");

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();

    try {
      await sendEth({
        to: recipient,
        value: amount,
        chain: "sepolia",
        mode: "fast",
      });
      // Reset form on success
      setRecipient("");
      setAmount("");
    } catch (err) {
      console.error("Transaction failed:", err);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        placeholder="Recipient address"
        value={recipient}
        onChange={(e) => setRecipient(e.target.value)}
        required
      />
      <input
        type="text"
        placeholder="Amount (ETH)"
        value={amount}
        onChange={(e) => setAmount(e.target.value)}
        required
      />
      <button type="submit" disabled={loading}>
        {loading ? "Sending..." : "Send ETH"}
      </button>
      {error && <p style={{ color: "red" }}>{error}</p>}
    </form>
  );
}
```

### Display Transaction Hash

```tsx theme={null}
import { useSendEth } from "crefy-connect";

export default function TransactionTracker() {
  const { sendEth, loading, data } = useSendEth();

  const handleSend = async () => {
    await sendEth({
      to: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      value: "0.1",
      chain: "sepolia",
    });
  };

  return (
    <div>
      <button onClick={handleSend} disabled={loading}>
        Send Transaction
      </button>
      {data && (
        <div>
          <p>Transaction successful!</p>
          <p>
            Hash: <a href={`https://sepolia.etherscan.io/tx/${data.txHash}`}>
              {data.txHash}
            </a>
          </p>
        </div>
      )}
    </div>
  );
}
```

### Transaction Speed Modes

```tsx theme={null}
import { useSendEth } from "crefy-connect";

export default function SpeedSelector() {
  const { sendEth, loading } = useSendEth();
  const [mode, setMode] = useState<"slow" | "standard" | "fast">("standard");

  const handleSend = async () => {
    await sendEth({
      to: "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      value: "0.1",
      chain: "sepolia",
      mode: mode,
    });
  };

  return (
    <div>
      <select value={mode} onChange={(e) => setMode(e.target.value as any)}>
        <option value="slow">Slow (Lower fee)</option>
        <option value="standard">Standard</option>
        <option value="fast">Fast (Higher fee)</option>
      </select>
      <button onClick={handleSend} disabled={loading}>
        Send with {mode} mode
      </button>
    </div>
  );
}
```

## Important Notes

<Warning>
  **Authentication Required**: The user must be authenticated via `CrefyConnectProvider` before sending transactions. The hook will use the authenticated user's wallet.
</Warning>

<Tip>
  **Value Format**: The `value` parameter should be a string representing the amount in ETH (e.g., "0.1" for 0.1 ETH, not "100000000000000000").
</Tip>

<Note>
  **Chain Support**: Currently supports "sepolia" and "mainnet". More chains coming soon!
</Note>
