Build and sign complex Stellar transactions using Para’s integrated signers. This includes multi-operation transactions, fee bumps, XDR signing, and Soroban smart contract authorization.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.
- Multi-Operation
- Fee Bump
- Sign XDR
- Change Trust
- Soroban Auth
Combine multiple operations into a single atomic transaction:
import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { TransactionBuilder, Operation, Asset, BASE_FEE, Horizon, Networks } from "@stellar/stellar-sdk";
import { Button } from "react-native";
const server = new Horizon.Server("https://horizon.stellar.org");
function MultiOpTransaction() {
const { stellarSigner } = useParaStellarSigner({
networkPassphrase: Networks.PUBLIC,
});
const execute = async () => {
if (!stellarSigner) return;
const sourceAccount = await server.loadAccount(stellarSigner.address);
const transaction = new TransactionBuilder(sourceAccount, {
fee: BASE_FEE,
networkPassphrase: Networks.PUBLIC,
})
.addOperation(
Operation.payment({
destination: "GRECIPI...",
asset: Asset.native(),
amount: "10",
})
)
.addOperation(
Operation.manageData({
name: "memo",
value: "payment-ref-123",
})
)
.setTimeout(180)
.build();
const { signedTxXdr } = await stellarSigner.signTransaction(transaction.toXDR());
const tx = TransactionBuilder.fromXDR(signedTxXdr, Networks.PUBLIC);
const result = await server.submitTransaction(tx);
console.log("Transaction hash:", result.hash);
};
return <Button title="Execute Multi-Op" onPress={execute} />;
}
Wrap an existing transaction with a higher fee to prioritize it during network congestion:
import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { TransactionBuilder, Operation, Asset, Horizon, Networks } from "@stellar/stellar-sdk";
import { Button } from "react-native";
const server = new Horizon.Server("https://horizon.stellar.org");
function FeeBumpTransaction() {
const { stellarSigner } = useParaStellarSigner({
networkPassphrase: Networks.PUBLIC,
});
const execute = async () => {
if (!stellarSigner) return;
const sourceAccount = await server.loadAccount(stellarSigner.address);
// Build the inner transaction with a low base fee
const innerTx = new TransactionBuilder(sourceAccount, {
fee: "100",
networkPassphrase: Networks.PUBLIC,
})
.addOperation(
Operation.payment({
destination: "GRECIPI...",
asset: Asset.native(),
amount: "10",
})
)
.setTimeout(180)
.build();
// Sign the inner transaction
const { signedTxXdr: signedInnerXdr } = await stellarSigner.signTransaction(innerTx.toXDR());
const signedInner = TransactionBuilder.fromXDR(signedInnerXdr, Networks.PUBLIC);
// Wrap with a fee bump
const feeBumpTx = TransactionBuilder.buildFeeBumpTransaction(
stellarSigner.address,
"500", // higher fee
signedInner,
Networks.PUBLIC
);
// Sign the fee bump transaction
const { signedTxXdr } = await stellarSigner.signTransaction(feeBumpTx.toXDR());
const tx = TransactionBuilder.fromXDR(signedTxXdr, Networks.PUBLIC);
const result = await server.submitTransaction(tx);
console.log("Fee bump transaction hash:", result.hash);
};
return <Button title="Submit Fee Bump" onPress={execute} />;
}
Sign a pre-built transaction provided as an XDR string (e.g., from a server or dApp):
import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { TransactionBuilder, Networks, Horizon } from "@stellar/stellar-sdk";
import { Button } from "react-native";
const server = new Horizon.Server("https://horizon.stellar.org");
function SignXDR() {
const { stellarSigner } = useParaStellarSigner({
networkPassphrase: Networks.PUBLIC,
});
const signAndSubmit = async (xdrString: string) => {
if (!stellarSigner) return;
// Sign the XDR directly
const signedXdr = await stellarSigner.signTransactionXDR(
xdrString,
Networks.PUBLIC
);
// Submit to the network
const tx = TransactionBuilder.fromXDR(signedXdr, Networks.PUBLIC);
const result = await server.submitTransaction(tx);
console.log("Transaction hash:", result.hash);
};
return <Button title="Sign XDR" onPress={() => signAndSubmit("AAAA...")} />;
}
Create a trustline to hold a custom asset (required before receiving non-XLM tokens):
import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { TransactionBuilder, Operation, Asset, BASE_FEE, Horizon, Networks } from "@stellar/stellar-sdk";
import { Button } from "react-native";
const server = new Horizon.Server("https://horizon.stellar.org");
function ChangeTrust() {
const { stellarSigner } = useParaStellarSigner({
networkPassphrase: Networks.PUBLIC,
});
const addTrustline = async (assetCode: string, issuer: string) => {
if (!stellarSigner) return;
const sourceAccount = await server.loadAccount(stellarSigner.address);
const asset = new Asset(assetCode, issuer);
const transaction = new TransactionBuilder(sourceAccount, {
fee: BASE_FEE,
networkPassphrase: Networks.PUBLIC,
})
.addOperation(Operation.changeTrust({ asset }))
.setTimeout(180)
.build();
const { signedTxXdr } = await stellarSigner.signTransaction(transaction.toXDR());
const tx = TransactionBuilder.fromXDR(signedTxXdr, Networks.PUBLIC);
const result = await server.submitTransaction(tx);
console.log("Trustline added:", result.hash);
};
return (
<Button
title="Add USDC Trustline"
onPress={() =>
addTrustline(
"USDC",
"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN"
)
}
/>
);
}
Sign authorization entries for Soroban smart contract interactions:
import { useParaStellarSigner } from "@getpara/react-native-wallet/stellar";
import { Networks } from "@stellar/stellar-sdk";
import { Button } from "react-native";
function SorobanAuth() {
const { stellarSigner } = useParaStellarSigner({
networkPassphrase: Networks.PUBLIC,
});
const signAuth = async (authEntryXdr: string) => {
if (!stellarSigner) return;
// Sign the authorization entry
const { signedAuthEntry, signerAddress } =
await stellarSigner.signAuthEntry(authEntryXdr);
console.log("Signed auth entry:", signedAuthEntry);
console.log("Signer:", signerAddress);
return signedAuthEntry;
};
return (
<Button title="Authorize Contract Call" onPress={() => signAuth("AAAA...")} />
);
}
The
signAuthEntry method is compatible with Stellar SDK’s contract.Client, allowing Para wallets to authorize Soroban smart contract invocations. The auth entry XDR is typically provided by the contract client during simulation.