@@ -8,7 +8,7 @@ const hre = require('hardhat');
88const ethers = hre . ethers ;
99
1010export default function ( ) {
11- describe ( 'BeaconStateVerifier' , ( ) => {
11+ describe . only ( 'BeaconStateVerifier' , ( ) => {
1212 let owner ,
1313 node ,
1414 random ;
@@ -317,5 +317,115 @@ export default function() {
317317 const result = await beaconStateVerifier . verifyWithdrawal ( 1308840n , 11825974n , 0n , withdrawal , 11834166n , proof ) ;
318318 assert . equal ( result , false , 'Verification succeeded' ) ;
319319 } ) ;
320+
321+ it ( printTitle ( 'BeaconStateVerifier' , 'Can verify historical withdrawal' ) , async ( ) => {
322+ const beaconStateVerifier = await BeaconStateVerifier . deployed ( ) ;
323+ const blockRoots = await BlockRootsMock . deployed ( ) ;
324+
325+ const proof = [
326+ "0x74cfc71c3b83d9ebf5efd08392c92a9dda42503dcad6803c73891d9053a70320" , "0x93c4b29ead59124360480d4caa9654a5b0fdd65db4ea7a86b16e4b7b83bda95e" ,
327+ "0xe7fe50fcdea47e2a2f5a3fc124aa511e3509f7a15ba069b1ad498bbbe95b720d" , "0x5deacc1ef4e1ce7209c023fec1ef703b2614c01be007c9d840ae16d5fd4a02db" ,
328+ "0x1000000000000000000000000000000000000000000000000000000000000000" , "0x00000c0000000000000000000000000000000000000000000000000000000000" ,
329+ "0x468ac3f202e83aa85fc823833d1dd7e4c068247229ca20c93e03e09eec71b1f2" , "0xdb4a3d44ad1639a5a33df330dacb43b1e9ffae933b39777284cc267cfb3b5e23" ,
330+ "0x554d7982fbf2b551698286f263c15bac3dab59aec4dad9ab151d65f87d2cebe3" , "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c" ,
331+ "0x78b61adb7dabe11b361c00c4d0ce8bc65ba5b25e986d53dd6c5f384c61407893" , "0x969cccd23584b6103d59d51cce0c05c509f3c1c6388dee057aa797464fc156c2" ,
332+ "0x6dd3b9955d892d92338b19976fd07084bfe88a76c3063482b7f30ee60feb2a58" , "0xade691acdbbfaad0986c3207cace76269ccfcbb43a7e7235e5c73034d922ce7b" ,
333+ "0x0000000000000000000000000000000000000000000000000000000000000000" , "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b" ,
334+ "0x6f09091e8b0c43ba767483032e44b9f7d188b5ccde3934bc34a13f25025a44fb" , "0xdeb1cb883675e814da9c601b922023255ce1ada869d9094b29c63e4ac96cc439" ,
335+ "0x1a9b340cae67f6d4e0a710df062a1d60c35952905a1159a3e900a854cebb0cd3" , "0x65df01553a531d51917456384133ddf678c6c889ce6162de9ea7dbe835564823" ,
336+ "0x9bdf14859c294df8627ca673abe55e5801b721ce4badb277e234b036439cc8a2" , "0x9f980cdfbfaed8bd6dbc14b0e58eea9a78188bee1841289e61b2cb2b9b22e135" ,
337+ "0x04a9a49769c78c902f06bac0f0f4ab1d20a6f6a963e17d09f8bc8967a8a533c2" , "0x9845c6e05b93d780abec431be46ed8693b206d12f826236710a0ab204c15d407" ,
338+ "0x223fbfd99ba532434d7a901e9571a02ce9abbe7ff8605e098f0377835126298b" , "0xaf26da67d02d6cff9fb740177f937f8aa9254f72b1113e22dfe01b7bc32ef2e9" ,
339+ "0xd3163825b7a6359405907912a8deb6bf9367ce842fe7e84e43d87f331779f816" , "0x64f656b7890973e7d6f1a52d2a9965662c6e4d7a70da5b8ea4a719bfbe7221a9" ,
340+ "0xf4e1a264be26a17650d3135f871c1fa481bdd5b0aec7e23385ea945e32357a88" , "0x7c5fe548aa993a78739b599b58480c5e12cdf4ca1ece180d2f98af468bf4ee8b" ,
341+ "0x678bc097998c1ab127329d2416aa2149f9d61f3e174813f2fcc1c5f3f82dfbbe" , "0xa908558027c3e780730442c080ea5e51310bb79f55ea7d65544bc821fff01b9d" ,
342+ "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b" , "0xdc4b1fb0c6da070776aff72f3cabdd69fe1bc80b17510e8389f0fe7b99ec13b4" ,
343+ "0x45bc0e84058bf2d6e40391a50d54957c151ab001f998119a4a5815b008a0b2de" , "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c" ,
344+ "0x42ac8905f23f1485ab055f9e45c206724a7dfbefc879f6b884f9e0f952a3bfc1" , "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1" ,
345+ "0x02fc550c3883e5fa2c1337af5d47a1ab421de5b139ecd19f16c7e8dcb76a1955" , "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193" ,
346+ "0xbc3c027ad6604c5f99c79faa8fb0756a92f9a23af6eda520d99f6fec48f6cce3" , "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b" ,
347+ "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220" , "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f" ,
348+ "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e" , "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784" ,
349+ "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb" , "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb" ,
350+ "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab" , "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4" ,
351+ "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f" , "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa" ,
352+ "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c" , "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167" ,
353+ "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7" , "0xae02000000000000000000000000000000000000000000000000000000000000" ,
354+ "0xccf8130000000000000000000000000000000000000000000000000000000000" , "0x93293d640cd7e57999f2add8910dd15145c57166082acd081ca2fbbec5cd2cbf" ,
355+ "0xe1be7bbc04e914d5555f015e7518c9db4668d32be20256b25f54a6094f82c759" , "0xc431c70147e808fa3bbd66145251d3678b97f68913d011f0adedb116498ff7ba" ,
356+ "0x54649e50d85164e2d61f38905ea2f507e51812db6b9582e87d1db86c071b9983" , "0x2395c64f50239f14feea5dbe13c65d405e0d4be2d25e8995d8f64b94f83014fc" ,
357+ "0x032ffdac4b987092a708a481a6aa53c66aa874fe96a9f689031715ffa726fee4" , "0xbe6d4ac575061b5182c9112451fdc189c2d3dc3a882b4c06c365e0acded0d600" ,
358+ "0x6cb1b243918374de6252a32aa24a34e0e40f3df71b7b51e6a59d0e99e9109d2d"
359+ ] ;
360+
361+ const blockRoot = '0xe39be859f0aaa98d1c269252388115284366451b58ed082801593dbbfccd1876' ;
362+ const slot = 11834166 ;
363+ await blockRoots . setBlockRoot ( slot , blockRoot ) ;
364+
365+ const withdrawal = {
366+ index : 88947435n ,
367+ validatorIndex : 688322n ,
368+ withdrawalCredentials : '0x42a93a9f5cfda54716c414b6eaf07cf512f46ead' ,
369+ amountInGwei : 19212998n ,
370+ }
371+
372+ const result = await beaconStateVerifier . verifyWithdrawal ( 688322n , 11813956n , 0n , withdrawal , 11834166n , proof ) ;
373+ assert . equal ( result , true , 'Verification failed' ) ;
374+ } ) ;
375+
376+ it ( printTitle ( 'BeaconStateVerifier' , 'Fails to verify invalid historical proof' ) , async ( ) => {
377+ const beaconStateVerifier = await BeaconStateVerifier . deployed ( ) ;
378+ const blockRoots = await BlockRootsMock . deployed ( ) ;
379+
380+ const proof = [
381+ "0x74cfc71c3b83d9ebf5efd08392c92a9dda42503dcad6803c73891d9053a70320" , "0x93c4b29ead59124360480d4caa9654a5b0fdd65db4ea7a86b16e4b7b83bda95e" ,
382+ "0xe7fe50fcdea47e2a2f5a3fc124aa511e3509f7a15ba069b1ad498bbbe95b720d" , "0x5deacc1ef4e1ce7209c023fec1ef703b2614c01be007c9d840ae16d5fd4a02db" ,
383+ "0x1000000000000000000000000000000000000000000000000000000000000000" , "0x00000c0000000000000000000000000000000000000000000000000000000000" ,
384+ "0x468ac3f202e83aa85fc823833d1dd7e4c068247229ca20c93e03e09eec71b1f2" , "0xdb4a3d44ad1639a5a33df330dacb43b1e9ffae933b39777284cc267cfb3b5e23" ,
385+ "0x554d7982fbf2b551698286f263c15bac3dab59aec4dad9ab151d65f87d2cebe3" , "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c" ,
386+ "0x78b61adb7dabe11b361c00c4d0ce8bc65ba5b25e986d53dd6c5f384c61407893" , "0x969cccd23584b6103d59d51cce0c05c509f3c1c6388dee057aa797464fc156c2" ,
387+ "0x6dd3b9955d892d92338b19976fd07084bfe88a76c3063482b7f30ee60feb2a58" , "0xade691acdbbfaad0986c3207cace76269ccfcbb43a7e7235e5c73034d922ce7b" ,
388+ "0x0000000000000000000000000000000000000000000000000000000000000000" , "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b" ,
389+ "0x6f09091e8b0c43ba767483032e44b9f7d188b5ccde3934bc34a13f25025a44fb" , "0xdeb1cb883675e814da9c601b922023255ce1ada869d9094b29c63e4ac96cc439" ,
390+ "0x1a9b340cae67f6d4e0a710df062a1d60c35952905a1159a3e900a854cebb0cd3" , "0x65df01553a531d51917456384133ddf678c6c889ce6162de9ea7dbe835564823" ,
391+ "0x9bdf14859c294df8627ca673abe55e5801b721ce4badb277e234b036439cc8a2" , "0x9f980cdfbfaed8bd6dbc14b0e58eea9a78188bee1841289e61b2cb2b9b22e135" ,
392+ "0x04a9a49769c78c902f06bac0f0f4ab1d20a6f6a963e17d09f8bc8967a8a533c2" , "0x9845c6e05b93d780abec431be46ed8693b206d12f826236710a0ab204c15d407" ,
393+ "0x223fbfd99ba532434d7a901e9571a02ce9abbe7ff8605e098f0377835126298b" , "0xaf26da67d02d6cff9fb740177f937f8aa9254f72b1113e22dfe01b7bc32ef2e9" ,
394+ "0xd3163825b7a6359405907912a8deb6bf9367ce842fe7e84e43d87f331779f816" , "0x64f656b7890973e7d6f1a52d2a9965662c6e4d7a70da5b8ea4a719bfbe7221a9" ,
395+ "0xf4e1a264be26a17650d3135f871c1fa481bdd5b0aec7e23385ea945e32357a88" , "0x7c5fe548aa993a78739b599b58480c5e12cdf4ca1ece180d2f98af468bf4ee8b" ,
396+ "0x678bc097998c1ab127329d2416aa2149f9d61f3e174813f2fcc1c5f3f82dfbbe" , "0xa908558027c3e780730442c080ea5e51310bb79f55ea7d65544bc821fff01b9d" ,
397+ "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b" , "0xdc4b1fb0c6da070776aff72f3cabdd69fe1bc80b17510e8389f0fe7b99ec13b4" ,
398+ "0x45bc0e84058bf2d6e40391a50d54957c151ab001f998119a4a5815b008a0b2de" , "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c" ,
399+ "0x42ac8905f23f1485ab055f9e45c206724a7dfbefc879f6b884f9e0f952a3bfc1" , "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1" ,
400+ "0x02fc550c3883e5fa2c1337af5d47a1ab421de5b139ecd19f16c7e8dcb76a1955" , "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193" ,
401+ "0xbc3c027ad6604c5f99c79faa8fb0756a92f9a23af6eda520d99f6fec48f6cce3" , "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b" ,
402+ "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220" , "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f" ,
403+ "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e" , "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784" ,
404+ "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb" , "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb" ,
405+ "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab" , "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4" ,
406+ "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f" , "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa" ,
407+ "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c" , "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167" ,
408+ "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7" , "0xae02000000000000000000000000000000000000000000000000000000000000" ,
409+ "0xccf8130000000000000000000000000000000000000000000000000000000000" , "0x93293d640cd7e57999f2add8910dd15145c57166082acd081ca2fbbec5cd2cbf" ,
410+ "0xe1be7bbc04e914d5555f015e7518c9db4668d32be20256b25f54a6094f82c759" , "0xc431c70147e808fa3bbd66145251d3678b97f68913d011f0adedb116498ff7ba" ,
411+ "0x54649e50d85164e2d61f38905ea2f507e51812db6b9582e87d1db86c071b9983" , "0x2395c64f50239f14feea5dbe13c65d405e0d4be2d25e8995d8f64b94f83014fc" ,
412+ "0x032ffdac4b987092a708a481a6aa53c66aa874fe96a9f689031715ffa726fee4" , "0xbe6d4ac575061b5182c9112451fdc189c2d3dc3a882b4c06c365e0acded0d600" ,
413+ "0x6cb1b243918374de6252a32aa24a34e0e40f3df71b7b51e6a59d0e99e9109d2d"
414+ ] ;
415+
416+ const blockRoot = '0xe39be859f0aaa98d1c269252388115284366451b58ed082801593dbbfccd1876' ;
417+ const slot = 11834166 ;
418+ await blockRoots . setBlockRoot ( slot , blockRoot ) ;
419+
420+ const withdrawal = {
421+ index : 88947435n ,
422+ validatorIndex : 688322n ,
423+ withdrawalCredentials : '0x42a93a9f5cfda54716c414b6eaf07cf512f46ead' ,
424+ amountInGwei : 999999999n , // Invalid amount
425+ }
426+
427+ const result = await beaconStateVerifier . verifyWithdrawal ( 688322n , 11813956n , 0n , withdrawal , 11834166n , proof ) ;
428+ assert . equal ( result , false , 'Verification succeeded' ) ;
429+ } ) ;
320430 } ) ;
321431}
0 commit comments