This feature was introduced with version
0.10.0 of the Registry App; version 0.9.0 of the
utility-registry-v0 package added the underlying isPaused field.A paused instrument cannot be interacted with by non-registrar parties, with narrow exceptions
where the registrar itself is the counterparty. The registrar can still administer the
instrument configuration (including unrelated fields) while it is paused.Overview
EachInstrumentConfiguration carries an isPaused : Optional Paused field. Some Paused marks
the instrument paused; None marks it unpaused (the default for newly created instruments).
There is no dedicated pause/unpause choice. Instead, the registrar toggles isPaused through the
same RegistrarService_ArchiveAndCreateInstrumentConfiguration choice used for any other
configuration change — archiving the current InstrumentConfiguration and creating a replacement
with the new isPaused value. Every other field (identifiers, credential requirements, block list
setting, provider app reward beneficiaries) except the force transfer setting can be changed in the
same call, so pausing an instrument doesn’t prevent the registrar from administering it.
Pausing is scoped to a single instrument. Other instruments under the same registrar are
unaffected.
Pausing and unpausing
- dApp UI
- API
1
Open instrument management
As the registrar, navigate to Registry → Management → Instrument Management and
select the instrument.
2
Open the modify dialog
Click Modify on the instrument’s details.
3
Toggle Pause Instrument
Check (or uncheck) Pause Instrument. Other fields on the same form can be changed at
the same time.
4
Submit
Click Modify to submit. On success, the UI shows “Successfully modified instrument
configuration” and the instrument’s new pause state is reflected immediately.
Enforcement while paused
Pause enforcement is applied at the point where a non-registrar party would act on the instrument. Requests, offers/acceptances, allocations, and two-step/self transfers all checkisInstrumentPaused before proceeding:
Error messages
Backwards compatibility
Parties don’t need to be running the latest app version to be protected by a pause. Pausing
blocks an instrument for everyone, regardless of which package version a counterparty’s client
was built against.
isPaused field and its enforcement were introduced in version 0.10.0 of the
utility-registry-app-v0 package, but all versions of a package are required to be Smart Contract
Upgrade (SCU) compatible with one another. In practice this means:
- A counterparty submitting commands from an older, pre-
0.10.0client still has its choices (acceptMint,AllocationFactory_RequestBurn, transfer/self-transfer flows, and so on) run against the currently vetted package on the participant, which is the one that contains theisInstrumentPausedcheck — not the older package the client code was compiled against. - There is no old-client code path that bypasses the pause check: the instrument configuration payload is read fresh on every choice exercise, so an older client cannot “see” a stale, unpaused configuration.
- Older clients that have no concept of
isPausedsimply have no way to unpause an instrument themselves — only a registrar exercisingRegistrarService_ArchiveAndCreateInstrumentConfiguration(via a client that supports the field) can change the pause state.
Related
- Blocklist — another instrument-level restriction enforced the same
way, via
checkBlockListonInstrumentConfiguration.