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.

Setup Stellar Libraries First

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

Execute Transactions

Sign Messages

Verify Signatures