Description

The goal of this project is to solve 2 problems: 1. The inflexibility of proposal actions. These actions are mainly transactional. For example, transferring funds from one account to another. In the real world, a collective decision is useful for more than making financial decisions. Furthermore, most DAO smart contract contains hard-coded “actions” that cannot be added or customised after it is deployed. To solve this issue, I created a Parameter Lookup Table, aka ParamsLUT that allows any verified “action” smart contract to be “attached” to a DAO, so that actions can still be executed from the DAO. 2. The lack of evidence for proposal actions for evaluation. On-chain data are hard to read and often does not contain meaningful data where we can use it to evaluate the quality of the actions taken to fulfil the proposal requirements. What if someone “faked” an off-chain action? Or what if an on-chain action doesn’t give a clue on what’s going on? To solve this issue, I’d like to propose the use of both on-chain action and off-chain evidence for maximum transparency. Based on the Short Description, let me define a few keywords and key phrases: 1. DAO Factory: a Dapp with a smart contract that can create DAO smart contracts. 2. Create DAO with existing NFT project: Create a DAO that references to existing NFT NFT smart contract. This can only be performed by the owner of the NFT smart contract. 3. Automatically become DAO member: There is no sign-up or lock-in NFT required to be a DAO member. NFT owners can instantly create proposal, vote and execute on-chain actions. 4. Modular and executable on-chain actions: The on-chain actions are “modular” because these actions are not hard-coded into the DAO smart contract. Any developers can write and submit useful on-chain actions to the DAO factory admins. Once approved, these on-chain actions can be used by any members in any Ollie DAO community to create a proposal. 5. Off-chain evidence. These are data hosted in IPFS. On-chain evidence is not good enough because they are not readable and meaningful for members to evaluate the result of the execution. By using off-chain evidence, members can tell whether the actions has been carried out appropriately.

Ollie DAO showcase

How it's made

A large part of the project was the smart contracts. In total, I wrote 7 smart contracts for the following purpose: 1. OllieDAO.sol: This is the DAO factory contract. Within this contract, there is a full-feature CustomDAO contract that has proposing, voting, and execution function. 2. CustomExecution.sol: This is the “base” of all execution smart contract. In other words, all on-chain action smart contract must inherit this smart contract so that CustomDAO can interact with it as an execution. 3. DataTypes.sol: In addition, I have also set a predefined data structure that can be used with ANY combination of input parameters/arguments. It doesn’t matter whether the on-chain action smart contract needs 1 boolean or a combination of argument with various datatypes. This is possible because I created a Parameter Lookup Table aka ParamsLUT. With ParamsLUT, there is also no need to hard-code the input field on the webpage. Why? Because the input fields are generated based on ParamsLUT in the custom execution smart contract! 4. Three custom on-chain action smart contracts: To demonstrate the capability of ParamsLUT, I wrote ETemplate.sol (a template for developer to quickly create executable contracts), EGeneric.sol (for general purpose evidence record), and ESuperFluid-CreateFlow.sol (to create money streaming from a smart contract). All off-chain details and evidence are store in IPFS via Web3Storage. The website was built in React and I used MUI to create the components.