DAOIP-3: Attestations for DAOs #39
Replies: 9 comments 1 reply
-
Right now, the |
Beta Was this translation helpful? Give feedback.
-
For the past few months, Avenue has been integrating with Govrn through this DAOIP. Currently, contributions made on Govrn show up on Avenue. As an example: https://avenue.place/@m contains several contributions, all implemented through this standard. Avenue also allows minting contributions automatically on Govrn, which are then resynced to Avenue. However, we realised that we needed a common definition of a contribution to get true value of this integration. While implementing, we also found some technical changes that should be done to make the data-sharing process viable. Technical Limitations
Without support for pre-fetching (i.e. including the contribution details in the original request), the API becomes unbearably slow to make it truly useful. Currently at Avenue we cache every contribution. We are also aware that Govrn does the same. Contributions that are made available on-chain (with their metadata off-chain) are replicated 3x: on Avenue’s database, on Govrn’s database and on-chain (or on IPFS). However, even if we ended up implementing pre-fetching in it’s current state, it would still be difficult to use without defining a base schema for a contribution and (in the future) for its attestations. I suggest we keep the technical issues far from this discussion and let engineers at Avenue and Govrn tackle them. These are just two simple technical limitations, without a lot of room for subjectivity. Instead, focus on adding a contribution schema to the standard. Suggestion for Contribution schemaBefore moving to an attestation framework, we need to understand what we're attesting to and further develop the standard. We're starting by defining a contribution schema that can be easily extended by anyone. This process will very much be trial-and-error until the schema stabilises. For that reason, Avenue and Govrn are working closely together to try out the integration as the DAO-IP updates. We started by figuring out what the smallest common ground is and we can later extend the definition as more people and tools join and find more use cases. Regardless, ideally the schema should be as slim as possible, avoiding a large number of fields. With that in mind, and for the sake of kicking off the conversation, the first suggestion is defining a contribution as having the following fields
{
"external": {
"avenue": {
"outcomeId": 1,
"authorId": 2,
"organizationId": 3
},
"govrn": {
"daoId": 1,
"bannerUrl": "https://..."
}
}
} This field allows each platform to extend the schema with specific metadata. As an example, a third-party could backlink a contribution to Avenue or Govrn or even integrate with them directly. It’s essential to have such a field that enables custom integrations between tools. The following fields are security-related:
The Final SchemaNone of these fields need to be kept on-chain - some even shouldn’t. However, for any provider that implements this DAOIP API endpoint, they should be provided. An example response of this endpoint would be: {
"@context":"http://www.daostar.org/schemas",
"type":"arrayAttestation",
"issuer":"<Avenue's issuerURI>",
"member":{
"type":"ENS",
"id":"josh.eth"
},
"organizations":[
{
"expiration":"<ISO-datetime>",
"attesterURI":"<DAOStar One's membersURI>",
"name":"DAOstar One",
"daoURI":"<DAOStar One's daoURI, following EIP-4824>"
}
],
"contributions":[
{
"type":"contribution",
"referenceURI?":"<URI reference to the tweet on Govrn's platform or IPFS or other storage>",
"reference?":{
"provider":"govrn",
"providerURI":"<Govrn's URI>",
"providerId":123,
"providerSignature":"<Govrn's signature>",
"issuer":"avenue",
"issuerURI":"<Avenue's URI>",
"issuerId":"abc123",
"issuerSignature":"<Avenue's signature>",
"title":"Took part in a DAOStar Voyager meeting",
"description":"Meeting happened on 2022-04-12",
"contributors":[
"<josh's address>",
"<mendes's address>",
"<aaron's address>"
],
"contributorSignatures":[
"<josh's signature>",
"<mendes's signature>",
"<aaron's signature>"
],
"dateOfEngagement":"2022-04-12T17:00:00Z",
"external":{
"avenue":{
"outcomeId":1,
"authorId":2,
"organizationId":3
},
"govrn":{
"daoId":1,
"bannerUrl":"https://..."
}
}
}
}
]
} Next StepsWe’re opening this up for discussion for now, while trying to keep the schema as simple as possible and without relying on specific taxonomies or DSLs to describe a contribution. Ideally, we’d gather feedback around the fields, especially the security-related ones. In the meantime, Avenue and Govrn will be implementing this iteration and posting results soon. |
Beta Was this translation helpful? Give feedback.
-
After checking with the Govrn team, we realised the following:
There was also a New iteration of the v2 contribution schema: {
"@context":"http://www.daostar.org/schemas",
"type":"arrayAttestation",
"issuer":"<Avenue's issuerURI>",
"member":{
"type":"ENS",
"id":"josh.eth"
},
"organizations":[
{
"expiration":"<ISO-datetime>",
"attesterURI":"<DAOStar One's membersURI>",
"name":"DAOstar One",
"daoURI":"<DAOStar One's daoURI, following EIP-4824>"
}
],
"contributions":[
{
"type":"contribution",
"referenceURI?":"<URI reference to the tweet on Govrn's platform or IPFS or other storage>",
"reference?":{
"version": 2,
"issuer":"govrn",
"issuerURI":"<Govrn's URI>",
"issuerId":123,
"title":"Took part in a DAOStar Voyager meeting",
"description":"Meeting happened on 2022-04-12",
"contributors":[
"<josh's address>",
"<mendes's address>",
"<aaron's address>"
],
"contributorSignatures":[
"<josh's signature>",
"<mendes's signature>",
"<aaron's signature>"
],
"dateOfEngagement":"2022-04-12T17:00:00Z",
"external":{
"avenue":{
"outcomeId":1,
"authorId":2,
"organizationId":3,
"signature":"<Avenue's signature>"
},
"govrn":{
"daoId":1,
"bannerUrl":"https://..."
}
}
}
}
]
} |
Beta Was this translation helpful? Give feedback.
-
In discussion with @bryce at EAS: would it be useful to incorporate the uid field that exists in all EAS attestations, which is just a b32 hash of the entire data, using their same process? This might make attestations published here more interoperable with EAS attestations. Bryce can speak more to why that might be a good idea. |
Beta Was this translation helpful? Give feedback.
-
After chatting with @frm and Aaron, for the v1 contributions schema we are not including the |
Beta Was this translation helpful? Give feedback.
-
Hi folks, just a heads up that I shipped a major new version of the standard (see #156), with the following changes:
|
Beta Was this translation helpful? Give feedback.
-
From a call today, answers to some questions:
{
"@context": ["https://daostar.org/schemas", "https://www.w3.org/ns/credentials/v2"],
"type": ["VerifiableCredential", "Attestation", "<the type of the attestation if any>"],
"issuer": "<URI returning data conforming to the Attestation Issuer JSON-LD Schema>",
"attestationURI": "<the URI or API request from which someone can obtain the attestation>",
"expirationDate": "<ISO DateTime>",
"credentialSubject": {
"<mySubjectProperty>": "<mySubjectValue>"
}
} LXDAO/Fairsharing needs to publish For the Most of the data falls within {
"@context": ["http://www.daostar.org/schemas", "https://www.w3.org/ns/credentials/v2"],
"type": ["VerifiableCredential", "Attestation", "MembershipAttestation"],
"issuer": "<URI returning data conforming to the Attestation Issuer JSON-LD Schema>",
"attestationURI": "<the URI or API request from which someone can obtain the attestation>",
"expirationDate": "<ISO DateTime>",
"credentialSubject": {
"type": "EthereumAddress",
"id": "0x8ada9BB0982a269d232186013d39C37e21655046",
"contributionId": "0x7de3000a3ad70fe308f34e088890ff562bb9f364b0e09a6c27cd6b16c1f347ae",
"details": "??",
"contributionType": "0x8ada9BB0982a269d232186013d39C37e21655046",
"proof": "0x8ada9BB0982a269d232186013d39C37e21655046",
"startDate": "0x8ada9BB0982a269d232186013d39C37e21655046",
"endDate": "0x8ada9BB0982a269d232186013d39C37e21655046",
"tokenAmount": "0x8ada9BB0982a269d232186013d39C37e21655046",
"extended": "0x8ada9BB0982a269d232186013d39C37e21655046",
}
} To adopt, LXDAO should deploy a new schema that looks like the above. Effectively, because EAS doesn't allow nesting, the schema on EAS should effectively just have a "@context", "type", "issuer", "attestationURI", "expirationDate", and "credentialSubject" field. This does make it a little bit harder to index (i.e. you can't use EAS to differentiate the schemas, because the key differences are all nested within Note that we had to rename "type" in LXDAO's original schema to "contributionType", since "type" is reserved in DAOstar's schemas (here, to refer to the type of credentialSubject, i.e. whether it's an Ethereum address, a DID address, etc.).
TBD! Some to-dos: additional EAS schemas to deploy
|
Beta Was this translation helpful? Give feedback.
-
@thelastjosh, from DAOIP-3: "...note the mandatory inclusion of an expirationDate field on every attestation as well as attestationURI, which is the URI or request through which someone can reproduce the attestation. ". If we are talking about a URI that points to a specific attestation, that URI wouldn't be available until after the attestation is made, right? Or does attestationURI here correspond to a broader location (say if it is an attestation through EAS that uses a schema defined by Fairsharing. Then the attestationsURI could be the link to the schema and not the particular attestation in question)? |
Beta Was this translation helpful? Give feedback.
-
@crazyyuan, @mike, is it safe to say that EAS does support nesting in some sense if the input of a field is set to an array? The schema in the picture: https://optimism-goerli-bedrock.easscan.org/schema/view/0xc57e76eb1ef07cc577da25bdccac94f022201bb9b39157467822f65cd050366f |
Beta Was this translation helpful? Give feedback.
-
Discuss design, implementation, and changes to DAOIP-3 Attestations for DAOs.
Beta Was this translation helpful? Give feedback.
All reactions