Standard Operating Procedure for Node Operators to temporarily halt a specific chain integration.
If a Node Operator notices an issue with a specific chain (e.g., unusual behavior, potential exploit, sync issues, or external chain problems), it is recommended to pause the chain integration. This brings attention to the issue, prevents potential fund loss, and allows time for investigation.
{% hint style="warning" %} Even during chain halts, Node Operators should refrain from doxxing themselves. Staying pseudo-anonymous is critical to ensuring the network is impartial, neutral and resistant to capture. {% endhint %}
- Suspected exploit or vulnerability affecting a specific chain
- Chain sync issues or Bifrost anomalies
- External chain hardfork or network instability
- Solvency discrepancies detected on a chain
- Unusual transaction patterns observed
- Double spend alert
There are three levels of chain-specific halts. Understanding the differences is critical for choosing the appropriate response.
| Halt Type | Mimir Key Format | Example |
|---|---|---|
| Trading Halt | HALT<CHAIN>TRADING |
HALTETHTRADING |
| Signing Halt | HALTSIGNING<CHAIN> |
HALTSIGNINGETH |
| Chain Halt | HALT<CHAIN>CHAIN |
HALTETHCHAIN |
- Disables quoting for the chain
- Halts currently streaming or queued swaps
- Does NOT prevent outbounds from being sent
- Does NOT prevent assets from leaving the network
- Does NOT pause inbound observations (newly observed inbounds remain in the inbound queue)
- Prevents all outbounds from being sent for the chain
- Affects all outbound types: swaps, trade asset withdrawals, secured asset withdrawals, LP withdrawals
- Does NOT disable quoting (integrations may still send funds that won't be processed)
- Halts all chain operations: swapping, signing, outbounds, LP actions, trade assets, and secured assets
- Transactions are no longer observed; Bifrost goes offline for the chain
- Resumption requires a majority of nodes to resync to the chain tip
{% hint style="danger" %} Important: When a problem is detected, you should halt both trading and signing. Halting only signing keeps quoting active, which means integrations may continue sending funds that won't be processed—resulting in a poor user experience. {% endhint %}
| Situation | Recommended Action |
|---|---|
| Node daemons are erroring or falling behind | Halt signing and halt trading |
| Issue resolved, but many nodes still behind | Keep signing and trading halted |
| Issue resolved, supermajority of nodes at tip | Re-enable signing first, verify orderly processing of outbounds, then re-enable trading |
| Double spend alert detected | Halt the entire chain (HALT<CHAIN>CHAIN) and wait for dev instructions |
{% hint style="success" %} Halt often, halt early. Node Operators are encouraged to halt when they suspect something is wrong. It is better to halt proactively and investigate than to wait and risk fund loss. Most halts should include both signing and trading. {% endhint %}
When you notice an issue, halt first. For most issues, halt both trading and signing:
Halt Trading:
make mimir
=> Enter THORNode Mimir key: HALT<CHAIN>TRADING
=> Enter THORNode Mimir value: 1Halt Signing:
make mimir
=> Enter THORNode Mimir key: HALTSIGNING<CHAIN>
=> Enter THORNode Mimir value: 1For severe issues (double spend, critical exploit):
make mimir
=> Enter THORNode Mimir key: HALT<CHAIN>CHAIN
=> Enter THORNode Mimir value: 1After initiating the halt, notify other Node Operators:
- Use
make relayto communicate anonymously via the THORChain Dev Discord#mainnetchannel - Alternatively, use a burner Discord account to report the issue
- Tag
@security,@contributorif the issue poses a risk to funds - Provide details about what you observed and why you initiated the halt
While the chain is halted:
- Create a thread in
#mainnetto oordinate with other Node Operators and the development team - Explain what you observed
- Provide logs if you can or if relevant
- Wait for guidance from the development team or consensus from other Node Operators
Before resuming operations:
- Confirm the fix has been applied or the external issue resolved
- Ensure a supermajority of nodes are synced to the chain tip
- Verify solvency checks pass
- Review dashboards for any anomalies:
- thorchain.network - Comprehensive THORNode dashboard
- thorchain.net/nodes - Monitor node status and chain tip sync
- runescan.io - THORNode information within block explorer
Follow the resumption procedure below to safely restore operations.
Once the issue is resolved:
- Confirm the fix has been applied or the external issue resolved
- Ensure a supermajority of nodes are synced to the chain tip
- Verify solvency checks pass
Re-enable signing first to clear any stuck swaps:
make mimir
=> Enter THORNode Mimir key: HALTSIGNING<CHAIN>
=> Enter THORNode Mimir value: 0Verify orderly processing of outbounds, then re-enable trading:
make mimir
=> Enter THORNode Mimir key: HALT<CHAIN>TRADING
=> Enter THORNode Mimir value: 0To delete your vote entirely, use -1:
make mimir
=> Enter THORNode Mimir key: <KEY>
=> Enter THORNode Mimir value: -1- Watch for any backlog of transactions that need processing
- Monitor chain sync status
- Verify normal trading operations resume
| Action | Mimir Key | Value |
|---|---|---|
| Halt trading | HALT<CHAIN>TRADING |
1 |
| Halt signing | HALTSIGNING<CHAIN> |
1 |
| Halt chain (severe) | HALT<CHAIN>CHAIN |
1 |
| Resume trading | HALT<CHAIN>TRADING |
0 |
| Resume signing | HALTSIGNING<CHAIN> |
0 |
| Resume chain | HALT<CHAIN>CHAIN |
0 |
| Delete vote | <KEY> |
-1 |
{% hint style="warning" %} Beware of typos! The following are examples of incorrect vs correct Mimir keys:
| Incorrect (Bogus) | Correct |
|---|---|
HALTRADING |
HALTTRADING |
HALTETHSIGNING |
HALTSIGNINGETH |
Always double-check your Mimir key format before submitting a vote. {% endhint %}
Correct formats:
- Trading:
HALT<CHAIN>TRADING(e.g.,HALTETHTRADING,HALTBTCTRADING) - Signing:
HALTSIGNING<CHAIN>(e.g.,HALTSIGNINGETH,HALTSIGNINGBTC) - Chain:
HALT<CHAIN>CHAIN(e.g.,HALTETHCHAIN,HALTBTCCHAIN)
- A node's vote is valid as long as they are active, removed if they are not, and operational Mimir resets on churn
- A node can change their vote at any time, other nodes can override
- For network-wide emergencies, use
make pauseinstead (see Emergency Procedures)