@maci-protocol/testing 0.0.0-ci.01622be
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +262 -0
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/build/hardhat.config.d.ts +5 -0
- package/build/hardhat.config.d.ts.map +1 -0
- package/build/hardhat.config.js +37 -0
- package/build/hardhat.config.js.map +1 -0
- package/build/ts/__tests__/e2e.nonQv.test.d.ts +2 -0
- package/build/ts/__tests__/e2e.nonQv.test.d.ts.map +1 -0
- package/build/ts/__tests__/e2e.nonQv.test.js +208 -0
- package/build/ts/__tests__/e2e.nonQv.test.js.map +1 -0
- package/build/ts/__tests__/e2e.test.d.ts +2 -0
- package/build/ts/__tests__/e2e.test.d.ts.map +1 -0
- package/build/ts/__tests__/e2e.test.js +1588 -0
- package/build/ts/__tests__/e2e.test.js.map +1 -0
- package/build/ts/__tests__/integration.test.d.ts +2 -0
- package/build/ts/__tests__/integration.test.d.ts.map +1 -0
- package/build/ts/__tests__/integration.test.js +293 -0
- package/build/ts/__tests__/integration.test.js.map +1 -0
- package/build/ts/__tests__/keyChange.test.d.ts +2 -0
- package/build/ts/__tests__/keyChange.test.d.ts.map +1 -0
- package/build/ts/__tests__/keyChange.test.js +453 -0
- package/build/ts/__tests__/keyChange.test.js.map +1 -0
- package/build/ts/__tests__/maciKeys.test.d.ts +2 -0
- package/build/ts/__tests__/maciKeys.test.d.ts.map +1 -0
- package/build/ts/__tests__/maciKeys.test.js +78 -0
- package/build/ts/__tests__/maciKeys.test.js.map +1 -0
- package/build/ts/__tests__/unit/fundWallet.test.d.ts +2 -0
- package/build/ts/__tests__/unit/fundWallet.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/fundWallet.test.js +15 -0
- package/build/ts/__tests__/unit/fundWallet.test.js.map +1 -0
- package/build/ts/__tests__/unit/joinPoll.test.d.ts +2 -0
- package/build/ts/__tests__/unit/joinPoll.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/joinPoll.test.js +200 -0
- package/build/ts/__tests__/unit/joinPoll.test.js.map +1 -0
- package/build/ts/__tests__/unit/poll.test.d.ts +2 -0
- package/build/ts/__tests__/unit/poll.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/poll.test.js +89 -0
- package/build/ts/__tests__/unit/poll.test.js.map +1 -0
- package/build/ts/__tests__/unit/publish.test.d.ts +2 -0
- package/build/ts/__tests__/unit/publish.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/publish.test.js +132 -0
- package/build/ts/__tests__/unit/publish.test.js.map +1 -0
- package/build/ts/__tests__/unit/signup.test.d.ts +2 -0
- package/build/ts/__tests__/unit/signup.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/signup.test.js +63 -0
- package/build/ts/__tests__/unit/signup.test.js.map +1 -0
- package/build/ts/__tests__/unit/timeTravel.test.d.ts +2 -0
- package/build/ts/__tests__/unit/timeTravel.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/timeTravel.test.js +14 -0
- package/build/ts/__tests__/unit/timeTravel.test.js.map +1 -0
- package/build/ts/__tests__/unit/utils.test.d.ts +2 -0
- package/build/ts/__tests__/unit/utils.test.d.ts.map +1 -0
- package/build/ts/__tests__/unit/utils.test.js +36 -0
- package/build/ts/__tests__/unit/utils.test.js.map +1 -0
- package/build/ts/constants.d.ts +86 -0
- package/build/ts/constants.d.ts.map +1 -0
- package/build/ts/constants.js +176 -0
- package/build/ts/constants.js.map +1 -0
- package/build/ts/index.d.ts +4 -0
- package/build/ts/index.d.ts.map +1 -0
- package/build/ts/index.js +23 -0
- package/build/ts/index.js.map +1 -0
- package/build/ts/testingClass.d.ts +43 -0
- package/build/ts/testingClass.d.ts.map +1 -0
- package/build/ts/testingClass.js +144 -0
- package/build/ts/testingClass.js.map +1 -0
- package/build/ts/types.d.ts +100 -0
- package/build/ts/types.d.ts.map +1 -0
- package/build/ts/types.js +3 -0
- package/build/ts/types.js.map +1 -0
- package/build/ts/user.d.ts +27 -0
- package/build/ts/user.d.ts.map +1 -0
- package/build/ts/user.js +36 -0
- package/build/ts/user.js.map +1 -0
- package/build/ts/utils.d.ts +70 -0
- package/build/ts/utils.d.ts.map +1 -0
- package/build/ts/utils.js +192 -0
- package/build/ts/utils.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const domainobjs_1 = require("@maci-protocol/domainobjs");
|
|
4
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
5
|
+
const browser_1 = require("@maci-protocol/sdk/browser");
|
|
6
|
+
const chai_1 = require("chai");
|
|
7
|
+
const constants_1 = require("../../constants");
|
|
8
|
+
describe("joinPoll", function test() {
|
|
9
|
+
let signer;
|
|
10
|
+
let maciAddresses;
|
|
11
|
+
let initialVoiceCreditProxyContractAddress;
|
|
12
|
+
let verifierContractAddress;
|
|
13
|
+
const users = new Array(3).fill(undefined).map(() => new domainobjs_1.Keypair());
|
|
14
|
+
const mockStateIndex = 1n;
|
|
15
|
+
const mockPollId = 9000n;
|
|
16
|
+
this.timeout(900000);
|
|
17
|
+
// before all tests we deploy the verifying keys registry contract and set the verifying keys
|
|
18
|
+
before(async () => {
|
|
19
|
+
signer = await (0, sdk_1.getDefaultSigner)();
|
|
20
|
+
const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
|
|
21
|
+
const signupPolicyContractAddress = await signupPolicy.getAddress();
|
|
22
|
+
const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ policy: signupPolicyFactory, checker: signupCheckerFactory }, signer, true);
|
|
23
|
+
const pollPolicyContractAddress = await pollPolicy.getAddress();
|
|
24
|
+
const [initialVoiceCreditProxy] = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, signer, undefined, true);
|
|
25
|
+
initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
|
|
26
|
+
const verifier = await (0, sdk_1.deployVerifier)(signer, true);
|
|
27
|
+
verifierContractAddress = await verifier.getAddress();
|
|
28
|
+
const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
|
|
29
|
+
// we deploy the verifying keys registry contract
|
|
30
|
+
const verifyingKeysRegistryAddress = await (0, sdk_1.deployVerifyingKeysRegistryContract)({ signer });
|
|
31
|
+
// we set the verifying keys
|
|
32
|
+
await (0, sdk_1.setVerifyingKeys)({ ...(await (0, constants_1.verifyingKeysArgs)(signer)), verifyingKeysRegistryAddress });
|
|
33
|
+
// deploy the smart contracts
|
|
34
|
+
maciAddresses = await (0, sdk_1.deployMaci)({
|
|
35
|
+
...constants_1.deployArgs,
|
|
36
|
+
signer,
|
|
37
|
+
signupPolicyAddress: signupPolicyContractAddress,
|
|
38
|
+
});
|
|
39
|
+
// signup the user
|
|
40
|
+
await (0, sdk_1.signup)({
|
|
41
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
42
|
+
maciPublicKey: users[0].publicKey.serialize(),
|
|
43
|
+
sgData: constants_1.DEFAULT_SG_DATA,
|
|
44
|
+
signer,
|
|
45
|
+
});
|
|
46
|
+
await (0, sdk_1.signup)({
|
|
47
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
48
|
+
maciPublicKey: users[1].publicKey.serialize(),
|
|
49
|
+
sgData: constants_1.DEFAULT_SG_DATA,
|
|
50
|
+
signer,
|
|
51
|
+
});
|
|
52
|
+
await (0, sdk_1.signup)({
|
|
53
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
54
|
+
maciPublicKey: users[2].publicKey.serialize(),
|
|
55
|
+
sgData: constants_1.DEFAULT_SG_DATA,
|
|
56
|
+
signer,
|
|
57
|
+
});
|
|
58
|
+
// deploy a poll contract
|
|
59
|
+
await (0, sdk_1.deployPoll)({
|
|
60
|
+
...constants_1.deployPollArgs,
|
|
61
|
+
signer,
|
|
62
|
+
pollStartTimestamp: startDate,
|
|
63
|
+
pollEndTimestamp: startDate + constants_1.pollDuration,
|
|
64
|
+
relayers: [await signer.getAddress()],
|
|
65
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
66
|
+
verifierContractAddress,
|
|
67
|
+
verifyingKeysRegistryContractAddress: verifyingKeysRegistryAddress,
|
|
68
|
+
policyContractAddress: pollPolicyContractAddress,
|
|
69
|
+
initialVoiceCreditProxyContractAddress,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
it("should allow to join the poll and return the user data", async () => {
|
|
73
|
+
const startBlock = await signer.provider?.getBlockNumber();
|
|
74
|
+
await (0, sdk_1.joinPoll)({
|
|
75
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
76
|
+
privateKey: users[0].privateKey.serialize(),
|
|
77
|
+
stateIndex: 1n,
|
|
78
|
+
signer,
|
|
79
|
+
pollId: 0n,
|
|
80
|
+
pollJoiningZkey: constants_1.pollJoiningTestZkeyPath,
|
|
81
|
+
useWasm: true,
|
|
82
|
+
pollWasm: constants_1.testPollJoiningWasmPath,
|
|
83
|
+
pollWitgen: constants_1.testPollJoiningWitnessPath,
|
|
84
|
+
rapidsnark: constants_1.testRapidsnarkPath,
|
|
85
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
86
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
87
|
+
});
|
|
88
|
+
const registeredUserData = await (0, sdk_1.getJoinedUserData)({
|
|
89
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
90
|
+
pollId: 0n,
|
|
91
|
+
pollPublicKey: users[0].publicKey.serialize(),
|
|
92
|
+
signer,
|
|
93
|
+
startBlock: startBlock || 0,
|
|
94
|
+
});
|
|
95
|
+
(0, chai_1.expect)(registeredUserData.isJoined).to.eq(true);
|
|
96
|
+
(0, chai_1.expect)(BigInt(registeredUserData.pollStateIndex)).to.eq(1);
|
|
97
|
+
});
|
|
98
|
+
it("should allow to join the poll and return the user data using a downloaded zKey", async () => {
|
|
99
|
+
const startBlock = await signer.provider?.getBlockNumber();
|
|
100
|
+
const { zKey, wasm } = await (0, browser_1.downloadPollJoiningArtifactsBrowser)({
|
|
101
|
+
testing: true,
|
|
102
|
+
stateTreeDepth: 10,
|
|
103
|
+
});
|
|
104
|
+
await (0, browser_1.joinPoll)({
|
|
105
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
106
|
+
privateKey: users[1].privateKey.serialize(),
|
|
107
|
+
stateIndex: 2n,
|
|
108
|
+
signer,
|
|
109
|
+
pollId: 0n,
|
|
110
|
+
pollJoiningZkey: zKey,
|
|
111
|
+
useWasm: true,
|
|
112
|
+
pollWasm: wasm,
|
|
113
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
114
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
115
|
+
useLatestStateIndex: true,
|
|
116
|
+
});
|
|
117
|
+
const registeredUserData = await (0, sdk_1.getJoinedUserData)({
|
|
118
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
119
|
+
pollId: 0n,
|
|
120
|
+
pollPublicKey: users[1].publicKey.serialize(),
|
|
121
|
+
signer,
|
|
122
|
+
startBlock: startBlock || 0,
|
|
123
|
+
});
|
|
124
|
+
(0, chai_1.expect)(registeredUserData.isJoined).to.eq(true);
|
|
125
|
+
(0, chai_1.expect)(BigInt(registeredUserData.pollStateIndex)).to.eq(2);
|
|
126
|
+
});
|
|
127
|
+
it("should allow to join the poll using a precomputed inclusion proof", async () => {
|
|
128
|
+
const startBlock = await signer.provider?.getBlockNumber();
|
|
129
|
+
const maciContract = sdk_1.MACI__factory.connect(maciAddresses.maciContractAddress, signer);
|
|
130
|
+
const stateTree = await (0, sdk_1.genMaciStateTreeWithEndKey)({
|
|
131
|
+
maciContract,
|
|
132
|
+
signer,
|
|
133
|
+
userPublicKey: users[2].publicKey,
|
|
134
|
+
});
|
|
135
|
+
const inclusionProof = stateTree.signUpTree.generateProof(3);
|
|
136
|
+
const { zKey, wasm } = await (0, browser_1.downloadPollJoiningArtifactsBrowser)({
|
|
137
|
+
testing: true,
|
|
138
|
+
stateTreeDepth: 10,
|
|
139
|
+
});
|
|
140
|
+
await (0, browser_1.joinPoll)({
|
|
141
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
142
|
+
privateKey: users[2].privateKey.serialize(),
|
|
143
|
+
stateIndex: 3n,
|
|
144
|
+
signer,
|
|
145
|
+
pollId: 0n,
|
|
146
|
+
inclusionProof,
|
|
147
|
+
pollJoiningZkey: zKey,
|
|
148
|
+
pollWasm: wasm,
|
|
149
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
150
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
151
|
+
});
|
|
152
|
+
const registeredUserData = await (0, sdk_1.getJoinedUserData)({
|
|
153
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
154
|
+
pollId: 0n,
|
|
155
|
+
pollPublicKey: users[2].publicKey.serialize(),
|
|
156
|
+
signer,
|
|
157
|
+
startBlock: startBlock || 0,
|
|
158
|
+
});
|
|
159
|
+
(0, chai_1.expect)(registeredUserData.isJoined).to.eq(true);
|
|
160
|
+
(0, chai_1.expect)(BigInt(registeredUserData.pollStateIndex)).to.eq(3);
|
|
161
|
+
});
|
|
162
|
+
it("should throw error if poll does not exist", async () => {
|
|
163
|
+
await (0, chai_1.expect)((0, sdk_1.joinPoll)({
|
|
164
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
165
|
+
privateKey: users[0].privateKey.serialize(),
|
|
166
|
+
stateIndex: mockStateIndex,
|
|
167
|
+
signer,
|
|
168
|
+
pollId: mockPollId,
|
|
169
|
+
pollJoiningZkey: constants_1.pollJoiningTestZkeyPath,
|
|
170
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
171
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
172
|
+
})).eventually.rejectedWith("PollDoesNotExist(9000)");
|
|
173
|
+
});
|
|
174
|
+
it("should throw error if state index is invalid", async () => {
|
|
175
|
+
const keypair = new domainobjs_1.Keypair();
|
|
176
|
+
await (0, chai_1.expect)((0, sdk_1.joinPoll)({
|
|
177
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
178
|
+
privateKey: keypair.privateKey.serialize(),
|
|
179
|
+
stateIndex: -1n,
|
|
180
|
+
signer,
|
|
181
|
+
pollId: 0n,
|
|
182
|
+
pollJoiningZkey: constants_1.pollJoiningTestZkeyPath,
|
|
183
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
184
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
185
|
+
})).eventually.rejectedWith("Invalid state index");
|
|
186
|
+
});
|
|
187
|
+
it("should throw error if current poll id is invalid", async () => {
|
|
188
|
+
await (0, chai_1.expect)((0, sdk_1.joinPoll)({
|
|
189
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
190
|
+
privateKey: users[0].privateKey.serialize(),
|
|
191
|
+
stateIndex: mockStateIndex,
|
|
192
|
+
signer,
|
|
193
|
+
pollId: -1n,
|
|
194
|
+
pollJoiningZkey: constants_1.pollJoiningTestZkeyPath,
|
|
195
|
+
sgDataArg: constants_1.DEFAULT_SG_DATA,
|
|
196
|
+
ivcpDataArg: constants_1.DEFAULT_IVCP_DATA,
|
|
197
|
+
})).eventually.rejectedWith("Invalid poll id");
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=joinPoll.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joinPoll.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/joinPoll.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/poll.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
4
|
+
const chai_1 = require("chai");
|
|
5
|
+
const constants_1 = require("../../constants");
|
|
6
|
+
describe("poll", function test() {
|
|
7
|
+
this.timeout(900000);
|
|
8
|
+
let maciAddresses;
|
|
9
|
+
let initialVoiceCreditProxyContractAddress;
|
|
10
|
+
let verifierContractAddress;
|
|
11
|
+
let pollAddresses;
|
|
12
|
+
let signer;
|
|
13
|
+
// before all tests we deploy the verifying keys registry contract and set the verifying keys
|
|
14
|
+
before(async () => {
|
|
15
|
+
signer = await (0, sdk_1.getDefaultSigner)();
|
|
16
|
+
const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
|
|
17
|
+
const signupPolicyContractAddress = await signupPolicy.getAddress();
|
|
18
|
+
const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({ policy: signupPolicyFactory, checker: signupCheckerFactory }, signer, true);
|
|
19
|
+
const pollPolicyContractAddress = await pollPolicy.getAddress();
|
|
20
|
+
const [initialVoiceCreditProxy] = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, signer, undefined, true);
|
|
21
|
+
initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
|
|
22
|
+
const verifier = await (0, sdk_1.deployVerifier)(signer, true);
|
|
23
|
+
verifierContractAddress = await verifier.getAddress();
|
|
24
|
+
// we deploy the verifying keys registry contract
|
|
25
|
+
const verifyingKeysRegistryAddress = await (0, sdk_1.deployVerifyingKeysRegistryContract)({ signer });
|
|
26
|
+
// we set the verifying keys
|
|
27
|
+
await (0, sdk_1.setVerifyingKeys)({ ...(await (0, constants_1.verifyingKeysArgs)(signer)), verifyingKeysRegistryAddress });
|
|
28
|
+
const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
|
|
29
|
+
// deploy the smart contracts
|
|
30
|
+
maciAddresses = await (0, sdk_1.deployMaci)({
|
|
31
|
+
...constants_1.deployArgs,
|
|
32
|
+
signer,
|
|
33
|
+
signupPolicyAddress: signupPolicyContractAddress,
|
|
34
|
+
});
|
|
35
|
+
// deploy a poll contract
|
|
36
|
+
pollAddresses = await (0, sdk_1.deployPoll)({
|
|
37
|
+
...constants_1.deployPollArgs,
|
|
38
|
+
signer,
|
|
39
|
+
pollStartTimestamp: startDate,
|
|
40
|
+
pollEndTimestamp: startDate + constants_1.pollDuration,
|
|
41
|
+
relayers: [await signer.getAddress()],
|
|
42
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
43
|
+
verifierContractAddress,
|
|
44
|
+
verifyingKeysRegistryContractAddress: verifyingKeysRegistryAddress,
|
|
45
|
+
policyContractAddress: pollPolicyContractAddress,
|
|
46
|
+
initialVoiceCreditProxyContractAddress,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe("check deploy and get poll", () => {
|
|
50
|
+
it("should get current poll properly", async () => {
|
|
51
|
+
const pollData = await (0, sdk_1.getPoll)({
|
|
52
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
53
|
+
signer,
|
|
54
|
+
});
|
|
55
|
+
const samePollData = await (0, sdk_1.getPoll)({
|
|
56
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
57
|
+
pollId: pollData.id,
|
|
58
|
+
signer,
|
|
59
|
+
});
|
|
60
|
+
(0, chai_1.expect)(pollData.address).to.eq(pollAddresses.pollContractAddress);
|
|
61
|
+
(0, chai_1.expect)(pollData).to.deep.eq(samePollData);
|
|
62
|
+
});
|
|
63
|
+
it("should get finished poll properly", async () => {
|
|
64
|
+
const pollData = await (0, sdk_1.getPoll)({
|
|
65
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
66
|
+
provider: signer.provider,
|
|
67
|
+
});
|
|
68
|
+
await (0, sdk_1.timeTravel)({ seconds: constants_1.pollDuration, signer });
|
|
69
|
+
await (0, sdk_1.mergeSignups)({ pollId: BigInt(pollData.id), maciAddress: maciAddresses.maciContractAddress, signer });
|
|
70
|
+
const finishedPollData = await (0, sdk_1.getPoll)({
|
|
71
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
72
|
+
signer,
|
|
73
|
+
});
|
|
74
|
+
(0, chai_1.expect)(pollData.id).to.eq(finishedPollData.id);
|
|
75
|
+
(0, chai_1.expect)(pollData.address).to.eq(finishedPollData.address);
|
|
76
|
+
(0, chai_1.expect)(finishedPollData.isMerged).to.eq(true);
|
|
77
|
+
});
|
|
78
|
+
it("should throw error if there are no signer and provider", async () => {
|
|
79
|
+
await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: -1n })).eventually.rejectedWith("No signer and provider are provided");
|
|
80
|
+
});
|
|
81
|
+
it("should throw error if current poll id is invalid", async () => {
|
|
82
|
+
await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: -1n, signer })).eventually.rejectedWith("Invalid poll id -1");
|
|
83
|
+
});
|
|
84
|
+
it("should throw error if current poll is not deployed", async () => {
|
|
85
|
+
await (0, chai_1.expect)((0, sdk_1.getPoll)({ maciAddress: maciAddresses.maciContractAddress, pollId: 9000n, signer })).eventually.rejectedWith("MACI contract doesn't have any deployed poll 9000");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=poll.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/poll.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/publish.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const crypto_1 = require("@maci-protocol/crypto");
|
|
4
|
+
const domainobjs_1 = require("@maci-protocol/domainobjs");
|
|
5
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
6
|
+
const chai_1 = require("chai");
|
|
7
|
+
const constants_1 = require("../../constants");
|
|
8
|
+
describe("publish", function test() {
|
|
9
|
+
this.timeout(900000);
|
|
10
|
+
let maciAddresses;
|
|
11
|
+
let initialVoiceCreditProxyContractAddress;
|
|
12
|
+
let verifierContractAddress;
|
|
13
|
+
let pollAddresses;
|
|
14
|
+
let signer;
|
|
15
|
+
const messages = [
|
|
16
|
+
{
|
|
17
|
+
stateIndex: 1n,
|
|
18
|
+
voteOptionIndex: 1n,
|
|
19
|
+
nonce: 1n,
|
|
20
|
+
newVoteWeight: 1n,
|
|
21
|
+
salt: 1n,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
stateIndex: 1n,
|
|
25
|
+
voteOptionIndex: 2n,
|
|
26
|
+
nonce: 2n,
|
|
27
|
+
newVoteWeight: 1n,
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
// before all tests we deploy the verifying keys registry contract and set the verifying keys
|
|
31
|
+
before(async () => {
|
|
32
|
+
signer = await (0, sdk_1.getDefaultSigner)();
|
|
33
|
+
const [signupPolicy, , signupPolicyFactory, signupCheckerFactory] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
|
|
34
|
+
const signupPolicyContractAddress = await signupPolicy.getAddress();
|
|
35
|
+
const [pollPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({
|
|
36
|
+
policy: signupPolicyFactory,
|
|
37
|
+
checker: signupCheckerFactory,
|
|
38
|
+
}, signer, true);
|
|
39
|
+
const pollPolicyContractAddress = await pollPolicy.getAddress();
|
|
40
|
+
const [initialVoiceCreditProxy] = await (0, sdk_1.deployConstantInitialVoiceCreditProxy)({ amount: constants_1.DEFAULT_INITIAL_VOICE_CREDITS }, signer, undefined, true);
|
|
41
|
+
initialVoiceCreditProxyContractAddress = await initialVoiceCreditProxy.getAddress();
|
|
42
|
+
const verifier = await (0, sdk_1.deployVerifier)(signer, true);
|
|
43
|
+
verifierContractAddress = await verifier.getAddress();
|
|
44
|
+
// we deploy the verifying keys registry contract
|
|
45
|
+
const verifyingKeysRegistryAddress = await (0, sdk_1.deployVerifyingKeysRegistryContract)({ signer });
|
|
46
|
+
// we set the verifying keys
|
|
47
|
+
await (0, sdk_1.setVerifyingKeys)({ ...(await (0, constants_1.verifyingKeysArgs)(signer)), verifyingKeysRegistryAddress });
|
|
48
|
+
const startDate = await (0, sdk_1.getBlockTimestamp)(signer);
|
|
49
|
+
// deploy the smart contracts
|
|
50
|
+
maciAddresses = await (0, sdk_1.deployMaci)({
|
|
51
|
+
...constants_1.deployArgs,
|
|
52
|
+
signer,
|
|
53
|
+
signupPolicyAddress: signupPolicyContractAddress,
|
|
54
|
+
});
|
|
55
|
+
// deploy a poll contract
|
|
56
|
+
pollAddresses = await (0, sdk_1.deployPoll)({
|
|
57
|
+
...constants_1.deployPollArgs,
|
|
58
|
+
signer,
|
|
59
|
+
pollStartTimestamp: startDate,
|
|
60
|
+
pollEndTimestamp: startDate + constants_1.pollDuration,
|
|
61
|
+
relayers: [await signer.getAddress()],
|
|
62
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
63
|
+
verifierContractAddress,
|
|
64
|
+
verifyingKeysRegistryContractAddress: verifyingKeysRegistryAddress,
|
|
65
|
+
policyContractAddress: pollPolicyContractAddress,
|
|
66
|
+
initialVoiceCreditProxyContractAddress,
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe("publish batch messages", () => {
|
|
70
|
+
const user = new domainobjs_1.Keypair();
|
|
71
|
+
let defaultArgs;
|
|
72
|
+
before(async () => {
|
|
73
|
+
defaultArgs = {
|
|
74
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
75
|
+
publicKey: user.publicKey.serialize(),
|
|
76
|
+
privateKey: user.privateKey.serialize(),
|
|
77
|
+
messages,
|
|
78
|
+
pollId: 0n,
|
|
79
|
+
signer,
|
|
80
|
+
};
|
|
81
|
+
await (0, sdk_1.signup)({
|
|
82
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
83
|
+
maciPublicKey: user.publicKey.serialize(),
|
|
84
|
+
sgData: constants_1.DEFAULT_SG_DATA,
|
|
85
|
+
signer,
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
it("should publish messages properly", async () => {
|
|
89
|
+
const pollContract = sdk_1.Poll__factory.connect(pollAddresses.pollContractAddress, signer);
|
|
90
|
+
const initialNumMessages = await pollContract.numMessages();
|
|
91
|
+
const { hash, encryptedMessages, privateKeys } = await (0, sdk_1.publishBatch)(defaultArgs);
|
|
92
|
+
const numMessages = await pollContract.numMessages();
|
|
93
|
+
(0, chai_1.expect)(initialNumMessages).to.eq(1n);
|
|
94
|
+
(0, chai_1.expect)(hash).to.not.eq(null);
|
|
95
|
+
(0, chai_1.expect)(hash).to.not.eq(undefined);
|
|
96
|
+
(0, chai_1.expect)(numMessages).to.eq(BigInt(messages.length + 1));
|
|
97
|
+
(0, chai_1.expect)(privateKeys.length).to.eq(defaultArgs.messages.length);
|
|
98
|
+
(0, chai_1.expect)(encryptedMessages.length).to.eq(defaultArgs.messages.length);
|
|
99
|
+
});
|
|
100
|
+
it("should throw error if public key is invalid", async () => {
|
|
101
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({ ...defaultArgs, publicKey: "invalid" })).eventually.rejectedWith("Invalid MACI public key");
|
|
102
|
+
});
|
|
103
|
+
it("should throw error if private key is invalid", async () => {
|
|
104
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({ ...defaultArgs, privateKey: "invalid" })).eventually.rejectedWith("Invalid MACI private key");
|
|
105
|
+
});
|
|
106
|
+
it("should throw error if poll id is invalid", async () => {
|
|
107
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({ ...defaultArgs, pollId: -1n })).eventually.rejectedWith("Invalid poll id -1");
|
|
108
|
+
});
|
|
109
|
+
it("should throw error if current poll is not deployed", async () => {
|
|
110
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({ ...defaultArgs, pollId: 9000n })).eventually.rejectedWith("MACI contract doesn't have any deployed poll 9000");
|
|
111
|
+
});
|
|
112
|
+
it("should throw error if message is invalid", async () => {
|
|
113
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({
|
|
114
|
+
...defaultArgs,
|
|
115
|
+
messages: [...messages, { ...messages[0], voteOptionIndex: -1n }],
|
|
116
|
+
})).eventually.rejectedWith("Invalid vote option index");
|
|
117
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({
|
|
118
|
+
...defaultArgs,
|
|
119
|
+
messages: [...messages, { ...messages[0], stateIndex: 0n }],
|
|
120
|
+
})).eventually.rejectedWith("Invalid state index");
|
|
121
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({
|
|
122
|
+
...defaultArgs,
|
|
123
|
+
messages: [...messages, { ...messages[0], nonce: -1n }],
|
|
124
|
+
})).eventually.rejectedWith("Invalid nonce");
|
|
125
|
+
await (0, chai_1.expect)((0, sdk_1.publishBatch)({
|
|
126
|
+
...defaultArgs,
|
|
127
|
+
messages: [...messages, { ...messages[0], salt: crypto_1.SNARK_FIELD_SIZE + 1n }],
|
|
128
|
+
})).eventually.rejectedWith("Invalid salt");
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=publish.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/publish.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/signup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const domainobjs_1 = require("@maci-protocol/domainobjs");
|
|
4
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
5
|
+
const chai_1 = require("chai");
|
|
6
|
+
const constants_1 = require("../../constants");
|
|
7
|
+
describe("signup", function test() {
|
|
8
|
+
this.timeout(900000);
|
|
9
|
+
let signer;
|
|
10
|
+
let maciAddresses;
|
|
11
|
+
const user = new domainobjs_1.Keypair();
|
|
12
|
+
// before all tests we deploy the verifying keys registry contract and set the verifying keys
|
|
13
|
+
before(async () => {
|
|
14
|
+
signer = await (0, sdk_1.getDefaultSigner)();
|
|
15
|
+
const [signupPolicy] = await (0, sdk_1.deployFreeForAllSignUpPolicy)({}, signer, true);
|
|
16
|
+
const signupPolicyContractAddress = await signupPolicy.getAddress();
|
|
17
|
+
// we deploy the verifying keys registry contract
|
|
18
|
+
const verifyingKeysRegistryAddress = await (0, sdk_1.deployVerifyingKeysRegistryContract)({ signer });
|
|
19
|
+
// we set the verifying keys
|
|
20
|
+
await (0, sdk_1.setVerifyingKeys)({ ...(await (0, constants_1.verifyingKeysArgs)(signer)), verifyingKeysRegistryAddress });
|
|
21
|
+
// deploy the smart contracts
|
|
22
|
+
maciAddresses = await (0, sdk_1.deployMaci)({
|
|
23
|
+
...constants_1.deployArgs,
|
|
24
|
+
signer,
|
|
25
|
+
signupPolicyAddress: signupPolicyContractAddress,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it("should allow to signup and return the user data", async () => {
|
|
29
|
+
const startBlock = await signer.provider?.getBlockNumber();
|
|
30
|
+
const signUpData = await (0, sdk_1.signup)({
|
|
31
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
32
|
+
maciPublicKey: user.publicKey.serialize(),
|
|
33
|
+
sgData: constants_1.DEFAULT_SG_DATA,
|
|
34
|
+
signer,
|
|
35
|
+
});
|
|
36
|
+
const registeredUserData = await (0, sdk_1.getSignedupUserData)({
|
|
37
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
38
|
+
startBlock,
|
|
39
|
+
maciPublicKey: user.publicKey.serialize(),
|
|
40
|
+
signer,
|
|
41
|
+
});
|
|
42
|
+
(0, chai_1.expect)(registeredUserData.isRegistered).to.eq(true);
|
|
43
|
+
(0, chai_1.expect)(registeredUserData.stateIndex).to.eq(signUpData.stateIndex);
|
|
44
|
+
});
|
|
45
|
+
it("should not get the user data if the user is not registered", async () => {
|
|
46
|
+
const registeredUserData = await (0, sdk_1.getSignedupUserData)({
|
|
47
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
48
|
+
startBlock: await signer.provider?.getBlockNumber(),
|
|
49
|
+
maciPublicKey: new domainobjs_1.Keypair().publicKey.serialize(),
|
|
50
|
+
signer,
|
|
51
|
+
});
|
|
52
|
+
(0, chai_1.expect)(registeredUserData.isRegistered).to.eq(false);
|
|
53
|
+
});
|
|
54
|
+
it("should start fetchig from block zero if the start block is not provided", async () => {
|
|
55
|
+
const registeredUserData = await (0, sdk_1.getSignedupUserData)({
|
|
56
|
+
maciAddress: maciAddresses.maciContractAddress,
|
|
57
|
+
maciPublicKey: user.publicKey.serialize(),
|
|
58
|
+
signer,
|
|
59
|
+
});
|
|
60
|
+
(0, chai_1.expect)(registeredUserData.isRegistered).to.eq(true);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=signup.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/signup.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeTravel.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/timeTravel.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
4
|
+
const chai_1 = require("chai");
|
|
5
|
+
describe("timeTravel", () => {
|
|
6
|
+
it("should work when given a valid integer number", async () => {
|
|
7
|
+
const signer = await (0, sdk_1.getDefaultSigner)();
|
|
8
|
+
const blockNumber = await signer.provider?.getBlock("latest");
|
|
9
|
+
await (0, sdk_1.timeTravel)({ seconds: 5, signer });
|
|
10
|
+
const blockNumberAfter = await signer.provider?.getBlock("latest");
|
|
11
|
+
(0, chai_1.expect)(blockNumberAfter.timestamp).to.be.gt(blockNumber.timestamp);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=timeTravel.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeTravel.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/timeTravel.test.ts"],"names":[],"mappings":";;AAAA,4CAAkE;AAClE,+BAA8B;AAE9B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAgB,GAAE,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE9D,MAAM,IAAA,gBAAU,EAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzC,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAA,aAAM,EAAC,gBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAY,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../ts/__tests__/unit/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const crypto_1 = require("@maci-protocol/crypto");
|
|
7
|
+
const domainobjs_1 = require("@maci-protocol/domainobjs");
|
|
8
|
+
const sdk_1 = require("@maci-protocol/sdk");
|
|
9
|
+
const chai_1 = require("chai");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
describe("utils", () => {
|
|
13
|
+
describe("verifying keys", () => {
|
|
14
|
+
it("should return true for two equal verifying keys", async () => {
|
|
15
|
+
const verifyingKeyPath = path_1.default.resolve(__dirname, "..", "data", "testVk.json");
|
|
16
|
+
const verifyingKey = domainobjs_1.VerifyingKey.fromJSON(await fs_1.default.promises.readFile(verifyingKeyPath).then((res) => res.toString()));
|
|
17
|
+
(0, chai_1.expect)((0, sdk_1.compareVerifyingKeys)(verifyingKey, verifyingKey.asContractParam())).to.eq(true);
|
|
18
|
+
});
|
|
19
|
+
it("should return false for two unequal verifying keys", async () => {
|
|
20
|
+
const verifyingKeyPath = path_1.default.resolve(__dirname, "..", "data", "testVk.json");
|
|
21
|
+
const verifyingKey = domainobjs_1.VerifyingKey.fromJSON(await fs_1.default.promises.readFile(verifyingKeyPath).then((res) => res.toString()));
|
|
22
|
+
const verifyingKeyCopy = verifyingKey.asContractParam();
|
|
23
|
+
verifyingKeyCopy.alpha1.x = 9999n;
|
|
24
|
+
(0, chai_1.expect)((0, sdk_1.compareVerifyingKeys)(verifyingKey, verifyingKeyCopy)).to.eq(false);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("validateSalt", () => {
|
|
28
|
+
it("should return true for a valid salt", () => {
|
|
29
|
+
(0, chai_1.expect)((0, sdk_1.validateSalt)((0, crypto_1.generateRandomSalt)())).to.eq(true);
|
|
30
|
+
});
|
|
31
|
+
it("should return false for an invalid salt", () => {
|
|
32
|
+
(0, chai_1.expect)((0, sdk_1.validateSalt)(crypto_1.SNARK_FIELD_SIZE)).to.eq(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../ts/__tests__/unit/utils.test.ts"],"names":[],"mappings":";;;;;AAAA,kDAA6E;AAC7E,0DAAyD;AACzD,4CAAwE;AACxE,+BAA8B;AAE9B,4CAAoB;AACpB,gDAAwB;AAExB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAC9E,MAAM,YAAY,GAAG,yBAAY,CAAC,QAAQ,CACxC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAC3E,CAAC;YAEF,IAAA,aAAM,EAAC,IAAA,0BAAoB,EAAC,YAAY,EAAE,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAC9E,MAAM,YAAY,GAAG,yBAAY,CAAC,QAAQ,CACxC,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAC3E,CAAC;YAEF,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YACxD,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;YAClC,IAAA,aAAM,EAAC,IAAA,0BAAoB,EAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,IAAA,aAAM,EAAC,IAAA,kBAAY,EAAC,IAAA,2BAAkB,GAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,IAAA,aAAM,EAAC,IAAA,kBAAY,EAAC,yBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|