Skip to main content

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.

Sign plain text messages using Para’s secure signing infrastructure.
Wagmi is not available on React Native. Use Ethers.js or Viem for EVM operations.

Sign Personal Messages

import { useParaEthersSigner, useParaEthersSignMessage } from "@getpara/react-native-wallet/evm/ethers";
import { ethers } from "ethers";
import { JsonRpcProvider } from "ethers";
import { View, Text, TouchableOpacity } from "react-native";

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

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

  const { signMessageAsync, isPending, data: signature } = useParaEthersSignMessage(ethersSigner);

  return (
    <View>
      <TouchableOpacity
        disabled={isPending}
        onPress={() => signMessageAsync("Hello from Para!")}
      >
        <Text>{isPending ? "Signing..." : "Sign Message"}</Text>
      </TouchableOpacity>
      {signature && <Text>Signature: {signature.slice(0, 20)}...</Text>}
    </View>
  );
}

Sign Structured Messages

import { useParaEthersSigner, useParaEthersSignMessage } from "@getpara/react-native-wallet/evm/ethers";
import { JsonRpcProvider } from "ethers";
import { View, Text, TouchableOpacity } from "react-native";

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

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

  const { signMessageAsync, isPending, data: signature } = useParaEthersSignMessage(ethersSigner);

  const handleSign = () => {
    const data = {
      action: "authenticate",
      timestamp: Date.now(),
      nonce: Math.random().toString(36).substring(7),
    };
    signMessageAsync(JSON.stringify(data, null, 2));
  };

  return (
    <View>
      <TouchableOpacity onPress={handleSign} disabled={isPending}>
        <Text>{isPending ? "Signing..." : "Sign Structured Data"}</Text>
      </TouchableOpacity>
      {signature && <Text>Signature: {signature.slice(0, 30)}...</Text>}
    </View>
  );
}

Next Steps