```mermaid flowchart TD Homeserver[Matrix\nHomeserver] Contracts <-- Node.js blockchain\nclient library (ethers) --> API Contracts <-- Web-based blockchain client library\n(MetaMask / Casper Wallet)--> WebApp Contracts <-- Web-based blockchain client library\n(MetaMask / Casper Wallet)--> Widget WebApp <-- HTTPS --> API Widget <-- HTTPS --> API Widget <-- Element-web Widget API\n(npm matrix-widget-api) --> Homeserver API <-- Matrix Client-Server Protocol\n(npm matrix-bot-sdk) --> Homeserver ``` ## Contracts ### DAO We introduce a DAO contract which estabishs the public interface of the DAO core, and provides a context within which the core contracts may securely call each other. Each of the core contracts must first be deployed. Then the DAO contract is deployed, and for each core contract, makes the first and only call to `registerDAO` to set the address of the DAO contract. All calls are then mediated by the DAO contract's public interface. This enables us to enforce the security of the core contracts. ### Bench