generated from proofoftom/buidler-waffle-typechain-quasar
-
Notifications
You must be signed in to change notification settings - Fork 90
/
MACIFactory.sol
147 lines (138 loc) · 3.72 KB
/
MACIFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;
import '@openzeppelin/contracts/access/Ownable.sol';
import 'maci-contracts/sol/MACI.sol';
import 'maci-contracts/sol/MACIParameters.sol';
import 'maci-contracts/sol/MACISharedObjs.sol';
import 'maci-contracts/sol/gatekeepers/SignUpGatekeeper.sol';
import 'maci-contracts/sol/initialVoiceCreditProxy/InitialVoiceCreditProxy.sol';
contract MACIFactory is Ownable, MACIParameters, MACISharedObjs {
// Constants
uint256 private constant STATE_TREE_BASE = 2;
uint256 private constant MESSAGE_TREE_BASE = 2;
uint256 private constant VOTE_OPTION_TREE_BASE = 5;
// State
TreeDepths public treeDepths;
BatchSizes public batchSizes;
MaxValues public maxValues;
SnarkVerifier public batchUstVerifier;
SnarkVerifier public qvtVerifier;
uint256 public signUpDuration;
uint256 public votingDuration;
// Events
event MaciParametersChanged();
event MaciDeployed(address _maci);
constructor(
uint8 _stateTreeDepth,
uint8 _messageTreeDepth,
uint8 _voteOptionTreeDepth,
uint8 _tallyBatchSize,
uint8 _messageBatchSize,
SnarkVerifier _batchUstVerifier,
SnarkVerifier _qvtVerifier,
uint256 _signUpDuration,
uint256 _votingDuration
)
public
{
_setMaciParameters(
_stateTreeDepth,
_messageTreeDepth,
_voteOptionTreeDepth,
_tallyBatchSize,
_messageBatchSize,
_batchUstVerifier,
_qvtVerifier,
_signUpDuration,
_votingDuration
);
}
function _setMaciParameters(
uint8 _stateTreeDepth,
uint8 _messageTreeDepth,
uint8 _voteOptionTreeDepth,
uint8 _tallyBatchSize,
uint8 _messageBatchSize,
SnarkVerifier _batchUstVerifier,
SnarkVerifier _qvtVerifier,
uint256 _signUpDuration,
uint256 _votingDuration
)
internal
{
treeDepths = TreeDepths(_stateTreeDepth, _messageTreeDepth, _voteOptionTreeDepth);
batchSizes = BatchSizes(_tallyBatchSize, _messageBatchSize);
maxValues = MaxValues(
STATE_TREE_BASE ** treeDepths.stateTreeDepth - 1,
MESSAGE_TREE_BASE ** treeDepths.messageTreeDepth - 1,
VOTE_OPTION_TREE_BASE ** treeDepths.voteOptionTreeDepth - 1
);
batchUstVerifier = _batchUstVerifier;
qvtVerifier = _qvtVerifier;
signUpDuration = _signUpDuration;
votingDuration = _votingDuration;
}
/**
* @dev Set MACI parameters.
*/
function setMaciParameters(
uint8 _stateTreeDepth,
uint8 _messageTreeDepth,
uint8 _voteOptionTreeDepth,
uint8 _tallyBatchSize,
uint8 _messageBatchSize,
SnarkVerifier _batchUstVerifier,
SnarkVerifier _qvtVerifier,
uint256 _signUpDuration,
uint256 _votingDuration
)
external
onlyOwner
{
require(
_voteOptionTreeDepth >= treeDepths.voteOptionTreeDepth,
'MACIFactory: Vote option tree depth can not be decreased'
);
_setMaciParameters(
_stateTreeDepth,
_messageTreeDepth,
_voteOptionTreeDepth,
_tallyBatchSize,
_messageBatchSize,
_batchUstVerifier,
_qvtVerifier,
_signUpDuration,
_votingDuration
);
emit MaciParametersChanged();
}
/**
* @dev Deploy new MACI instance.
*/
function deployMaci(
SignUpGatekeeper _signUpGatekeeper,
InitialVoiceCreditProxy _initialVoiceCreditProxy,
address _coordinator,
PubKey calldata _coordinatorPubKey
)
external
onlyOwner
returns (MACI _maci)
{
_maci = new MACI(
treeDepths,
batchSizes,
maxValues,
_signUpGatekeeper,
batchUstVerifier,
qvtVerifier,
signUpDuration,
votingDuration,
_initialVoiceCreditProxy,
_coordinatorPubKey,
_coordinator
);
emit MaciDeployed(address(_maci));
}
}