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
EndpointV2contract. Fees are quoted live withEndpointV2.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-RPCtenzro_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:
# 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.xyzFrom TypeScript, pass the adapter name as the last argument:
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:
tenzro bridge-fee quote \
--adapter layerzero \
--dest-chain eip155:42161 \
--native-fee 250000000000000 \
--rpc https://rpc.tenzro.xyzSee 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:
| Chain | EID |
|---|---|
| Ethereum | 30101 |
| BNB Chain | 30102 |
| Avalanche | 30106 |
| Polygon | 30109 |
| Arbitrum | 30110 |
| Optimism | 30111 |
| Solana | 30168 |
| Base | 30184 |
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.