Skip to content

Commit ad8c979

Browse files
committed
Add tests for invalid proofs
1 parent ea64172 commit ad8c979

File tree

1 file changed

+147
-1
lines changed

1 file changed

+147
-1
lines changed

test/util/verifier-tests.js

Lines changed: 147 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,51 @@ export default function() {
6666
assert.equal(result, true, 'Verification failed');
6767
});
6868

69-
it(printTitle('BeaconStateVerifier', 'Can verify pubkey/withdrawal_credentials on validator'), async () => {
69+
it(printTitle('BeaconStateVerifier', 'Fails to verify invalid withdrawal_epoch proof'), async () => {
7070
const beaconStateVerifier = await BeaconStateVerifier.deployed();
7171
const blockRoots = await BlockRootsMock.deployed();
7272

73+
const proof = [
74+
"0xffffffffffffffff000000000000000000000000000000000000000000000000", "0xd36369eb7ffeceacc83d0161d3cce7d8aa1c8e71d4801a0fae7fc5e81d4fe646",
75+
"0xa0bced902ed1d2f2040c17ed0ca3f2c74725266f51686074fc9d7b3582afdb0e", "0x8abe1b18eaaa49e04e986bd5fb44ad90c08d1df57eabea9e26796a961fe1b762",
76+
"0x972d643714dddffdde5e935588249fb04be277ad32fa43aa72e6325c4d826b02", "0xa73fde132b956a530446ee8b3e3eda7f1cf2ecdd7b77cbebe74720bd5d507018",
77+
"0x797802b8fb8765a4453bb8e57f88e56a7384d9f8f2c12bf3d391f8c6b8f1b777", "0x90c14e71e4b5219f2a9a7af09dc2e12816d17e61fe496037915abab076bf4936",
78+
"0xabf67b0094566967984cc1e541465ffb493fb2a774ee9fc5f8d622f6fc727dee", "0x929aae93bf2b43db4db1932837b4585bef8fe8da088dcd61363909c6960334c3",
79+
"0xe038b9683fabd5e5cd4c121b17b495063b09ebe7ccbbe8e4e974eb19a1c7d08a", "0x89329a752384ca7165bc8e3dca463900e063fa7552e7b7986c8baebea9c54926",
80+
"0x09a339f9c227fd48deca618e84c605142d96d9e25b0f0d23e609a62015ae7e8c", "0xca9fd8ff36f7b97c756c9fcc1769e8b6db24012351c4869c3886522698ac2b17",
81+
"0xb62be1079338e91e9892a925451c9ac2b7d2a85c4f7ebb074a9769dfa73ede6d", "0x683a8d8f5179dc40cc6804e06643ca14c5d70b1f6c3d4672dc363bd0586552ff",
82+
"0xca87d13aea33620e59c29d78f1f1994f09387c60cc984e542ad68969d946b882", "0x80ae04c90543e470964302881d5add8916d082aeeb3ec6e8852dbfc307ad0db8",
83+
"0xa69e27736ede3c377bc4cb98d017208307f36180cb4d9f23d4ef8792972bad8c", "0x00f0fd7a0a88a8ab00d5004d16120884d75bbf40c7dda9b4d8eb1785fc5f3bd7",
84+
"0x6256f55a4f4174a0e592eb8433557a3abbbdf054b224a1d325a163ff810683d7", "0xf9868e385850e2963ac9223742870dab32d3e04697c0fc43849a6bfd9812a934",
85+
"0x22eed4dca7fb4a33b5aba488d4d0a5f527399638fb7ec837643b08307cf520f7", "0x9a613b0ae0422e33063e253e78178c4802a5188848b6105d6830091f7c92ee24",
86+
"0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167",
87+
"0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0",
88+
"0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765",
89+
"0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1",
90+
"0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c",
91+
"0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", "0xc6f67e02e6e4e1bdefb994c6098953f34636ba2b6ca20a4721d2b26a886722ff",
92+
"0x1c9a7e5ff1cf48b4ad1582d3f4e4a1004f3b20d8c5a2b71387a4254ad933ebc5", "0x2f075ae229646b6f6aed19a5e372cf295081401eb893ff599b3f9acc0c0d3e7d",
93+
"0x328921deb59612076801e8cd61592107b5c67c79b846595cc6320c395b46362c", "0xbfb909fdb236ad2411b4e4883810a074b840464689986c3f8a8091827e17c327",
94+
"0x55d8fb3687ba3ba49f342c77f5a1f89bec83d811446e1a467139213d640b6a74", "0xf7210d4f8e7e1039790e7bf4efa207555a10a6db1dd4b95da313aaa88b88fe76",
95+
"0xad21b516cbc645ffe34ab5de1c8aef8cd4e7f8d2b51e8e1456adc7563cda206f", "0x609d1d0000000000000000000000000000000000000000000000000000000000",
96+
"0xc6341f0000000000000000000000000000000000000000000000000000000000", "0x681c6d64aba47a084f8f2d7bf1f6208b0e18287b94d3ee0a44314ca1cf307b36",
97+
"0x584cf95f07685553e071414dcde96eb936a40ae41ff16251d6dad1938aa1fb9d", "0xa10b34eeb909d7ad2efdae3344aeb210032d09e0e8edf1c03bd6807e24c9d199",
98+
"0xa61ec140c4dee2bec895af537f2ef19376fac4ddb292ad7352809d7d5926461e", "0x2395c64f50239f14feea5dbe13c65d405e0d4be2d25e8995d8f64b94f83014fc",
99+
"0x032ffdac4b987092a708a481a6aa53c66aa874fe96a9f689031715ffa726fee4", "0xbe6d4ac575061b5182c9112451fdc189c2d3dc3a882b4c06c365e0acded0d600",
100+
"0x6cb1b243918374de6252a32aa24a34e0e40f3df71b7b51e6a59d0e99e9109d2d"
101+
];
102+
103+
const blockRoot = '0xe39be859f0aaa98d1c269252388115284366451b58ed082801593dbbfccd1876';
104+
const slot = 11834166;
105+
await blockRoots.setBlockRoot(slot, blockRoot);
106+
107+
const result = await beaconStateVerifier.verifyExit(405782, farFutureEpoch - 1n, slot, proof);
108+
assert.equal(result, false, 'Verification succeeded');
109+
});
110+
111+
it(printTitle('BeaconStateVerifier', 'Can verify pubkey/withdrawal_credentials on validator'), async () => {
112+
const beaconStateVerifier = await BeaconStateVerifier.deployed();
113+
const blockRoots = await BlockRootsMock.deployed();
73114

74115
const proof = [
75116
"0x19327cb9763c96e00332bde93bdbb1032c4b796dda73e515c8c5f7ede9a419be", "0xf7002d928230a591b4a878899957e68a3d5cd73f487a8c1a5140319ca4c6c874",
@@ -119,6 +160,58 @@ export default function() {
119160
assert.equal(result, true, 'Verification failed');
120161
});
121162

163+
it(printTitle('BeaconStateVerifier', 'Fails on invalid withdrawal credentials proof'), async () => {
164+
const beaconStateVerifier = await BeaconStateVerifier.deployed();
165+
const blockRoots = await BlockRootsMock.deployed();
166+
167+
const proof = [
168+
"0x19327cb9763c96e00332bde93bdbb1032c4b796dda73e515c8c5f7ede9a419be", "0xf7002d928230a591b4a878899957e68a3d5cd73f487a8c1a5140319ca4c6c874",
169+
"0x8abe1b18eaaa49e04e986bd5fb44ad90c08d1df57eabea9e26796a961fe1b762", "0x972d643714dddffdde5e935588249fb04be277ad32fa43aa72e6325c4d826b02",
170+
"0xa73fde132b956a530446ee8b3e3eda7f1cf2ecdd7b77cbebe74720bd5d507018", "0x797802b8fb8765a4453bb8e57f88e56a7384d9f8f2c12bf3d391f8c6b8f1b777",
171+
"0x90c14e71e4b5219f2a9a7af09dc2e12816d17e61fe496037915abab076bf4936", "0xabf67b0094566967984cc1e541465ffb493fb2a774ee9fc5f8d622f6fc727dee",
172+
"0x929aae93bf2b43db4db1932837b4585bef8fe8da088dcd61363909c6960334c3", "0xe038b9683fabd5e5cd4c121b17b495063b09ebe7ccbbe8e4e974eb19a1c7d08a",
173+
"0x89329a752384ca7165bc8e3dca463900e063fa7552e7b7986c8baebea9c54926", "0x09a339f9c227fd48deca618e84c605142d96d9e25b0f0d23e609a62015ae7e8c",
174+
"0xca9fd8ff36f7b97c756c9fcc1769e8b6db24012351c4869c3886522698ac2b17", "0xb62be1079338e91e9892a925451c9ac2b7d2a85c4f7ebb074a9769dfa73ede6d",
175+
"0x683a8d8f5179dc40cc6804e06643ca14c5d70b1f6c3d4672dc363bd0586552ff", "0xca87d13aea33620e59c29d78f1f1994f09387c60cc984e542ad68969d946b882",
176+
"0x80ae04c90543e470964302881d5add8916d082aeeb3ec6e8852dbfc307ad0db8", "0xa69e27736ede3c377bc4cb98d017208307f36180cb4d9f23d4ef8792972bad8c",
177+
"0x00f0fd7a0a88a8ab00d5004d16120884d75bbf40c7dda9b4d8eb1785fc5f3bd7", "0x6256f55a4f4174a0e592eb8433557a3abbbdf054b224a1d325a163ff810683d7",
178+
"0xf9868e385850e2963ac9223742870dab32d3e04697c0fc43849a6bfd9812a934", "0x22eed4dca7fb4a33b5aba488d4d0a5f527399638fb7ec837643b08307cf520f7",
179+
"0x9a613b0ae0422e33063e253e78178c4802a5188848b6105d6830091f7c92ee24", "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c",
180+
"0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7",
181+
"0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544",
182+
"0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4",
183+
"0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636",
184+
"0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7",
185+
"0xc6f67e02e6e4e1bdefb994c6098953f34636ba2b6ca20a4721d2b26a886722ff", "0x1c9a7e5ff1cf48b4ad1582d3f4e4a1004f3b20d8c5a2b71387a4254ad933ebc5",
186+
"0x2f075ae229646b6f6aed19a5e372cf295081401eb893ff599b3f9acc0c0d3e7d", "0x328921deb59612076801e8cd61592107b5c67c79b846595cc6320c395b46362c",
187+
"0xbfb909fdb236ad2411b4e4883810a074b840464689986c3f8a8091827e17c327", "0x55d8fb3687ba3ba49f342c77f5a1f89bec83d811446e1a467139213d640b6a74",
188+
"0xf7210d4f8e7e1039790e7bf4efa207555a10a6db1dd4b95da313aaa88b88fe76", "0xad21b516cbc645ffe34ab5de1c8aef8cd4e7f8d2b51e8e1456adc7563cda206f",
189+
"0x609d1d0000000000000000000000000000000000000000000000000000000000", "0xc6341f0000000000000000000000000000000000000000000000000000000000",
190+
"0x681c6d64aba47a084f8f2d7bf1f6208b0e18287b94d3ee0a44314ca1cf307b36", "0x584cf95f07685553e071414dcde96eb936a40ae41ff16251d6dad1938aa1fb9d",
191+
"0xa10b34eeb909d7ad2efdae3344aeb210032d09e0e8edf1c03bd6807e24c9d199", "0xa61ec140c4dee2bec895af537f2ef19376fac4ddb292ad7352809d7d5926461e",
192+
"0x2395c64f50239f14feea5dbe13c65d405e0d4be2d25e8995d8f64b94f83014fc", "0x032ffdac4b987092a708a481a6aa53c66aa874fe96a9f689031715ffa726fee4",
193+
"0xbe6d4ac575061b5182c9112451fdc189c2d3dc3a882b4c06c365e0acded0d600", "0x6cb1b243918374de6252a32aa24a34e0e40f3df71b7b51e6a59d0e99e9109d2d"
194+
];
195+
196+
const blockRoot = '0xe39be859f0aaa98d1c269252388115284366451b58ed082801593dbbfccd1876';
197+
const slot = 11834166;
198+
await blockRoots.setBlockRoot(slot, blockRoot);
199+
200+
const pubkey = '0xac40921dc9996570db336ef7d6a8cece00a0363c67d13bbdcb0f995c8d50c9b733a5c568f8fcfdc768137d1041ab0f23';
201+
const withdrawalCredentials = '0x010000000000000000000000a328075616c6351790a9ac1391c4b7b2c1dbf729'; // Invalid withdrawal credentials
202+
203+
const proofData = {
204+
validatorIndex: 405782,
205+
pubkey: pubkey,
206+
withdrawalCredentials: withdrawalCredentials,
207+
slot: slot,
208+
witnesses: proof,
209+
};
210+
211+
const result = await beaconStateVerifier.verifyValidator(proofData);
212+
assert.equal(result, false, 'Verification succeeded');
213+
});
214+
122215
it(printTitle('BeaconStateVerifier', 'Can verify withdrawal'), async () => {
123216
const beaconStateVerifier = await BeaconStateVerifier.deployed();
124217
const blockRoots = await BlockRootsMock.deployed();
@@ -171,5 +264,58 @@ export default function() {
171264
const result = await beaconStateVerifier.verifyWithdrawal(1308840n, 11825974n, 0n, withdrawal, 11834166n, proof);
172265
assert.equal(result, true, 'Verification failed');
173266
});
267+
268+
it(printTitle('BeaconStateVerifier', 'Fails to verify invalid withdrawal'), async () => {
269+
const beaconStateVerifier = await BeaconStateVerifier.deployed();
270+
const blockRoots = await BlockRootsMock.deployed();
271+
272+
const proof = [
273+
// BeaconBlockBody -> execution_payload.withdrawals[0]
274+
275+
"0x56ebcae55f5161bd71226301b4c751ef433864c820c8d09361ca1a74758dd72c", "0x162cc35aa31a7cf1790ca34860c7e7a63f1ab2529f66d99fa1a872aea0bcf529",
276+
"0x60df1c1e8c19fa3de668e029902080838b9dd7ab7fec07697512023010f94d8e", "0x2096b4b750bdd7e22648c95e859efbf140e3da2ddd9ccdd95f3eba97d8fc121b",
277+
"0x1000000000000000000000000000000000000000000000000000000000000000", "0x0000080000000000000000000000000000000000000000000000000000000000",
278+
"0x61f017d3d8dee5ba8c68636e51a096ed3f523bbf29209fdb88711ff91a013c00", "0x268dfefa9d9326b73496fceb1f0a5ef42c8186889d0e3afd04c96ea87438120c",
279+
"0xd85a7f6d61f27841b359f9d59db3adddd1208a0ea924ffbc9c229220f5a23c5a", "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c",
280+
"0xfd243838556ef257a4f3fd56272677a294c981de157694a3908dc9c08ca75d7a", "0xbd44a705c5063628996d4655f67571bcb9feadccab563f32235b08f8d52e9c7d",
281+
"0x6dd3b9955d892d92338b19976fd07084bfe88a76c3063482b7f30ee60feb2a58", "0x0a08a05a0b40226edaf0b2f1283eef98aca4b4cbe11e5a5add681fb78a15e807",
282+
283+
// BeaconBlockHeader -> body_root
284+
285+
"0x0000000000000000000000000000000000000000000000000000000000000000", "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b",
286+
"0xa5f81459647ffebe8131ca4450ab282041ee9392788322920d6c6453e0d3703b",
287+
288+
// BeaconState -> block_roots[4918]
289+
290+
"0x7fa5e2df1bc7aa2f1530cd0bf1d3eab30ab12c4c1759429be374f5ed5bbbe43f", "0x409b0b10e9827ef913ad8961fc41b5dd5a01958c74e216fcde0d41e4738cd35c",
291+
"0xde3665f1b9e597580bb07de60cea574c5979a7e004d3b32e374a6350cce8fac5", "0xe7be85faefef9065463ec965fc39cfca593eb821ab779ea554f75524c9f60a5a",
292+
"0x9aab9f93f2e6677e57dd7050f31c9f98a35b8a43baca479a7bcb19c2eda73dee", "0x9e81de4708be5491b91ac6063e8ddd6fdd337ee4e0a0cba3d514645f096455c8",
293+
"0x66e126f270d3a2e25f45a07f376e99d8d337294ae07881402b4559f6ab4aa196", "0x1a49505aca09512fe47c707f8e904b230c91f691ec5e740d56b4f114897f41d3",
294+
"0x7bf09154ce4ecb3b37e79aab07747b10daebf5beef9ea8bf21dabf19c1882ef4", "0xc66785fa60eea935ffd8f68b04add1c62ef58e38e981a9531a7dd0278efcd26b",
295+
"0xf3c3f22873777b958507460c3537f0bd918c418e5addf3a03430cff26ee07d9e", "0x687f364236011235b2b4e40731cca0162739608af0294a6d4b576b5aecf51e57",
296+
"0x4fbd98fec8d190f77e452402b07aa8bf65847a2e2377f2e37065be5a9fa265e9", "0xd24aa06a0c8898472fa28ae9b982d7e392936e02d8cb53c48197e2edf3ba9ad5",
297+
"0xbef846d51e9bc2f7d07e91d4ef8c723e086a7df6e046fcea4bd477628c19e8a7", "0x542dea61bd1defaed4819d65ead85d75d6d940a3d2dded3749e725536acd8a4b",
298+
"0x3e177dc62135a265fafb6040763bf023d30f7540828b152d3473604a9e887eef", "0xa61ec140c4dee2bec895af537f2ef19376fac4ddb292ad7352809d7d5926461e",
299+
"0x2395c64f50239f14feea5dbe13c65d405e0d4be2d25e8995d8f64b94f83014fc",
300+
301+
// BeaconBlock -> state_root
302+
"0x032ffdac4b987092a708a481a6aa53c66aa874fe96a9f689031715ffa726fee4",
303+
"0xbe6d4ac575061b5182c9112451fdc189c2d3dc3a882b4c06c365e0acded0d600", "0x6cb1b243918374de6252a32aa24a34e0e40f3df71b7b51e6a59d0e99e9109d2d"
304+
];
305+
306+
const blockRoot = '0xe39be859f0aaa98d1c269252388115284366451b58ed082801593dbbfccd1876';
307+
const slot = 11834166;
308+
await blockRoots.setBlockRoot(slot, blockRoot);
309+
310+
const withdrawal = {
311+
index: 89138507n,
312+
validatorIndex: 1060378,
313+
withdrawalCredentials: '0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f',
314+
amountInGwei: 999999999n, // Invalid amount
315+
}
316+
317+
const result = await beaconStateVerifier.verifyWithdrawal(1308840n, 11825974n, 0n, withdrawal, 11834166n, proof);
318+
assert.equal(result, false, 'Verification succeeded');
319+
});
174320
});
175321
}

0 commit comments

Comments
 (0)