# 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