Skip to content

Latest commit

 

History

History
116 lines (79 loc) · 7.36 KB

File metadata and controls

116 lines (79 loc) · 7.36 KB

Deployment Model

Deployment contracts are in contracts/deployment/. Each feature set comes in both a standalone (immutable) and an upgradeable (proxy-compatible) variant.

Summary

Model Description Type Contract
Standard Core + extension modules, ERC-2771 + cross-chain support Standalone CMTATStandardStandalone
Upgradeable CMTATStandardUpgradeable
UUPS Same as Standard + UUPS proxy support Upgradeable only CMTATUpgradeableUUPS
ERC-1363 Standard + ERC-1363 payable token Standalone CMTATStandaloneERC1363
Upgradeable CMTATUpgradeableERC1363
Permit Standard + ERC-2612 Permit + ERC-6357 Multicall (no ERC-2771) Standalone CMTATStandalonePermit
Upgradeable CMTATUpgradeablePermit
Light Core modules only (no extensions) Standalone CMTATStandaloneLight
Upgradeable CMTATUpgradeableLight
Debt Standard + DebtModule (no ERC-2771, no ERC20CrossChain) Standalone CMTATStandaloneDebt
Upgradeable CMTATUpgradeableDebt
DebtEngine Standard + DebtEngineModule + ERC-1404 (no ERC-2771) Standalone CMTATStandaloneDebtEngine
Upgradeable CMTATUpgradeableDebtEngine
Allowlist Standard + AllowlistModule (no RuleEngine/ERC-1404, no ERC20CrossChain), with ERC-7551 enforcement functions Standalone CMTATStandaloneAllowlist
Upgradeable CMTATUpgradeableAllowlist
ERC-7551 Standard + ERC7551Module Standalone CMTATStandaloneERC7551
Upgradeable CMTATUpgradeableERC7551
Snapshot Standard + SnapshotEngine support Standalone CMTATStandaloneSnapshot
Upgradeable CMTATUpgradeableSnapshot
HolderList Standard + HolderListModule (on-chain set of non-zero-balance holders) Standalone CMTATStandaloneHolderList
Upgradeable CMTATUpgradeableHolderList

Standard Standalone

Use CMTATStandardStandalone (file: CMTATStandardStandalone.sol) for a fully immutable deployment. Includes all core and extension modules (except Debt, Allowlist, UUPS), plus ERC2771Module and ERC20CrossChain.

Upgradeable (Transparent / Beacon Proxy)

Use CMTATStandardUpgradeable (file: CMTATStandardUpgradeable.sol) as the implementation contract behind a Transparent or Beacon proxy.

See OpenZeppelin Upgrades Plugins for proxy deployment tooling.

UUPS Proxy

Use CMTATUpgradeableUUPS for a UUPS proxy. The upgrade logic is in the implementation contract itself.

Security note: There is no segregation between admin rights and the proxy upgrade authority. Compromise of DEFAULT_ADMIN_ROLE would allow swapping the implementation. Use a multisig or timelock.

Light Version

Includes only core modules: mint, burn, freeze, pause. No extensions (no documents, no snapshots, no partial freeze). Adds forcedBurn so the admin can burn from frozen addresses (since ERC20EnforcementModule with forcedTransfer is not included).

ERC-1363

ERC-1363 allows executing code on a recipient after a transfer or on a spender after approval, in a single transaction. Available as CMTATStandaloneERC1363 and CMTATUpgradeableERC1363.

Permit + Multicall

See permit-multicall.md.

Debt / DebtEngine

See debt.md.

Allowlist

See the Allowlist module documentation.

HolderList

See holder-list.md. Available as CMTATStandaloneHolderList and CMTATUpgradeableHolderList.

Lifecycle (pause / deactivate)

Every deployment variant supports pausing and terminal deactivation (ERC-8343). See lifecycle.md.

Factory

Factory contracts for Beacon, Transparent, and UUPS proxy deployments are maintained in a separate repository: CMTAT Factory.

CMTAT version CMTAT Factory
CMTAT v3.0.0 v0.2.0 (unaudited)

Other Token Types (ERC-721, ERC-1155)

To build a CMTAT-flavored ERC-721 or ERC-1155, extend CMTATBaseGeneric. A mock ERC721MockUpgradeable is available in contracts/mocks/ as a reference.

Storage (ERC-7201)

CMTAT implements ERC-7201 for namespaced storage, making upgradeable storage layout predictable and collision-free.

Module Storage Variable bytes32 Slot
AllowlistModuleInternal AllowlistModuleInternalStorageLocation 0x53076eaf2d1e2f915f2e0487c9f92cca686c37fd47bf11f95f0da313b2809800
EnforcementModuleInternal EnforcementModuleInternalStorageLocation 0x0c7bc8a17be064111d299d7669f49519cb26c58611b72d9f6ccc40a1e1184e00
ERC20EnforcementModuleInternal ERC20EnforcementModuleStorageLocation 0x9d8059a24cb596f1948a937c2c163cf14465c2a24abfd3cd009eec4ac4c39800
ERC20BaseModule (decimals only) ERC20BaseModuleStorageLocation 0x9bd8d607565c0370ae5f91651ca67fd26d4438022bf72037316600e29e6a3a00
TokenAttributeModule (name/symbol) TokenAttributeModuleStorageLocation 0xc541cfc06cfa9bb7e38e614bc9457bd7310b58a2a620e4f19164873143c76d00
PauseModule - 0xab1527b6135145d8da1edcbd6b7b270624e17f2b41c74a8c746ff388ad454700
DocumentEngineModule DocumentEngineModuleStorageLocation 0xbd0905600c85d707dc53eba2e146c1c2527cd32ac3ff6b86846155151b3e2700
DocumentERC1643Module DocumentERC1643ModuleStorageLocation 0x24fbb1cf6345ced60d5278ef6f68f4f7576fd9068704b4c8f1eec8f0bbd8a200
ExtraInformationModule ExtraInformationModuleStorageLocation 0xd2d5d34c4a4dea00599692d3257c0aebc5e0359176118cd2364ab9b008c2d100
SnapshotEngineModule SnapshotEngineModuleStorageLocation 0x1387b97dfab601d3023cb57858a6be29329babb05c85597ddbe4926c1193a900
CCIPModule CCIPModuleStorageLocation 0x364fbfd89c0eee55bbc8dd10b1a9bf3e04fba9f3ee606f4c79a82f9941ad7a00
DebtModule DebtModuleStorageLocation 0xf8a315cc5f2213f6481729acd86e55db7ccc930120ccf9fb78b53dcce75f7c00
ERC7551Module ERC7551ModuleStorageLocation 0x2727314c926b592b6f70e7d6d2e4677ebcac070f293306927f71fe77858eec00
HolderListModule (HolderList variants only) HolderListModuleStorageLocation 0x93edd3717dec98b474d42a698cc89715a70e7eaf60a2dff7170cc742b7b8ca00
OZ EIP712Upgradeable EIP712StorageLocation 0xa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100
OZ NoncesUpgradeable NoncesStorageLocation 0x5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00

EIP712Upgradeable and NoncesUpgradeable slots are present in the Permit deployment variants (CMTATStandalonePermit, CMTATUpgradeablePermit) which inherit ERC20PermitUpgradeable. DocumentERC1643Module is present in all deployment variants that extend CMTATBaseDocument (level 1) — which is every variant except the mock/generic base. ValidationModuleAllowance has no dedicated ERC-7201 slot; it is stateless.

Initialize Functions

Each upgradeable module exposes __{ContractName}_init_unchained. Call these in your proxy initializer instead of __{ContractName}_init to avoid double-initialization across the inheritance chain.

See OpenZeppelin - Multiple Inheritance for details.