Skip to content
3F Docs

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.

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.

Terminal window
curl -s https://docs.3f.xyz/deployments.json \
| jq '.contracts[] | select(.address | ascii_downcase == "0x4e013ca8ff612a58f53c822904cdd0ec538a4a4f")'

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:

  1. Known address. Look it up in contracts by chainId and lowercased address. The entry carries kind, layer, a human label, the integration it belongs to and, for position manager tiers, the leverage, symbol, LTVs and sibling addresses.
  2. Beacon proxy. If unknown, read the EIP-1967 beacon slot of the address and match it against entries with layer: "beacon". Their of field is the kind of every proxy pointing at that beacon, which classifies instances the factories created after the docs were last updated.
  3. Transparent proxy. Otherwise read the EIP-1967 implementation slot and match it against entries with layer: "implementation", which also gives the version.
  4. Still unknown. Treat the target as unrecognised and surface it as such.

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.

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.

ContractModelRoleIndexValuePermissions
FacilityOwnableRolesFACILITATOR_ROLE01Facilitates intent operations: create, lock, resolve, set caps, bind funds and requests, and drive fund, request, position manager and swap operations.
GUARDIAN_ROLE12Signs guardian-gated intents and swaps (EIP-712 quorum).
COMPLIANCE_ROLE24Pauses and unpauses the Facility and reverts deposits.
PositionManagerOwnableRolesMINTER_ROLE01Mints and burns shares via deposit, withdraw and burn (held by the Facility).
CURATOR_ROLE12Sets the supply and withdrawal queues.
REBALANCER_ROLE24Executes rebalancing operations (held by the Retargetter bound to this manager).
RetargetterOwnableRolesREBALANCER_ROLE01Semi-trusted operator driving retargeting operations. Distinct from the PositionManager's REBALANCER_ROLE (index 2).
CONSUMER_ROLE12Lender-facing surface allowed to consume offers.
BorrowOffersRegistryOwnableRolesPROPOSER_ROLE01Posts offers on any MorphoBorrowPosition.
GUARDIAN_ROLE12Revokes offers on any MorphoBorrowPosition: the veto inside the timelock window and the kill switch for a bad standing offer.
RequestOwnableRolesPULLER_ROLE01Pulls funds from the request via pullFunds (held by the Facility).
CONSUMER_ROLE12Consumes signed offers and authorizes minting via consume and authorizeMinting.
MorphoFlashLoanRequestOwnableRolesEXECUTOR_ROLE01Executes flash loans.
TransferGuardOwnableRolesCOMPLIANCE_ROLE01Manages address statuses (blocklist and whitelist).
PAUSER_ROLE12Pauses and unpauses guarded tokens.
WrappedAssetOwnableRolesISSUER_ROLE01Asset issuer authorized to mint wrapper tokens.
SENDER_ROLE12Authorized to send wrapper tokens. Transfers are restricted to protocol contracts and authorized lending protocols; liquidators can still burn to receive the underlying.
RECEIVER_ROLE24Authorized to receive wrapper tokens from anyone, including senders without SENDER_ROLE.
SuperstateRestrictedWrappedAsset
Inherits WrappedAsset; same roles.
OwnableRolesISSUER_ROLE01Asset issuer authorized to mint wrapper tokens.
SENDER_ROLE12Authorized to send wrapper tokens. Transfers are restricted to protocol contracts and authorized lending protocols; liquidators can still burn to receive the underlying.
RECEIVER_ROLE24Authorized to receive wrapper tokens from anyone, including senders without SENDER_ROLE.
CentrifugeFundOwnableRolesOPERATOR_ROLE01Operator: settles fund state after external operations.
DEPOSITOR_ROLE12Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters).
ParetoFundOwnableRolesOPERATOR_ROLE01Operator: settles fund state after external operations.
DEPOSITOR_ROLE12Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters).
USCCFundOwnableRolesOPERATOR_ROLE01Operator: settles fund state after external operations.
DEPOSITOR_ROLE12Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters).
MidasFundOwnableRolesOPERATOR_ROLE01Operator: settles fund state after external operations.
DEPOSITOR_ROLE12Depositor: creates, cancels, commits, unlocks and recovers fund orders (held by the Facility and the Retargetters).
PAYMENT_ROLE24Confirms bond receipts, or skips the bond leg, via unlockInstantRedeem. Can be an EOA distinct from the operator.
VAULT_MANAGER_ROLE38Manages the Midas vaults. Can be an EOA distinct from the operator.
Timelock
Solady Timelock. Roles are indices passed to setRole, not bitmasks. Owns the beacons and proxy admins, so proposals here are implementation upgrades.
EnumerableRolesADMIN_ROLE00Sets the minimum delay and manages other roles.
PROPOSER_ROLE11Proposes operations.
EXECUTOR_ROLE22Executes operations once their delay has elapsed.
CANCELLER_ROLE33Cancels 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.