Skip to main content

A Condorcet-style Ranked Choice Voting System that stores all data on IPFS

Project description

Hivemind Protocol

A decentralized decision-making protocol implementing Condorcet-style Ranked Choice Voting with IPFS-based data storage and Bitcoin-signed message verification.

Tests Documentation Code Coverage License

What is the Hivemind Protocol?

The Hivemind Protocol is a revolutionary approach to decentralized decision-making that combines:

  • Condorcet-style ranked choice voting
  • Immutable IPFS-based data storage
  • Cryptographic verification using Bitcoin signed messages
  • Flexible voting mechanisms and constraints
  • Advanced consensus calculation

Key Features

  1. Decentralized & Transparent

    • All voting data stored on IPFS
    • Complete audit trail of decisions
    • No central authority or server
    • Cryptographically verifiable results
  2. Advanced Voting Mechanisms

    • Condorcet-style ranked choice voting
    • Multiple ranking strategies (fixed, auto-high, auto-low)
    • Support for various answer types (Boolean, String, Integer, Float)
    • Weighted voting with contribution calculation
    • Custom voting restrictions and rules
    • Predefined options for common types
  3. Secure & Verifiable

    • Bitcoin-style message signing for vote verification
    • Immutable voting history
    • Cryptographic proof of participation
    • Tamper-evident design
    • Comprehensive validation checks
  4. Flexible Consensus

    • Single-winner and ranked consensus types
    • Advanced tie-breaking mechanisms
    • State management with reset and exclude options
    • Dynamic result recalculation

System Architecture

The protocol's architecture is documented through four comprehensive diagrams in the diagrams/ directory:

  1. Class Diagram (class_diagram.md): Core components and their relationships
  2. Component Diagram (component_diagram.md): System-level architecture and interactions
  3. State Diagram (state_diagram.md): State transitions and validation flows
  4. Voting Sequence (voting_sequence.md): Detailed voting process flow

How It Works

1. Issue Creation

An issue represents a decision to be made. It can contain:

  • Multiple questions with indices
  • Answer type constraints (Boolean/String/Integer/Float)
  • Participation rules
  • Custom validation rules
  • Predefined options for common types
issue = HivemindIssue()
issue.name = "Protocol Upgrade"
issue.add_question("Should we implement EIP-1559?")
issue.answer_type = "Boolean"  # Will auto-create Yes/No options

2. Option Submission

Options can be predefined or submitted dynamically:

  • Automatic options for Boolean types (Yes/No)
  • Predefined choices for common scenarios
  • Dynamic option submission with validation
  • Complex type validation support
  • Signature and timestamp verification
# Dynamic option
option = HivemindOption()
option.set_hivemind_issue(issue.cid)
option.set("Custom implementation approach")

# With signature
option.sign(private_key)

3. Opinion Formation

Participants express preferences through three ranking methods:

  1. Fixed Ranking

    opinion = HivemindOpinion()
    opinion.ranking.set_fixed([option1.cid, option2.cid])  # Explicit order
    
  2. Auto-High Ranking

    opinion.ranking.set_auto_high(preferred_option.cid)  # Higher values preferred
    
  3. Auto-Low Ranking

    opinion.ranking.set_auto_low(preferred_option.cid)  # Lower values preferred
    

4. State Management

The protocol maintains state through:

  • IPFS connectivity management
  • Option and opinion tracking
  • Comprehensive validation
  • Contribution calculation
  • Multiple state transitions
state = HivemindState()
state.set_hivemind_issue(issue.cid)
state.add_option(timestamp, option.cid, voter_address, signature)
state.add_opinion(timestamp, opinion.cid, signature, voter_address)

# State transitions
state.finalize()  # Lock the state
state.reset()     # Clear opinions
state.exclude()   # Exclude options and recalculate

5. Result Calculation

Results are calculated through multiple steps:

  1. Weight calculation for voters
  2. Contribution calculation
  3. Ranking aggregation
  4. Consensus determination
    • Single consensus for clear winners
    • Ranked consensus for preference order
  5. Tie resolution if needed
results = state.calculate_results()
consensus = state.calculate_consensus()
winner = consensus.get_winner()

Examples

Detailed examples can be found in the examples/ directory:

  1. basic_voting.py - Simple voting example
  2. advanced_features.py - Advanced protocol features
  3. protocol_upgrade.py - Governance decision example

Each example is thoroughly documented and can be run independently. See the examples README for more details.

Installation

pip install hivemind-python

Usage

Import the package:

import hivemind  # Note: Import as 'hivemind', not 'hivemind_python'

# Create a new voting issue
issue = hivemind.HivemindIssue("My voting issue")

Requirements

Advanced Features

Custom Constraints

issue.set_constraints({
    'min_value': 0,
    'max_value': 100,
    'specs': {'type': 'Integer'},
    'complex_validation': {'custom_rule': 'value % 2 == 0'}  # Even numbers only
})

Voting Restrictions

issue.set_restrictions({
    'min_participants': 5,
    'allowed_addresses': ['addr1', 'addr2'],
    'min_weight': 10,
    'min_contribution': 5
})

Auto-Ranking with Values

option1.set(75)  # Integer value
option2.set(25)  # Integer value
opinion.ranking.set_auto_high(option1.cid)  # Will rank options by proximity to 75

Consensus Configuration

state.set_consensus_config({
    'type': 'ranked',  # or 'single'
    'tie_breaker': 'timestamp',  # or 'random'
    'min_consensus': 0.66  # 66% agreement required
})

Use Cases

  1. Governance Decisions

    • Protocol upgrades
    • Parameter adjustments
    • Resource allocation
  2. Community Polling

    • Feature prioritization
    • Community preferences
    • Strategic decisions
  3. Multi-stakeholder Decisions

    • Investment decisions
    • Project prioritization
    • Resource allocation

Documentation

Full documentation is available at https://valyriantech.github.io/hivemind-python/

The system architecture is documented through comprehensive diagrams in the diagrams/ directory:

  • class_diagram.md: Core components and their relationships
  • component_diagram.md: System-level architecture
  • state_diagram.md: State transitions and validation
  • voting_sequence.md: Detailed process flow

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hivemind_python-0.2.0.tar.gz (48.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hivemind_python-0.2.0-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file hivemind_python-0.2.0.tar.gz.

File metadata

  • Download URL: hivemind_python-0.2.0.tar.gz
  • Upload date:
  • Size: 48.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.9

File hashes

Hashes for hivemind_python-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2af514627810b2b8e85283e60949f1e7deea268fbf645cab759ff26c35d0683c
MD5 4b929965b67e269bb7a3492e0ace082c
BLAKE2b-256 73e203e6779cb47440319cfbc05488dfa3c710912977d05628b275341c5fa37e

See more details on using hashes here.

File details

Details for the file hivemind_python-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hivemind_python-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a326baeb46ae32d944f98fbc600ce7e9598019977d7ff498c0e92691477f32aa
MD5 c948ea435aa8a3b670a0511aa471fe4a
BLAKE2b-256 dfe327277f0b072e11f3a13e6d9cb72bc4c018e89518e6a93a6886042f6594f4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page