Signature
IB20.sol
Description
Seizesamount of from’s balance and reassigns it to to in a single admin operation. Emits, in order, Transfer(from, to, amount), Memo(caller, memo), and Seized(caller, from, to, amount). A memo of bytes32(0) is permitted.
Admin operation: skips allowance and the transfer policies. The membership checks are that from is seizable under SEIZE_HOLDER_POLICY and to is authorized under SEIZE_RECEIVER_POLICY.
to is gated by SEIZE_RECEIVER_POLICY, which defaults to always-allow when unset, so an unconfigured token may seize to any destination (a treasury need not be allowlisted).
Parameters
Reverts
ContractPaused(SEIZE)whenSEIZEis paused.AccessControlUnauthorizedAccountwhen the caller does not holdSEIZE_ROLE.InvalidReceiverwhento == address(0).AccountNotSeizablewhenfromis authorized underSEIZE_HOLDER_POLICY. Note thatSEIZE_HOLDER_POLICYuses inverted semantics:fromis seizable only whenisAuthorized(policyId, from)returnsfalse.PolicyForbids(SEIZE_RECEIVER_POLICY, ...)whentois not authorized underSEIZE_RECEIVER_POLICY.InsufficientBalancewhenfrom’s balance is belowamount.
Access Control
SEIZE_ROLE gates seizure calls.
Policy Interaction
ChecksSEIZE_HOLDER_POLICY for the holder and SEIZE_RECEIVER_POLICY for the destination.
SEIZE_HOLDER_POLICY uses inverted authorization semantics compared to normal transfer-style gating: an account is seizable when isAuthorized(policyId, from) returns false, not true. An unset slot reads as 0 (always-allow), so no account is seizable until an issuer explicitly configures the slot.
Example
Usage Example