$1,000,000 in security audit grants are live now, Apply here →

← Resource Hub

LayerZero OFT Security Checklist: OFTs and OFT Adapters

By the Guardian team Updated 6 min read

LayerZero OFT Security Checklist: OFTs and OFT Adapters

Quick answer. Check the contract type (one lockbox adapter at most), matching shared decimals, reciprocal peers and two or more independent DVNs. Then check enforced gas, multisig roles, rate limits, a pause, and that supply stays backed on every chain.

Watch: LayerZero OFT Security Checklist: OFTs and OFT Adapters 1:48
Video transcript

A LayerZero OFT lets one token live on many chains. The risk sits in what your team adds and configures.

New tokens are OFTs everywhere. Existing tokens get an adapter on their home chain. Never deploy more than one lockbox, or risk permanent token loss.

Shared decimals, six in the vanilla OFT, must match everywhere, or LayerZero warns of double spending. Read local decimals from the token, not a constructor argument.

Configure before you set peers, then set them both ways to real addresses. Put both roles behind a multisig. Use two or more independent DVNs.

The Kelp DAO exploit shows what a single DVN can cost. One forged message released 116,500 rsETH.

Profile enforced gas. Guardian found composed messages needing about 230 thousand gas against an 80 thousand limit. Weigh inbound and outbound rate limits, and keep a pauser on every chain.

Extra minters, burns outside the bridge and migrations can leave supply unbacked. Continuously reconcile lockbox balance against remote supply, alerting on any gap.

When adding DVNs, update the send side, let messages drain, then update the receive side. The reverse stalls in-flight messages.

Guardian audited USDT0's OFT architecture in January 2025 and has verified each rollout since. That is more than 45 engagements across more than 25 chains.

Read the full checklist, or talk to Guardian before your OFT goes multichain.

A LayerZero OFT lets one token live on many chains. It burns or locks on the source chain and mints or unlocks on the destination.

Teams usually build on LayerZero's contracts. The risk sits in what each team adds and configures: decimals, peers, roles, gas, limits and migrations.

This checklist draws on LayerZero's documentation and Guardian's public USDT0 reports. It pairs with our deployment verification checklist, which covers bytecode and per-chain configuration.

OFT vs OFT Adapter

An OFT is the token itself, with bridge logic built in. An OFT adapter wraps a token that already exists.

LayerZero's integration checklist maps each case to a contract:

Your tokenUse
NewOFT on every chain
Existing, mintable and burnableMint-and-burn adapter where it lives, OFT elsewhere
Existing, not mintableLockbox adapter on its home chain, OFT elsewhere
Native gas tokenNative lockbox adapter
  • One lockbox, ever. "There can only be one OFT Adapter lockbox in your omnichain deployment." More break unified liquidity and can lose tokens permanently.
  • No fee-on-transfer or rebasing tokens, unless _debit and _credit are overridden to measure real balance changes.
  • Know the underlying token's controls. If USDT's Ethereum fee were switched on, the adapter would hold less than users were credited (L-02).
  • Plan for its pause. A USDT pause on Ethereum would make in-flight messages fail (L-07).
  • Lock down minting. LayerZero says a mint-and-burn adapter "requires careful access control since it can mint tokens."

Our weird ERC-20 checklist lists other token behaviors to rule out.

Decimals and Dust

OFTs send amounts in shared decimals, 6 in the vanilla implementation. Each chain converts back to its own local decimals.

Amounts are floored to the conversion rate before sending. The remainder, called dust, stays with the sender.

  • Same shared decimals everywhere. Otherwise, LayerZero warns, "amount conversion will vary by orders of magnitude and allow double spending."
  • Read local decimals from the token. Do not pass them in as a constructor argument.
  • Check the supply cap. Amounts travel as a uint64. With 6 shared decimals, that caps supply at about 18.4 trillion tokens.
  • Check uint64 chains. On Solana and Aptos, the converted local amount must fit too.
  • Set minAmountLD. It is the slippage floor, and integrations should use it to reject short deliveries.

The constructor point comes from a real review. Guardian's first USDT0 OFT review found an unchecked decimals parameter that could deliver amounts "orders of magnitude higher than the amount sent" (L-04, fixed).

Peers, Owners and Delegates

Two roles control an OFT. The owner sets peers, enforced options and the delegate. The delegate sets DVNs, libraries and message recovery on the endpoint.

  • Configure first, then peer. LayerZero warns that setPeer opens the contract to messages.
  • Reciprocal, real peers. Set both directions on every pathway, to deployed addresses. Never leave a placeholder such as 0x...dead.
  • Multisig for both roles. Set the delegate before transferring ownership. Afterward, the old key cannot call setDelegate.
  • Renouncing is not a lock. It freezes peers and options, but the delegate keeps its powers.
  • Two or more independent DVNs. LayerZero says production pathways should set requiredDVNCount >= 2, from different operators.
  • Change confirmations on both sides together. Cutting Rootstock's confirmations on one side first would block messages until the other matched (I-01).

The Kelp DAO exploit shows what a single DVN can cost: 116,500 rsETH released by one forged message.

Enforced options and message handling

  • Profile gas per message type and chain. Guardian found long composed messages could need about 230k gas, against an 80k enforced limit (I-06).
  • Handle msg.value. Value sent along with lzReceive can be stranded in the contract (L-06).
  • Guard lzCompose. It has no built-in checks. Verify the endpoint and source before changing state.
  • Block undeliverable recipients. Transfers to the Tether contract itself would be stuck on the destination (L-01).

Rate Limits and Pausing

Rate limits cap how much can cross in a time window. A pause stops the bridge while you investigate.

LayerZero's basic rate limiter sets a limit per destination and reverts above it. LayerZero notes limits "may not be suitable for all OFT applications."

LayerZero's Stablecoin OFT goes further:

  • Separate outbound and inbound limits per destination, with capacity that refills over a window.
  • "Outbound rate limits cap the contagion risk to other chains." Inbound limits cap damage from a compromised chain.
  • A pause per destination, plus a default pause.
  • Separate pauser and unpauser roles, so "a compromised pauser key cannot also undo a legitimate security pause."

Then check:

  • Limits are sized to normal flow on each route, and a transfer over the cap reverts.
  • checkpointRateLimits is called before limits or windows change, as LayerZero's docs instruct.
  • A pauser exists on every chain and can act within minutes.
  • You know what pauses when the underlying token pauses.

Supply Accounting Across Chains

The OFT invariant is simple. Tokens burned or locked on the source equal tokens minted or unlocked on the destination, so total supply holds.

In an adapter mesh, the lockbox must hold at least the combined supply on every other chain. Guardian's USDT0 reports show how that breaks:

  • Extra minters. An admin who can add minters can create unbacked tokens (I-07). LayerZero's Stablecoin OFT guidance: mint rights for the OFT contract only, "never to EOAs."
  • Burns outside the bridge. Redeeming tokens on a remote chain leaves their backing in the adapter (L-05).
  • Migrations. A 2025 Polygon playbook would have sent backing USDT to a multisig, not the adapter. It was fixed before execution.
  • Forged messages. Kelp's lockbox released 116,500 rsETH on a single forged message.

So reconcile continuously: lockbox balance against remote supply, with an alert on any gap.

Upgrades and Migrations

  • Initialize atomically. Deploy and initialize proxies in one transaction. Call _disableInitializers() in implementation constructors.
  • Protect storage layout. Guardian flagged missing storage gaps in USDT's Arbitrum upgrade (L-01).
  • Keep signed approvals valid. In the same upgrade, a token rename would invalidate permits signed but not yet used (L-05).
  • Plan for in-flight transfers. Gateway transfers sent just before the cutover could not be credited (L-03).
  • Test the rollback. On Polygon, pre-generated rollback calldata would have failed (L-01).
  • Add DVNs in order. Update the send side, let messages drain, then the receive side. The reverse stalls in-flight messages.

See upgradeable contract vulnerabilities for the wider list.

How Guardian Reviews OFTs

Guardian audited USDT0's OFT architecture in January 2025: the adapter and token extension that every later USDT0, XAUT0, USAT and CNHT0 deployment inherits.

Since February 2025, Guardian has verified each USDT0 rollout: peers, DVN sets, confirmations, enforced gas and every queued multisig transaction. That is 45+ engagements across 25+ chains.

For LayerZero itself, Guardian has reviewed OFT code on EVM, Solana and Canton. The USDT0 case study and LayerZero client story have the details.

Frequently Asked Questions

What is the difference between an OFT and an OFT adapter?

An OFT is the token itself, with bridge logic built in: it burns on the source chain and mints on the destination. An adapter wraps an existing token, locking it on its home chain while OFTs mint elsewhere.

Can I deploy more than one OFT adapter?

Not more than one lockbox adapter. LayerZero says multiple lockboxes break unified liquidity and can cause permanent token loss. Mint-and-burn adapters are different: LayerZero allows several in the same mesh.

What are shared decimals in a LayerZero OFT?

The precision every chain uses to send amounts, 6 in the vanilla OFT. Each chain converts to its local decimals and leaves sub-unit dust with the sender. Shared decimals must match on every deployment.

Does a LayerZero OFT need rate limits?

Not always: LayerZero says they may not suit every application. For a high-value token, inbound and outbound limits cap what a forged message or a compromised chain can move, so most issuers should weigh them.

Sources

Audit your OFT before it goes multichain

Guardian reviews OFT code, wiring and every deployment transaction, the work behind USDT0's rollout across 25+ chains.