Skip to main contentA-REX Core

سجلات القرارات · ADR-012

ADR-012: Forced transfers bypass pause and eligibility but still run hooks

A forced transfer works while the token is paused and against ineligible or frozen accounts, but it still passes through the hooks with OP_FORCED_TRANSFER, so a hook can require an order reference.

Accepted
معرّف المستند
ADR-012
التاريخ
2026-09-21
متوفر بالإنجليزية فقط
يُنشر هذا المستند بالإنجليزية. فصول الورقة البيضاء والمخططات مترجمة؛ أما المواصفة المعيارية وأدلة تصميم النظام وسجلات القرارات فتبقى بالإنجليزية ليكون هناك نص مرجعي واحد.
FieldValue
IDADR-012
Subject areaEnforcement
StatusAccepted
Date2026-09-21
OwnersA-REX Contributors
Related requirementsFR-06, NFR-03 (SDD §3)
Supersedes / superseded by—

Context

A court order, a pledge enforcement or a sanctions freeze must be executable at the worst moment: during an incident when the token is paused, against an account that is itself sanctioned, on units that are frozen. At the same time some rules legitimately govern enforcement, for example requiring a reference to the court order in the transfer data.

Issue

Should enforcement actions be subject to the same rules as ordinary transfers?

Assumptions

  • A lawful order must be executable during an incident and against ineligible accounts.
  • Some rules exist precisely to govern enforcement.

Constraints

  • Enforcement must stay auditable (events, hooks).

Alternatives considered

AlternativeForAgainstOutcome
Forced transfers bypass everythingAlways executableNo rule can require an order reference; no observer hooksRejected
Forced transfers obey every ruleUniformExpiry, sanctions or pause would block seizuresRejected
Bypass pause, eligibility and the frozen check; run hooks with OP_FORCED_TRANSFERExecutable and still governableHook authors must handle the op explicitlyAccepted

Decision

forcedTransfer (ENFORCER_ROLE) skips pause, canSend/canReceive and the frozen-balance check, lowers the frozen amount so that it never exceeds the remaining balance, and runs every hook with OP_FORCED_TRANSFER. Every reference hook returns OK for that op.

Argument

Bypassing the checks that would block a seizure, while keeping the hook pipeline, preserves both enforceability and the possibility of rules about enforcement itself.

Consequences

Positive

  • Seizures, pledges and recalls are executable during incidents.
  • Observers (traceability) record enforcement like any other operation.

Negative

  • ENFORCER_ROLE can move any holder's units; it is a powerful key.

Obligations it creates

  • Hook authors return OK for OP_FORCED_TRANSFER unless the rule governs enforcement.
  • ENFORCER_ROLE sits behind a multisig with a documented procedure.

Implementation and evidence

WhatWhere
ImplementationARexToken.forcedTransfer, _update
Teststest/standard/ARexToken.test.js: forcedTransfer moves frozen units, unfreezes as needed, bypasses eligibility and works while paused, ExpiryHook blocks transfers of expired batches, allows burn and forced transfer
  • ADR-003: Adopt ERC-7943 (multi-token variant) verbatim for enforcement
  • ADR-004: One hook interface, flags cached at registration, ordered evaluation
  • ADR-010: Authority comes from roles, never from balances; RETIRED is terminal