Skip to content
Tenzro
Documentation menu
Execution and interoperability

LayerZero

Send messages and omnichain tokens between Network 1 and EVM chains or Solana over LayerZero V2, with DVN-verified delivery and fees in TNZO.

LayerZero V2 is a general messaging protocol that connects Tenzro Network 1 to EVM chains and Solana. On Tenzro it is one of the protocols behind the bridge router: you can let the router choose it when it is the best route, or pin it explicitly. Use it to move TNZO and stablecoins, and to send application messages, for example an agent on Tenzro instructing a contract on another chain once a job settles.

What it covers

  • Messaging. Arbitrary payloads sent through the LayerZero EndpointV2 contract. Fees are quoted live with EndpointV2.quote() against the destination chain, and messages are tracked through LayerZero Scan.
  • Omnichain fungible tokens (OFT). Tokens that exist natively on several chains and move by burning or debiting on the source and minting or crediting on the destination. OFT amounts are sent in shared decimals.
  • Stargate V2 pools. Native USDC, USDT and ETH transfers through Stargate V2 pools on LayerZero, for moving stablecoins without a wrapped representation. List the pool addresses the node knows with tenzro stargate-v2 known-pools (JSON-RPC tenzro_stargateV2KnownPools).

Verification

LayerZero delivery is secured by DVNs (decentralised verifier networks) that attest to each packet. For every source chain, the Tenzro node holds a configured DVN set and the number of DVNs that must agree. An inbound packet is accepted only if enough DVNs in that set signed the packet's payload hash; with no DVN set configured for a source chain, inbound packets from it are refused. Each packet's id is recorded, so a packet delivered twice is rejected, including after a restart.

In the other direction, messages leave Tenzro only from finalised blocks, and each carries finality backed by a portable finality certificate that destination-side verifiers can check.

Send with the router

Pin the route to LayerZero with --protocol layerzero:

bash
# Quote
tenzro bridge quote \
  --from-chain tenzro --to-chain arbitrum \
  --token USDC --amount 500 \
  --protocol layerzero \
  --rpc https://rpc.tenzro.xyz

# Execute
tenzro bridge execute \
  --from-chain tenzro --to-chain arbitrum \
  --token USDC --amount 500 \
  --sender 0xYOUR_ADDRESS --recipient 0xRECIPIENT \
  --protocol layerzero \
  --rpc https://rpc.tenzro.xyz

# Track
tenzro bridge status <TRANSFER_ID> --protocol layerzero --rpc https://rpc.tenzro.xyz

From TypeScript, pass the adapter name as the last argument:

ts
import { TenzroClient } from "tenzro-sdk";

const client = new TenzroClient({ endpoint: "https://rpc.tenzro.xyz" });
const transfer = await client
  .bridge()
  .bridgeTokens("tenzro", "arbitrum", "USDC", "500", "0xRECIPIENT", "layerzero");

tenzro_bridgeTokens is an owner method: the transfer must be signed by the paying account.

Pay the fee in TNZO

You do not need ETH on the destination chain. Quote the destination-native fee in TNZO and the node pays the destination gas from the LayerZero sponsorship pool:

bash
tenzro bridge-fee quote \
  --adapter layerzero \
  --dest-chain eip155:42161 \
  --native-fee 250000000000000 \
  --rpc https://rpc.tenzro.xyz

See Bridges for how the fee is made up.

Endpoint ids

LayerZero identifies chains by endpoint id (EID), not by EVM chain id. Common mainnet EIDs:

ChainEID
Ethereum30101
BNB Chain30102
Avalanche30106
Polygon30109
Arbitrum30110
Optimism30111
Solana30168
Base30184

Use chain names (ethereum, arbitrum, base, solana) with the Tenzro CLI and SDK; the node maps them to EIDs.

Cross-chain intents

LayerZero is one of the proof routes for ERC-7683 orders: when a filler delivers on the destination chain, the fill proof returns to Tenzro over LayerZero and the order settles.