@@ -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