Freezing participants
The Private Network operator can freeze a participant: an institution whose Rayls Sovereign chain (Privacy Node in the code) belongs to the Rayls Private Network. A frozen participant can't exchange messages, tokens or Enygma transfers with other participants until the operator unfreezes it. Its own chain keeps running, and nothing it holds is moved or burned.
To stop one token rather than a whole participant, see Freezing tokens.
What freezing does
Freezing sets the participant's status to FROZEN (3) in the participant registry on the Private Network Hub (ParticipantStorageV1). The Hub sends the updated record to every chain in the network, and each chain updates its copy of the participant list (ParticipantStorageReplicaV1).
In the code, FROZEN works like any status other than ACTIVE: the checks below only let active participants through. INACTIVE and NEW have the same effect.
Once a chain has the update:
| What | Effect |
|---|---|
| Messages between chains | Before a chain sends a cross-chain message, its endpoint checks that both the sending and the receiving participant are active. Messages from or to the frozen participant are refused with ParticipantStorageReplicaV1__ParticipantNotActive. |
| Enygma transfers and delivery versus payment (DvP) | Before a chain emits an Enygma transfer or a DvP operation, it checks that its own participant, and every destination participant, is active. The frozen participant can't send Enygma transfers or deposit, swap or withdraw anything in DvP, and the other chains refuse to send it Enygma transfers. |
| Broadcasts | A message one chain sends to all participants at once skips participants that aren't active. |
| Token registration | The Hub accepts a new token only from an active issuer. A frozen issuer's registrations fail on the Hub. |
| Keys on the Hub | The Hub accepts view keys, key agreements, view key escrow and spend keys only for active participants. The frozen participant can't update its keys. |
| Inside its own chain | Nothing changes. Its clients can keep transacting on its chain. |
| Messages from the Hub | Still delivered, including the participant and freeze updates the Hub sends. |
Each check runs on the chain that sends the message, against that chain's copy of the participant list. A freeze takes effect on a chain once the Hub's update has reached it through that chain's relayer.
Freezing doesn't remove anything on the Hub: the participant's record, its keys and its relayer's RELAYER role stay in place, and the operator's governance services can still decrypt its traffic.
Who can freeze
An account with the ADMIN role in the Hub's access manager, by default the operator's deployment account, or an account the operator has given the optional PRIVATE_NETWORK_OPERATOR role. See Private Network roles. The participant can't freeze or unfreeze itself.
Freeze a participant
-
Check the participant's current status:
curl http://<governance-api>/audit/participants/200002or, from the Hub,
npx hardhat participants:get-all. -
Set the status to
FROZEN(3):npx hardhat participants:update-status --chainid 200002 --status 3The task calls
updateStatus(chainId, status)on the Hub'sParticipantStorage, usingPNH_RPC_URL,PNH_DEPLOYMENT_PROXY_REGISTRYandPRIVATE_KEY_SYSTEM. Setting the status a participant already has reverts withParticipantCore: Status already set. -
Confirm. The governance API shows
"status": "frozen"once its listener has indexed the change:curl "http://<governance-api>/audit/participants?status=frozen"On any participant's chain,
getAllParticipants()on itsParticipantStorageReplicaV1shows the status that chain is enforcing. The taskparticipants:get-all-from-replica --node <ID>prints it.
Unfreeze a participant
Set the status back to ACTIVE (1):
npx hardhat participants:update-status --chainid 200002 --status 1The Hub sends the update to every chain, and the participant can transact again once its chain and its counterparties' chains have it. If a chain's copy of the list is out of date, the participant running that chain can ask the Hub for the full list again with requestAllParticipantsDataFromPrivateHub() on its ParticipantStorageReplicaV1.
Freezing and flagging are separate
The governance flagger can flag a participant whose chain stops submitting block headers. That flag is recorded only in the governance database: it doesn't change the participant's status or stop anything. Freezing is the operator's decision. See Flagging transactions.
Updated 8 days ago
