On Snapshot, a proposal is a signed message using EIP-712 format. To publish a new proposal the users need to send that message signed to a Snapshot hub, the hub will then verify the signature and format to valid and publish the proposal.

Here is an example of proposal:

https://cloudflare-ipfs.com/ipfs/QmPjo58vtxeyr7MR3XP4WbhJD1GvGF6rjJF6oc3WGatFsB

Here is the format types for a proposal:

https://github.com/snapshot-labs/snapshot.js/blob/master/src/sign/types.ts#L81-L98

Proposal: [
  { name: 'from', type: 'address' },
  { name: 'space', type: 'string' },
  { name: 'timestamp', type: 'uint64' },
  { name: 'type', type: 'string' },
  { name: 'title', type: 'string' },
  { name: 'body', type: 'string' },
  { name: 'choices', type: 'string[]' },
  { name: 'start', type: 'uint64' },
  { name: 'end', type: 'uint64' },
  { name: 'snapshot', type: 'uint64' },
  { name: 'network', type: 'string' },
  { name: 'strategies', type: 'string' },
  { name: 'plugins', type: 'string' },
  { name: 'metadata', type: 'string' }
]

from: Address of the author of the proposal e.g. 0xeF8305E140ac520225DAf050e2f71d5fBcC543e7

space: ENS name of a DAO

e.g. yam.eth

timestamp: The UNIX time when the proposal was published

e.g. 1638975533

type: Type of the proposal, this refer to the way voting works on that proposal, it can use approval voting, quadratic voting, ranked choice voting, by default its single choice voting where any voter can select only 1 choice when voting.

e.g. single-choice

title: Title of the proposal

e.g. YIP-85 - New Human Resources Group

body: Content of the proposal, this assume markdown support