SettleMint
Reference

System upgrade comparison API

Read your system's upgrade readiness through the DALP Platform API. Compare every deployed component against the network directory, see which differ, and confirm what an upgrade will change before you run it.

Before an operator upgrades a deployed system, one question has to be answered with evidence: what exactly will change, and is the system ready for it? This endpoint answers it. It compares every component installed on your system against the network directory, the on-chain registry that records the latest approved implementations for the active network, and returns the difference as a structured, per-component report. You read it, confirm the change set, and only then start the upgrade. That review step gives an operations or audit team a concrete record of what an upgrade touches before anything changes on chain.

The surface is read-only. It reports the current state of your system against the directory and changes nothing. To act on the result, see Upgrade operations and compatibility, which covers starting a migration and streaming its progress.

Endpoint

EndpointUse it for
GET /api/v2/system/migration/compareCompare the active system's deployed components against the network directory, grouped by category.

The response is a single comparison object, not a paginated collection. The active organisation and system context bound the read, as described in Organization and system scope. The comparison covers the active system only.

Reading the comparison is a system-management operation. The caller must be a platform administrator or hold the system manager or admin role on the indexed system.

Response fields

The response has two parts: a summary that totals the work across the whole system, and groups that break the components down by category so you can see what changes and where.

Summary

FieldTypeDescription
systemAddressstringThe system contract address that was compared.
directoryAddressstringThe directory contract address used as the reference for the latest implementations.
totalComponentsnumberThe number of components considered in the comparison.
upToDatenumberComponents whose deployed implementation already matches the directory.
updateAvailablenumberInstalled components whose implementation differs from the directory. The upgrade workflow acts on these.
pendingInstallnumberComponents present in the directory but not yet installed on this system. The upgrade workflow installs these.
pendingHiddenSyncnumberHidden infrastructure components the workflow installs or updates silently. Counted so a sync-only upgrade still has a trigger.
totalAffectedTokensnumberThe total number of tokens affected across all factory-backed components that need an upgrade.

Component

Each component in a group describes one part of the system and how its deployed state compares to the directory.

FieldTypeDescription
keystringThe directory key or type identifier for this component, such as SYSTEM, COMPLIANCE, or bond.
labelstringA human-readable name, such as System Proxy or Bond Factory.
groupstringThe logical category, such as core, identity, compliance, tokenFactories, addons, or complianceModules.
statusstringThe component's overall state: up-to-date, update-available, or new. See Component status.
deployedAddressstring or nullThe implementation address currently deployed for this component, or null when nothing is deployed.
directoryAddressstring or nullThe implementation address the directory expects, or null when the component is not registered there.
isExperimentalbooleanWhether the component is an experimental directory type. Experimental components are surfaced but excluded from a bulk upgrade unless the operator opts in.
affectedTokenCountnumberFor a factory-backed component, the number of tokens its upgrade affects.
factoryImplementationStatusstringFor a factory-backed component, registry-layer drift between the installed factory and the directory. Absent for singleton components.
instanceImplementationStatusstringFor a factory-backed component, drift in the implementation that factory-deployed proxies delegate to. Can also be unknown when a live read of the factory implementation failed.
skippedForAuthorityobjectWork this admin cannot clear by re-running the migration without additional role authority. See Authority-blocked work.

The factory-layer and instance-layer address pairs (factoryDeployedAddress / factoryDirectoryAddress and instanceDeployedAddress / instanceDirectoryAddress) accompany factory-backed components so you can read both the current and expected addresses at each layer.

Component status

The status field tells you what an upgrade would do to each component.

StatusMeaningWhat an upgrade does
up-to-dateThe deployed implementation already matches the directory.Nothing.
update-availableThe component is installed, but its implementation differs from the directory.Upgrade in place.
newThe component exists in the directory but is not yet installed on this system.Install.

For factory-backed components, instanceImplementationStatus can carry a fourth value, unknown. It means the directory records an expected instance implementation, but a live read of the factory's current implementation failed, so the platform cannot confirm the two are in sync. Treat unknown as a signal to retry the comparison rather than as a confirmed match.

Authority-blocked work

Some upgrade work cannot proceed on a re-run alone because the acting admin lacks the role authority to grant the permissions the step needs. The comparison reports this separately in skippedForAuthority so it is never mistaken for ordinary pending work.

FieldTypeDescription
countnumberThe number of items blocked because the acting admin lacks granting authority.
tokenAddressesarrayThe affected token addresses, when the blocked work maps to specific tokens.

A non-zero count means re-running the migration will not clear those items. An admin with the required granting authority has to act first.

Compare deployed components against the directory

GET /api/v2/system/migration/compare returns the summary and the grouped components in one read.

curl "https://your-platform.example.com/api/v2/system/migration/compare" \
  -H "x-api-key: YOUR_API_KEY"
{
  "systemAddress": "0x1111111111111111111111111111111111111111",
  "directoryAddress": "0x2222222222222222222222222222222222222222",
  "summary": {
    "totalComponents": 24,
    "upToDate": 20,
    "updateAvailable": 2,
    "pendingInstall": 1,
    "pendingHiddenSync": 0,
    "totalAffectedTokens": 12
  },
  "groups": [
    {
      "id": "core",
      "label": "Core System",
      "components": [
        {
          "key": "SYSTEM",
          "label": "System Proxy",
          "group": "core",
          "status": "up-to-date",
          "deployedAddress": "0x3333333333333333333333333333333333333333",
          "directoryAddress": "0x3333333333333333333333333333333333333333"
        }
      ]
    },
    {
      "id": "tokenFactories",
      "label": "Token Factories",
      "components": [
        {
          "key": "bond",
          "label": "Bond Factory",
          "group": "tokenFactories",
          "status": "update-available",
          "deployedAddress": "0x4444444444444444444444444444444444444444",
          "directoryAddress": "0x5555555555555555555555555555555555555555",
          "affectedTokenCount": 12
        }
      ]
    }
  ]
}

The example shows a system that is mostly current: twenty components match the directory, two installed components have an upgrade available, and one new component is ready to install. The bond factory upgrade affects twelve tokens, which matches totalAffectedTokens.

Errors

StatusErrorWhen it happens
400DALP-0450The directory contract address is not configured for the active network, so there is no reference to compare against. Set the directory address in the network configuration, then retry.
404DALP-0451The directory address is configured, but the indexer has not yet produced the directory record needed for comparison. Retry once indexing catches up.

For the full error model and how to read the why and fix fields, see Error reference. Both errors are transient configuration or indexing states rather than problems with the comparison itself, so a retry usually clears them once the underlying state settles.

When to use it

The comparison is the safe first step of any upgrade. Read it when you need to:

  • Confirm the exact change set before starting an upgrade, so the migration holds no surprises.
  • Audit how far a deployed system has drifted from the latest implementations on its network.
  • Identify which components need an upgrade, which are new installs, and how many tokens each factory upgrade affects.
  • Catch work that an admin cannot clear without additional role authority, by reading skippedForAuthority before a migration run.
  • Build an operator view that shows upgrade readiness across the system, grouped by component category.

To start and track the upgrade itself, see Upgrade operations and compatibility. To understand how the active organisation and system bound every read, see Organization and system scope.

On this page