The EZKL zk-SNARK verifier is a Rust-based implementation of zkonduit's reusable EZKL Solidity verifier, optimized to be used contextually with zkVerify.
Below, we present a basic use case of verifying an EZKL zk-SNARK proof using our implementation:
use ezkl_no_std::verify;
// Sample zero-knowledge proof.
let raw_proof = hex_literal::hex!(
"
16116e6f83ae1ce72bdf68adefb97d9812519a17ce57bf874f1c0ac9deff0050
293ffbdfbd278af2287a1932a6feb5ec6338c66741378548f15b9c442396b411
07c416ccd11a6faf9321c23de1c7a0d7e5b66b7342177d7fa2dbf097968972de
28b6f03ed2d3618a9771af00b827e219be3b01f0e44a9a76862553c0c90d41ec
2d9366ca0c9d76f7521d5d57fe96d7d4728c11995f3c306bad7c0b0ac3411fd3
104b87ac1f4c94d598f9a5fb7972ea5e30743b8bc4d8479d612c1d16af1a1a61
1d25b7d4582718f95f651c1e2ae8f61c03fc6bb68dfe16cfaa62f0a0fd7b88a7
219caf55041b4a286ccff7db5d48bf9c7a79c616ddcfb26cb01ab7e193fad919
1e90207c0d7f0156d2245a41183646369723264fcb030ea5b88204988b945a3c
1389efacf1873dc56da306f7744bff3216db68b644f0c12830d90e7ebdafbeeb
2b236d6a68c0464436124a9eb78de08f54f33c6c183de7c8e6fc80ddd4aef95a
28e1dd749dd764d161be14a0e1ed361241149137145a5e89c7e896ddab4a2351
1313b924593128f5b9f52df8a7c19eae1f967963ee28c2279669e19923be5a0a
2d2c5ccf4f59afbd607057f9dabbf5bc4574a6404392e308bc62bd569eedba66
0c475f34bc62980d2c22c308d3d22ee9eb15494d6ad4aa7c5d575d1ae5f66346
2f9e19126d17276a1823a418b66895b12a53351ba42ab28d18d0bb0cf95deb6c
205de27789df2c34f68d5e7a5eba2cb6f1a81f9629ab4b8ba53e74a4afbdfdb3
09051cdedfc07b4d06c020beb435718a14a8e0c85b96638bffa8b8e94effa7d6
0ef975434f4852d3534b3433448490658b9eae0f8d1eae26096c430e4e338579
1ad644c63b697077cb879dc0ba42f4c0ed1157136dfcf6ddc37886b1ffc8917f
03c67331a2c45bd376fbaffe8e50a13c62d2dccd42f897f92e3306e68159d404
1a4a6bcf27b291f039d5c17a387e38d2ac70a5844b6f1acb7732ce0af66b203b
15c6b7aefd577518a669e1c49a01a2a704dfd40a00e6f207dfefa075fa5158d3
2a0fbcfab492d09edf14667d9a3ef30eb3390f3e49823fd4ca5ab5aad6343709
20dfc6db847bb6c298716418e669ef7c5d53950def82e63f9d33088bf68687a2
07acb8fa10fb1d89ed6dc78229c775e4b2b22d83d2060ac15e074b95fe67cc11
2ee44d6f6848576491ab3c726e9606dbb0ed12006a0be96ca2fa42217d9a7bad
1ba9125b7ae1498689da6414684ceb0692d1f254490ccbf73d855d4ae6062d81
22fbc5e07d31b7df577048d39150a10c2885a0a454a8ad284a125c35a5160b3c
1719d1027d560a6df0587ac91dab6abe79df7b7990021dd7b0b90b47f8a0acb6
068516f783798da2c3ca3538a4b750fd6ef56fb47f797733440330cafc76f2f9
14b1da9b72da529cb61775eedfef1e049aaa305d5a4826441349600f68b49efc
2011ee1e8ad0f09b9a065b8aa4a99b98b28d17fde71276deb387e2e776e27687
0ee329264d56cd8844129e8030511c68ce1690c0c8f478e4de540d636dfcc38e
0afbe7999c80af3104410a9f883edd0efe9fc6bc517328daac874a88d459282d
128dc87ec38de4264af1c350a02892560751c582b23effe992a979f33b2314b8
0a2887c0db3dabaa3ed24bfae3598d28b2be48bac6f5f7fe65529ff65bdcf1a8
111668d488c51b1e6453be9a24fb49a2f8822b5684e2010b9ae848a73c6fcda2
2c97157031a93f3e1df6f8154a3ac5aae20e3fd3956d9de9221e19c28b0fb8d4
2db82139d2a5793ebf7e7e23a38e418640f6df71a55822836e9233e47e2a7d89
2fd044ffbdf865facb8508b42686028f8795cab330d2c03ece8d312a062c13e5
09d33edfe3118916129a325804e64d67dd44ca1f8a32d39d19358b9cd763b125
0f87546b22b1faaa327c80f09a02f3db6f7411e1245595544f5406ad8eca4210
2e94d46f49383733b830e0e5c378614d456ef192184b4cb58a01cc669e7a0650
217cb3552af69ebfbc85eabcfe92906700fd0fab0d96cf094a129d0d1d9d7d79
0da588486da73c9752606cd6cac363085e3ee3a103c745d5ab5f826195c920ec
1cbd17871d832e389f4a0fb592e25cef35db64cedb7a78b112c5bbba850a46ed
00552fb9cd38ba2a330c422553541b251335e9ea16ecb137b53dd627b2f12c9a
1178ee672948e1344cd33ef8ce534a4f5f11c26d77c95cf527965df0a4969284
2457261b9e1f28167f8121f6f0a28032a0114af787720a96d5380a317932295f
15c0d667a5e4859d59c21d8849ecfe6cfdee2b7554eeb0414a5cc567424b70f9
1ed36a4af5cf131bae6133fc68011e86141ab8896cc4b7a2f659ff7433990748
1130009da4797503de54a31f730ae29dec0f51f2c5c801625a362c6ca9faaa64
182ee0948246acb751e6fb51ee56ddbf9fcfd3610ecf70bcb47233d6daa39a5a
1f9dda899791ff4fb8596e43bdc6a1e907d4ccb1c649ea516b8018ef36980874
15f08ed7bcdfe8492e55ca107c81ec6b854fdc1b828a68e4ea3cda44a9a8cdb3
22e7f510d4077778d2cea2bd40bd80ac7f03cb666b08a416b02eb66cb39c5187
0513d35e7452a71bbb4fc8b450c91485976269fdc456e70fd9e37a9cd148c501
2832d710e128a4dce8db3b1c420025c8d74b0acd4a83adae53f30c0c66234ff2
2d665b2d5a5eecda654ae985ace987786b72f14ffab2b3cf927208172342ab89
26ceb31e931d71c348c365e85eaa1ff9dfbb61d21518aeba0a7379d2d72dadc9
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
24e44bd0b886d846aca514223ea4bcad33e4eb7c03c6b8a3599c2d719204a9c3
282f4c5e21a42b524655d840ca6bb0282e42f0cc3079467200b89e2633717e81
195e10b9dad72c7ae0bfa8a6f739f26a560690e6830418802d54b1b1ad59bcdc
02f840e67b0a0db65ae060973c01e1477c4fc750b421d12e912ddce76c353817
0cb46a5365dc221de2b4787fa6cc6ec4683342c5caa8b6ef3d1942529b9f09bf
138e4846408a416afe29a4d8d59293c1119c33d764dc32ccea0d9d1ab4c3009c
12d1e5922b9183d114688e4956f54f57747b64c7a8db130f390ff26deb8553e7
0f602f27b6f0cbddf6d4944a1b934d4990461d38ec57840db6c326644b97040d
290d5c9517e3e4af676b8d83bfe2be64ca8929de90373fbd44d5de4e2f01bbda
303375871aed0d168f244756108ddf3ddbfe78916c9d1a6e6ca9b0663a00484d
2a438deb0038bd8c704166f0f2c296b6dabae650dc3c5cc9b65a4a24d54502fc
167340c5c026c80b1a79c52d9504019cd29cfe518a2fabd30aba09ab009dbb69
1745d19c71888b8be00489270dbac5b2608d842c4b1b5e3c91aff1c0e52a769a
23869941656e6517e72d2bde13fc6386e32bd37152b18ae17be39e890378c454
0058cd92a5f970f5adc39d7841f4f5f602d1ff907b6ec4e6f56da1c029b4dc12
1c64c34da73e18f0de392c7d39a05f99bc37506ad468a49c44491283970d3ca4
132e0ee9e4f2f70455a71b0e5405c887856625485b085ba7e5971d858f18a3c1
00744d82d32e6cfb3ef7076d9465d35c57a720a5b42a75e02a410f045e9fd632
1228b6d7676097ee8ce77aae1c7e9137b43fc705cc85e3fa60d28c8affb2690b
01bb5a25958e7130cf8c541b97e31e17fd3160cda85490baba9394c4da5be468
245543c81f08fe13f75d9f83c785eeaa36c5958d9da2f03a01ed7052cc628666
13c171afa6b4354b6cc0b1d43c328d0f0b095ea54fe11f5d89327a0b8c4fb218
0ef2450bde99bf42dd81c6d53b9a99db87855c5620aa013c31a279bd80696dc8
12fc2baca25b27d4fc8a57cc7d954718d8baa327d075959afcd44a9c40baa9db
115b4e3d50f7d2c5849d21af0fa6d0cf4099adfef7f130e3d2f5fc46bcad9fae
0d4fb2ecd90bdd039952ad939c5482998646357d2f118146074f7740472613fa
15967072741e9e5a01bb775a73aa509ad34bad29b327e86ee21b2b03aa904017
16ebaf6df459cb9ab239e97c4acc9c146d9d7c30253503a8182ff86e6e9236bb
20f26efb6c9c8eeec690474729d71e43c9d77a15bfffd5e1bea1470a8222ea49
0bff2e0812656967eca535275e3f994eb7d664cd6b7a5e1ca28f478b56a79378
0483500de58b879721edd853d7330543f14574d24d5a50a12257443953cb5318
2de515c04d4619706030ff4d66098fbec9578e90a0f36478bf852c2d32f8c05c
18292eeeb47129a65cc92dcadbb94c911a23b8ea9a6610e7d0267b6adac5d620
"
);
// Sample verification key artifact (VKA).
let vka = hex_literal::hex!(
"
26f89a56f2621ba5476f7e4ce72e2beb59cb422eac4276737c89c7ab5324d8f1
0000000000000000000000000000000000000000000000000000000000000620
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000030
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000f
3063edaa444bddc677fcd515f614555a777997e0a9287d1e62bf6dd004d82001
2b7ddfe4383c8d806530b94d3120ce6fcb511871e4d44a65f0acd0b96a8a942e
1f67bc4574eaef5e630a13c710221a3e3d491e59fddabaf321e56f3ca8d91624
2427343dea588e4242e165ef52d4c1f5986149f372f5c87534f7f6274ef4eeff
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000002
198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2
1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed
090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b
12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa
186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac
17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d2
06d971ff4a7467c3ec596ed6efc674572e32fd6f52b721f97e35b0b3d3546753
06ecdb9f9567f59ed2eee36e1e1d58797fd13cc97fafc2910f5e8a12f202fa9a
00000000000000000000000000000000000000000000000000000000000005c4
0000000000000000000000000000000000000000000000000000000000000504
0000000000000000000000000000000000000000000000000000000000000a80
0000000000000000000000000000000000000000000000000000000000000e60
0000000000000000000000000000000000000000000000000000000000000ee0
00000000000000000000000000000000000000000000000000000000000010c0
00000000000000000000000000000000000000000000000000000000000013a0
0000000000000000000000000000000000000000000000000000000000000006
000000000000000000000000000000000000000000000000000000000000000c
0000000000000000000000000000000000000001010001020002010001018001
11dbdad02cbee4685acf8bd26bb2895386ef0867ca7d20945b61d37e8e487d5d
182c5fb2dddced4b2b8d6606f857cc85c48d26955274245d5844aee2812b7717
2b50655bb4560d7529bf4070e81524fb13b859ecaa13aaed24a594441ad71918
0eeb09447c8dc370c352e005bd887ed783b4ec37a76e462a3aae7de6fbdde0d1
15a51539aff2087850cd2d7a60e8c87d1f9a8ef180c289d96294e328767e4ba2
24886af2f62be3465d54a10798576d26eca16de4af6d40eb3df1f89f58e4b2aa
2bab0f094351b2c908624d953bf53fe432ec40296c9b4122a616a769ec66fa4b
2b32462b3da73b86f2308904544936ad9618a11932ba0add1972412df81c54d8
1348ce0212f610c72f76a2a0793428c7e10f127fec954920095a3bf7c644952f
0f580d09342e901e89b3f059966fa2ee02d68c206c73870ee68f9822dfb869f1
033743a10ea802c7108ea15cacc23925d734b3038b15da01a66d6274bc0b4f8c
06c449b4d06afaafb10c5318ee9a21da49acdc0204eda3be386c64d7e6415985
09a54db76f01d35128c2895d4b21d797142f9ea67829f89c0d6048aed2174e1f
17a3883c7aea50afdad71dcceb7dd8c7f0daa3a056cc506c88f37552161fbba0
00f7f3de6e7682162b11059394081f816c6eea06567dc9e68770c21d3ca24f95
2818bcffd1e2baaaf883c6050c02f690882c5605f276ac9dd6185c664fb64774
0a4877b01dd1724ed174d942942d97fc9900ccd17c2bf353ca196f8e8d2c9a34
273909cfe18a400347c5cea4f8c45815a99fff217a9a5eaa88948d83094380fa
23d11877c1d589b21216c59609026dc405dac87be577dd0519172f6b3c89e790
0c3a6911c30c1a556e713c6db55e8ea5dc8fbdbce65f00afcc0ba35ace9cd975
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
22ea5bd268477e31c6aedd316f3de32d6c903cc55702114e81fdd6f962976108
01d95fab7270e618d83f17fb4548cb304b58c0c50a6177e4882a7d4380419b27
004ab5bdc684a3df47dfb74a58f1dab2f7de8e0ba124c62a7386ff114005ca31
259c771a782bab9f0485f3f76d4cc8b250103f1c6617a5b46ededa12e4573a30
16d4a040c47618f4fb9b506719dcdea432a19d03adf3fd4d79aa6d2473c97a9a
080dde5afbccf02902166b2270e8b012fecfe79423605c551f0860fc8fa15109
17f69c0d934841bb77e6f523cea8c381e4b36604f3a70b9d5b72301c35d997fa
07be8e25ae5a38b4346a3bf7a67d8b27c612cefd6555269032dab8d9438c4b29
06896d11cf726b54e24b61e988cb6d3609b2d2a5bc3c98f76503289f1d1ae62f
29914e6f06f7def1fd7067d888cee95371c7d245a6da631f31416202ae3131f6
00065d4d1bba26868f89fcc0e9de94dd5a733700ad25a1bb3d853279f2230971
1c22320c9ba62257adf2484817f73203ea934369657fbaebaedbe08f145135dc
07209d864e3ccead55bf0df3d36064de4ed86b5658417922b5aeafaf8ccc9b93
0d08ca0b682b654e9ae001e8340791d7ed31d060135c9528afa50300f41472ff
2261eadba2d0ee851e2b4c94e2c30dd5930f475702d4b696efb7cdc59c84477f
2292a1eb1c0d1e69892c7ea82f5278f15ce22bde4fbe2060a78b77b8a4014259
0000000000000000000000000000000000000000000000000000000000000002
0000000000000000000000000000000000000000000000000000000000000003
0000000000000000000000000000000000000000000000000000000000000001
0000000000000000000000000000000000000000000000000000000000000000
30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000
0000000000000000000000000000000000000000000000000000000000000200
000006840014c014a00314600a00021480144003146009e00214400107c40002
000000000000000015a014e00315801500021560011540152002064400060400
000006a40014c014a00314600a00021480144003146009e00214400107e40002
000000000000000015a014e00315801500021560011540152002066400062400
000006840014c014a003146009e002148014400314600a200214400107c40002
000000000000000015a014e00315801500021560011540152003064400060400
000006a40014c014a003146009e002148014400314600a200214400107e40002
000000000000000015a014e00315801500021560011540152003066400062400
000006840014c014a00314600a0002148014400314600a200214400107c40002
000000000015c014e00315a01500021580011560152002154001064400060400
000006a40014c014a00314600a0002148014400314600a200214400107e40002
000000000015c014e00315a01500021580011560152002154001066400062400
000006840014c014a00314600a0002148014400314600a200214400108040003
000015e015c00306640006240015800a4002156015400306440006040006c400
000000000000000000168014e00316601500021640011620152002160015a002
000006840014c014a00314600a00021480144003146009e00214400108040003
15e015800215c015a00306640006240015600a40021540152003064400060400
00000000000000000000000000000000000000164014e0031620150002160001
000006840014c014a003146009e002148014400314600a200214400108040002
00000015c014e00315a0150002158001156015400306640015200a2003064400
0015000a200306440006c4000684001480144003146009e00214400108240002
00000000000015c014a00315a014c002158001156014e0031540152003066400
00150014600214e00114c014a00206640014800a400206440006840008440002
0000000000000000000000000000000000000000000000000000001520144003
0015000a400206440006c400068400148014400314600a200214400108240002
00000000000015c014a00315a014c002158001156014e0021540152002066400
00000000000000000000000000000000000000000000000a4014400307440001
00000000000000000000000000000000000000000000000a4014400307640001
00000000000000000000000000000000000000000000000a4014400307840001
00000000000000000000000000000000000000000000000a4014400307a40001
0000000000000000000000000000000000000000000000000000000020002002
000000000000000000000008c406440008a4062400088406040009c409a40984
0000000000000000000000092406a400090406840008e40664000a240a0409e4
000000000000000000000000000000000964000001094406e4000a840a640a44
00000000000000000000000000000000000000000000000000000000000010c0
000000000000000000000000000000000000000000000000000ac40aa40a8401
00000000000000000000000000000000000000000000000014e0010407040001
0a4015800315600a200215000115201500030604000a2014e003074400020020
000000000000000000000000000000000000000000000015c0010415a0154002
000000000000000000000000000000000000000000000000000b240b040ae400
0a4015800315600a200215000115201500030624000a2014e003076400020020
000000000000000000000000000000000000000000000015c0010415a0154002
000000000000000000000000000000000000000000000000000b840b640b4401
00000000000000000000000000000000000000000000000014e0010407240001
0a6015800315600a200215000115201500030604000a2014e003078400020020
000000000000000000000000000000000000000000000015c0010415a0154002
000000000000000000000000000000000000000000000000000be40bc40ba400
0a6015800315600a200215000115201500030624000a2014e00307a400020020
000000000000000000000000000000000000000000000015c0010415a0154002
0000000000000000000000000000000000000000000000000000000000036001
0000000000000000000000000000000000030000000000000000000320060340
000000000000000000000000000000000000000000000003c001030004000380
0000000000000000000000000000000000000000000000000000000000040400
000000000000000000000000000000000000000000000000000003e003a00380
0000000000000000000000000000000000000000000000000000000003e00380
00000000000000000000000000000000000000000000000000000000000003a0
0000000000000000000000000000000000000000000000000000000003a00380
0000000000000000000000000000000000000000000000000000000203020101
00000000000000000000000000000000000000000000000000000000002003c0
00000000000000000000000000000000000000000060004003c003a003400320
000000000000000000000000000000c000a0008003e003c00380036003400300
0000000000000000000000000000000000000000010000e003e003c003600340
0000000000000000000000000000000000000000000000000000008004200120
00000000000000000000000000000000000000000000004060402004a0044001
0000000006a4010ac4010b24010b84010be40106c40844000864096400086402
00000000000000000000000000000000000000000000000000000005e4066400
000000000000000000000000000000000000000000000000000000068406c401
0000000000000000000000000000000000000009a4098409c40a0409e40a2401
00000000000000000000000a640a440aa40a840b040ae40b640b440bc40ba401
0000000000000000000000000000000000000005804005606005404005202001
0000000000000000000000000000000000000000000000000000050005200080
000000000000000000000000000000202020200c640c4404000c240c04044001
0000000000000000004401440001018402c4000104a009a00000010204e404c4
0000000000000000000000000000000000000000000000000000000001a40184
0000000000000000000000000000000000000000000003240304010103640344
0000000000000000000000000000000000000000000003440444000104a40484
00000000000000000000000000000000000000000000000d0100000020001201
"
);
// Sample instances (public inputs).
let instances = [
hex_literal::hex!(
"000000000000000000000000000000000000000000000000000000000000a000"
)];
// Invoke the EZKL verifier.
assert!(verify::<()>(&vka, &raw_proof, &instances).is_ok()); // success