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