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.

Transfer XLM tokens between wallets using Para’s Stellar signer with the Stellar SDK.

Send XLM

import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { TransactionBuilder, Operation, Asset, BASE_FEE, Horizon, Networks } from "@stellar/stellar-sdk";
import { View, Text, Button } from "react-native";

const server = new Horizon.Server("https://horizon.stellar.org");

function SendXLM() {
  const { stellarSigner, isLoading } = useParaStellarSigner({
    networkPassphrase: Networks.PUBLIC,
  });

  const sendPayment = async (recipient: string, amount: string) => {
    if (!stellarSigner) {
      console.error("No signer available. Connect wallet first.");
      return;
    }

    // Load the sender's account from the network
    const sourceAccount = await server.loadAccount(stellarSigner.address);

    // Build the payment transaction
    const transaction = new TransactionBuilder(sourceAccount, {
      fee: BASE_FEE,
      networkPassphrase: Networks.PUBLIC,
    })
      .addOperation(
        Operation.payment({
          destination: recipient,
          asset: Asset.native(),
          amount, // e.g. "10" for 10 XLM
        })
      )
      .setTimeout(180)
      .build();

    // Sign the transaction with Para
    const { signedTxXdr } = await stellarSigner.signTransaction(transaction.toXDR());

    // Submit to the network
    const tx = TransactionBuilder.fromXDR(signedTxXdr, Networks.PUBLIC);
    const result = await server.submitTransaction(tx);
    console.log("Transaction hash:", result.hash);

    return result;
  };

  if (isLoading) return <Text>Loading...</Text>;

  return (
    <View>
      <Text>Address: {stellarSigner?.address}</Text>
      <Button title="Send 10 XLM" onPress={() => sendPayment("GRECIPI...", "10")} />
    </View>
  );
}

Send Custom Assets

To send a custom asset (like USDC on Stellar), replace Asset.native() with the specific asset:
import { Asset } from "@stellar/stellar-sdk";

// Example: USDC on Stellar
const usdc = new Asset(
  "USDC",
  "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"
);

// Use in your payment operation
Operation.payment({
  destination: recipient,
  asset: usdc,
  amount: "100", // 100 USDC
});
The recipient must have a trustline for the custom asset before they can receive it. See Execute Transactions for how to create trustlines.

Next Steps