---
tags: v3
---
# v3 Subgraph Spec
## Entities
#### baal
#### proposal
proposalId: uint256
prevProposalId: uint256
votingStarts: uint256
votingEnds: uint256
graceEnds: uint256
proposalData: bytes (or string to hold more data)
proposalDataHash: bytes32
expiration: uint256
selfSponsor: bool
details: string
yesVotes: uint256
noVotes: uint256
maxTotalSharesAndLootAtYesVote: uint256
cancelled: bool
processed: bool
passed: bool
actionFailed: bool
sponsor: bytes
proposer: bytes
processor: bytes
createdAt: uint256
sponsoredAt: uint256
processedAt: uint256
cancelledAt: uint256
moloch
escrows
votes
#### proposal escrow
proposal
tributeToken
tributeOffered
released
applicant
safe
questions:
- can add detail in proposal entitity, but will be inconsistent with props submitted without escrow contract
- sharesRequested
- lootRequested
#### vote
voteWeight (or balance)
approved
member
proposal
#### member
#### tokens
address
symbol
decimals
questions
- needed for whitelisted tokens for a dao?
- token balances are no longer internal
- could track here for avatar/dao
- or sub-balance records
- prevProposalId
- needed for processing order?
## Events & mappings
```
event SetupComplete(
bool lootPaused,
bool sharesPaused,
uint32 gracePeriod,
uint32 votingPeriod,
uint256 proposalOffering,
uint256 quorumPercent,
uint256 sponsorThreshold,
uint256 minRetentionPercent,
string name,
string symbol,
address[] guildTokens,
uint256 totalShares,
uint256 totalLoot
); /*emits after Baal summoning*/
```
- create moloch entity
- loop guildTokens to create token entities
** revist with factory
```
event SubmitProposal(
uint256 indexed proposal,
bytes32 indexed proposalDataHash,
uint256 votingPeriod,
bytes proposalData,
uint256 expiration,
bool selfSponsor,
uint256 timestamp,
string details
); /*emits after proposal is submitted*/
```
- create proposal entity
questions
- define level of bucketing prop types
- decode proposalData?
- define solid details schema
- can parse into meaningful fields if we do this
- can we update proposal status equal to proposal states if all time based?
```
enum ProposalState {
Unborn, /* 0 - can submit */
Submitted, /* 1 - can sponsor -> voting */
Voting, /* 2 - can be cancelled, otherwise proceeds to grace */
Cancelled, /* 3 - terminal state, counts as processed */
Grace, /* 4 - proceeds to ready/defeated */
Ready, /* 5 - can be processed */
Processed, /* 6 - terminal state */
Defeated /* 7 - terminal state, yes votes <= no votes, counts as processed */
}
```
- can't get without decoding
- shares/loot requested/applicant/tribute/payment/ect...
- add event on tribute contract?
- can store proposal escrow similar to v2
```
event SponsorProposal(
address indexed member,
uint256 indexed proposal,
uint256 indexed votingStarts
); /*emits after member has sponsored proposal*/
event CancelProposal(uint256 indexed proposal); /*emits when proposal is cancelled*/
```
- update proposal entity
```
event SubmitVote(
address indexed member,
uint256 balance,
uint256 indexed proposal,
bool indexed approved
); /*emits after vote is submitted on proposal*/
```
- create vote entity
- update proposal
## todo
- baal/v3.1
- factory
- will play with summonComplete in baal
- poster (or in factory)
- token tracking
- erc20/721/1155
- do we need history for charts or let bolton devs handle
- tribute proposal contract
- loot erc20?
- shares erc20 can be transferred outside this contract?
- naming: baal or moloch?
- add transactions
- entity for polls
- contectualy transaction hashes for some events for auditing?
## factory notes
looterc20 factory
safe factory
baal factory
ball+safe+loot factory
- see dsm factory
- takes all the things
- _initializationMultisendData
multisendcontrat per network
function to take all our params
- needs safe/avatar
- needs setup multisend data for share/loot/members
- _initializationMultisendData
- initial shaman to set those shares?
call setup
poster for metadata
summonBaalAndSafe
- add poster call
summonBaalWithSafe