Skip to content

Conversation

@Thomas-nada
Copy link

@Thomas-nada Thomas-nada commented Oct 28, 2025

This is a new Metadata CIP proposing a standard for on-chain surveys and community sentiment polling.

The goal is to provide a single, standardized, transparent, and reliable way for any entity (Foundations, DReps, projects, or community members) to conduct simple, structured consultations directly on-chain — without requiring deposits or governance actions.

This proposal defines two minimal CIP-0068 (label 674) metadata payloads:

  • Survey Definition Payload: Specifies the survey question, available options, eligibility criteria, and vote aggregation method (StakeBased or CredentialBased). It may optionally reference a governance action by transaction ID and action index.
  • Survey Response Payload: Enables any eligible stakeholder to submit their response, immutably linked to the originating survey transaction ID.

This standard provides a lightweight, interoperable foundation for ecosystem-wide sentiment gathering — allowing explorers, wallets, and dApps to discover, display, and aggregate survey results in a consistent, transparent way.


(rendered latest proposal version)

@Ryun1 Ryun1 changed the title CIP-XXXX: A Standard for On-chain Survey via Info Action CIP-???? | A Standard for On-chain Survey via Info Action Oct 28, 2025
@Ryun1 Ryun1 added the Category: Metadata Proposals belonging to the 'Metadata' category. label Oct 28, 2025
Copy link
Collaborator

@Ryun1 Ryun1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the proposal @Thomas-nada
I agree on the problem space
keen to see this one develop


### 1. Poll Definition Payload

This metadata is included in the transaction that creates a governance "**Info Action**" to announce and define the poll. The **674** metadata entry **MUST** contain a `pollDetails` object.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be worth considering how multiple surveys could be submitted at once.

Maybe reuse the governance action anchor? Rather than attaching transaction metadata too.

Copy link
Author

@Thomas-nada Thomas-nada Oct 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For multiple surveys at once I was thinking of something like this:

{
  "674": {
    "0": {
      "msg": [
        "Poll Title: [Insert Short, Human-Readable Title for Poll 0]"
      ],
      "pollDetails": {
        "specVersion": "1.0",
        "type": "[single-choice | multi-select]",
        "question": "[Insert the full, unambiguous poll question here]",
        "description": "[Insert detailed explanation, rationale, or context for the poll (supports markdown).]",
        "options": [
          "[Option 1 Text]",
          "[Option 2 Text]",
          "[Add more options as needed...]"
        ],
        "maxSelections": 1,
        "eligibility": [
          "[Stakeholder | DRep | SPO | CC (or leave empty for 'Stakeholder')]"
        ],
        "voteWeighting": "[StakeBased | CredentialBased]"
      }
    },
    "1": {
      "msg": [
        "Poll Title: [Insert Short, Human-Readable Title for Poll 1]"
      ],
      "pollDetails": {
        "specVersion": "1.0",
        "type": "[single-choice | multi-select]",
        "question": "[Insert the full, unambiguous poll question here]",
        "description": "[Insert detailed explanation, rationale, or context for the poll (supports markdown).]",
        "options": [
          "[Option A Text]",
          "[Option B Text]"
        ],
        "maxSelections": 3,
        "eligibility": [
          "DRep", 
          "SPO"
        ],
        "voteWeighting": "CredentialBased"
      }
    }
  }
}

But agreed, using the anchor is another option worth exploring.

This metadata is included in the transaction a voter submits to cast their vote. The **674** metadata entry **MUST** contain a `voteFor` object.

```json
{
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of transaction metadata, why not reuse the the anchor within the vote?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I anchored the poll definition data directly to the transaction metadata (using label 674 and the TxId as the anchor), instead of pushing the data off-chain to IPFS or similar external storage.

I went this route to keep everything purely on-chain and simple, but I know it limits the total size of the poll data.

Thoughts on this trade-off? Is the simplicity of the transaction metadata anchor worth the size limit, or should it use an external anchor?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Including the metadata in the anchor of the vote txn would also not allow ADA holders to directly participate.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Including the metadata in the anchor of the vote txn would also not allow ADA holders to directly participate.

Ada holders absolutely can still participate. They can't cast a formal, binding CIP-1694 vote (that's DRep/CC/SPO only), but this CIP is for a community sentiment survey.

Ada holder sends a metadata-only transaction containing their response, which is purely a data collection transaction, not a governance certificate.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was actually agreeing with you @Thomas-nada 😄

My comment was directed at @Ryun1, who suggested only leveraging the anchor within the vote txns, this would then exclude the average ada holders, since they cannot submit a vote txn.

## Rationale: how does this CIP achieve its goals?

* **General Purpose:** By removing complex, nested data structures, the metadata payload remains small, cheap to submit, and applicable to any simple question or sentiment check.
* **Leveraging Existing Standards:** Using CIP-0068 and the Info Action minimizes the need for new on-chain logic, maximizing discoverability and adoption.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel that using Info action is nice, as you can reuse some of existing protocol governance tooling, but limits you with the governance action deposit and governance action lifetime.

The other option I have considered is a solely transaction metadata standard, similar to CIP-94.

WDYT?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think sticking with the Info action approach would be best.
It limits spam, adds functionality to the already existing governance framework set out in CIP-1694 and the Constitution and should require minimum effort to implement for explorers and toolkits.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It limits spam,

there is other ways to do this, of course.

and not using Info actions, allows surveys to be ran for different lengths of time
and by people not having to have 100k ada

should require minimum effort to implement for explorers and toolkits.

if tools already need to implement and read a new metadata standard
these surveys being attached to Info actions doesn't make it any easier to implement

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

additionally, for non-stake-based surveys attached to Info actions,
tooling will have to show the stake-based for the Info action and then non-stake-based for the survey

this could be a bit of an annoying conflict to deal with for existing implementations

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess I could expand the scope to go beyond just governance and make it more generic.
The initial idea was to add usecase to info actions, but making it more generic will allow for a broader reach and easier entry.

The downside of this is that it can easily become cluttered when something like a CC election becomes mixed up with someone using the same process to survey something for their next NFT drop.

Copy link
Author

@Thomas-nada Thomas-nada Nov 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Ryun1 You've made some very strong points, and I have given it alot of thoughts. The 100k ada deposit, lifetime limits, and the UI conflict are all potential problems I initially have not given enough focus.

What if we pivot slightly?

Instead of using the Info Action as a carrier, we create a generic, standalone metadata standard for surveys like you mentioned. The key change would be adding an optional field to reference a governance action's transactionId and actionIndex.

This seems to solve a lot:

  1. Flexibility: It's cheap, has no deposit, and no time limits.
  2. Clean UI: It's clearly a "Survey," not seen as a conflicting governance action.
  3. Solves Clutter: We can add a category field (e.g., governance) to categorize polls.
  4. Keeps the Link: It still achieves my goal. For example, someone could post a Budge Info Action for a proposed budget, and a separate survey referencing it could immediately launch to gather detailed feedback which would be beneficial ahead of a treasury withdrawal. Tools could then easily find and display that poll alongside the Info Action. DReps votes on the info action as before, but are also able to provide more granular feedback in the survey.

This gives us the broad reach of a generic standard while still allowing us to add context to on-chain governance when needed.

What do you think of that approach?

@rphair rphair added the State: Triage Applied to new PR afer editor cleanup on GitHub, pending CIP meeting introduction. label Oct 29, 2025

```json
{
"674": {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand that a governance body's vote transaction is linked to the underlying info governance action, but for the ADA holder, I don't see how the vote metadata is tied to the info action. Here, I would suggest following the same methodology as CIP-0094, which includes a hash of the entire question.

@thenic95
Copy link

Thanks for sharing this idea on how to improve the capability of the info governance action type.

One thing that immediately comes to mind is how the metadata file for the actual info governance action should be structured to avoid a situation where the questions in the governance action metadata contradict the question posed in the transaction metadata.

It seems wise to me to also establish a standard for the governance action metadata body, perhaps even leaving it blank or using a template that will always generate the same metadata anchor URL and metadata anchor hash, so tools can easily verify this as well.

@Thomas-nada
Copy link
Author

Thats a valid question.

The way I envisioned it is the Info action acting as a vessel for the extended function.
The Info action itself contains no question, it only details the poll attached to it.
A specific mention that the votes being casted on the info action itself will not be taken into account could be a solution as we cannot "shut off" the ability to vote yes/no/abstain

Key updates:

Reworked the structure to no longer depend on the governance Info Action, surveys can now exist independently.

Added an optional referenceAction field (transactionId, actionIndex) to link a survey to a governance action when relevant.

Updated rationale, examples, and CDDL schema to align with the new standalone approach.

This version aims to make the standard simpler, cheaper to use, and more flexible, while still allowing contextual linkage to governance actions when desired.
@Thomas-nada Thomas-nada changed the title CIP-???? | A Standard for On-chain Survey via Info Action CIP-???? | A Standard for On-Chain Surveys and Polls Nov 5, 2025
@Thomas-nada
Copy link
Author

Following the earlier discussion, this proposal has been refactored into a generic, standalone metadata standard for on-chain surveys.

  • Surveys are now defined directly through CIP-0068 (label 674) metadata, without using a governance Info Action as a carrier.
  • An optional referenceAction field (transactionId, actionIndex) allows a survey to link to a governance action when relevant.
  • This approach removes deposits and lifetime limits while preserving contextual linkage to on-chain governance data.

Feedback on this direction is very welcome. 🙏

@rphair rphair changed the title CIP-???? | A Standard for On-Chain Surveys and Polls CIP-???? | On-Chain Surveys and Polls Nov 6, 2025
Copy link
Collaborator

@rphair rphair left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Thomas-nada this is a whole new document! I'm encouraged to see the "new direction" seems to accommodate the feedback so far & provide a less disputable approach. Below are only more general corrections before the technical review begins again:

rphair and others added 4 commits November 6, 2025 12:22
Removed revision history section and moved summary of design evolution into Rationale
Thomas-nada and others added 2 commits November 6, 2025 11:42
Co-authored-by: Robert Phair <[email protected]>
Co-authored-by: Robert Phair <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Category: Metadata Proposals belonging to the 'Metadata' category. State: Triage Applied to new PR afer editor cleanup on GitHub, pending CIP meeting introduction.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants