Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@boardroom/proposal-comments

Package Overview
Dependencies
Maintainers
6
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@boardroom/proposal-comments

Ceramic Comments Thread on Governance Proposals

  • 0.1.7
  • latest
  • npm
  • Socket score

Version published
Maintainers
6
Created
Source

RFC 001 - Signal Weighted Proposal Comments

Summary

Much of the conversation around how to vote on a proposal is happening on Discourse, Twitter, and Discord chats. This is clearly unsustainable as key points get lost in the noise, and everyone's opinion is equally weighted regardless of their skin in the game for that particular protocol. This RFC lays out an additional layer to surfacing signal from noise, building on top of the concept of signal weighted polling strategies introduced by Snapshot. The purpose of this feature is to surface the signal of comments that are currently getting lost in the various media of discussion in a single place.

KPIs

After the feature hits production, these are the metrics we'd need to collect and analyze to determine the next steps.

  • Number of comments made between proposal creation and vote ending/quorum reached.

  • Correlation between signals from comments and the actual eventual vote

  • Number of unique addresses participating

  • Number of recurring addresses participating

  • Number of Social Shares

Ceramic Definitions (https://idx.xyz/docs/guide-definitions) (https://idx.xyz/docs/concepts/definition)
Comment
{
  schema: CommentDefinitionId,
  name: "BoardroomProposalComment",
  description: "a signed comment on boardroom",
  url: ?
  config: ?
Like
{
  schema: LikeDefinitionId,
  name: "BoardroomCommentOrProposalLike",
  description: "a signed like on a boardroom proposal or comment",
  url: ?
  config: ?
Reply
{
  schema: ReplyDefinitionId,
  name: "BoardroomCommentReply",
  description: "a signed reply on a boardroom comment",
  url: ?
  config: ?
Ceramic Schemas (https://idx.xyz/docs/concepts/schema/)
### interface Comment
{
  id: string, // CeramicDocId
  proposalId: number,
  protocol: string,
  author: address,
  signature: string,
  blockHeight: number, // block at which comment was submitted.
  strategy: string, // strategy for signal weighted ranking
  comment: string,
  likes: Like[],
  replies: Reply[]
}
### interface Like

{
  id: string, // CeramicDocId
  liker: address,
  signature: string
}
### interface Reply

{
  id: string, // CeramicDocId
  replier: address,
  signature: string
}

Steps to Run Locally

Machine Setup

  1. Node LTS
  2. You need a local ceramic node. npm install -g @ceramicstudio/idx-cli

Run: After installing dependencies

  1. In one terminal: ceramic daemon will run your local ceramic node
  2. In another: running the following script will publish the schema and definitions to the ceramic node, and write a config.json file in src.
import Ceramic from '@ceramicnetwork/http-client'
import { createDefinition, publishSchema } from '@ceramicstudio/idx-tools'
import crypto from 'crypto';
import fs from 'fs'
import { Ed25519Provider } from 'key-did-provider-ed25519'
import fromString from 'uint8arrays/from-string'

import { CommentSchema, CommentsListSchema } from './schemas'

const CERAMIC_URL = 'http://localhost:7007'
const SEED = "boardroomweightedproposalcomment";
const writeFile = fs.promises.writeFile;

export async function run() {
	const hash = crypto.createHash('sha256');
	hash.update(SEED)

  const seed = fromString(hash.digest('hex'), 'base16')
  // Connect to the local Ceramic node
  const ceramic = new Ceramic(CERAMIC_URL)
  // Authenticate the Ceramic instance with the provider
  await ceramic.setDIDProvider(new Ed25519Provider(seed))

  // Publish the two schemas
  const [commentSchema, commentsListSchema] = await Promise.all([
    publishSchema(ceramic, { content: CommentSchema, name: 'CommentSchema' }),
    publishSchema(ceramic, { content: CommentsListSchema, name: 'CommentsListSchema' }),
  ])

  // Create the definition using the created schema ID
  const commentsDefinition = await createDefinition(ceramic, {
    name: 'comments',
    description: 'Simple text comments',
    schema: commentsListSchema.commitId.toUrl(),
  })

  // Write config to JSON file
  const config = {
    definitions: {
      notes: commentsDefinition.id.toString(),
    },
    schemas: {
      Note: commentSchema.commitId.toUrl(),
      NotesList: commentsListSchema.commitId.toUrl(),
    },
  }
  await writeFile('./config.json', JSON.stringify(config))

	console.log('Config written to src/config.json file:', config)
  process.exit(0)
}

run().catch(console.error)

FAQs

Package last updated on 02 Apr 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc