Skip to content

Propdate EAS Schema

Overview

This schema defines how users of Nouns Builder can submit Propdates, i.e., updates, comments, and milestone-related actions, to DAO proposals using the Ethereum Attestation Service (EAS). All attestations using this schema are displayed under the Propdates section of the proposal UI. It supports Markdown, IPFS links, structured JSON, and threaded discussions via reply references.

Sequence Diagram

EAS Attestaion Flow

sequenceDiagram
participant User
participant DAO Frontend
participant Ethereum Attestation Service (EAS)
participant Blockchain
User->>DAO Frontend: Compose Propdate update
DAO Frontend->>User: Prompt to sign transaction
User->>Blockchain: Sign and submit Propdate attestation
Blockchain->>EAS: Store attestation
DAO Frontend->>EAS: Fetch Propdates for proposal/activity feed
EAS->>DAO Frontend: Return Propdate data
DAO Frontend->>User: Display Propdates (filtered by member/all)

Schema Specification

The schema with the UID 0x8bd0d42901ce3cd9898dbea6ae2fbf1e796ef0923e7cbb0a1cecac2e42d47cb3 enables Nouns Builder Propdates. It is deployed onchain on all networks supported by Nouns Builder except Zora. The schema consists of mandatory and optional fields. The payload displayed on the frontend is wrapped in a message field, which MAY contain a JSON string.

Deployed Schemas

Schema Structure

bytes32 proposalId;
bytes32 originalMessageId;
uint8 messageType; // 0: INLINE_TEXT, 1: INLINE_JSON, 2: URL_TEXT, 3: URL_JSON
string message; // Inline content or off-chain URL

Field Breakdown

FieldTypeDescription
proposalIdbytes32Proposal ID (usually keccak256 of the proposal metadata or ID hash)
originalMessageIdbytes32UID of another attestation being replied to. Use 0x0 for top-level comments.
messageTypeuint8Specifies how to interpret message. See types below.
messagestringInline content (if INLINE_*) or a URL (e.g., IPFS) if URL_*

Message Type Definition

CodeNameDescription
0INLINE_TEXTRaw Markdown string submitted inline
1INLINE_JSONJSON payload embedded directly in the attestation
2URL_TEXTURL (e.g., IPFS) pointing to a Markdown file
3URL_JSONURL (e.g., IPFS) pointing to a JSON file

JSON Payload (For INLINE_JSON or URL_JSON)

{
"milestoneId": 2,
"content": "Delivered frontend with tests.",
"labels": ["delivery", "frontend"],
"attachments": ["ipfs://bafybeigdyrhnsq.../demo.mp4"]
}

JSON Field Reference

FieldTypeDescription
milestoneIdnumber[Optional] Milestone index the update refers to
contentstring[Required] text content
labelsstring[][Optional] Tags for filtering/search
attachmentsstring[][Optional] List of media or file URLs (preferably IPFS)

Usage

Example Attestation

View on EASScan

{
"proposalId": "0x20dce33aa50446e11ad5e97321f50e98c5d4fa41b0cfa87b5a525a6d1100fc4b",
"originalMessageId": "0x0000000000000000000000000000000000000000000000000000000000000000",
"messageType": 1,
"message": "{\"milestoneId\":1,\"content\":\"Milestone 1 complete. All Figma wireframes uploaded.\",\"labels\":[\"figma\",\"ux\"],\"attachments\":[\"ipfs://bafybeihpky3lq4m/demo.mp4\"]}"
}

Workflow for Non-UI Propdates

  1. Create attestation
    A wallet with authority can submit an attestation directly through EAS using the schema UID.

  2. Fetch and display attestations
    Fetch the schema on the relevant network using EAS Scan and the Schema UID. Connect your wallet and post an update.

  3. Propdates versus release requests Release request must be made independently of updates and comments, using the Release Milestone functionality, as described in the Nouns Builder Escrow Proposal Guide

Usage in Nouns Builder Frontend

  • Appears in the Propdates tab on the proposal page.
  • Posts by DAO members are shown by default, but anyone can:
    • Post progress updates
    • Comment on milestones
    • Start threaded conversations

Attestation Policy and Deploying Schemas

Only attestations from DAO members are displayed under Propdates by default, but users can select All Propdates to see non-member comments.

The attestation schema can be deployed to additional networks using the same UID by anyone.