Documentation menu

Sending from Tempo

Tempo's LayerZero deployment uses the EndpointV2Alt fee model: messaging fees are paid in an ERC-20 fee token (LZD) rather than the chain's native value. The Omnisea bridges detect this automatically via endpoint.nativeToken() and adjust how they collect fees.

Receiving on Tempo is unaffected - a user sending Base -> Tempo pays fees in ETH on Base as usual. This page only concerns transfers whose source is Tempo.

Detect the fee token

const feeToken = await tempoClient.readContract({
  address: OFT_BRIDGE,
  abi: bridgeAbi,
  functionName: "endpointNativeToken",
});

const usesFeeToken = feeToken !== "0x0000000000000000000000000000000000000000";

On Base, Optimism, Arbitrum, Polygon, and BNB Chain this returns the zero address (pay with msg.value). On Tempo it returns the LZD token address.

The Tempo send flow

1. Quote normally

The quote still returns one number - but on Tempo it is denominated in LZD smallest units and already includes the fee-token protocol fee (fixedFeeTokenProtocolFee, 0.10 LZD):

const totalFee = await tempoClient.readContract({
  address: OFT_BRIDGE,
  abi: bridgeAbi,
  functionName: "quoteSendOFT",
  args: [DST_EID, representation, amount, recipient, isFirstTransfer, options],
});

2. Check LZD balance

The sender must hold at least totalFee LZD.

3. Approve the bridge for the fee

This is in addition to any token approval for originals:

await tempoWallet.writeContract({
  address: feeToken,
  abi: erc20Abi,
  functionName: "approve",
  args: [OFT_BRIDGE, totalFee],
});

4. Send with msg.value = 0

The Tempo endpoint rejects any native value:

await tempoWallet.writeContract({
  address: OFT_BRIDGE,
  abi: bridgeAbi,
  functionName: "sendOFT",
  args: [DST_EID, representation, amount, recipient, isFirstTransfer, options],
  value: 0n,
});

The bridge pulls exactly totalFee LZD, forwards LayerZero's share, and records the protocol fee - the same exact-fee rule applies, just in LZD.

Sending to Tempo

Always buy at least 1,500,000 lzReceive gas in your executor options for any route whose destination is Tempo. This covers destination execution including first-time representation creation on Tempo's execution environment.

Chain facts

Chain ID4217
LayerZero EID30410
EndpointV2 (Alt)0x20Bb7C2E2f4e5ca2B4c57060d1aE2615245dCc9C
RPChttps://rpc.tempo.xyz
Explorerhttps://explore.tempo.xyz
Native currency labelUSD
Feedback