3.1.0 • Published 5 months ago

@zeropoll/core v3.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

@zeropoll/core

Core implementation of the ZeroPoll private voting system. This package provides the controller engine that manages the interaction between different components of the system.

It can be easily integrated with Node.js or browser-based applications and frameworks like React

Overview

@zeropoll/core implements a state management system that coordinates:

  • Chain interactions with the Layer 2
  • Wallet connections and transactions
  • Poll creation and voting
  • Off-chain metadata storage via IPFS

Architecture

The core package is built around a main ZeroPoll controller that orchestrates several sub-controllers:

Main Controller

  • ZeroPoll: The root controller that initializes and coordinates all other components

Sub-controllers

TODO: add signers and stores section

State Management

Each controller maintains its own state:

interface ZeroPollState {
	initialized: boolean;
	wallet: WalletState;
	chain: ChainState;
	poll: PollState;
	pollManager: PollManagerState;
}

Installation

# From your project root
pnpm add @zeropoll/core

# Or within the monorepo
pnpm install

Usage

Basic Setup

import { ZeroPoll } from '@zeropoll/core';

const zeropoll = new ZeroPoll({
	protokitGraphqlUrl: 'https://chain.zeropoll.xyz/graphql',
	ipfsApiUrl: 'https://ipfs.zeropoll.xyz',
	tickInterval: 1000, // Optional: defaults to 1000ms
});

// Initialize the system
await zeropoll.init();

Configuration

interface ZeroPollConfig {
	// GraphQL endpoint for the ProtoKit chain
	protokitGraphqlUrl: string;

	// IPFS API endpoint for metadata storage
	ipfsApiUrl: string;

	// Optional: Interval for chain state updates (ms)
	tickInterval?: number;
}

State Updates

The ZeroPoll controller provides a reactive state system:

// Subscribe to state changes
zeropoll.subscribe((state: ZeroPollState) => {
	console.log('New state:', state);
});

// Access current state
const currentState = zeropoll.state;

Controller Access

// Access individual controllers
const { wallet, chain, poll, pollManager } = zeropoll;

// Example: Check wallet connection
const isConnected = wallet.state.connected;

// Example: Create a new poll
await pollManager.createPoll({
	// poll configuration
});

// Example: Vote in a poll
await poll.load('pollId');
await poll.vote('optionHash');

IPFS Integration

The system uses IPFS for off-chain metadata storage.

Development

Building

# Build the package
pnpm build

Testing

# Run tests
pnpm test

License

This package is part of the ZeroPoll monorepo and is licensed under the MIT License. See the root LICENSE file for details.

3.1.0

5 months ago

3.0.0

5 months ago

2.0.0

6 months ago

1.2.0

6 months ago

1.1.0

6 months ago

1.0.0

6 months ago