8000 GitHub - zkVerify/ultraplonk_verifier
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

zkVerify/ultraplonk_verifier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UltraPlonk zk-SNARK Verifier

The UltraPlonk zk-SNARK verifier is a Rust-based implementation of Noir's UltraPlonk Solidity verifier, optimized to be used contextually with zkVerify.

Usage

use ultraplonk_no_std::verify;
use hex_literal::hex;

let proof_data = hex!(
      "
      15d2cb30be54aed04a1356bcabbf6217a20a7b4be770b77286d9b570827055d5
      1e33c5b02a6b10e4e34705620f96db583a46531edb67ed54f5cd8e1ca98bea8b
      1c4e2003c9a844fc7afb84010fc53a773f0b2bacea45345fb2eb4bd9ab638a55
      23630ae86706266aed6a82c0a729cf7c38ac7db37da246c99e77cda5efc41c24
      0c985adc08d6763ce7dd8287bd2cd201243f7f4031e836729c15b8f6cb4cf507
      07fdc6f741c84477a7e42f8a480ee64a3d1c7fceecac94055eb24a3efa580cec
      0a95d4a2e9688d0759a87a2981a38d746683c17b279db1eef35152a55cbdde25
      00f9204aa9544b599fdfa411abb0b6a779f9437f08fedc4421405cbca27c1b7a
      0fe1ba3146ee70914c49716272161c3700940bd8c1a9e4741e105fc08dac8e2e
      2f442bc8d3df8524f0916a93a6c6cc5d4b1d28a55e1a5531bad46b316f95e0bc
      25ca0b2ea7f3e365f0ad209d726935cab91f67d5ae985a934d38becd8aaa603a
      04b319d8591a137cde07a5f82c6749130603435be93c9a3c8764559723ee4dc0
      194a87ca976963c90a77a8ebaca268dc1c5f8286f9d4ad5016c757080baeef58
      0892aff5f163d3d89418a1835a2f768cb1421a1b10a298037cdcdb4a040ef292
      00b8e0558b77daed027ad8a2d7f6027de8e2dc9ddafd572170312d511f0e5df8
      2a927caded56827ac403fab8e088eb4e4b80da829ed406e1ef308b95f18181fd
      0952d7f350a0019b47b3aad37ce0883a2f6c842f48392f6a8c9230872117414f
      0d0c07547ea86d3a7f446c019cf99ae44b251dc51c2a22dec3f716649263e01d
      1a67b3f521c82483bdd0a513ff382073193cb4588bc7253c011f5aa31924110a
      0ae3441e2c685cf0d54b83c99798415509144bfcaa881e6e30ade37e572399ba
      08d632a5ce80aff8e5ba0361b99095ddc633c678b5296dd56e87a0496fea1eb1
      012cd30fc1dce7ff3a99173aea24327920c6aeadda5a15f765df7719088b66d2
      210b5e4ea13de0415a33c50ccbe9e6eaad4ddfca26d8a4938350387479d9e09d
      0962e6b3452b23cdcbea70d2123a2eeaa81d7bf390c185b66504a80ecf3ef82b
      099d2178bac44b9d3321dc0526524b221cdc8a374cd2202fd6215464ff3f8476
      2ac49b998bf39f10397bf4f548b49ce7bdb17e9b287fb3e8a605974894717dc0
      2518385d5e81584d61e671405e2585de4bfeb7fbf01d8ec3660758ba6defa4b7
      009e3d83d677371e58bc62dbc55046a82a3579d5283beaa4426a422be86b14e9
      09a6df873f123568af5f8904f66f6ad44d22355db3d3bfabeb3a55ec9594e961
      0164bdcf0258a4194289526455191edbf6c8cafaad5042d4423cb5812b5d9827
      1207fc52674841378d5b7a73f8750fdc3d593c04242c7abb61098a24b7987e45
      2f0ac3265215a262614a752c2cdbdd8e59cf8fe47386e3d49a22d781aebfde93
      1c6540f3bc4d17c3303b2993b3903b333a0655f952af0fce11bb61b8570be298
      2064d62d1af0f813cb9e49aa4537e7339a93a889199185b91c378334fe8747ce
      133f1692b5fb32bd0f5160684f8dba06c35ac1e6265e897552971fe383e817ea
      0decf78938ce20085b226a81c9ecb989eb91b3b6a3d7e5cce47f2d2e05e14a55
      15bae71eb000ea4bad8975881995317a954c7a899b00ef8d0103db19ceba8375
      2a97e16d9a73a3a4c858be5d8d5858ccd70980f5fc0697b51a9912948291d3e4
      0f108d49a3b4bcd42ad7c17c7f9a27c1f0929f19e352cf4bf04c547b46692452
      1e6d394705e59912563aeb5f17d2161dcfaeb79889a30ecff21fefcf89688cf8
      0799175f0e83f4c1f862aa8cbba3ab70569ef82c998ad006fd411bef685fb58f
      1e125b763bd56e9f4dccd54ae0dc4bd5234cbeca7ac18d0c044190ecaecf980d
      16803802f1907c3300c9af02231952900d112596672fdc3031fa3e0e3c833c84
      0866337497688f5ca8260d70e59f1e094bd8c3aa2ba4af0adf94cddcbe17c52f
      1d432dc381db48b5c2f556465962455b8d95ca168caa5732f92a055771ef159e
      01bbd99f8b1c61e5257459654ba41450a71ee83a73f68ec9cedd473e35c6660c
      1698d3ee758f1b3e4043a23abf673ba2e8dbeea6d4fc36f1e8727eb8e99db67b
      23ed87988e27762d45a70a51f35d4f14324fa5864458777409e18bf5fa4074c1
      242fac8d503f8c14e2c4a16b8dfcbe9b53b51bdfd5f739eaf956631b3e16c795
      2fd61e179b6416e97c65e480f55a0c1898f18b808b7534c16dfd5a3c2e38fc19
      29c693280c4280cde2df9a1f6cc5a509906870e52301051e99e4ecb1e8eda509
      19fca4d8911b78bed6950208f04ad45df291d98eb685ed98caa1b1a263cf8cda
      2c051af6edb513da1b7be8e444c700e06b55338bcc3231b7cdfed446ca03873c
      0fb2806943438f4b66f367b5e0a1dacb4595d3f05331821056c4337165b95817
      2c944ab23a04420dfad52c3a998aa9baec080e4974b2073504acfc3cef414ec4
      124acdb4271aca62aec07a8b89e900a80bc5bb59c15d5dd94e221c04abfb4836
      192d7d5dc100b4e0c628b7493490dcbb20ef7d859e1a39c815c41b89e5b84cca
      271d16d948b87dff4d5bcd19930c384ac72876accb639eb8018ed26d2457eab4
      2d79c77f7a8aaed8551f908cb8bdb6e16a7de1be7d07e9a1358f40cfb6992269
      017c832aee48022cc6ae47169dd144416b0f36f783a85f8399e2ba5695521b9d
      1dd6bbdc302af51e2d6ba0584bd8d2d28b6ec30bc04d3e78a3a4191ec318f340
      09cca61a90dc47e5dbd8b3e3785f0906839a66d78338acdc6983825300dfcae2
      2626decbd2bf3ad742960d2526669797a3f9f2ebbfdd8bd17344e11b2ea6a285
      16808fc616ff267412c838fa8c551d3d9cfb7a8647685a018e8cc1bd7a6a3460
      048aa7e7f24eee374cf90c841436d24a056b61ad4c60d74c7dd6cc94f96df371
      296609d66f3d55d39d5eae092cce3113bd892ee417a22a5ba014dd731a72688b
      19ef4d11b948ceb06aef6ab97c0cf7a04486fdd998784f200d26e2bbc0aa79b3
      "
    );

let vk_data = hex!(
      "
      0000000000000000000000000000000000000000000000000000000000000002
      0000000000000000000000000000000000000000000000000000000000000010
      0000000000000000000000000000000000000000000000000000000000000001
      068ae63477ca649fffc34e466c212c208b89ff7dfebff7831183169ea0cfd64d
      0d44dc459b23e94ce13c419e7feeb1d4bb61991ce667557d0ecc1ee6c29b3c3b
      093cf3ec6e1328ec2e9963bae3f0769bd8eb45e32cb91e2435d33daf3b336ea9
      29432aa4a2a667ca8a6781517f689f573e78164764701f7190e07eeb282d7752
      211045f9f4618ac7e73d1ba72682487e558f73d6737ff3645a9824352fb90e51
      012d9c85c11bcc8b2407f4764c4209c06e9027d21764554f5a20e9361d4d94ba
      2eea648c8732596b1314fe2a4d2f05363f0c994e91cecad25835338edee2294f
      0ab49886c2b94bd0bd3f6ed1dbbe2cb2671d2ae51d31c1210433c3972bb64578
      1a8732b002f568683304140deecc1ca5ce2553c9988950ea13c198f1afe44e13
      2c44ea8c14491b4acc57cc74ead43131d09e58937ae057f69f29b4af8ecc3441
      1eebbe1207643a8bd1669b999e82265d340a5ecb1a33c0b7055734ef91200c97
      2f08a6a07ed616c588bcf4e3555c006b27d5d1ffba12754d0718481e1a9a419a
      2a7e71e447b5645910a429e7f48f1a5deba7f7d446b95a5edd242b55f67993d3
      2b1ea7f7453a8c80a89a675245da0c33db05ba8e95ecea432ab85f6b2d6a1e86
      02d6fd9e84dbe74b7531e1801405a1c292117b1a17fefe9de0bfd9edf1a84bf9
      293c6ab3c06a0669af13393a82c60a459a3b2a0b768da45ac7af7f2aec40fc42
      18c3e78f81e83b52719158e4ac4c2f4b6c55389300451eb2a2deddf244129e7a
      0002e9c902fe5cd49b64563cadf3bb8d7beb75f905a5894e18d27c42c62fd797
      155a0f51fec78c33ffceb7364d69d7ac27e570ae50bc180509764eb3fef94815
      1c1c4720bed44a591d97cbc72b6e44b644999713a8d3c66e9054aa5726324c76
      117d457bfb28869ab380fd6e83133eeb5b6ab48e5df1ae9bc204b60817006655
      2a958a537a99428a1019fd2c8d6b97c48f3e74ad77f0e2c63c9dfb6dccf9a29c
      0ad34b5e8db72a5acf4427546c7294be6ed4f4d252a79059e505f9abc1bdf3ed
      1e5b26790a26eb340217dd9ad28dbf90a049f42a3852acd45e6f521f24b4900e
      0efe5ad29f99fce939416b6638dff26c845044cca9a2d9dbf94039a11d999aaa
      0a44bf49517a4b66ae6b51eee6ac68587f768022c11ac8e37cd9dce243d01ef2
      2cbce7beee3076b78dace04943d69d0d9e28aa6d00e046852781a5f20816645c
      2bc27ec2e1612ea284b08bcc55b6f2fd915d11bfedbdc0e59de09e5b28952080
      210fa88bc935d90241f733cc4f011893a7d349075a0de838001178895da2aa39
      1d270bb763cb26b2438b0760dfc7fb68fc98f87155867a2cf5c4b4ba06f637a6
      163a9c8b67447afccc64e9ccba9d9e826ba5b1d1ddd8d6bb960f01cd1321a169
      19256311d43dbc795f746c63b209667653a773088aba5c6b1337f435188d72c4
      1aa81f5a2a21e5f2ce127892122ad0d3c35ac30e8556f343a85b66bb0207b055
      2402d1ec00759182e950c3193c439370013802e6819544320a08b8682727f6c6
      2e6367e7e914347a3bb11215add814670b848a66aa5c015faedb4f2cef37454f
      17609c6252f021456896ab4c02adc333912c2f58020c8e55fb2e52096185a0bf
      02c397073c8abce6d4140c9b961209dd783bff1a1cfc999bb29859cfb16c46fc
      2b7bba2d1efffce0d033f596b4d030750599be670db593af86e1923fe8a1bb18
      2c71c58b66498f903b3bbbda3d05ce8ffb571a4b3cf83533f3f71b99a04f6e6b
      039dce37f94d1bbd97ccea32a224fe2afaefbcbd080c84dcea90b54f4e0a858f
      27dc44977efe6b3746a290706f4f7275783c73cfe56847d848fd93b63bf32083
      0a5366266dd7b71a10b356030226a2de0cbf2edc8f085b16d73652b15eced8f5
      136097d79e1b0ae373255e8760c49900a7588ec4d6809c90bb451005a3de3077
      13dd7515ccac4095302d204f06f0bff2595d77bdf72e4acdb0b0b43969860d98
      16ff3501369121d410b445929239ba057fe211dad1b706e49a3b55920fac20ec
      1e190987ebd9cf480f608b82134a00eb8007673c1ed10b834a695adf0068522a
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      "
    );

let pubs = [hex!(
        "000000000000000000000000000000000000000000000000000000000000000a"
    )];

verify::<()>(&vk_data, &proof_data, &pubs).unwrap();

Noir-CLI

This repository also offers a tool, called noir-cli, to simplify the interaction with zkVerify starting from proof, vk, and public inputs artifacts generated via Noir tooling.

Note: Recursive proofs are currently not supported.

Requirements

Before starting, install noir-cli:

  cargo install --features bins --path .

Generate an Ultraplonk proof with Noir toolchain

Please, follow the official Noir documentation to generate a sample proof. At the end of the process you should have two binary files generated by bb, namely, the proof and vk.

Convert proof and vk into zkVerify format

After you obtain the proof and vk from bb (let's call them bb_proof, and bb_vk, respectively), you should convert them using noir-cli.

Let's start from the proof (which also contains public inputs). Run the command:

noir-cli proof-data -n <num_public_inputs> --input-proof <bb_proof path> --output-proof <zkv_proof path> --output-pubs <zkv_pubs path>

This command will provide the zkv_proof and zkv_pubs files in binary format. Also the hexadecimal files zkv_proof.hex, and zkv_pubs.hexare generated, for ease of submission to zkVerify.

Then, we convert the vk by running the command:

noir-cli key --input <bb_vk path> --output <zkv_vk path>

Also in this case, you should get the zkv_vk, and zkv_vk.hex files.

To make sure that everything works correctly, run the noir-cli verify command by providing the vk, proof, and pubs in binary format:

noir-cli verify --key <zkv_vk path> --proof <zkv_proof path> --pubs <zkv_pubs path>

About

No description, website, or topics provided.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Contributors 5

Languages

0