> ## 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.

# Stellar Integration

> Create Stellar wallets and sign Stellar transactions with the Para Flutter SDK

Use `WalletType.stellar` to create or load a Stellar wallet, then pass a `StellarTransaction` payload to `signTransaction`.

## Quick start

```dart stellar_signing.dart theme={null}
import 'package:para/para.dart';

final para = Para(apiKey: 'your-api-key');

Future<Wallet> getOrCreateStellarWallet(Para para) async {
  final wallets = await para.fetchWallets();
  for (final wallet in wallets) {
    if (wallet.type == WalletType.stellar && wallet.id != null) {
      return wallet;
    }
  }

  return para.createWallet(
    type: WalletType.stellar,
    skipDistribute: false,
  );
}

final wallet = await getOrCreateStellarWallet(para);

final transaction = StellarTransaction.payment(
  to: 'GRECIPIENT_STELLAR_ADDRESS',
  amount: '10',
  networkPassphrase: StellarNetwork.testnetPassphrase,
  memo: const StellarMemo.text('hello'),
);

final result = await para.signTransaction(
  walletId: wallet.id!,
  transaction: transaction.toJson(),
);

if (result is SuccessfulSignatureResult) {
  print('Signed transaction: ${result.signedTransaction}');
}
```

## Display the address

A Stellar wallet uses the same `Wallet` model as the other wallet types. Use `wallet.address` when it is present. If you only have the raw Ed25519 public key, derive the Stellar G-address with `getStellarAddress`.

```dart stellar_address.dart theme={null}
import 'package:para/para.dart';

final address = wallet.address ??
    (wallet.publicKey == null ? null : getStellarAddress(wallet.publicKey!));

print('Stellar address: $address');
```

You can also derive a Stellar address from a Solana-format Ed25519 public key:

```dart stellar_address_from_solana.dart theme={null}
final stellarAddress = getStellarAddressFromSolana(solanaAddress);
```

## Sign a payment

`StellarTransaction.payment` supports native XLM payments and issued assets. The `networkPassphrase` must match the network the transaction will be submitted to.

```dart stellar_payment.dart theme={null}
final xlmPayment = StellarTransaction.payment(
  to: 'GRECIPIENT_STELLAR_ADDRESS',
  amount: '10',
  networkPassphrase: StellarNetwork.testnetPassphrase,
  fee: '100',
  timeout: 60,
);

final signed = await para.signTransaction(
  walletId: wallet.id!,
  transaction: xlmPayment.toJson(),
);

if (signed is SuccessfulSignatureResult) {
  print('Signed transaction: ${signed.signedTransaction}');
}
```

For issued assets, include the asset code and issuer:

```dart stellar_asset_payment.dart theme={null}
final usdcPayment = StellarTransaction.payment(
  to: 'GRECIPIENT_STELLAR_ADDRESS',
  amount: '5',
  asset: const StellarAsset(
    code: 'USDC',
    issuer: 'GISSUER_STELLAR_ADDRESS',
  ),
  networkPassphrase: StellarNetwork.publicPassphrase,
);
```

## Sign serialized XDR

If your backend or Stellar SDK code already builds the transaction, pass the serialized XDR directly.

```dart stellar_xdr.dart theme={null}
final transaction = StellarTransaction.serializedXdr(
  'AAAAAgAAA...',
  networkPassphrase: StellarNetwork.publicPassphrase,
);

final result = await para.signTransaction(
  walletId: wallet.id!,
  transaction: transaction.toJson(),
);

if (result is SuccessfulSignatureResult) {
  print('Signed transaction: ${result.signedTransaction}');
}
```

## Network passphrases

| Network                | Constant                           |
| ---------------------- | ---------------------------------- |
| Stellar Testnet        | `StellarNetwork.testnetPassphrase` |
| Stellar Public Network | `StellarNetwork.publicPassphrase`  |
