LayerZero DVN Config Decoder
Decode a LayerZero V2 ULN (DVN) config — the raw bytes from getConfig(), or a full setConfig(...) calldata — into human-readable Confirmations, Required/Optional DVN lists resolved to provider names, and Optional DVN Threshold.
Pick the chain the getConfig()/setConfig() call was made on — this is the local chain the DVN addresses are deployed on, not necessarily the remote eid a setConfig() entry targets (shown as "Target" when decoding calldata).
How to use the LayerZero DVN Config Decoder
- Pick the chain the config is for — this is what lets DVN addresses resolve to real provider names.
- Paste the hex you have: raw
getConfig()bytes, or a fullsetConfig(...)calldata. The tool detects which one it is. - Review the decoded Confirmations, Required/Optional DVNs, and Threshold — check for an "Unknown DVN" or threshold warning if something looks off.
How This Tool Works
Pick the chain the getConfig() or setConfig() call itself was made ON — the local Endpoint's chain — not the remote chain a decoded entry's config applies to. DVN addresses are per-chain deployments, so the same provider has a different address on every chain, and this local chain is what lets the tool resolve addresses to real provider names. This is NOT the same as the remote eid shown in a decoded entry's "Target" label — that's the destination the pathway verifies messages for, not where the DVN addresses themselves live.
Paste the hex you have: either the raw bytes returned by calling getConfig(oapp, lib, eid, 2) on a block explorer's Read Contract tab, or a full setConfig(...) calldata copied from a Safe transaction queue or an explorer's Decode Input Data tab. The tool detects which shape it is automatically.
Confirmations, Required DVNs, Optional DVNs, and the Optional DVN Threshold appear as soon as decoding succeeds — each DVN address is shown with its resolved provider name (e.g. "LayerZero Labs") when it's found in LayerZero's official DVN registry for the selected chain, or "Unknown DVN" if it isn't (which is normal for a custom or private DVN, not necessarily a mistake).
If the pasted calldata includes multiple config entries (e.g. one setConfig call configuring several remote chains, or an Executor config alongside the ULN config), each is shown separately — Executor config entries are noted but not decoded, since this tool covers ULN (DVN) config specifically.