# Yeeter :: Architecture
## Overview
**Yeeter stack**
1. Solidity Contracts
2. Data indexed in subgraphs
3. A [react application front end](https://github.com/yeet-haus/mvp) interacting with the contracts and subgraph. [Deployed here](https://app.yeet.haus/)
1 and 2 are completely permissionless. We encourage anyone to build different versions of 3. Some of the information below might help with that.
## Contracts
**Overview**
The yeeter system is an extension of the daohaus protocol. The contracts used include
- A **higher order summoner contract** responsible for deploying the dao contract and the yeeter campaign contract
- Each yeeter campaign is made up of
- A **moloch v3 dao contract** and it's related contracts responsible for all dao operations
- **Moloch v3 (aka baal):** governance
- **Safe**: treasury
- **Share and Loot token ERC20 contracts**: membership
- A **yeeter shaman contract** responsible for the fund raising mechanics
**Moloch v3**
[Learn more about the moloch v3 contracts](https://docs.daohaus.club/contracts) and even more [here](https://moloch.daohaus.fun/)
**Yeeter Shaman**
The **yeeter contract** acts as a shaman for a doahaus moloch v3 dao contract. It is granted admin permissions on the dao allowing it to give out shares and loot without using a dao proposal.
[Learn more about shaman contracts](https://docs.daohaus.club/contracts/shamans)
**Summoner contracts**
This is a factory contract that creates a dao and shaman contract.
[Learn more about summoners here](https://docs.daohaus.club/contracts/summoners)
**Supported chains**
- Sepoila
- Optimism
- Base
- Arbitrum
- Gnosis Chain
[**Contract addresses**](#Contract-addresses)
**Flows**
***Launching a campaign***
- This is a complex transaction with params and action data that executes
- deploying up the molochv3 with all initial governance settings and shaman admin settings for the new yeeter shaman
- deploying up the shares/voting token
- deploying up the loot token
- initial metadata post with dao name
- deploying the yeeter shaman
- The yeeter application constructs all params and calls this function: `summonBaalFromReferrer`
- Yeeter shaman params include
* uint256 startTime: timestamp when contributions can start being accepted
* uint256 endTime: timestamp when contributions will no longer be accepted
* bool isShares: indicates if contribution returns shares or loot
* uint256 minTribute: minimum amount of eth for a contribution
* uint256 multiplier: how much to multiply the eth amount by for share/loot return
* uint256 goal: fundraising goal
* address[] feeRecipients: array of addresses to send fee cut to on contributions
* uint256[] feeAmounts: array of percentages for fee cuts to each recipient
***Contributing to a campaign***
- This is a function on the yeeter shaman: `contributeEth`
- It accepts eth and takes a string message param
- The function does the following
- sends the eth to the dao treasury
- sends fees to the identified fee recipients
- gives the sender share or loot in the dao
- emits an event with the message data
**Repos**
- [Yeeter](https://github.com/yeet-haus/contracts)
- [summoners](https://github.com/yeet-haus/contracts/tree/main/contracts/hos)
- [shaman](https://github.com/yeet-haus/contracts/blob/main/contracts/mock/shamans/EthYeeter.sol)
- [Moloch V3/Baal](https://github.com/HausDAO/Baal)
- [Moloch V3/Baal Tokens](https://github.com/HausDAO/baal-tokens)
- [Moloch V3/Baal Shamans](https://github.com/HausDAO/baal-shamans)
## Data Indexing
**Overview**
Useful data is indexed in 2 subgraphs coming from events emitted on the molochv3 dao and yeeter shaman contracts
[**daohaus subgraphs**](https://docs.daohaus.club/subgraphs)
These index all dao data, see the link above for more info and endpoints
**Yeeter subgraph**
These index data specific to the yeeter shaman.
Entities
- DAO: basic info for each dao summoned for a yeeter campaign. Daohaus subgraph will have richer data, so 2 queries mighjt be necessary for your usecase
- YEETER: data for the yeeter campaign contract
- YEET: data for each individual contribution
[Fields can be seen here](https://github.com/yeet-haus/subgraph/blob/master/schema.graphql)

[Repo](https://github.com/yeet-haus/subgraph)
[**Endpoints and explorer urls here**](#Subgraph-endpoints-and-explorer-urls)
## MVP Yeeter App
[This app](https://app.yeet.haus/) is one possible interface into the contracts and data for the yeeter protocol.
It was built as a react app using the [daohaus sdk and starter repo](https://docs.daohaus.club/sdk/starter).
It supports the following usecases
- Launch a yeeter campaign (with a new dao)
- Manage some metadata for the yeeter campaign
- Contribute to the campaign
[REPO](https://github.com/yeet-haus/mvp)
[DEPLOYMENT](https://app.yeet.haus/)
### Some useful sections of code that might be reusable
**Data fetching**
[These hooks](https://github.com/yeet-haus/mvp/tree/develop/src/hooks)
- get all yeeter campaigns
- get a single yeeter campaign
- get all contrinbutions (yeets) for a campaign
- these use the [graph queries found here](https://github.com/yeet-haus/mvp/blob/develop/src/utils/graphQueries.ts)
**Transactions**
This app uses the daohaus sdk form and transaction builder so it's a little mnore difficult to copy and paste this, but there is reusable code.
Contribute
- Yeeter chaman contract
- contributeEth function
- args: a message string
- value: amount of eth getting contributed
Launch a campaign
- Yeeter Higher Order Summoner contracts
- summonBaalFromReferrer function
- [Helpers for constructing the function params are here](https://github.com/yeet-haus/mvp/blob/develop/src/utils/summonTx.ts)
---
## More resources
### Contract addresses
Summoner
- Gnosis Chain: "0x313f9A3C9A5041e9be00cf88b18962581A4eFb35"
- Optimism: "0x2875aEbb4472E5E579a2A5290c7B5A3C90484D5F"
- Aritrum: "0x2875aEbb4472E5E579a2A5290c7B5A3C90484D5F"
- Base: "0x2875aEbb4472E5E579a2A5290c7B5A3C90484D5F"
- Sepolia: "0x2875aEbb4472E5E579a2A5290c7B5A3C90484D5F"
Yeeter shaman template
- Gnosis Chain: "0xbe056B4187387D1Cb503370FeA2815e42981DfdF"
- Optimism: "0x8D60971eFf778966356c1cADD76d525E7B25cc6b"
- Aritrum: "0x8D60971eFf778966356c1cADD76d525E7B25cc6b"
- Base: "0x8D60971eFf778966356c1cADD76d525E7B25cc6b"
- Sepolia: "0x62fF4Ca410E9e58f5ce8B2Ad03695EF0ad990381"
### Subgraph endpoints and explorer urls
**Sepolia**
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/8Syem3ZN88cut1wL8AqPHNo658Px7M2CkRuHAGuxvf6j
or
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/3k93SNY5Y1r4YYWEuPY9mpCm2wnGoYDKRtk82QZJ3Kvw
**Gnosis chain**
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/EGG5xEkiKKtGa9frTfBSmL2w7ZmzPDke5ZuvxDRwQcGe
or
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/6x9FK3iuhVFaH9sZ39m8bKB5eckax8sjxooBPNKWWK8r
**Optimism**
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/55wEbRchfvjtWsy5NqLc4hp9C7xbX9yk8bAr3UQA8F7x
*explorer*
https://thegraph.com/explorer/subgraphs/55wEbRchfvjtWsy5NqLc4hp9C7xbX9yk8bAr3UQA8F7x?view=Query&chain=arbitrum-one
**Arbitrum**
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/BeGugH1TsMspZ7Nov1Uq2PQ98X78sqjuEy1JFGLyNgt5
*explorer*
https://thegraph.com/explorer/subgraphs/BeGugH1TsMspZ7Nov1Uq2PQ98X78sqjuEy1JFGLyNgt5?view=Query&chain=arbitrum-one
**Base**
https://gateway-arbitrum.network.thegraph.com/api/<your-graph-key-here>/subgraphs/id/6vyAqRpCyrhLsfd6TfYAssvKywKhxJykkDbPxJZ4ZcEr
*explorer*
https://thegraph.com/explorer/subgraphs/6vyAqRpCyrhLsfd6TfYAssvKywKhxJykkDbPxJZ4ZcEr?view=Query&chain=arbitrum-one