# Autopool Contracts and Systems

The contracts were designed with a couple concepts in mind:

* It is possible that Tokemak could run multiple, separate, instances of this system on the same chain and the majority of contracts would not be safe to share between the two.
* Misconfigurations are a potential source of bugs and this is a highly configurable system. Any validations that can be performed during registration and setup, should.

To assist in enforcing these points, the system revolves around a SystemRegistry contract (`src/SystemRegistry.sol`), and most contracts inherit from a SystemComponent (`src/SystemComponent.sol`) contract that requires a reference to a SystemRegistry. These allow us to tie the various contracts together and provide a lookup point for the various contracts to talk to one another.

<figure><img src="https://content.gitbook.com/content/2A6wmAnkpzrcydAUxLkR/blobs/cciv40zrU8s3HoxQmtuu/V2%20Overview-System-1.drawio.svg" alt=""><figcaption></figcaption></figure>
