TJAR: per-partner fee collection and auction system. Three contract roles:
TokenJar (passive fee sink, the stable partner identity), ExchangeReleaser
(auction logic in front of a jar; disposable, rotatable), FeeController
(per-chain protocol-fee singleton). A permissionless Factory deploys
jar+releaser pairs via CREATE2 and emits the discovery events; the registry
lives downstream, built from these rows.
Discovery: jars come only from Factory.JarDeployed (factory-only scope
decision). Releasers are seeded from Factory events AND signature-wide
ConfigSet matching — every releaser (factory or manual, e.g. the OP-stack
bridged variant) emits ConfigSet in its constructor, so the store learns
manual releasers at their birth block instead of at adoption, capturing
their pre-adoption config/ownership history that a rotation-time discovery
would miss. Junk emitters of a matching ConfigSet become junk rows filtered
downstream by registry attribution (adoption only ever comes from a
factory-verified jar's ReleaserSet). OwnershipTransferred is the standard
solmate topic0 shared by half the chain, so it is ALWAYS store-filtered.