Skip to main content
Version: v1.3_alpha

MACI

A contract which allows users to sign up, and deploy new polls

stateTreeDepth

uint8 stateTreeDepth

The state tree depth is fixed. As such it should be as large as feasible so that there can be as many users as possible. i.e. 5 ** 10 = 9765625 this should also match the parameter of the circom circuits.

STATE_TREE_SUBDEPTH

uint8 STATE_TREE_SUBDEPTH

IMPORTANT: remember to change the ballot tree depth in contracts/ts/genEmptyBallotRootsContract.ts file if we change the state tree depth!

TREE_ARITY

uint8 TREE_ARITY

MESSAGE_TREE_ARITY

uint8 MESSAGE_TREE_ARITY

BLANK_STATE_LEAF_HASH

uint256 BLANK_STATE_LEAF_HASH

The hash of a blank state leaf

nextPollId

uint256 nextPollId

Each poll has an incrementing ID

polls

mapping(uint256 => address) polls

A mapping of poll IDs to Poll contracts.

topupCredit

contract TopupCredit topupCredit

ERC20 contract that hold topup credits

pollFactory

contract IPollFactory pollFactory

Factory contract that deploy a Poll contract

messageProcessorFactory

contract IMessageProcessorFactory messageProcessorFactory

Factory contract that deploy a MessageProcessor contract

tallyFactory

contract ITallyFactory tallyFactory

Factory contract that deploy a Tally contract

lazyIMTData

struct LazyIMTData lazyIMTData

The state tree. Represents a mapping between each user's public key and their voice credit balance.

signUpGatekeeper

contract SignUpGatekeeper signUpGatekeeper

Address of the SignUpGatekeeper, a contract which determines whether a user may sign up to vote

initialVoiceCreditProxy

contract InitialVoiceCreditProxy initialVoiceCreditProxy

The contract which provides the values of the initial voice credit balance per user

PollContracts

A struct holding the addresses of poll, mp and tally

struct PollContracts {
address poll;
address messageProcessor;
address tally;
}

SignUp

event SignUp(uint256 _stateIndex, uint256 _userPubKeyX, uint256 _userPubKeyY, uint256 _voiceCreditBalance, uint256 _timestamp)

DeployPoll

event DeployPoll(uint256 _pollId, uint256 _coordinatorPubKeyX, uint256 _coordinatorPubKeyY, struct MACI.PollContracts pollAddr)

onlyPoll

modifier onlyPoll(uint256 _pollId)

Only allow a Poll contract to call the modified function.

CallerMustBePoll

error CallerMustBePoll(address _caller)

custom errors

PoseidonHashLibrariesNotLinked

error PoseidonHashLibrariesNotLinked()

TooManySignups

error TooManySignups()

InvalidPubKey

error InvalidPubKey()

PreviousPollNotCompleted

error PreviousPollNotCompleted(uint256 pollId)

PollDoesNotExist

error PollDoesNotExist(uint256 pollId)

SignupTemporaryBlocked

error SignupTemporaryBlocked()

constructor

constructor(contract IPollFactory _pollFactory, contract IMessageProcessorFactory _messageProcessorFactory, contract ITallyFactory _tallyFactory, contract SignUpGatekeeper _signUpGatekeeper, contract InitialVoiceCreditProxy _initialVoiceCreditProxy, contract TopupCredit _topupCredit, uint8 _stateTreeDepth) public payable

Create a new instance of the MACI contract.

Parameters

NameTypeDescription
_pollFactorycontract IPollFactoryThe PollFactory contract
_messageProcessorFactorycontract IMessageProcessorFactoryThe MessageProcessorFactory contract
_tallyFactorycontract ITallyFactoryThe TallyFactory contract
_signUpGatekeepercontract SignUpGatekeeperThe SignUpGatekeeper contract
_initialVoiceCreditProxycontract InitialVoiceCreditProxyThe InitialVoiceCreditProxy contract
_topupCreditcontract TopupCreditThe TopupCredit contract
_stateTreeDepthuint8The depth of the state tree

signUp

function signUp(struct DomainObjs.PubKey _pubKey, bytes _signUpGatekeeperData, bytes _initialVoiceCreditProxyData) public virtual

Allows any eligible user sign up. The sign-up gatekeeper should prevent double sign-ups or ineligible users from doing so. This function will only succeed if the sign-up deadline has not passed. It also enqueues a fresh state leaf into the state AccQueue.

Parameters

NameTypeDescription
_pubKeystruct DomainObjs.PubKeyThe user's desired public key.
_signUpGatekeeperDatabytesData to pass to the sign-up gatekeeper's register() function. For instance, the POAPGatekeeper or SignUpTokenGatekeeper requires this value to be the ABI-encoded token ID.
_initialVoiceCreditProxyDatabytesData to pass to the InitialVoiceCreditProxy, which allows it to determine how many voice credits this user should have.

deployPoll

function deployPoll(uint256 _duration, struct Params.TreeDepths _treeDepths, struct DomainObjs.PubKey _coordinatorPubKey, address _verifier, address _vkRegistry, enum DomainObjs.Mode _mode) public virtual returns (struct MACI.PollContracts pollAddr)

Deploy a new Poll contract.

Parameters

NameTypeDescription
_durationuint256How long should the Poll last for
_treeDepthsstruct Params.TreeDepthsThe depth of the Merkle trees
_coordinatorPubKeystruct DomainObjs.PubKeyThe coordinator's public key
_verifieraddressThe Verifier Contract
_vkRegistryaddressThe VkRegistry Contract
_modeenum DomainObjs.ModeVoting mode

Return Values

NameTypeDescription
pollAddrstruct MACI.PollContractsa new Poll contract address

getStateTreeRoot

function getStateTreeRoot() public view returns (uint256 root)

Return the main root of the StateAq contract

Return Values

NameTypeDescription
rootuint256The Merkle root

getPoll

function getPoll(uint256 _pollId) public view returns (address poll)

Get the Poll details

Parameters

NameTypeDescription
_pollIduint256The identifier of the Poll to retrieve

Return Values

NameTypeDescription
polladdressThe Poll contract object

numSignUps

function numSignUps() public view returns (uint256 signUps)

Get the number of signups

Return Values

NameTypeDescription
signUpsuint256numsignUps The number of signups