> ## Documentation Index
> Fetch the complete documentation index at: https://docs.enso.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Crosschain Minting: Round-Trip to Katana

> Mint rUSD stablecoin on Ethereum mainnet and bridge to Katana chain for DeFi yield and stablecoin diversification

export const date_0 = "2025-09-22"

This example shows single-contract minting on Ethereum followed by automated token distribution to Katana through bridging.

The pattern shows multi-chain token access without requiring separate minting deployments on each destination chain.

```mermaid theme={null}
flowchart LR
    subgraph ethereum ["🌐 Ethereum"]
        USDC_ETH((USDC))
        USDC_ETH -->|enso<br/>route| rUSD_ETH((rUSD))
    end
    
    rUSD_ETH -.->|stargate<br/>bridge| rUSD_KAT((rUSD))
    
    subgraph katana ["⚔️ Katana"]
        rUSD_KAT -->|enso<br/>route| VBUSDC((vbUSDC))
    end
```

\*\*Route Mechanics:
\*\*

This bundle facilitates stablecoin diversification across chains through a the following process:

* Convert USDC to rUSD on Ethereum using Enso's routing aggregation
* Bridge the newly minted rUSD from Ethereum to Katana chain via Stargate
* Check rUSD balance on Katana after bridge completion
* Swap rUSD for vault-bridged USDC (vbUSDC) on Katana

The strategy enables users to access Katana's DeFi ecosystem while starting with familiar USDC on Ethereum and relying on Reservoir Stablecoin.

```typescript lines highlight={} theme={null}
const KATANA_ID = 747474;
const ETHEREUM_ID = 1;

// Common addresses
const WALLET_ADDRESS = "0x93621DCA56fE26Cdee86e4F6B18E116e9758Ff11"; // User wallet

// Token addresses
const rUSD_ETHEREUM = "0x09D4214C03D01F49544C0448DBE3A27f768F2b34";
const rUSD_KATANA = "0x09D4214C03D01F49544C0448DBE3A27f768F2b34";
const USDC_ETHEREUM = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48";
const VBUSDC_KATANA = "0x203A662b0BD271A6ed5a60EdFbd04bFce608FD36";

const client = new EnsoClient({
  apiKey: process.env.ENSO_API_KEY!,
});

// LayerZero pool addresses
const wsrEthToKatanaPools = await client.getLayerZeroPool({
  chainId: ETHEREUM_ID,
  token: rUSD_ETHEREUM,
  destinationChainId: KATANA_ID,
  destinationToken: rUSD_KATANA,
});

// LayerZero pool addresses
const rUsdKatanaToEthRUsd = await client.getLayerZeroPool({
  chainId: ETHEREUM_ID,
  token: rUSD_ETHEREUM,
  destinationChainId: KATANA_ID,
  destinationToken: rUSD_KATANA,
});

console.log(JSON.stringify(wsrEthToKatanaPools), !wsrEthToKatanaPools.length);

if (!wsrEthToKatanaPools.length) {
  throw new Error("Required pools not available");
}

const bundle = await client.getBundleData(
  {
    chainId: ETHEREUM_ID,
    fromAddress: WALLET_ADDRESS,
    spender: WALLET_ADDRESS,
    routingStrategy: "router",
  },
  [
    // mint wsrUSD on Ethereum
    {
      protocol: "enso",
      action: "route",
      args: {
        amountIn: parseUnits("1000", 6).toString(), // 1000 USDC
        tokenIn: USDC_ETHEREUM,
        receiver: WALLET_ADDRESS,
        tokenOut: rUSD_ETHEREUM,
      },
    },

    {
      protocol: "stargate",
      action: "bridge",
      args: {
        primaryAddress: wsrEthToKatanaPools[0].pool as Address,
        destinationChainId: KATANA_ID,
        tokenIn: rUSD_ETHEREUM,
        amountIn: { useOutputOfCallAt: 0 },
        receiver: WALLET_ADDRESS,
        callback: [
          // Step 1: Check wsrUSD balance on Katana after bridge
          {
            protocol: "enso",
            action: "balance",
            args: {
              token: rUSD_KATANA,
            },
          },
          // Step 2: Swap wsrUSD to vbUSDC
          {
            protocol: "enso",
            action: "route",
            args: {
              tokenIn: rUSD_KATANA,
              tokenOut: VBUSDC_KATANA,
              amountIn: { useOutputOfCallAt: 0 }, // Use wsrUSD_KATANA from balance check
              receiver: WALLET_ADDRESS,
            },
          },
        ],
      },
    },
  ]
);
```

**Important Considerations**

* Bridge operations execute sequentially - Katana operations only proceed after successful Ethereum minting
* LayerZero bridge fees apply for transfers between Ethereum and Katana
* Gas costs for both chains are paid from the originating Ethereum transaction

## Resources:

* [Bridge Action Reference](/pages/build/reference/actions#bridge) - Technical details on crosschain bridging
* [Route Action Reference](/pages/build/reference/actions#route) - Using Enso's routing aggregation
* [getLayerZeroPool SDK Method](https://github.com/EnsoBuild/sdk-ts?tab=readme-ov-file#bridging-pool-address) - Finding available bridge pools programmatically
* [Crosschain Bridging Guide](/pages/build/examples/bridging) - Getting started with multi-chain workflows

<div className="text-right text-xs gray-200 font-semibold w-full" style={{marginTop: '0'}}>
  <p style={{
        color: "#b2b2b2"  
    }}>Updated {date_0}</p>
</div>
