Lux Docs

Freezing a Node

Temporarily halt child node operations

Freezing a Node

Parent DAOs can freeze child nodes to temporarily halt all operations. This is a powerful oversight mechanism for emergencies or misconduct.

Overview

When a node is frozen:

  • All proposals are paused
  • Treasury transfers blocked
  • Voting halted
  • Administrative functions disabled

The node remains frozen until explicitly unfrozen by the parent.

When to Freeze

Appropriate Uses

  • Security breach - Suspected compromise of node admin
  • Misconduct - Violation of charter or DAO policies
  • Emergency - Urgent situation requiring immediate halt
  • Audit - Temporary pause during investigation
  • Transition - Restructuring or leadership change

Not Appropriate

  • Policy disagreements (use governance instead)
  • Performance issues (address through regular channels)
  • Punitive action without cause
  • Avoiding legitimate proposals

Freezing is a serious action. Use only when necessary and document the rationale clearly.

Freeze Methods

Method 1: Via UI (Admin)

If you have admin role on the parent:

  1. Navigate to Organization > Hierarchy
  2. Select the child node
  3. Click "Freeze Node"
  4. Confirm the action
┌─────────────────────────────────────────────────────────────┐
│ Freeze Node: Research Committee                              │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ⚠️  This will immediately halt all operations              │
│                                                              │
│  Effects:                                                    │
│  • All active proposals paused                              │
│  • Treasury transfers blocked                               │
│  • New proposals cannot be created                          │
│  • Voting on pending items halted                           │
│                                                              │
│  Reason (required):                                          │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ Security concern - investigating unauthorized        │   │
│  │ access to committee admin wallet.                    │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                              │
│  [ Cancel ]                      [ Freeze Node ]            │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Method 2: Via Proposal

For non-emergency situations or when admin prefers governance:

Proposal: "Freeze Research Committee Pending Audit"

Description: |
  This proposal freezes the Research Committee while an
  audit of recent grant disbursements is conducted.

  ## Rationale
  Concerns have been raised about several recent grants
  that may not align with the committee charter.

  ## Duration
  Expected freeze: 2 weeks pending audit results

  ## Next Steps
  1. Audit committee reviews transactions
  2. Findings presented to parent DAO
  3. Unfreeze proposal if cleared
  4. Corrective action if issues found

Actions:
  - type: freeze
    childId: 42
    reason: "Audit of grant disbursements"

Method 3: Via SDK

import { HierarchyClient } from '@lux/dao-sdk';

const hierarchy = new HierarchyClient(signer);

// Freeze a child node
const tx = await hierarchy.freeze(
  childId,
  'Security concern - investigating unauthorized access'
);

await tx.wait();
console.log('Node frozen');

// Check freeze status
const isFrozen = await hierarchy.isFrozen(childId);
console.log(`Frozen: ${isFrozen}`);

Smart Contract Interface

interface IHierarchy {
    /// @notice Emitted when a node is frozen
    event NodeFrozen(
        uint256 indexed nodeId,
        address indexed freezer,
        string reason,
        uint256 timestamp
    );

    /// @notice Emitted when a node is unfrozen
    event NodeUnfrozen(
        uint256 indexed nodeId,
        address indexed unfreezer,
        uint256 timestamp
    );

    /// @notice Freezes a child node
    /// @param childId The child node to freeze
    /// @param reason Documented reason for freezing
    function freeze(uint256 childId, string calldata reason) external;

    /// @notice Unfreezes a previously frozen child
    /// @param childId The child node to unfreeze
    function unfreeze(uint256 childId) external;

    /// @notice Returns true if node is frozen
    function isFrozen(uint256 nodeId) external view returns (bool);

    /// @notice Returns freeze info for a node
    function freezeInfo(uint256 nodeId) external view returns (
        bool frozen,
        address frozenBy,
        uint256 frozenAt,
        string memory reason
    );
}

Effects of Freezing

Immediate Effects

OperationStatusDetails
ProposalsPausedCannot create new, voting halted
TreasuryBlockedAll transfers disabled
RolesLockedCannot add/remove members
SettingsLockedConfiguration changes blocked
ChildrenUnaffectedSub-nodes continue (unless cascaded)

What Still Works

  • Read-only operations (viewing proposals, balances)
  • Parent administrative functions
  • Event logging
  • Emergency contacts

Cascade Option

Optionally freeze all descendants:

// Freeze node and all children
await hierarchy.freezeCascade(childId, 'Parent freeze - cascade');

Unfreezing a Node

Via UI

  1. Navigate to frozen node
  2. Click "Unfreeze Node"
  3. Confirm the action

Via Proposal

Proposal: "Unfreeze Research Committee - Audit Complete"

Description: |
  The audit has been completed with no issues found.
  This proposal unfreezes the Research Committee.

  ## Audit Results
  - All 15 grants reviewed
  - No policy violations found
  - Recommendations for improved documentation

Actions:
  - type: unfreeze
    childId: 42

Via SDK

const tx = await hierarchy.unfreeze(childId);
await tx.wait();
console.log('Node unfrozen');

Freeze Duration

SituationDurationAction
Security investigation1-2 weeksUnfreeze or escalate
Audit2-4 weeksUnfreeze or restructure
MisconductUntil resolvedMay lead to dissolution
Emergency24-72 hoursQuick resolution required

Automatic Unfreeze (Optional)

Some implementations support time-limited freezes:

// Freeze for 7 days
await hierarchy.freezeWithExpiry(
  childId,
  'Temporary pause for review',
  7 * 24 * 60 * 60  // 7 days in seconds
);

Monitoring Frozen Nodes

Dashboard View

┌─────────────────────────────────────────────────────────────┐
│ Organization Hierarchy                                       │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ▼ Root DAO                                                 │
│    │                                                         │
│    ├── Treasury Committee         ● Active                  │
│    │                                                         │
│    ├── Research Committee         ⏸ Frozen (3 days)        │
│    │   └── Reason: Audit of grant disbursements             │
│    │                                                         │
│    └── Grants Committee           ● Active                  │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Event Monitoring

// Listen for freeze events
hierarchy.on('NodeFrozen', (nodeId, freezer, reason, timestamp) => {
  console.log(`Node ${nodeId} frozen by ${freezer}`);
  console.log(`Reason: ${reason}`);

  // Alert stakeholders
  notifyAdmin(nodeId, 'frozen', reason);
});

hierarchy.on('NodeUnfrozen', (nodeId, unfreezer, timestamp) => {
  console.log(`Node ${nodeId} unfrozen by ${unfreezer}`);
});

Best Practices

Before Freezing

  1. Document the reason - Clear, specific rationale
  2. Notify stakeholders - Inform child node admins
  3. Set expectations - Timeline and next steps
  4. Prepare resolution path - How to unfreeze

During Freeze

  1. Regular updates - Keep affected parties informed
  2. Active investigation - Work toward resolution
  3. Time limit - Don't leave frozen indefinitely
  4. Escalate if needed - Involve higher governance

After Unfreezing

  1. Post-mortem - Document lessons learned
  2. Process improvements - Prevent recurrence
  3. Communicate resolution - Public transparency
  4. Monitor closely - Ensure normal operation

Access Control

ActionRequired Permission
FreezeADMIN_ROLE on parent
UnfreezeADMIN_ROLE on parent
View freeze statusAny (public)
Emergency freezeGUARDIAN_ROLE

Troubleshooting

Cannot Freeze

ErrorCauseSolution
UnauthorizedMissing admin roleGet proper permissions
NotChildNode is not a childCheck hierarchy
AlreadyFrozenAlready frozenNo action needed
FreezeDisabledConfig disables freezeUpdate child config

Cannot Unfreeze

ErrorCauseSolution
UnauthorizedMissing admin roleGet proper permissions
NotFrozenNode is not frozenNo action needed
TimelockActiveWaiting periodWait for timelock

On this page