betterERC
Docs/Start here

What is fixed, what moves

The most useful distinction in these pages: which answers you may cache forever, and which ones you have to watch.

All docs

A declaration is only worth reading if you know how long it stays true. This framework draws one hard line and documents both sides of it.

Fixed at deployment

The extension set and the behaviour word are written during construction and frozen when the assembly seals its registry. Registration happens in an initialiser, which cannot run twice, so neither can change afterwards. Read them once, store them next to the token address, and never read them again.

This is checked as an invariant across arbitrary call sequences rather than merely asserted: whatever an authority does, in whatever order, the declaration does not move.

Configurable, and it emits an event

Fee rate and cap
Both authority-mutable, within a compile-time ceiling that is not. Emits FeeConfigUpdated.
Vault and exemptions
The collecting address and the per-account waivers. Emits FeeVaultUpdated and FeeExemptionUpdated.
Pause and freezes
The global brake and the per-account bars. Emits TransferPauseUpdated and AccountFrozen.
Hook and budget
The policy contract and its gas allowance. Emits TransferHookUpdated.
Metadata
The key/value store and the token URI. Declares no behaviour and never touches the transfer path.

Every one of those also emits ExtensionConfigured, carrying the extension's full configuration after the change. An indexer following that single event keeps a current view of every module without polling anything.

Installed, not active

A flag is set when the extension is installed, not when it is currently switched on. A token whose fee rate is zero right now still declares a fee, because the authority can raise it at any moment. This is the rule that makes caching safe: a word tracking live configuration could go stale with nothing to tell you so.

You will occasionally take a defensive path you did not need. You will never skip one you did.