Core, adapters, extensions
The architecture separates state from behaviour more strictly than Moloch did. Three core contracts hold the DAO itself: DaoRegistry tracks all state changes and is the only thing that can be mutated directly; CloneFactory deploys a DAO as a cheap clone; DaoFactory creates and initialises one and registers its modules. Core contracts never reach out to the world – information flows inward only.
Behaviour lives in adapters, twelve of which shipped, chosen to make the framework feature-compatible with Moloch v2: Configuration, Distribute, Financing, GuildKick, Managing, OffchainVoting, Onboarding, Ragequit, Tribute, TributeNFT, Voting and Withdraw. Adapters hold no DAO state of their own; they call into the registry. Extensions – Bank, NFT, ERC20 and Executor – sit alongside them for capabilities several adapters share, keeping the registry itself small.
Holding it together is an access-flag ACL. Each adapter is granted only the flags it needs, checked by a hasAccess modifier on the registry: REPLACE_ADAPTER, SUBMIT_PROPOSAL, UPDATE_DELEGATE_KEY, SET_CONFIGURATION, ADD_EXTENSION, REMOVE_EXTENSION, NEW_MEMBER. A module without the flag simply reverts. The consequence that matters politically: because Managing holds REPLACE_ADAPTER, a Tribute DAO can vote to change its own rules – onboarding terms, voting method, exit conditions – without redeploying. Modularity is a governance surface, not just an engineering convenience.
Two adapters carry the Moloch inheritance directly. Ragequit preserves the exit right – burn your units, take your proportional slice – and GuildKick preserves the members’ power to remove someone. The Tribute and TributeNFT adapters are the framework’s namesake: a prospective member offers ERC-20 tokens or an ERC-721 asset to the treasury in exchange for internal units, which is exactly how a venture or collector DAO admits capital. (MolochVentures/moloch)