Skip to main content

VIA on Stellar

VIA cross-chain messaging is live between Stellar (Soroban) and Ethereum, in both directions, on mainnet and testnet. The reference integration is VIAT, a burn-and-mint token: try it in the VIAT transfer app. The Stellar contracts are the VG1 contracts audited by Hashlock — see Audits.

This page is everything you need to use and understand the deployment. Building your own integration is a guided process with VIA — see Integration Paths.


How a transfer works

  1. Send — you call bridge() on the VIAT token you hold. It burns your amount and hands the gateway a message with the recipient, amount, and an optional memo.
  2. Sign — VIA's validators watch the source gateway and sign the message (ed25519 on the Stellar side).
  3. Deliver — a relayer submits the signed message to the destination gateway, which verifies the signatures and calls the token, which mints to the recipient.

Replays are rejected on chain, total supply across chains stays constant, and transfers complete in one to three minutes. When you use VIAT, the token contract is the only contract you call. The gateway, the validators, and the relayers run behind it, and VIA operates them.


Deployed contracts

Mainnet — Stellar ⇄ Ethereum

Stellar mainnetEthereum mainnet
VIA chain ID57311471
GatewayCB4TJPBTN6L72FGJLL2ZQHMKUZVSETA4N7HO6KFM4I27MMVOJ2UUEEWL0xDaA038AdB967A9aF11570D13Af8D723007EEf7eC
VIAT tokenCCV4X6S5TM4IVWIIWMLK6S5J3M34B64RJTLD5TF6QKDGVJKYFZQWJ3OV0x64F47B4A956DAFF307333F6A99DDB70beC9144E6

Testnet — Stellar testnet ⇄ Ethereum Sepolia

Stellar testnetEthereum Sepolia
VIA chain ID555555555511155111
GatewayCAMRA4FFQUG3XBVNPE2NZGDX5MGOX4OWODMNOXD3WODOQLPBQG4RPMAQ0xaA6917086C29beFBd2e918E2B7E657Cec8A5E674
VIAT tokenCCCIGW2URB5RDLE3AMOJ2RCOX2SM6YEWR4KAEMYWT5ECERDIMZQX3H2R0x425647EDDE512bBc38D1032e87895b086859824e

Gateway addresses for every VIA network are on Supported Networks.


Five rules that explain everything

  1. Chain IDs are VIA routing identifiers, not Stellar concepts. Every message ID is source chain ID × 10²³ + counter — an ID starting 5731147… came from Stellar mainnet, 11155111… from Sepolia. Follow any message by its ID on VIA Scan.

  2. Decimals differ, the count does not. Stellar tokens use 7 decimal places and Ethereum tokens use 18. The Stellar client converts on the way out and on the way in. Send 5 VIAT from Stellar and 5 VIAT arrive on Ethereum. The same holds coming back.

  3. Addresses travel as raw bytes. A transfer to Ethereum carries the 20-byte Ethereum address. A transfer to Stellar carries the 32-byte ID behind the Stellar address. A Stellar address, G... for an account or C... for a contract, is that ID written out in letters and numbers with a checksum.

  4. A Stellar recipient must already exist on the ledger — funded with the minimum XLM balance at least once. Tokens sent to a never-created account are delivered to an unusable contract-typed twin and are not recoverable. Fund first, transfer second.

  5. Only a contract can send a message. The gateway rejects calls straight from a wallet — users interact with the token client, and the client calls the gateway. That's why the sender you see on the far side is always the token contract, never a wallet.


Fees

  • A transfer costs normal Stellar network fees in XLM (or gas on the EVM side). No VIA protocol fee is charged on Stellar routes during the launch period. Relayers pay the destination-side fees.
  • Stellar finalizes in about five seconds; the reference client requests zero confirmations. Delivery time is set by the validator's polling interval.
  • Testnet: the transfer app's faucet buttons hand out 100 VIAT per click on either chain. SDF resets Stellar testnet quarterly — testnet addresses change after each reset; mainnet addresses are stable.
  • Explorers: stellar.expert for Stellar, Etherscan for the EVM side.

Going deeper