> For the complete documentation index, see [llms.txt](https://hinkal-team.gitbook.io/hinkal/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hinkal-team.gitbook.io/hinkal/hinkal-mobile-sdk/android/guides/multi-chain.md).

# Multi-Chain

The SDK works across TRON, Solana, and EVM [chains](/hinkal/ecosystem/supported-chains.md). Chain helpers let you discover supported chains and branch on chain type, and bridge operations move shielded value between chains.

### Discovering chains

```kotlin
val supported = Mobile.supportedChainsJSON()   // JSON of supported chains
val isEvm = Mobile.isEvmChain(chainId)
```

Related helpers: `Mobile.allSupportedChainsJSON()`, `Mobile.walletSupportedChainsJSON()`, `Mobile.bridgeSupportedChainsJSON()`, `Mobile.isTronChain(...)`, `Mobile.isSolanaChain(...)`, `Mobile.networkJSON(...)`.

### Connecting per chain type

* EVM: `client.connect(HostWallet)`
* Solana: `client.connectSolana(HostSolanaSigner, chainID)`
* Tron: `client.connectTron(HostTronSigner, chainID)`

### Bridging

Move shielded value from one chain to another:

```kotlin
let txHash = try call {
    hinkal.bridgePrivate(
        toPrivate: sourceChainId,
        sourceTokenAddr: sourceToken,
        destChainID: destChainId,
        destTokenAddr: destToken,
        amount: amountWei,
        recipientJSON: recipientJSON,
        slippage: 0.5,
        feeToken: sourceToken,
        error: &$0
    )
}
```

For public routes across chains, see `depositAndBridge(...)` and `nearDepositAndBridge(...)` in the API Reference.

### Best Practices

#### 1. Branch on chain type before connecting

Pick the connect method by chain type so you pass the right host signer.

```kotlin
when {
    Mobile.isSolanaChain(chainId) -> { /* connectSolana */ }
    Mobile.isTronChain(chainId) -> { /* connectTron */ }
    else -> { /* connect (EVM) */ }
}
```

#### 2. Confirm a chain is supported

```kotlin
if (!Mobile.isHinkalSupportedChain(chainId)) return
```

#### 3. Set slippage for bridges

`bridgePrivateToPrivate` takes a `slippage` (e.g. `0.5`). Use a value your users accept; too tight may fail on volatile routes.
