The /bridges/ page now shows the LayerZero DVN quorum per dependency (e.g. 2-of-2, 4-of-4, flagged red if 1-of-1), read onchain via EndpointV2.getConfig(oapp, receiveLib, srcEid, 2) → UlnConfig. See PR #323.
Two LayerZero rows could not be resolved with the standard single-OApp read and are marked TODO on the page:
1. Centrifuge JAAA (centrifuge-jaaa)
JAAA does not bridge via a plain OFT/OFT-Adapter — it uses a hub-and-spoke MultiAdapter that runs LayerZero and Chainlink CCIP as a 2-of-2 quorum. The report states the LZ side uses 5 DVNs, but the DVN set is configured on the MultiAdapter's LZ transport contract, not a standard OApp, so getConfig on the token address does not return it.
- TODO: identify the MultiAdapter's LayerZero transport/OApp address, read its
UlnConfig, and record the DVN quorum + provider set. Confirm the 5-DVN claim and how it composes with the 2-of-2 MultiAdapter quorum.
- Refs:
reports/report/centrifuge-jaaa.md, MultiAdapter 0x35C837F0A54B715a23D193E1476BFC9BC30073BE.
2. Across Protocol (across-protocol)
Across's assessed asset is the V2 LP token (not bridged); its LayerZero integration (model: transport) moves bridged assets through Across's own routes (OFT support, PRs #1031/#1032). There is no single token OApp whose DVN config represents the dependency.
- TODO: determine whether a representative DVN quorum is meaningful here (per-asset OFT routes may each have their own config), or mark the row N/A with a note.
- Refs:
reports/report/across-protocol.md.
Method (for whoever picks this up)
lib = EndpointV2.getReceiveLibrary(oapp, srcEid)
raw = EndpointV2.getConfig(oapp, lib, srcEid, 2) # 2 = CONFIG_TYPE_ULN
UlnConfig = (confirmations, requiredDVNCount, optionalDVNCount, optionalDVNThreshold, requiredDVNs[], optionalDVNs[])
DVN address → provider name via https://metadata.layerzero-api.com/v1/metadata (per-chain dvns map). EndpointV2 (Ethereum) = 0x1a44076050125825900e736c501f859c50fE728c; Katana eid = 30375. The exploit-relevant direction is the receive config on the chain where tokens are minted.
Once resolved, add a dvn object to the row in src/data/bridges.json (same shape as the other LayerZero rows) and drop the TODO.
The
/bridges/page now shows the LayerZero DVN quorum per dependency (e.g.2-of-2,4-of-4, flagged red if1-of-1), read onchain viaEndpointV2.getConfig(oapp, receiveLib, srcEid, 2)→UlnConfig. See PR #323.Two LayerZero rows could not be resolved with the standard single-OApp read and are marked TODO on the page:
1. Centrifuge JAAA (
centrifuge-jaaa)JAAA does not bridge via a plain OFT/OFT-Adapter — it uses a hub-and-spoke
MultiAdapterthat runs LayerZero and Chainlink CCIP as a 2-of-2 quorum. The report states the LZ side uses 5 DVNs, but the DVN set is configured on the MultiAdapter's LZ transport contract, not a standard OApp, sogetConfigon the token address does not return it.UlnConfig, and record the DVN quorum + provider set. Confirm the 5-DVN claim and how it composes with the 2-of-2 MultiAdapter quorum.reports/report/centrifuge-jaaa.md, MultiAdapter0x35C837F0A54B715a23D193E1476BFC9BC30073BE.2. Across Protocol (
across-protocol)Across's assessed asset is the V2 LP token (not bridged); its LayerZero integration (
model: transport) moves bridged assets through Across's own routes (OFT support, PRs #1031/#1032). There is no single token OApp whose DVN config represents the dependency.reports/report/across-protocol.md.Method (for whoever picks this up)
DVN address → provider name via
https://metadata.layerzero-api.com/v1/metadata(per-chaindvnsmap). EndpointV2 (Ethereum) =0x1a44076050125825900e736c501f859c50fE728c; Katana eid =30375. The exploit-relevant direction is the receive config on the chain where tokens are minted.Once resolved, add a
dvnobject to the row insrc/data/bridges.json(same shape as the other LayerZero rows) and drop the TODO.