Skip to main content
Lumenline

One SDK for USDT0 and USDC.

Lumenline handles the decimals, trustlines, and relaying so your wallet or payout app doesn't have to. Built on the official LayerZero and CCTP rails.

Example quote

From

Arbitrum

250.00 USDC

To

Stellar

0.00 USDC

Fee
0.42 USDC
ETA
~2 min

Live demo

See it in the SDK

The same three calls carry both rails: quote, build and sign, track.
import { Lumenline } from "@lumenline/sdk";

const lumenline = new Lumenline({ network: "mainnet" });

const quote = await lumenline.quote({
  asset: "USDC",
  from: { chain: "arbitrum", address: sender },
  to: { chain: "stellar", address: recipient },
  amount: "250.00",
});

Example quote

250.00 USDC

Route
Arbitrum → Stellar
Fee
0.42 USDC
ETA
~2 min

Why

Why this exists

Stellar has two official ways to move dollars across chains now: USDT0 over LayerZero, and native USDC over Circle's CCTP. Both work, but every team that wants them inside a real product ends up solving the same problems. Stellar uses 7 decimal places; most other chains use 6. A recipient needs a trustline before USDT0 can land, or the transfer fails outright. Inbound CCTP has no automatic delivery on Stellar; something has to watch for the attestation and submit the mint. Lumenline solves each of these once, in the open, so you don't have to solve them again.

Without Lumenline

  • Convert between Stellar's 7 decimals and everyone else's 6, by hand
  • Check for a USDT0 trustline yourself before every send
  • Run your own watcher for CCTP attestations landing on Stellar

With Lumenline

  • quote() returns amounts already scaled correctly
  • build() refuses the send until the trustline check passes
  • The relayer watches attestations and submits the mint for you

Architecture

How it fits together

Four pieces. The architecture really is this shape — use one, or all four.

SDK

One TypeScript interface for both rails: quote, build, sign, track. The entry point most integrations start from.

Relayer

Completes inbound delivery automatically. Self-host it for free.

Router

A Soroban contract for one-call and batch cross-chain payouts from your own contracts.

Widget

A drop-in deposit-and-withdraw panel. Works in React, Vue, or plain HTML.

Verified

Verified, not assumed

We don't assume how Stellar, LayerZero, or Circle behave. Every claim in this codebase is either checked against a real deployed contract or marked unverified, in the open, in the repo.

Verification log

  • 01

    CCTP's hook data isn't a 32-byte address the way it looks. It's a length-prefixed string. Assuming otherwise would have permanently stranded funds.

  • 02

    Stellar's smart contract auth model binds to the exact call, not to general authorization. That detail broke a naive batch-transfer design on real testnet, caught before mainnet.

  • 03

    A burn from Stellar is two transactions, not one. The published interface doesn't say so; the deployed contract does.

Rails

Two rails, one interface

USDT0 · LayerZero

Mainnet only

Live on Stellar since September 2026. Mainnet only for now; no Stellar testnet deployment exists yet upstream.

USDC · Circle CCTP

Live

Standard Transfer supported both directions. Fast Transfer works into Stellar, not yet out of it — confirmed against real attestations, not assumed.

Open source

Open source, on purpose

Lumenline is Apache-2.0, and the core SDK and relayer will always be free to self-host. If you want to help close a real gap — smart-account support for USDT0, or better docs — the contributing guide lists exactly where we need it, with the evidence behind each item.

Inbound USDT0 to a smart-account recipient

Needs a mainnet run

Whether the OFT can deliver to a Soroban C-address at all is genuinely untested. Blocked on a funded mainnet operator and a smart account to target, not on code.