Skip to main content
Sometimes you need to stop one address from moving your stablecoin: a compliance hold or a support request. A blocklist denies only the addresses you list and leaves every other holder untouched. Bind it to the sender scope so a blocked account can’t send.

Demo

The demo uses a local browser-generated account to submit real transactions on Base Vibenet. If Vibenet or its B20 features are unavailable, it automatically switches to an illustrative offline version.
New to B20? See the B20 Token Standard for the concepts and a full launch walkthrough. These samples target base-std@1505323, viem@2.55.11, and Base Foundry v1.1.1.

Block and Verify an Account

See the B20 token standard for the complete interface, roles, and policies.
isAuthorized(policyId, account) returns false while the account is blocked.
This only stops outgoing transfers when the blocklist is bound to TRANSFER_SENDER_POLICY. Unblock with the same call and false.

Make a Blocked Account Recoverable

Blocking under TRANSFER_SENDER_POLICY freezes the account’s outgoing transfers. It does not, on its own, let you move the balance out. Seize reads a separate scope, SEIZE_EXEMPT_POLICY, whose check is inverted: an account that is not authorized under the attached policy is seizable. Attach the same blocklist there so a single hold both freezes the account and makes it recoverable:
Attach the blocklist to the seize scope
Attach a blocklist, never an allowlist, to SEIZE_EXEMPT_POLICY: an empty allowlist authorizes nobody, which would make every holder seizable. See Recover Funds for the seize itself.

See Also

Recover Funds

Move a blocked balance to safekeeping with seizeWithMemo.

Pause Activity

Freeze all token activity.