Moloch [deprecated]
DAO URI resolves to multiple sub URIs
Members URI
{
"@context": {
"members": "https://daostar.org/members",
"member": "https://daostar.org/member",
"memberId": "https://daostar.org/memberId",
"votingShares": "https://daostar.org/moloch/votingShares",
"nonvotingShares": "https://daostar.org/moloch/nonvotingShares",
"ethereum-address": "https://daostar.org/EthereumAddress"
},
"members": [{
"memberId": {
"@value": "0xabc123",
"@type": "ethereum-address"
},
"votingShares": "100",
"nonvotingShares": "50"
},
{
"memberId": {
"@value": "0xdef987",
"@type": "ethereum-address"
},
"votingShares": "150",
"nonvotingShares": "25"
}
]
}
This expands to...
[
{
"https://daostar.org/members": [
{
"https://daostar.org/memberId": [
{
"@type": "https://daostar.org/EthereumAddress",
"@value": "0xabc123"
}
],
"https://daostar.org/moloch/nonvotingShares": [
{
"@value": "50"
}
],
"https://daostar.org/moloch/votingShares": [
{
"@value": "100"
}
]
},
{
"https://daostar.org/memberId": [
{
"@type": "https://daostar.org/EthereumAddress",
"@value": "0xdef987"
}
],
"https://daostar.org/moloch/nonvotingShares": [
{
"@value": "25"
}
],
"https://daostar.org/moloch/votingShares": [
{
"@value": "150"
}
]
}
]
}
]
Proposals URI
Note that
executionData
is blank because Moloch v2 DAOs do not have arbitrary external interaction abilities without using minion helper contracts.{
"@context": {
"@vocab": "http://daostar.org/"
},
"proposals": [
{
"metadata": {
"proposalId": "[CHAIN_ID][CONTRACT_ADDRESS][PROPOSAL_COUNTER]",
"title": "<Proposal Title>",
"contentURI": "https://forum.daohaus.club/example"
},
"status": {
"@type": "daostar:molochv2Status",
"@value": "sponsored"
},
"executionData": {}
}
]
}
This expands to...
[
{
"http://daostar.org/proposals": [
{
"http://daostar.org/executionData": [
{}
],
"http://daostar.org/metadata": [
{
"http://daostar.org/contentURI": [
{
"@value": "https://forum.daohaus.club/example"
}
],
"http://daostar.org/proposalId": [
{
"@value": "[CONTRACT_ADDRESS][PROPOSAL_COUNTER]"
}
],
"http://daostar.org/title": [
{
"@value": "<Proposal Title>"
}
]
}
],
"http://daostar.org/status": [
{
"@type": "daostar:molochv2Status",
"@value": "sponsored"
}
]
}
]
}
]
Constitution URI
Constitution URI leads to an IPFS hosted markdown file with information about the DAO’s purpose.
Activity Log
{
"@context": {
"@vocab": "http://daostar.org/"
},
"activity": [
{
"interactionType": "vote",
"voter": {
"@value": "0xabc123",
"@type": "ethereum-address"
},
"proposal": "[DAO_CONTRACT_ADDRESS][PROPOSAL_COUNTER]",
"result": {
"choice": "yes",
"weight": {
"@type": "shares",
"@value": 150
}
},
"timestamp": "2021-01-01"
}
]
}
This expands to...
[
{
"http://daostar.org/activity": [
{
"http://daostar.org/interactionType": [
{
"@value": "vote"
}
],
"http://daostar.org/proposal": [
{
"@value": "[DAO_CONTRACT_ADDRESS][PROPOSAL_COUNTER]"
}
],
"http://daostar.org/result": [
{
"http://daostar.org/choice": [
{
"@value": "yes"
}
],
"http://daostar.org/weight": [
{
"@type": "http://daostar.org/shares",
"@value": 150
}
]
}
],
"http://daostar.org/timestamp": [
{
"@value": "2021-01-01"
}
],
"http://daostar.org/voter": [
{
"@type": "http://daostar.org/ethereum-address",
"@value": "0xabc123"
}
]
}
]
}
]
Â
Moloch v2.1++
In Moloch V2 we extend the concept of proposal flags to include a URI proposal type. The DAO URI is queried via a standard interface. It is changed through submitting, sponsoring, voting on, and processing DAO URI change proposals
Â
interface IEIP_TBD {
function daoURI() external view returns (string memory);
}
function submitUriProposal(string memory newURI) public nonReentrant returns (uint256 proposalId);
function processUriProposal(uint256 proposalIndex) public nonReentrant;
// EVENTS
event ProcessUriProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
Moloch v3++
In Moloch V3 we have generic action proposals so all we need to add is a URI state variable and a setter. This can then be updated through standard governance flows.
Â
interface IEIP_TBD {
function daoURI() external view returns (string memory);
}
function setDaoUri(string memory _newUri) external baalOnly;
Legacy Adapter Minion
For Moloch DAOs that were launched pre-DAOstar they can use and EIP_TBD minion contract with a DAO URI field. This works very similarly to the Moloch V3 example above
Â
interface IEIP_TBD {
function daoURI() external view returns (string memory);
}
function setDaoUri(string memory _newUri) external minionOnly;
Â