# Educational Meme Token Launcher :: Implementation Notes ## Contracts WIP PR - https://github.com/dh-edu-token-defi/hos/pull/2 ### Standardized Shaman interfaces > Base interface **IShaman** └── IERC165 > Base Shaman flavour interfaces **IShaman** ├── IAdminShaman ├── IManagerShaman └── IGovernorShaman > Base Shaman contract **ShamanBase** ├── IShaman ├── ContextUpgradeable ├── ReentrancyGuardUpgradeable └── ERC165Upgradeable **AdminShaman** ├── IAdminShaman └── ShamanBase **ManagerShaman** ├── IManagerShaman └── ShamanBase **GovernorShaman** ├── IGovernorShaman └── ShamanBase **ZodiacModuleShaman** ├── ZodiacModule |-------- └── Module (Zodiac) └── ShamanBase ### Yeet24ShamanModule updates **Yeet24ShamanModule** ├── IYeet24Shaman ├── ZodiacModuleShaman ├── AdminShaman └── ManagerShaman - Contract **MUST** be added as both Shaman and Safe module - Shaman **MUST** have *admin* and *manager* privileges - `execute` function can be called when the following conditions apply: - it has not been executed already (`executed` flag) - `block.timestamp >= expiration` - `yeethBalance >= threshold` - Actions performed within the `execute` function: - Using manager privileges, it calls `_baal.mintShares` to double the amount of dao shares. New shares are sent to the shaman. - Using admin privileges, it calls `_baal.setAdminConfig` to turn dao shares/loot transferrable. - Using zodiacModule privileges, it submits the following multisend instructions to the dao vault: - call WETH9 to wrap `yeethBalance` - Trasfer wrapped `yeethBalance` to the shaman - call `Yeet24ShamanModule.createPoolAndMintPosition` - Contract events - event **Setup**(address indexed baal, address indexed vault, uint256 threshold, uint256 expiration, uint256 poolFee); - event **Executed**(address indexed token, uint256 tokenSupply, uint256 ethSupply); - event **UniswapPositionCreated***(address indexed pool, uint256 indexed tokenId, uint160 sqrtPriceX96, uint128 liquidity, uint256 amount0, uint256 amount1); - `createPoolAndMintPosition` (callable only by the dao vault) is in charge of initializing the Uni3 pool and minting a new position with collected ETH and token shares. ### HOS Summoner updates - Update saltNonce generation for shaman deployments ``` bytes32 salt = keccak256( abi.encodePacked( baalAddress, i, shamanTemplates[i], shamanPermissions[i], keccak256(initShamanDeployParams[i]), saltNonce ) ); ``` - Use new standard shaman interface - Other minor code cleaning/refactoring ### TODOs - Better logic on handling allowedlist shaman templates in HOS summoner --- - better requirements - naming convention on HOS referrer and some extra events ## data indexing // todo - [x] add referrer event to dao/yeeter for UI filtering - https://github.com/yeet-haus/subgraph/tree/sk/meme-yeeter test end point https://api.studio.thegraph.com/query/73494/yeeter-sepolia/0.0.3 example query ```gql { yeeters(first: 500, where:{dao_:{referrer:"DHYeet24ShamanSummoner"}}) { id dao { referrer } } } ``` current referrers: DHYeet24ShamanSummoner YeeterShamanDaoSummoner ## ui // general - default/selected chain handling for explore - currently hard coded on DEFAULT_CHAIN_ID all over the place // landing - pagination on yeeter lists / hooks - [x] useYeeters - update to filter on referrer - sort in the hook (active, closed, coming soon) - [x] useYeeter - [x] get some dao details here - [x] state helpers (status, time left) - [ ] can we show FEE SPLITS - *stretch* - add rpc calls - feeAmounts + feeRecipients - is array so need to call in loop until returns 0 - maybe it's own hook - [x] get balance from safe / and perc to goal - need safe address on yeeter or dao in yeeter subgraph - maybe calc percentage to goal (change from balance to safe balance) - [x] useYeets - for the latest in the ticker - [x] useLatestYeets - unscoped to dao for ticker - [ ] useMarketMaker - [x] identify shaman address - data transform (can execute,uniswap url) - what else do we need? - [x] useMyYeeters - for the toggle - need to query down to yeets or on yeets - [ ] need a quick way to tell if the user can exit - does iuseMyYeeters do this? chekc - [ ] latest rage quits - how to scope to this type of dao? - other hook items: - [ ] can we get the dao/token name easier - need the extra query in the hook - maybe get the loot token address/name # ui components Disclaimer modal - track id user has accepted - local storage - content around education only - open on any page visit What is this? modal - [x] add from button on homepage - [ ] todo: better content Yeet list - [x] horizontal scroll/layout - [ ] motion - not defined but some autscroll possible with package - https://github.com/YIZHUANG/react-multi-carousel - [ ] toggle to 'mine only' - [ ] might need to poll to update quicker if/when there is usage Marquee - [x] https://github.com/justin-chu/react-fast-marquee - [ ] rage quit hook - [ ] get token name in hooks Yeet card - [x] layout and basic data display - [ ] state indicators - new - ending soon - coming soon - [ ] switch dao name to loot token name (in query/hooks 1st) - [ ] better image formatting - maybe circle? handle different dimensions - actions - view details - yeet - link to detail page or open form in a modal - swap - if executed link to pool - exit - link to detail or open form in modal Yeet detail display - layout and data display - states - fail, upcoming, success, active Yeet button - opens yeet form in modal - migrate legos from yeeter app Exit button - RQ tx - default to native tokens and 100% Execute LP - New Execute tx on marketmaker - need logic to be enabled if after yeet period and goal reached Swap button - external link - assemble in useMarketMaker hook Yeets list and card - useYeets - all scoped to a yeeter - display messages and address and what they sent? - look at yeeter app - might be able to copy over Share button - copies url to clipboard? - look into yeet frames on base? Forms in modals - migrate legos from yeeter app - can we use better markdown field from din ## Documentation TBD ## Token mech ideas ### yeet fees go into a shared pool that rewards successful yeets. - would compound as more yeets are attempted and some fail. - create incentive for pre sale participants - creates volatility with new pool - could be used to incentives first successfull yeets with garunteed max reward (if pool is bootstrapped with some funds) example: 10% fee on yeet - 9% to shared reward pool (more of a yeet deposit) - 1% to yeeter/ph dev on success (meets threshold in time window) - claim reward before execute on transfer % to safe (min 9%, max ??) - execute then creates a pool with more native funds will need a new contract/module that tallies rewards for claims. this could be on a meme DAO as well ## Resources wires https://www.figma.com/design/gyvEAkOsFyhMx7MWzmxKxh/Untitled?node-id=16%3A12&t=xs8QbHFr2EDVgRLL-1 repo https://github.com/dh-edu-token-defi