Deployments API
The deployments pages are generated from a single typed config. The same config is published as JSON so tooling such as a Safe transaction verifier, a dashboard or a monitoring bot can resolve any address to what it is without scraping HTML.
Endpoints
Section titled “Endpoints”| Endpoint | Description |
|---|---|
/deployments.json |
Every deployed address on every network, tagged with its contract kind and layer, plus Morpho market ids and the role bit values behind grantRoles on each contract. |
/search-addresses.json |
A flat exact-match index (address or market id to label and docs link) that powers the site search. Prefer deployments.json for anything beyond a lookup. |
Both endpoints are static files regenerated on every deploy, and both are served
with Access-Control-Allow-Origin: *, so they can be fetched from a browser on
any origin as well as from a server.
curl -s https://docs.3f.xyz/deployments.json \ | jq '.contracts[] | select(.address | ascii_downcase == "0x4e013ca8ff612a58f53c822904cdd0ec538a4a4f")'Why kinds matter
Section titled “Why kinds matter”Many selectors are shared across contracts. grantRoles(address,uint256) exists
on the Facility, every PositionManager, every fund, the TransferGuard and more,
and the uint256 bitmask means something different on each. The to address
of a call is therefore the identifier that disambiguates it: resolve
(chainId, to) to a kind, then decode the selector and arguments against that
kind’s role table.
Suggested resolution order for an arbitrary address:
- Known address. Look it up in
contractsbychainIdand lowercasedaddress. The entry carrieskind,layer, a humanlabel, the integration it belongs to and, for position manager tiers, the leverage, symbol, LTVs and sibling addresses. - Beacon proxy. If unknown, read the EIP-1967 beacon slot of the address
and match it against entries with
layer: "beacon". Theiroffield is the kind of every proxy pointing at that beacon, which classifies instances the factories created after the docs were last updated. - Transparent proxy. Otherwise read the EIP-1967 implementation slot and
match it against entries with
layer: "implementation", which also gives theversion. - Still unknown. Treat the target as unrecognised and surface it as such.
Schema
Section titled “Schema”Top-level fields of deployments.json:
| Field | Contents |
|---|---|
schemaVersion |
Integer, bumped on breaking changes to this shape. |
contractsVersion |
Contracts release the role values were read from. |
networks |
id, chainId, label, explorer, status per network. |
kinds, layers |
The distinct kind and layer values present in contracts. |
contracts |
One entry per address: chainId, network, checksummed address, kind, layer, optional of (beacons), version (implementations), label, integration, section, notes, tier fields, docs and explorer links. An address listed in several tables appears once, under the first table that lists it. |
markets |
Morpho market ids with chainId, label, integration and links. |
roleModels |
For each access-control model, the function signatures that change access. |
roles |
Per kind: the model (OwnableRoles, EnumerableRoles, Ownable, none), the source file and each role’s name, index, on-chain value and description. |
layer values: proxy (what transactions target), implementation, beacon,
factory, singleton, external and account.
Role bit values
Section titled “Role bit values”Solady OwnableRoles stores roles as a bitmask where role n has value
1 << n; a grantRoles argument may combine several. The Upgrade Timelock uses
Solady EnumerableRoles instead, where the role is a plain index passed to
setRole. The table below is rendered from the same registry that feeds the
JSON.
| Contract | Model | Role | Index | Value | Permissions |
|---|---|---|---|---|---|
Facility | OwnableRoles | FACILITATOR_ROLE | 0 | 1 | Facilitates intent operations: create, lock, resolve, set caps, bind funds and requests, and drive fund, request, position manager and swap operations. |
GUARDIAN_ROLE | 1 | 2 | Signs guardian-gated intents and swaps (EIP-712 quorum). | ||
COMPLIANCE_ROLE | 2 | 4 | Pauses and unpauses the Facility and reverts deposits. | ||
PositionManager | OwnableRoles | MINTER_ROLE | 0 | 1 | Mints and burns shares via deposit, withdraw and burn (held by the Facility). |
CURATOR_ROLE | 1 | 2 | Sets the supply and withdrawal queues. | ||
REBALANCER_ROLE | 2 | 4 | Executes rebalancing operations (held by the Retargetter bound to this manager). | ||
Retargetter | OwnableRoles | REBALANCER_ROLE | 0 | 1 | Semi-trusted operator driving retargeting operations. Distinct from the PositionManager's REBALANCER_ROLE (index 2). |
CONSUMER_ROLE | 1 | 2 | Lender-facing surface allowed to consume offers. | ||
BorrowOffersRegistry | OwnableRoles | PROPOSER_ROLE | 0 | 1 | Posts offers on any MorphoBorrowPosition. |
GUARDIAN_ROLE | 1 | 2 | Revokes offers on any MorphoBorrowPosition: the veto inside the timelock window and the kill switch for a bad standing offer. | ||
Request | OwnableRoles | PULLER_ROLE | 0 | 1 | Pulls funds from the request via pullFunds (held by the Facility). |
CONSUMER_ROLE | 1 | 2 | Consumes signed offers and authorizes minting via consume and authorizeMinting. | ||
MorphoFlashLoanRequest | OwnableRoles | EXECUTOR_ROLE | 0 | 1 | Executes flash loans. |
TransferGuard | OwnableRoles | COMPLIANCE_ROLE | 0 | 1 | Manages address statuses (blocklist and whitelist). |
PAUSER_ROLE | 1 | 2 | Pauses and unpauses guarded tokens. | ||
WrappedAsset | OwnableRoles | ISSUER_ROLE | 0 | 1 | Asset issuer authorized to mint wrapper tokens. |
SENDER_ROLE | 1 | 2 | Authorized to send wrapper tokens. Transfers are restricted to protocol contracts and authorized lending protocols; liquidators can still burn to receive the underlying. | ||
RECEIVER_ROLE | 2 | 4 | Authorized to receive wrapper tokens from anyone, including senders without SENDER_ROLE. | ||
SuperstateRestrictedWrappedAssetInherits WrappedAsset; same roles. | OwnableRoles | ISSUER_ROLE | 0 | 1 | Asset issuer authorized to mint wrapper tokens. |
SENDER_ROLE | 1 | 2 | Authorized to send wrapper tokens. Transfers are restricted to protocol contracts and authorized lending protocols; liquidators can still burn to receive the underlying. | ||
RECEIVER_ROLE | 2 | 4 | Authorized to receive wrapper tokens from anyone, including senders without SENDER_ROLE. | ||
CentrifugeFund | OwnableRoles | OPERATOR_ROLE | 0 | 1 | Operator: settles fund state after external operations. |
DEPOSITOR_ROLE | 1 | 2 | Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters). | ||
ParetoFund | OwnableRoles | OPERATOR_ROLE | 0 | 1 | Operator: settles fund state after external operations. |
DEPOSITOR_ROLE | 1 | 2 | Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters). | ||
USCCFund | OwnableRoles | OPERATOR_ROLE | 0 | 1 | Operator: settles fund state after external operations. |
DEPOSITOR_ROLE | 1 | 2 | Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters). | ||
MidasFund | OwnableRoles | OPERATOR_ROLE | 0 | 1 | Operator: settles fund state after external operations. |
DEPOSITOR_ROLE | 1 | 2 | Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters). | ||
PAYMENT_ROLE | 2 | 4 | Confirms bond receipts, or skips the bond leg, via unlockInstantRedeem. Can be an EOA distinct from the operator. | ||
VAULT_MANAGER_ROLE | 3 | 8 | Manages the Midas vaults. Can be an EOA distinct from the operator. | ||
TimelockSolady Timelock. Roles are indices passed to setRole, not bitmasks. Owns the beacons and proxy admins, so proposals here are implementation upgrades. | EnumerableRoles | ADMIN_ROLE | 0 | 0 | Sets the minimum delay and manages other roles. |
PROPOSER_ROLE | 1 | 1 | Proposes operations. | ||
EXECUTOR_ROLE | 2 | 2 | Executes operations once their delay has elapsed. | ||
CANCELLER_ROLE | 3 | 3 | Cancels pending operations. |
Owner only (Solady Ownable, no roles): MorphoBorrowPosition (Owner is the PositionManager that created it), MorphoRebalancer, RequestWhitelist (Lives in the 3f-request-whitelist repository), UpgradeableBeacon (Owner is the Upgrade Timelock; upgradeTo swaps the implementation for every proxy).
No owner: Vault, IntentDescriptor, RetargetterQuoter, MorphoFlashLoanAdapter, SyncDeposit, ERC1967Factory, CentrifugeFundFactory, USCCFundFactory, ParetoFundFactory, MidasFundFactory, PositionManagerFactory, MorphoBorrowPositionFactory, TransferGuardFactory, RequestFactory, MorphoFlashLoanRequestFactory, RetargetterFactory.
See Roles for what each role can do in context.