--- title: Baal Run-through tags: baal --- # Baal Run-through ## Baal Overview 1. **Delegation of Shares** - Full delegation of votes might not be needed at the start 2. **Shamans (super-powered minions)** - Shamans are super-Minions that bypass the proposal process & can execute any internal logic that only it can use. Shamans can execute logic base - Shamans can adjust (up or down) share and loot balances, but members need to claim shares. Shamans need to be whitelisted first. - E.g. 1: Do a snapshot on tokenholders & issue shares to members - E.g. 2: YeetDAO - when somebody sends X ETH, it assigns Y loot and Z shares to the person - For optional plug-ins/use cases, Shamans could be Boosts. For common use cases, there could be 'master Shamans' that are installed (& customised) during Summoning 3. **Normal MolochDAO concepts** (e.g. ragequit, sponsoring proposals, etc. ) 4. **Spam prevention** (e.g. proposal deposits) 5. **Token transferrability** - Token is a summoning parameter which can be tweaked but set as non-transferrable by default - As compared to v2, the tokens are no longer integer shares, but work the same way as ERC-20 tokens (e.g. 18 decimals). - Token transferability is rather advanced & later in the life cycle 6. **Flexible voting periods per proposal** 7. **More flexible Proposal Types** (Multi-call proposals instead of many different types of proposals) - This makes it harder for us to flag proposal types on the Subgraph, but we still have control over the frontend to filter & show - Function signature within the bytes submitted can tell us the proposal types ## Life Cycle ### Summoning - Configurable summoning parameters: - Loot transferrability (lootPaused ?) - Shares transferrability (sharePaused ?) - Initial guild tokens - Minimum voting period (Specified with every proposal) - Max voting period (Specified with every proposal) - Grace period (Mutable) - The summoning setup involves a multi-send which calls the configuration functions (e.g. SetPeriods, GuildTokens, Shaman, mintShares, mintLoot, delegateSummoners) - delegateSummoners delegate Shares to themselves - dilutionBound seems to be removed - Summoners need to give the shares a name & symbol. These cannot be changed currently (but could be changed in the future TBD) - Loot can be transferred but it is not an ERC-20 token - Shamans: There could be Shamans already deployed & set it on summoning - When writing the Shaman, do we need to hardcode the DAO contract? No, the DAO is whitelisting the Shaman contract - If there are common/whitelisted Shamans, we could expose it at summoning where summoners can customise parameters (Shaman per Baal) ### Members - Summon with multi-share holders & multi-loot holders (2 different arrays) - Generally members look the same, but members now have (if enabled) transferrable ERC-20 shares and a NFT representing their Shares/Loot data - Having both the ERC-20 token & NFT might be problematic. The wallet might think that the NFT is transferrable, but the signatures are not matched - Delegation is new where you can delegate to any address, regardless of their holdings (similar to Compound) - Multiple people can delegate to 1 address, but the delegates can only vote on behalf of another, they do _not_ have the power to ragequit - More options for different governance models - Members can now claim a NFT based on their Shares & Loot ownership - There should be some logic to handle ragequitters ### Token Balances - Whitelisting: Baal can do arbitrary executions, but the whitelisting proposal (SetGuildToken) is needed to whitelist a token for RageQuit calculations - Internal Balances: There are no more internal balances - tokens are sent directly without any need to request tokens - Rage Quit: It seems like the user can select tokens which they want to ragequit ### Proposals - Proposals are pretty similar to the Multi-Send proposals currently - For each proposal, - voting Period (needs to be set every time) - proposalData (concat state changes happening to the DAO) - expiration (This is set at time of proposal creation - at what block timestamp, should this no longer be executable - should this be configurable to user? we can set to 0, so no expiration) - Proposal data will not be stored onchain & need to be read via the subgraph, giving proposals processing more gas efficiency. - The subgraph will need to call a view function on the BaalFactory with the proposal hash to receive metadata - Processing a proposal also does the execution, but will be cheaper as one tx ## Next Steps We don't have to support everything that Baal supports right out of the gate. We should prioritise what's needed in the earlier / general life cycle stageso of a DAO. The following areas require a deeper dive on the parameters & UX implications 1. Proposal controls 2. Delegation models from Compound/Gitcoin 3. Shares (How does ApproveShares & Whitelisting work?) - Approve Baal to send tokens to someone 4. DAO configurations & settings - upgrade your DAO 5. Shaman - use cases: staking for power - Maybe how guild kick works? - Single contract that works for everybody, but the DAO has to set the ratio, etc. 6. RageQuit looks exactly the same 7. New function called Flashloan 8. User Profile: Internal Balance is gone & membership NFTs, perhaps even Delegation