👹

Moloch

DAO URI resolves to multiple sub URIs
Members URI
{
  "@context": "http://www.daostar.org/schemas",
  "type": "DAO",
  "name": "<name of the DAO>",
  "members": [
    {
      "type": "MolochDAOMember",
      "address": "<address>",
			"votingShares",
			"nonVotingShares",
			"joinDate",
			"status": "Jailed" | "Kicked",
			"delegation"
    },
    {
      "type": "EthereumAddress",
      "address": "<address>"
    }
  ]
}
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": "[CONTRACT_ADDRESS][PROPOSAL_COUNTER]",
				"title": "<Proposal Title>",
				
 
{
  "@context": "http://www.daostar.org/schemas",
  "type": "DAO",
  "name": "<name of the DAO>",
  "proposals": [
    {
      "type": "proposal",
      "id": "<proposal ID>",
      "name": "<name or title of proposal>",
      "contentURI": "<URI to content or discussion>",
      "status": "<status of proposal>",
			"sponsor",
			"votes",
.... other stuff from the DAOHaus subgraph
      "calls": [
        {
          "type": "CallDataEVM",
					"operation": "<call or delegate call>",
          "from": "<EthereumAddress>",
          "to": "<EthereumAddress>",
					"value": "<value>",
          "data": "<call data>"
        }
      ]
    }
  ]
}
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;
 
    👹

    Moloch

    DAO URI resolves to multiple sub URIs
    Members URI
    {
      "@context": "http://www.daostar.org/schemas",
      "type": "DAO",
      "name": "<name of the DAO>",
      "members": [
        {
          "type": "MolochDAOMember",
          "address": "<address>",
    			"votingShares",
    			"nonVotingShares",
    			"joinDate",
    			"status": "Jailed" | "Kicked",
    			"delegation"
        },
        {
          "type": "EthereumAddress",
          "address": "<address>"
        }
      ]
    }
    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": "[CONTRACT_ADDRESS][PROPOSAL_COUNTER]",
    				"title": "<Proposal Title>",
    				
     
    {
      "@context": "http://www.daostar.org/schemas",
      "type": "DAO",
      "name": "<name of the DAO>",
      "proposals": [
        {
          "type": "proposal",
          "id": "<proposal ID>",
          "name": "<name or title of proposal>",
          "contentURI": "<URI to content or discussion>",
          "status": "<status of proposal>",
    			"sponsor",
    			"votes",
    .... other stuff from the DAOHaus subgraph
          "calls": [
            {
              "type": "CallDataEVM",
    					"operation": "<call or delegate call>",
              "from": "<EthereumAddress>",
              "to": "<EthereumAddress>",
    					"value": "<value>",
              "data": "<call data>"
            }
          ]
        }
      ]
    }
    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;
    Â