{
  "$defs": {
    "cardanoString": {
      "maxLength": 64,
      "type": "string"
    },
    "stringOrArray": {
      "oneOf": [
        {
          "$ref": "#/$defs/cardanoString"
        },
        {
          "items": {
            "$ref": "#/$defs/cardanoString"
          },
          "type": "array"
        }
      ]
    }
  },
  "$id": "https://raw.githubusercontent.com/DripDropz/onchain-voting/main/docs/schema/Vote.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "Describe an individual user vote cast for a given ballot",
  "properties": {
    "ballot_id": {
      "$ref": "#/$defs/stringOrArray",
      "description": "This should be a unique data hash that is presented to the voter so they can validate that their vote was cast without modification",
      "title": "Ballot ID"
    },
    "choices": {
      "description": "Here we should detail the voter's choices as cross-referencable to the on-chain ballot",
      "items": {
        "description": "All voter choices, even single choice, should be passed as an array of values",
        "items": {
          "default": 0,
          "description": "The 1-indexed choices for the indexed question from the ballot. 0 should be treated as abstention",
          "type": "integer"
        },
        "type": "array"
      },
      "title": "Voter Ballot Choices",
      "type": "array"
    },
    "signature": {
      "$ref": "#/$defs/stringOrArray",
      "description": "For utilizing CIP-8/CIP-30 wallet signing. The user's cryptographic signature of the ballot should be passed for verification purposes",
      "title": "Voter Signature"
    },
    "voter_id": {
      "$ref": "#/$defs/stringOrArray",
      "description": "This should be a unique identifier for a given voter who can also be found in the snapshot or voter rolls",
      "title": "Voter Identification"
    },
    "voter_power": {
      "description": "For votes utilizing voter power, this should be provided by the voting authority and match the snapshot or voter rolls value",
      "title": "Voter Power",
      "type": "integer"
    }
  },
  "title": "Vote",
  "type": "object"
}