diff --git a/README.md b/README.md index 1dbcb4d..710897a 100644 --- a/README.md +++ b/README.md @@ -95,13 +95,14 @@ The flow between data providers and users is as follows: Data providers should generate commitments for their dataset beforehand. For a dataset (e.g. a table in a SQL database), there should be a commitment for each column. These commitments are used by users later, to verify the zkp proof and be convinced the computation is done with the correct dataset. ```python -from zkstats.core import get_data_commitment_maps +from zkstats.core import generate_data_commitment data_path = "/path/to/your/data.json" +data_commitment_path = "/path/to/store/data_commitments.json" # possible_scales is a list of possible scales for the data to be encoded. For example, here we use [0, 20) as the possible scales, to make sure possible_scales = list(range(20)) -# `commitment_maps` is derived by data providers and shared with users -commitment_maps = get_data_commitment_maps(data_path, possible_scales) +# data commitment is generated by data providers and shared with users +generate_data_commitment(data_path, possible_scales, data_commitment_path) ``` When generating a proof, since dataset might contain floating points, data providers need to specify a proper "scale" to encode and decode floating points. Scale is chosen based on the value precision in the dataset and the type of computation. `possible_scales` should cover as many scales as possible and data providers should always use the scales within `possible_scales`, to make sure users can always get the corresponding commitments to verify the proofs. @@ -187,7 +188,7 @@ res = verifier_verify( settings_path, # path to the settings file vk_path, # path to the verification key selected_columns, # selected columns - commitment_maps, # commitment maps + data_commitment_path, # path to the data commitment ) print("The result is", res) ``` diff --git a/examples/computation/computation.ipynb b/examples/computation/computation.ipynb index 96601ff..a9b5594 100644 --- a/examples/computation/computation.ipynb +++ b/examples/computation/computation.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -94,7 +94,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['x', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -221,7 +221,7 @@ ], "source": [ "# Verifier verifies\n", - "verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)" + "verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)" ] }, { @@ -248,7 +248,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" }, "orig_nbformat": 4 }, diff --git a/examples/correlation/correlation.ipynb b/examples/correlation/correlation.ipynb index 7002b35..be3d205 100644 --- a/examples/correlation/correlation.ipynb +++ b/examples/correlation/correlation.ipynb @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -58,7 +58,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -91,20 +92,33 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "scales = [5]\n", "selected_columns = ['x', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/mhchia/projects/work/pse/zk-stats-lib/zkstats/computation.py:179: TracerWarning: torch.tensor results are registered as constants in the trace. You can safely ignore this warning if you use this function to create tensors out of constant variables that would be the same every time you call this function. In any other case, this might cause the trace to be incorrect.\n", + " is_precise_aggregated = torch.tensor(1.0)\n", + "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/symbolic_opset9.py:2174: FutureWarning: 'torch.onnx.symbolic_opset9._cast_Bool' is deprecated in version 2.0 and will be removed in the future. Please Avoid using this function and create a Cast node instead.\n", + " return fn(g, to_cast_func(g, input, False), to_cast_func(g, other, False))\n", + "/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages/torch/onnx/utils.py:1703: UserWarning: The exported ONNX model failed ONNX shape inference. The model will not be executable by the ONNX Runtime. If this is unintended and you believe there is a bug, please report an issue at https://github.com/pytorch/pytorch/issues. Error reported by strict ONNX shape inference: [ShapeInferenceError] (op_type:Where, node name: /Where): Y has inconsistent type tensor(float) (Triggered internally at /Users/runner/work/pytorch/pytorch/pytorch/torch/csrc/jit/serialization/export.cpp:1490.)\n", + " _C._check_onnx_proto(proto)\n" + ] + } + ], "source": [ "# Verifier/ data consumer side: send desired calculation\n", "from zkstats.computation import computation_to_model, State\n", @@ -122,7 +136,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -166,7 +180,7 @@ "output_type": "stream", "text": [ "scale: [5]\n", - "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":1,\"lookup_range\":[-32360,32536],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":3710,\"total_const_size\":792,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-16,16]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1709724514721}\n" + "setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":1,\"lookup_range\":[-32360,32536],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":7872,\"total_assignments\":3710,\"total_const_size\":792,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5,5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[7872,[2]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-16,16]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1712758149946}\n" ] } ], @@ -179,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -187,14 +201,14 @@ "output_type": "stream", "text": [ "==== setting up ezkl ====\n", - "Time setup: 6.577926874160767 seconds\n", + "Time setup: 11.122047185897827 seconds\n", "=======================================\n", "==== Generating Witness ====\n", "witness boolean: 1.0\n", "witness result 1 : 0.71875\n", "==== Generating Proof ====\n", - "proof: {'instances': [['7469705c7b45875730aac31b009e8f9e9f9e57031bba148110877f78e4518c22', 'c1f946e3fd2b2229bfcc2dc9ff7f4dfc1fddad53635becb58d130bcae5504712', '0100000000000000000000000000000000000000000000000000000000000000', '1700000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1a09879e14b606ba8c989eb87435765f15c8ec5fb39e8ae1641c18657545a4da1feae65c8e87459f1c446f95db285227254017d6bd4a130eac619598e2a932ae247278c145339cedb5acdd8c6b82cd5544d1eee7de2feca5deba7079bee562be0eec74a4cc7d1276fe29976bd39ced477edcc57650929e1a0868cf4dce4c0d480a928ac0f4a5659dc1abbe6afccf70e2f41662045c75de5d0fe473731415e61c21de2ade6213ea5e414386b75105c0029fa67a24d825caced2ac3c0c3d8425fd08cafafe02290541e5951dfd8db80872d0464dded84f2a8b00f27060d0ef0afd18985f1e05e606083a9b65ab77df38831d595937a55c9cc4ff843c09380ae1a618db3b6fd795282f6f9554fa8b49124f08c5a421f0451cfdb2458ee8e7faff720a3f46d4fa829766052788c95a5c0b7878853a0c38295b2ccbab3030e4d8bca92125e107950c17d96f6fdb377641cd1c9fe4174130f1f1f6edf85710d4bb9d331141eff4778be5c3771be1b6ebb5334691881a6bec090e6809e0c7ef124019170dea19a830effde17ee20caabddb01ba4611210b59c67964dfc0de9f0b266f4516da00cfa29e7f1bd22632b75a2589e7555668174e21a0c17d96fb8e968a77442b542ee567a0c7c752a722174dfab0260d6b8a1174b65fda155efb267012bce71277c94a611a7a4269a49bca92ab588f217f04c2d528e4995c82c56f4d5e66eb1ed3bc78f4ade584314038897a5404ed99c435d36acde6729d98c2002a50188103eecde170463870930ec0c498e061931aa52174396c70391aef080d016963ca2a6f59d28c30467c22eaec857a57d20027c43b6e5735b9d22730ac5a8e39de850e83b4a46ebf2ee3050a8dfd9f33c39ed6c9c3c30fdc8d093d2439b9acd3c08e2c91e646334a3416352b097584f1923b61696ae74185fc99037e40d74304ca5110045e62fb7f60b17858f573108914d42d82abd4c8f9b96654a1e371a78c7a7408824391e2889a64ca85b6cb7b597f6d9fb0d63942bd2301f153ee748de7b9d02fa00c7f9fa7ef9e6bbba0c5d297d5d52410ed405497ab3ae95796cd480f9b4c0b0d36d80306a0cec898e545fa4e206382b2ca62e793c5b1f7a82af8abfb072a2d271df252af2edb392813bdaefa0260dc1419059e57ad1865339c601dc103f2164707346fdacabf6ce1ec0d3c073dd9eaaa76d94e188aa9978acd5114908c211eb4be7d945ea8cb9961c6fba7c53834703efa663f451eecae17a7b751f0d85203940a60c0c61a47a932ee846eb82bafb362ee45596e89d4a96192626e0eca71102563e7716d88838a24abb14c79ea42589cdd8e0f62ddbb67f28c3ff16373022ac6edda858d08b0eb33452fd444b99df53d0b93c05a908267e103c3dfa25de724b763a81d2b9cff20f20e89e1cbe28dace668c5241b90fae262b200157f47c91bb31497094272a532e3e8a161445213fb79b05417011e8d10d3fc06cb4ad8c31f6e82aabc960d179feb866f7149f40ac92d17c391d1ee1488aeb49b4ee1101b19982dd0cb90fe2ebb9d3e58c7efa0afc607eeb35966ab1fd1a345d85ba5f7f71f4d92b36bb56189ea83fedc5c22f55bca70717a28b7526889de0bce3f58262e2aaef59e4a40f140e6051b805bfd03ddb0feff810b5a2daa26245c2e2fc1ab3715f657d31314a44dab1f3c60cbbbdf1cfe5875757745deac1407b8611745e59c2ee41fb48e243aae61bb9cf0c8f28c34d2f99ae34402fe58dbfd001e5a6645a41e819e1283b1b065810995dcf1abccbdd2afd5f230f7af28dde92a91e63725e81dcc64b655f44536c4e26dfafa299a80f248c2cd8dc5571aa758d4ce7340935c2380cf942e0c0d3e395e6dd685ce650fba5046109e72895315f4ecfdc4e073272ad7adf157a0d07054aaf67b6e41b2c5dd4a2c5892579bcfdc53f92803ea03c811aa27336788637499c58f77cd60878536e33732355f2c9f76aa91234d3d40d72d1dc0e799469ac2505ed2b2bee013da91fe8178ab83216ff88b70162ee5710e010988ba935b83114c837dc1b87dede3f7bd27fa911bcd884a20ced82cc5ea2e17f2afa923f827fad4b40af257b73667b7d3eb9fc458c6045f5084c0966fe5a314134cb5ab53a4db50b634e92d25f736f05ce8a87fa8626e8733adc06b7339ed14db76ef841ba1d1f2112b75d69ac692e4dcae85eea79da2ce39d61f01d475870bfa8066aaec6655c10951c4253ccc618a8a338103700c008aced6b84f54774814e029447506649e87349788060d91554a4374265cf219bd4407505b95d9d8bd090295bf7ab1a2880e5e794e3419cbf503734bfc4895a3b6d4152a30361c52ca1e9268fb45eb1662f7f619a75df2fc159cc069882ad81772760c35a12731b7a521248e8b86dbb4a0ca3a430a6147f528fef7108aea3d41bb42f422d3e8681d6413e3115b3e8d7ce181aa8734cc0f6febb31e0d3073c33c6ac7b61378234365b81fdace291c7b036416437971f558d44c3576accceb6ea8c0a129d1a1f14e66432fb5f5aa5be708c470931e7c69176418d6c577f85b0ac8ea52ebf40d8294bd5f1339c2499619a4624900557d76766360ffd6d24173720c3acc8b55f3470c1c941b3df8cb31df34ce402d8dd18e4ac3444015fc7be8c6f9499747c6e9b448ac121f6b399df3140737ff32419ed85e27aa2a03763d0f2452f92194f673b77cc2a709598f90746cdd7629cb538138daa48f59f2d8cc9648f5fb5c18ca950be1971d2a558a0201a13e6e9c0839b2cf5dd65311f1ccdbfaf83f999865e52952a2e80209f01a4ffc925f68677bff3cd5c408aaf14d2457d6db8cacdf89b5d7cc1001c420b9deac4e6247ad61b4999f933fa500fcd9e3a8f19faa6600ddba01367c80d51a5c139b75c38d67d0f87f07746d9daa3e84140a6abf60e504e5ef891e0de9b72c4d40601f5908e4e4212081217c491aa32ff9f160abd34b8df2fe35fdfe322f1d35e4b39e91075cd681befa12e1e60bfff57dcd5e322933c9941e56880c574f083e784a8522f1a47c094c29f915297021eb10984db09a2964aafbe640fc7b972bad55d4868895b1b29a44448a26dc3bed7a0fe0d289876de5ecf802743019931debaceb4bb686f72f90d91dfcd93d0db37757b916c6d66a5131841730c1ccba1c56062e9c298fcae2e214f03c16c7b44285a0b01a377ca721053213aafd3ffc1c3190e485f71875f1bb52637c8a0ef1efd3b255a15af4e30944e9f7556c5f3d14400ccf5eb6f79887c83dc527e635f93698c508148ea4f3c5f604a348dc0cf9267a4cda1a663fc167c9bc44a4cfeaf6f9b33b91c76b754a8189f36fc812cb011d4635feafdd24ccfa307ed8b4d704fa7f4dbb4f40f52985a80b1071e577464f147623e81ec5b1c405c84e160bb0b4721fb92dcaa6556503a23d5a97fae325e008c56c0c81d1796f8100ccd97c3c38ffe98e8f367b9588c5e287bef215d2c89c0a9121435b7ae168404ae3059c0905ecb68c494c39bc57351632ff7414c6a5030c607fb1d6cc4a378a577b54392b3c6f1c09a4b4eb10041696f68f8ceef4a89d28c5916715210077af8a33af249241f4402c4389ce3648f0531dd19b52fa4ad3085decc75588f18be693ead35dcc1f03e90bed7c587a3de3ae8d2bb18d609b4422289093be19ba4ee1486d43110a33f5bcdf7f91d950805ec3f4b22d28adfdf61df5b97b525aff2e02f02bbb5ce846bfe7667ac34f39d6ea658ce16fc5d6e247055c25fafc7c00be75bb530ee33c6d09476d2d07da01e619f8a11bec79b8753d07640bf6d30c2df75704d95197f79934edd3c83e1173576ce1918340028325a727353e85bc7f845407aa8e0c73d37b698de806300801bffad37805bc22d4769d085f693a789271aa14c615734f6cc47624c6445137f31da6cf1da7977436577a23be523654a43b1a8849e6fa3e0de6522f6835beea07613f357ae876580d7cc60000000000000000000000000000000000000000000000000000000000000000179afc9981086b5cbf9199f13f96865ce57489eacaddaa82d8ccd431377cdbcf25685b958e03d620ea65f3d8574ff2c93905560ac25018aeb06639121539880900000000000000000000000000000000000000000000000000000000000000002880ddb8357e933ef1c97abfaf02d590fc820c3f71e5d7c45442feb9a056b6d82e22149fb5d21cba814c72b17a8382e46bfedda17e5cb6d8f6b808e0feee198916d55a4f839fb00f54357a1dc46a4d2c1c9c111a37824dd32e7e56b001ed4a1e0000000000000000000000000000000000000000000000000000000000000000225a05bad15c129e630808ff55d418c2f2343fa85f31178c1e81880c70780ff013bdd27bb6cf9d352d445814062c61a9a96ef0a5fee53cf40ac9041e8d1dc8c300000000000000000000000000000000000000000000000000000000000000001cce66235a4cdd674a54786f1bac0b06db5cf883e6f8db2b81d0ba7ae181b14900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001db0dca56090dfeeb232f3b2d90693d1cdae5e007c1195f197c0448780af0a1606a6fa97f1e9bff63a06d77f325bfc0433641f75adb26803c9dc88bcb27039b12aee51f68d77e5a4db13f0c21b1dd642e285363b9db16dfd5db2be0dca2f9c490898406148fd62a3377bceea9519553f1638b642727fba66e8d3f6519c20077003d35bb01d222536d1d509ba21e6b4b7f041535326dc01ec868a7ba344ba7b2f12bfeaa44a82f0f8cfcbff7ab243e73451c150ffa8c0644f2f2c45496c0fbc2c0328df5a7f0eee553ef40d9c54e66a7a0b19fd44bfc80c59de6131d2aad144b903fe685ab37add72efb4a2a440004500e31f8fb78db91b3531eebbb42e9d18ea2d50a56f704843b436ac910c7948f180c4d1685d97852146dfe96531c915dda81e4e4a3217d46159a9f3cbbb90268f993b60c192a592db6da0d9ab5d14ecc47e08db17d56bd44ae62743d55cee6786c3d6660b45dd76a6f3f2c7bb8e073279aa1c60d6f58efa420f7801ebc32f5326d8827b17f81cb50bb4fe234deed906c78007ab85c538434a5a6543184858b19d46f012ee5ec440a54085c0921e048461501e758c45042b3fd85465803cff8016945072417b5f8da58a01098d72cf533c00115c3b7ea03eee178083e44f2d2f2e25a0205dda66641f06bd66618923e4f5b42ad26706c93249a1b3d0d2a679ec220865459b25e4c5c35644424a9c8129fc7b0b011d1a67276dacd592d170712e6a4384f6dfc8854d4131a48662dc6f5911961e990c2eeb1fa8f7798c927626fe0b205d91c7ac56e41372f6f068f29f5e51a124ad499ed8eff643dcae51ac58f361fcfac7ad08108086f701748ed285d0684d06b62641a5a3da35a0a576f284cad1e76b0cc1dc57736560b803f809cf298c80230ba98ca4b62ccc9967996a590349ea794a001e55fbffe2ea3fcf7c6175ff8e25eaaabe25aa7e71158b48770f903ae34628814e1bac124cab6015ea696c9887128feaed90d5b6aeac993b3bf0f38e2262c1e516c60fe835bd697eb3877d1c5a115a77e492422c89874754670f0dd517eaf5890d2a5ff3ee0c079ba5234bcbec264ad639719abf5c622bae08735b9dcfbde635cce59470fa7bc2bb51103fd1b41493d55e999b368dfbf875ba72d3d692ad5455c9057eda974dc20a084c404b67097bc03e37231b8befdb26227e16efaab2c83e898094b31f093b75b7a4d3892809d407d0c0fac95223c395890477116d785234b20a61d5897b39f37fa17d5a021bf1db574ee7765e5844f411901d0eb0e596771af5bbe1d7e2534e1f97facf3323c3421000257718f9f81d382629ceeb0b50eefc90b487f737fe31aba83304be08fbe09306d58e6d7421ef1cdbbaa7ed39c854f55e779435e085610952cc48aa13a0bd154af4d9963ec339073b18803dee8160657128c133cc819779c9f2bdc4195ca5ef241e08afe826aaad517325977888472ad6dccbb67cacb52c357f0f5c121290e51efa5cc354f11a674c04994fd09a4fc888608210335dbeb03cd1db2e143323b936137efe191ba8c1e3ffea09b6cf41fa2729d04baee382c0724103d11feff4ff27923f83079adb9d7610b1eabcbc1fd32b123e038d47a2750a62087d192657d1b659bb8057845ce53dcc623139c93c8cd409a1e0808c8bd24a93f9a60fd72fe74e7af7414f29f5891d0324b6b296dd0b708a748f6162c15af64d6b9b29ec694f9edabb9facf12b830ed9e787599e865299474d60c873a6a6f1317ba729ce50714f9a0ef86cccf872801dd628ea46e2fd426dd2ab8be26fafb784dfed0571924b7b7c5fcf3c8b0794c809c39d91ee84c9a97dfdfed5c16116b269057f04194e0d49b732f97993e250f244f7f692baa3423e3153c00f6f03d552a23daf14e66251fc48791c63795534d3ead9c0acb38336c59ee2a1f01eebae44478e881339226d7cc65812cf5924b2e16fc601c593b9a21f2754ac7b5cb08ef267327d0810955118989d7b18a463d7f66b6b6bc19407ca5f6013f26d24c67e24a375a31a9a603cd1d1e1a5d0bab20a59af12778c78f13dfec5fee4343dab91f6a8757f2c021e49286ad4bc55c8bd83b8efe4569548ce3504a7d9dfab665cae1b435b430ebda53654686c5d40a0794291e894d98f98e5fca13a5b375ccdbc2c2cbe74830eb1e7586e0e6de3eab4cb00a85382a5fee43edddde8affd9e4a2a6b9e0fb41b2d59f0ce52350191d0831306313deea09c0a02a909abe993f31c76cc716122620a9fdf01dea4ae535376677599f9d2495660856e86eef70040ad9397371e28cc', 'transcript_type': 'EVM'}\n", - "Time gen prf: 7.614093065261841 seconds\n" + "proof: {'instances': [['7469705c7b45875730aac31b009e8f9e9f9e57031bba148110877f78e4518c22', 'c1f946e3fd2b2229bfcc2dc9ff7f4dfc1fddad53635becb58d130bcae5504712', '0100000000000000000000000000000000000000000000000000000000000000', '1700000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x1c0de3c66267c52e2e8f09491d25cb989091e51bf1918f9395ae1a3b196214970d5e6f3b98a20a905b53e4d1664e0d6fc95739f446bfa00759b4fbbe469151ed18ce609e12b5cb5739a0a66691e5dbff0240860e9d021801b300735d9c224013106b56c97bde27423fc9b1c6e0ca20ca7d962def5cb175fb7035a69efedb288c218cb0fcd520607acfe6f96183c32abe0c4fcba3172ade2c56fe50c1afebc51f28b632d493bb9b7c0d6ea0e495ff76565a29683b8d55a1d7e3e54363b1f7008e1df700db31c2bc6314b5423295c70ff1c651d93f3025ce2f35227399c1e8a6a910f24fe2a5dd4945610608c84273ea7b1783847dd43b001f61b582d993f218341575360f794daa04d52bb47c9c47b83b7c3d4403b6a50471e194d16e80bded8e0d74554d333a45e40f357ed36602da16e7eaeab5e699e9b018c6f02fc7d3f2b81d448261429e91e71c21d3c0b3f3ef8e922f1222dc764249feb0a8b597646ed02b6077c0cd9efb2666f54f594c3af7df547d6374c0c015e26642f3a9b34ea4c11d03d52fe6a3931248efe3441fbd92260594f621b8155037dd6619a71396595a15edde80a51682be7f3c21bc00019d479b37e1782fc074451d50157e676c49d524b4a9aef5b961e52cfb436e7c6fac48a058180547802ef206c9c6673e99225e11a5508f8a4ffe69825803c1fc9c0be38f8aeb3b7721e0cff0596a4146aff86401aa28c75c2c17b3992ff87789e6ae1fe542106238fe9b89c0bab57abf4eaae304a17d4772f4a4f9530d44bb2d296efa499f34dad22a05738a1addb6abc125de2a6f59d28c30467c22eaec857a57d20027c43b6e5735b9d22730ac5a8e39de850e83b4a46ebf2ee3050a8dfd9f33c39ed6c9c3c30fdc8d093d2439b9acd3c08e2c91e646334a3416352b097584f1923b61696ae74185fc99037e40d74304ca5110045e62fb7f60b17858f573108914d42d82abd4c8f9b96654a1e371a78c7a7408824391e2889a64ca85b6cb7b597f6d9fb0d63942bd2301f153ee748de7b9d02fa00c7f9fa7ef9e6bbba0c5d297d5d52410ed405497ab3ae95796cd480f9b4c0b0d36d80306a0cec898e545fa4e206382b2ca62e793c5b1f7a82af8abfb072a2d271df252af2edb392813bdaefa0260dc1419059e57ad1865339c601dc103f2164707346fdacabf6ce1ec0d3c073dd9eaaa76d94e188aa9978acd5114908c211eb4be7d945ea8cb9961c6fba7c53834703efa663f451eecae17a7b751f0d85203940a60c0c61a47a932ee846eb82bafb362ee45596e89d4a96192626e0eca71102563e7716d88838a24abb14c79ea42589cdd8e0f62ddbb67f28c3ff1637302260230075733f624df795759e2d6eca05a36a3fa6fa2b3af558b75bab5af457529845922c361f7144951cb7e89be5600750a6c8ec1b5017aa97b6eb61bf3a98b015f3e21437ec13df9396d5d3e7124ee051abd0abd4f1c434d2087d5bd893b0519eedb14bbda113f5b373f5520761b616801f07d40a939b80761f546183c663e2b91b1ecaad68edc83699d6597d65fbeb8aeab71529bafa4f2f91bf5fb36b2ec2120ed7ddd056c35caba31cd9aa448d265ba6acf884a468f64cf7f148972ca312b99578f32f4c490add7290ddd59a3d64d7aee2f91b1a3abdbbb21acdaa8805f174de2c110b50f1bcc1031d51304213c3bd6e3e876cc6bea15a6a8e13cb1d39523004252795186fa9dbfb3861ce35dd637b2733cfb506ca3d2d3ac1e373a9d3d0723e78bf4b8ca271343601647a2e4b68a089fbae8820239a1e61573dd6627922c64cd41f8a2ac4449d5cc0beebae2a68510a198425f0c97ed49d680a0e642a8058a4ef9e7aaae98f785b1aac3f57832d03728013b19e71fc61e289b1be4a52109eeac7459d59562c35ab02ae87ceb68ccae9c179302e6d507a2d30ad331f4172a39113b9fad3b22434f7796a73c5d72bca44b056ea15e1828fa9bbe22609ddf1f5dd2557b63d45b17581c29c49d3058add1df099e1bdda65831c88d1fd37a9c169c7a607cda4944f458f68bf465381bf4ea889dd33f6cd57a4cf4d0d26d1ec0183aba610d69a5006fbffbbe221f570f5e244e0dde5e565aeab33aa8393e737c0218b3c825ab0ec567b64519f4a910f8de110ea1f47d0029e99d9f2576a93b891e65d69fabc729e54a0e58eb674ca54e589f0be69d7cd6d632c0f4e6233dc33709299d54641b0702a7b2dad14c5e7824b8dd62929ee61126d891ff53956f39942aa999f984d37cb918ee3ba1f6914652c7f70a4aa2395c45ad97bfc753edcd4307a05ccd4b9bcb29697d6071aba688ed22f9d864e7866dba905593447945398c19174591a2f7a0dc6a85d539b62b22ae84d16b8497d19ccf291925d92d24a793008690c2852f5b90012b18c87c7d2357a844a4877fb512eaf23273c40bc6ac71053d50e927a008fdb6339ec880f10334d1fc7f57fb71b3a6870b0b2af29956d4028e005b8dc0e5ec5c0f9d608e4afa1d9f239dbe7f1c6db8bd24ec47f1cf6fb32d6806ecfa273584f93879ec090f3bcbdff93de015c7a08b7b03f288177780022838c1ce32da0695d2e418260fde4f37ebaca6f48cce8f10851ce0c2faf7501c0135ae90a53a56228e1eabf9feb79247cc90f604265f5eeca90ece3638efafb22f1e63bcdb040659d383bcd35479a844b04c1fdcf1ae97df197f65d81bfae1c528f5e5419c9d78ea4172d8c2f10011ca2050164b5db445052749b39f0885ca7425fd038c28fbc1db9d7f822c135507f6acdbf46d4211cc2fe6ee532e5c23a456251f693bad0983cd3b1bee82ada86335c2982ba38cb11aada7339ecb22f1fc291b9362f48c5d3c0d51d76a0a95efdfec773a68cc13566c68e7a75245d001102f27fa43f47721f0a9f45728355cd6e3c1a835675e9df85c6d9698ac78e6513e0d24939b1a7a7c7335e9c1a9ae12e641e53b2b4889c399810afb51c4604b4c7a6e15dd2aff0bb719f5636f49a4ee7df0c5ff987bc416483dff18b7e3da1553e9520924477db83c408bb14446a52d3f636fa1257c9d44dbe05b29c36fd9326f80de046765ed388cd213eac44ae9fe8db76af23a6a84f3edd2e34fad8ae58a6299bb180740af125560e454191750e635ef1cad2c87e67e54770b50433cc4f400ef5d1d53a7e93d17507cf542ec6775195fd884009fe8de5cdf97fc73bed3d7d878b62658666285e3fa18e67f9f135ad8fe6e47cc56beedf0e9469e7fca85bf31864826b4bd379408d7865af07af7a2ae74d4de856e006acdbfff10fad8f9025bcf4711ba1ac4c619e1a6c3453f1dc22d2a66a93f54bc4599faddee55c89857851e241f84fbebad5df18c27f657d338a7d101c730e178cd84582b32f063b93e9c511b1031c38e31565f1fb734213399bc72abcab2e09c73de60f6ef46b5a7cfeacbd11ec7375b211a37087dad26a6020ee0817ec22a9695d4b96565f666e9ce8b510512c679fa003ecc5bef8f29f533bdf1f89659f4b2b2fc6440146a3500df67c56221c61a4131803e4dab0082e26191d7f1d86a38a3c820cdf16f5bb0c0d629aa0b2f46b314788dc1e4c58604f2f5b2050ea3c0a18823f110ea70006ff019c2667326974be6f1784635f740cf8cbf5ff7d7ac48926a4744fb08d3edf15573c6f9a82b263fd3e4ebdf41d310aac9b39539f42e52a966e77934a4ceffb54e8fdaee1428582f6cb0f1f9e1f2bde21d2c5b4fd9ecc85b095e04fdeb517ac1243ac1669330080872b1cc2b37ff9dbadd9fdf43f91b5689561ea5ce30670bd1872bf8e5720fb391db76bcff54fa3ac0a88c31f0b2c7258d0c6c14baf6e150561489b25aed0c975c33aa9b9a31d61eca7f78afcf5f488a8b45109e046c1a38a60e14652c50187fcc2111705bffb2bdeb1281bdc03a8e1190723ff17bafd36af1a280be9e6f1bf4633e608ef65d288d49b6f54980f439a764a2c115b40089052180ccd803ee0000000000000000000000000000000000000000000000000000000000000000163d1ccc6e4fcfbddd455103ce82b8e2e0c773e6c2946f1b60dbf27f80e7211a0eb9a3dcff94e2c441aa281240df7d93fde78aec26bb07699986c18060afbc34000000000000000000000000000000000000000000000000000000000000000019e5fc50cce55e110b6eea39f509bf5e39ac9f3d67110ef8aa59c2c9a14eec8912c68ad007c61aa0af704516543ebefa026e7d96bd581eda305b383887e016882790a9d76e28a80c33d82a3909cf5f5581b7f1fcbba862e416a8c0165bd47fee00000000000000000000000000000000000000000000000000000000000000000ab8239c6f5cc53986d95c8d41c899cbf2a4ffea71e1543932aca66bf45faa520b820ee19057b94398cbcbbc3cea709c01b4e224283c6725706a3afa2c5c96c100000000000000000000000000000000000000000000000000000000000000002791e03967305630544b0a33ec523b455e4360369151f87c64ee1634fefa9f1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ecfa93d47b57eb37c443c58c25d3cd1f4a165cafdcfc428c01eca65c02b3067301094b0fbdee0f3cde8cc14fbf4945e6d0f5f9ef22b58682ba2d4576a4c85680cdb98dea28e778a99759b9ce2f9d4942a882a85c6f56877dbcbc180d2cb0c33001952d82cac181f20304e640f865aff57ba5833e86b047a0e2133123d8b3fd61cb936f449564fa793b47a79bd7feec6b119bd17d54da5b40e7eba8a9695076415b65dd27eb8be08591beb46560d580b1b90927b2e8e39ff9843ef28ba8a61460cee563cda4b33297bbc6e431c12b75555a385524a94f9717db0b883f288d4f122b94a26213e263357e161a75896c3c8532f53788df43a17ba196d6a6761a6ea27e6ca84a3390751b7942be07774a5563c675a6214ab62d659cb8d79c25f898801b3a4acce5c4681eb54bf0f6568fbfebd56d849dcf26c8a93182ed6168250641fa3f571051e3a708ac802aed36e917b7b01f164d5137023f95b87ab35938850160836ad2e255a90ed5b99e7ecebf6b8aaa744994311cc3056d2c2d54e2499b22b4e4b8531b1431dad9a7bac31a047a14516fae59d91b75f315af1d05f06d4f802c7bf3a27c388e2b4ed2fd22fae72ddd1f4d46b14d92c54dcadd99cbcf651b40ccc1d852049ad3ddefd53e979b003787fa2fd0fac55e3fb543d1dba303fece31ce1716e8f237a6264f0c29c2f9703dd5f3c3b478c386c824c942e37e401626d2e028fe47856028ed2be9da3175a95489aa6db9d1865077a1bccf1550679d1de08c9ac590f24047ac3704a38550bf73be9adabaa5fc78d320932c88fb7a8bd58015028f196dd9ef2484f5ce92a2da4455b53afe55356f7325eb10058320226f80dba90f7ea95126775eba6d561b0d76cb25751cb1a47daa97c187b73cd5705e40348ae4e47ed31d61b4d6a71c17e8d03c91626f7aebe95f2307d1fe5f66f5b6b0d00a4dc87719161195e9f58bb36155466cefcdf958986bdf86ac22069449a4f07c1d4e913f6e2b0bb37d200ef22f8db5fa4a05987998afd95983719d9dfe79419d14514e00152282c4c867c6be4aa616cdcc631a7b8e4a1d3e320a95d1db3af2968d4be65416eccd1b1d53558fc5225b9d2e60f6778a8bc195b7b9c639375a21b2d5e3f73b82f2740c13af12140dccf45790f23300bbfebf757d76715aec67619cf8f49d0ef8853bb1856e1786caa90976a2b57a962f4286e98089e495e486819ceb920a58402876740391a20a2eb4f7f4bfdc725e4a7a00f7ddb87e76f53a23050a7b8a1d7b408c0383bcfe4e060c183aced66633612625ef8e16b597265bc1b42c3dcc2795ade4a2bff94911612a6b36af328ebcf99d1fc768f8b4a0bf54c0fd43f7140269efb1a194f491dc5ffed094ae6df395c1f3a0a5630306cc5cb7d12ab522703e21fa2108a6d797e35861f062e8ea4a199b72f51d16a1a67db4e302d0c018312cc74c77edf98d8ba946542cf6fc05e0b5e0398916f1ed04916fee82c0af68adbdf4cbfd0bf62c2972e6c7e65d9c3f492236c214e8fa8d2e39fe38120213e9267e82a71fd365686aa588754d1e2967a0ef8ed099713408569c9b9bd091ed201c007a5788fde9f1d5c65304b8fae26f901e1c1f9314d1320f36ee3c20977a7211c07976efac4202a8a817862df4c6fbb0f2274e87d382ee346a32492290ede3faa57248b86bf5f73263bf8512593fc54d7ee47f7f26c1e2fec9e992930558c47437921abe018be52f82928d451eca018f5b5c451edd996b9452b3b2727fe1ceb8e85b5446007d73720ba4a0964d20403dae7ff40549235f52bd9b1cf11d50c5eb20a13bcaebbe3b1f3d9dbec91b06d065a085145e86bc5339fc2afcc2bc4a761521bf812be975d3d62d05e26dad5df75cb62361fd044f8429f10829e0480c8731bc0fb27f0bd2a6fd46ce1938decb4cc8fbdb89f9bd6c06f1ae0cd662910d5dff1f393be504b4b97736bc1b7196e5f95a5a963138f5e1221a4aa1c10171f8487d34b63eb8b96b2c635268af68250ddeb4997569d24aac405c7497c7b1793a461320ce9228af661fed022a2e8775345bd7b42b0e01ff82629d9cff8b30dbe0d70a3c53af758f879a5137a129522fc10d34b95e9f7e7c17114cdde88f01a879dc10be55c88b9a06817078f94d74bbb8f3138fd0cf3501fc1192ca1add82d05a823f83fa405d1ebba3ce8bb7b65472c918175736760929759f1709705e40b07561e581fe5caa5f68353aeb816ae379ed602915c645f313e76ac7c5950e60a5dc46f50f42050d1e82bbacfef95453dcffb8e870375fdbb647b93da470886', 'transcript_type': 'EVM'}\n", + "Time gen prf: 12.377808094024658 seconds\n" ] } ], @@ -210,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -223,7 +237,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/covariance/covariance.ipynb b/examples/covariance/covariance.ipynb index 038e847..9680df4 100644 --- a/examples/covariance/covariance.ipynb +++ b/examples/covariance/covariance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -82,7 +83,7 @@ "# note scale = 2, or 3 makes it more precise, but too big.\n", "scales = [1]\n", "selected_columns = ['x', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -214,7 +215,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, @@ -242,7 +243,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" }, "orig_nbformat": 4 }, diff --git a/examples/geomean/geomean.ipynb b/examples/geomean/geomean.ipynb index 5dfbf5e..4bc764d 100644 --- a/examples/geomean/geomean.ipynb +++ b/examples/geomean/geomean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -87,7 +88,7 @@ "source": [ "scales = [8]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -210,7 +211,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/harmomean/harmomean.ipynb b/examples/harmomean/harmomean.ipynb index 14712b0..99e9958 100644 --- a/examples/harmomean/harmomean.ipynb +++ b/examples/harmomean/harmomean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -81,7 +82,7 @@ "source": [ "scales = [6]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -217,7 +218,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/mean+median/mean+median.ipynb b/examples/mean+median/mean+median.ipynb index 74559cd..94bc28c 100644 --- a/examples/mean+median/mean+median.ipynb +++ b/examples/mean+median/mean+median.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -95,7 +96,7 @@ "source": [ "scales = [5]\n", "selected_columns = ['col_1', 'col_2']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -236,7 +237,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/mean/mean.ipynb b/examples/mean/mean.ipynb index fd20269..d361eed 100644 --- a/examples/mean/mean.ipynb +++ b/examples/mean/mean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -99,7 +100,7 @@ "source": [ "scales = [3]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -245,7 +246,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] } diff --git a/examples/median/median.ipynb b/examples/median/median.ipynb index 68b7eac..c19f355 100644 --- a/examples/median/median.ipynb +++ b/examples/median/median.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -85,11 +86,11 @@ "outputs": [], "source": [ "# use large scale here to get the output really close to the value in dataset, which is important to Median.\n", - "# Be careful, since we may need to calculate average of 2 values in case of no middle value in dataset, \n", + "# Be careful, since we may need to calculate average of 2 values in case of no middle value in dataset,\n", "# this means larger scale can still blow up circuit size, unlike Mode func that scale doesnt affect circuit size much.\n", "scales = [7]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -204,7 +205,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, @@ -232,7 +233,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" }, "orig_nbformat": 4 }, diff --git a/examples/mode/mode.ipynb b/examples/mode/mode.ipynb index 23c61da..a5906a5 100644 --- a/examples/mode/mode.ipynb +++ b/examples/mode/mode.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -88,7 +89,7 @@ "# large scale doesn't blowup circuit size in Mode, so fine.\n", "scales = [8]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -213,7 +214,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/pstdev/pstdev.ipynb b/examples/pstdev/pstdev.ipynb index 6739830..ebcae85 100644 --- a/examples/pstdev/pstdev.ipynb +++ b/examples/pstdev/pstdev.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [3]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -201,7 +202,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/pvariance/pvariance.ipynb b/examples/pvariance/pvariance.ipynb index 85aabd3..e050df9 100644 --- a/examples/pvariance/pvariance.ipynb +++ b/examples/pvariance/pvariance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -207,7 +208,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/regression/regression.ipynb b/examples/regression/regression.ipynb index 88ca29f..a89cf38 100644 --- a/examples/regression/regression.ipynb +++ b/examples/regression/regression.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -81,7 +82,7 @@ "scales = [4]\n", "# to conform to traditional regression, here only one column of x\n", "selected_columns = ['x1', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -233,7 +234,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, @@ -261,7 +262,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.4" + "version": "3.12.1" }, "orig_nbformat": 4 }, diff --git a/examples/stdev/stdev.ipynb b/examples/stdev/stdev.ipynb index a666b55..13ef5db 100644 --- a/examples/stdev/stdev.ipynb +++ b/examples/stdev/stdev.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [3]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -201,7 +202,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/variance/variance.ipynb b/examples/variance/variance.ipynb index a5f31fe..41cd57d 100644 --- a/examples/variance/variance.ipynb +++ b/examples/variance/variance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -201,7 +202,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+correlation/where+correlation.ipynb b/examples/where/where+correlation/where+correlation.ipynb index e887a5c..2010811 100644 --- a/examples/where/where+correlation/where+correlation.ipynb +++ b/examples/where/where+correlation/where+correlation.ipynb @@ -33,7 +33,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -58,7 +58,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -97,7 +98,7 @@ "source": [ "scales = [5]\n", "selected_columns = ['x', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -219,7 +220,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+covariance/where+covariance.ipynb b/examples/where/where+covariance/where+covariance.ipynb index 2a45cbe..fd8d26e 100644 --- a/examples/where/where+covariance/where+covariance.ipynb +++ b/examples/where/where+covariance/where+covariance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -82,7 +83,7 @@ "# note scale = 2, or 3 makes it more precise, but too big.\n", "scales = [1]\n", "selected_columns = ['x', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -210,7 +211,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] } diff --git a/examples/where/where+geomean/where+geomean.ipynb b/examples/where/where+geomean/where+geomean.ipynb index dd459cc..5ebd38c 100644 --- a/examples/where/where+geomean/where+geomean.ipynb +++ b/examples/where/where+geomean/where+geomean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -87,7 +88,7 @@ "source": [ "scales = [8]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -216,7 +217,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+harmomean/harmomean.ipynb b/examples/where/where+harmomean/harmomean.ipynb index 0424cdc..695fd13 100644 --- a/examples/where/where+harmomean/harmomean.ipynb +++ b/examples/where/where+harmomean/harmomean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -81,7 +82,7 @@ "source": [ "scales = [6]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -204,7 +205,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+mean/where+mean.ipynb b/examples/where/where+mean/where+mean.ipynb index 20aa7a1..5c8b6f1 100644 --- a/examples/where/where+mean/where+mean.ipynb +++ b/examples/where/where+mean/where+mean.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -87,7 +88,7 @@ "source": [ "scales = [3]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -208,7 +209,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+median/where+median.ipynb b/examples/where/where+median/where+median.ipynb index b086f1a..eba4b79 100644 --- a/examples/where/where+median/where+median.ipynb +++ b/examples/where/where+median/where+median.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -87,7 +88,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -208,7 +209,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+mode/where+mode.ipynb b/examples/where/where+mode/where+mode.ipynb index 106f18f..88835a9 100644 --- a/examples/where/where+mode/where+mode.ipynb +++ b/examples/where/where+mode/where+mode.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -56,7 +56,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -112,7 +113,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -239,7 +240,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+pstdev/where+pstdev.ipynb b/examples/where/where+pstdev/where+pstdev.ipynb index 18742e0..5e341a7 100644 --- a/examples/where/where+pstdev/where+pstdev.ipynb +++ b/examples/where/where+pstdev/where+pstdev.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [3]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -207,7 +208,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+pvariance/where+pvariance.ipynb b/examples/where/where+pvariance/where+pvariance.ipynb index 9471716..3e5384f 100644 --- a/examples/where/where+pvariance/where+pvariance.ipynb +++ b/examples/where/where+pvariance/where+pvariance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -201,7 +202,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+regression/where+regression.ipynb b/examples/where/where+regression/where+regression.ipynb index d1e61cd..ce05351 100644 --- a/examples/where/where+regression/where+regression.ipynb +++ b/examples/where/where+regression/where+regression.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -81,7 +82,7 @@ "source": [ "scales = [4]\n", "selected_columns = ['x1', 'y']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -222,7 +223,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+stdev/where+stdev.ipynb b/examples/where/where+stdev/where+stdev.ipynb index 4e441c7..d69a3bb 100644 --- a/examples/where/where+stdev/where+stdev.ipynb +++ b/examples/where/where+stdev/where+stdev.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [4]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -202,7 +203,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/examples/where/where+variance/where+variance.ipynb b/examples/where/where+variance/where+variance.ipynb index 1f6cbbe..3625eb4 100644 --- a/examples/where/where+variance/where+variance.ipynb +++ b/examples/where/where+variance/where+variance.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps" + "from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment" ] }, { @@ -50,7 +50,8 @@ "# this is private to prover since it contains actual data\n", "sel_data_path = os.path.join('prover/sel_data.json')\n", "# this is just dummy random value\n", - "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')" + "sel_dummy_data_path = os.path.join('shared/sel_dummy_data.json')\n", + "data_commitment_path = os.path.join('shared/data_commitment.json')" ] }, { @@ -80,7 +81,7 @@ "source": [ "scales = [2]\n", "selected_columns = ['col_name']\n", - "commitment_maps = get_data_commitment_maps(data_path, scales)" + "generate_data_commitment(data_path, scales, data_commitment_path)" ] }, { @@ -196,7 +197,7 @@ ], "source": [ "# Verifier verifies\n", - "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)\n", + "res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n", "print(\"Verifier gets result:\", res)" ] }, diff --git a/poetry.lock b/poetry.lock index bd5ce23..d71e85f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1843,36 +1843,36 @@ files = [ [[package]] name = "torch" -version = "2.2.1" +version = "2.2.2" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, - {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, - {file = "torch-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5f5dee8433798888ca1415055f5e3faf28a3bad660e4c29e1014acd3275ab11a"}, - {file = "torch-2.2.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b6d78338acabf1fb2e88bf4559d837d30230cf9c3e4337261f4d83200df1fcbe"}, - {file = "torch-2.2.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:6ab3ea2e29d1aac962e905142bbe50943758f55292f1b4fdfb6f4792aae3323e"}, - {file = "torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157"}, - {file = "torch-2.2.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d6227060f268894f92c61af0a44c0d8212e19cb98d05c20141c73312d923bc0a"}, - {file = "torch-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:77e990af75fb1675490deb374d36e726f84732cd5677d16f19124934b2409ce9"}, - {file = "torch-2.2.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:46085e328d9b738c261f470231e987930f4cc9472d9ffb7087c7a1343826ac51"}, - {file = "torch-2.2.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2d9e7e5ecbb002257cf98fae13003abbd620196c35f85c9e34c2adfb961321ec"}, - {file = "torch-2.2.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ada53aebede1c89570e56861b08d12ba4518a1f8b82d467c32665ec4d1f4b3c8"}, - {file = "torch-2.2.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:be21d4c41ecebed9e99430dac87de1439a8c7882faf23bba7fea3fea7b906ac1"}, - {file = "torch-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:79848f46196750367dcdf1d2132b722180b9d889571e14d579ae82d2f50596c5"}, - {file = "torch-2.2.1-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:7ee804847be6be0032fbd2d1e6742fea2814c92bebccb177f0d3b8e92b2d2b18"}, - {file = "torch-2.2.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:84b2fb322ab091039fdfe74e17442ff046b258eb5e513a28093152c5b07325a7"}, - {file = "torch-2.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5c0c83aa7d94569997f1f474595e808072d80b04d34912ce6f1a0e1c24b0c12a"}, - {file = "torch-2.2.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:91a1b598055ba06b2c386415d2e7f6ac818545e94c5def597a74754940188513"}, - {file = "torch-2.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f93ddf3001ecec16568390b507652644a3a103baa72de3ad3b9c530e3277098"}, - {file = "torch-2.2.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0e8bdd4c77ac2584f33ee14c6cd3b12767b4da508ec4eed109520be7212d1069"}, - {file = "torch-2.2.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6a21bcd7076677c97ca7db7506d683e4e9db137e8420eb4a68fb67c3668232a7"}, - {file = "torch-2.2.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f1b90ac61f862634039265cd0f746cc9879feee03ff962c803486301b778714b"}, - {file = "torch-2.2.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed9e29eb94cd493b36bca9cb0b1fd7f06a0688215ad1e4b3ab4931726e0ec092"}, - {file = "torch-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c47bc25744c743f3835831a20efdcfd60aeb7c3f9804a213f61e45803d16c2a5"}, - {file = "torch-2.2.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:0952549bcb43448c8d860d5e3e947dd18cbab491b14638e21750cb3090d5ad3e"}, - {file = "torch-2.2.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:26bd2272ec46fc62dcf7d24b2fb284d44fcb7be9d529ebf336b9860350d674ed"}, + {file = "torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:bc889d311a855dd2dfd164daf8cc903a6b7273a747189cebafdd89106e4ad585"}, + {file = "torch-2.2.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:15dffa4cc3261fa73d02f0ed25f5fa49ecc9e12bf1ae0a4c1e7a88bbfaad9030"}, + {file = "torch-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:11e8fe261233aeabd67696d6b993eeb0896faa175c6b41b9a6c9f0334bdad1c5"}, + {file = "torch-2.2.2-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b2e2200b245bd9f263a0d41b6a2dab69c4aca635a01b30cca78064b0ef5b109e"}, + {file = "torch-2.2.2-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:877b3e6593b5e00b35bbe111b7057464e76a7dd186a287280d941b564b0563c2"}, + {file = "torch-2.2.2-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:ad4c03b786e074f46606f4151c0a1e3740268bcf29fbd2fdf6666d66341c1dcb"}, + {file = "torch-2.2.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:32827fa1fbe5da8851686256b4cd94cc7b11be962862c2293811c94eea9457bf"}, + {file = "torch-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:f9ef0a648310435511e76905f9b89612e45ef2c8b023bee294f5e6f7e73a3e7c"}, + {file = "torch-2.2.2-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:95b9b44f3bcebd8b6cd8d37ec802048c872d9c567ba52c894bba90863a439059"}, + {file = "torch-2.2.2-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:49aa4126ede714c5aeef7ae92969b4b0bbe67f19665106463c39f22e0a1860d1"}, + {file = "torch-2.2.2-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:cf12cdb66c9c940227ad647bc9cf5dba7e8640772ae10dfe7569a0c1e2a28aca"}, + {file = "torch-2.2.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:89ddac2a8c1fb6569b90890955de0c34e1724f87431cacff4c1979b5f769203c"}, + {file = "torch-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:451331406b760f4b1ab298ddd536486ab3cfb1312614cfe0532133535be60bea"}, + {file = "torch-2.2.2-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:eb4d6e9d3663e26cd27dc3ad266b34445a16b54908e74725adb241aa56987533"}, + {file = "torch-2.2.2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:bf9558da7d2bf7463390b3b2a61a6a3dbb0b45b161ee1dd5ec640bf579d479fc"}, + {file = "torch-2.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd2bf7697c9e95fb5d97cc1d525486d8cf11a084c6af1345c2c2c22a6b0029d0"}, + {file = "torch-2.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b421448d194496e1114d87a8b8d6506bce949544e513742b097e2ab8f7efef32"}, + {file = "torch-2.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:3dbcd563a9b792161640c0cffe17e3270d85e8f4243b1f1ed19cca43d28d235b"}, + {file = "torch-2.2.2-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:31f4310210e7dda49f1fb52b0ec9e59382cfcb938693f6d5378f25b43d7c1d29"}, + {file = "torch-2.2.2-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c795feb7e8ce2e0ef63f75f8e1ab52e7fd5e1a4d7d0c31367ade1e3de35c9e95"}, + {file = "torch-2.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a6e5770d68158d07456bfcb5318b173886f579fdfbf747543901ce718ea94782"}, + {file = "torch-2.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:67dcd726edff108e2cd6c51ff0e416fd260c869904de95750e80051358680d24"}, + {file = "torch-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:539d5ef6c4ce15bd3bd47a7b4a6e7c10d49d4d21c0baaa87c7d2ef8698632dfb"}, + {file = "torch-2.2.2-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:dff696de90d6f6d1e8200e9892861fd4677306d0ef604cb18f2134186f719f82"}, + {file = "torch-2.2.2-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:3a4dd910663fd7a124c056c878a52c2b0be4a5a424188058fe97109d4436ee42"}, ] [package.dependencies] diff --git a/tests/helpers.py b/tests/helpers.py index 9b5da0d..37471f9 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -4,7 +4,7 @@ import torch -from zkstats.core import prover_gen_settings, setup, prover_gen_proof, verifier_verify, get_data_commitment_maps +from zkstats.core import prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment from zkstats.computation import IModel @@ -43,6 +43,7 @@ def compute( pk_path = basepath / "model.pk" vk_path = basepath / "model.vk" data_path = basepath / "data.json" + data_commitment_path = basepath / "commitments.json" column_to_data = data_to_file(data_path, data) # If selected_columns_params is None, select all columns @@ -60,7 +61,7 @@ def compute( scales = scales_params scales_for_commitments = scales_params - commitment_maps = get_data_commitment_maps(data_path, scales_for_commitments) + generate_data_commitment(data_path, scales_for_commitments, data_commitment_path) prover_gen_settings( data_path=data_path, @@ -94,7 +95,7 @@ def compute( str(settings_path), str(vk_path), selected_columns, - commitment_maps, + data_commitment_path, ) diff --git a/tests/test_core.py b/tests/test_core.py index 6270fa2..e130deb 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -1,6 +1,8 @@ +import json + import torch -from zkstats.core import get_data_commitment_maps +from zkstats.core import generate_data_commitment from zkstats.computation import computation_to_model from .helpers import data_to_file, compute @@ -8,13 +10,14 @@ def test_get_data_commitment_maps(tmp_path, column_0, column_1, scales): data_path = tmp_path / "data.json" + data_commitment_path = tmp_path / "commitments.json" # data_json is a mapping[column_name, column_data] # { # "columns_0": [1, 2, 3, 4, 5], # "columns_1": [6, 7, 8, 9, 10], # } data_json = data_to_file(data_path, [column_0, column_1]) - # commitment_maps is a mapping[scale -> mapping[column_name, commitment_hex]] + # data_commitment is a mapping[scale -> mapping[column_name, commitment_hex]] # { # scale_0: { # "columns_0": "0x...", @@ -25,10 +28,13 @@ def test_get_data_commitment_maps(tmp_path, column_0, column_1, scales): # "columns_1": "0x...", # } # } - commitment_maps = get_data_commitment_maps(data_path, scales) - assert len(commitment_maps) == len(scales) - for scale, commitment_map in commitment_maps.items(): + generate_data_commitment(data_path, scales, data_commitment_path) + with open(data_commitment_path, "r") as f: + data_commitment = json.load(f) + + assert len(data_commitment) == len(scales) + for scale, commitment_map in data_commitment.items(): assert int(scale) in scales assert len(commitment_map) == len(data_json) for column_name, commitment_hex in commitment_map.items(): @@ -42,14 +48,17 @@ def test_get_data_commitment_maps_hardcoded(tmp_path): This test is to check if the data commitment scheme doesn't change """ data_path = tmp_path / "data.json" + data_commitment_path = tmp_path / "commitments.json" column_0 = torch.tensor([3.0, 4.5, 1.0, 2.0, 7.5, 6.4, 5.5]) column_1 = torch.tensor([2.7, 3.3, 1.1, 2.2, 3.8, 8.2, 4.4]) data_to_file(data_path, [column_0, column_1]) scales = [2, 3] - commitment_maps = get_data_commitment_maps(data_path, scales) + generate_data_commitment(data_path, scales, data_commitment_path) + with open(data_commitment_path, "r") as f: + data_commitment = json.load(f) # expected = {"2": {'columns_0': '0x28b5eeb5aeee399c8c50c5b323def9a1aec1deee5b9ae193463d4f9b8893a9a3', 'columns_1': '0x0523c85a86dddd810418e8376ce6d9d21b1b7363764c9c31b575b8ffbad82987'}, "3": {'columns_0': '0x0a2906522d3f902ff4a63ee8aed4d2eaec0b14f71c51eb9557bd693a4e7d77ad', 'columns_1': '0x2dac7fee1efb9eb955f52494a26a3fba6d1fa28cc819e598cb0af31a47b29d08'}} expected = {"2": {'columns_0': 'a3a993889b4f3d4693e19a5beedec1aea1f9de23b3c5508c9c39eeaeb5eeb528', 'columns_1': '8729d8baffb875b5319c4c7663731b1bd2d9e66c37e8180481dddd865ac82305'}, "3": {'columns_0': 'ad777d4e3a69bd5795eb511cf7140becead2d4aee83ea6f42f903f2d5206290a', 'columns_1': '089db2471af30acb98e519c88ca21f6dba3f6aa29424f555b99efb1eee7fac2d'}} - assert commitment_maps == expected + assert data_commitment == expected def test_integration_select_partial_columns(tmp_path, column_0, column_1, error, scales): diff --git a/zkstats/cli.py b/zkstats/cli.py index b7c6249..d24192d 100644 --- a/zkstats/cli.py +++ b/zkstats/cli.py @@ -7,7 +7,7 @@ import click import torch -from .core import prover_gen_proof, prover_gen_settings, setup, verifier_verify, get_data_commitment_maps +from .core import prover_gen_proof, prover_gen_settings, setup, verifier_verify, generate_data_commitment from .computation import computation_to_model cwd = os.getcwd() @@ -22,7 +22,7 @@ settings_path = f"{output_dir}/settings.json" witness_path = f"{output_dir}/witness.json" comb_data_path = f"{output_dir}/comb_data.json" -commitment_maps_path = f"{output_dir}/commitment_maps.json" +data_commitment_path = f"{output_dir}/data_commitment.json" default_possible_scales = list(range(20)) @@ -38,11 +38,11 @@ def cli(): def prove(computation_path: str, data_path: str): computation = load_computation(computation_path) _, model = computation_to_model(computation) - commitment_maps = get_data_commitment_maps(data_path, default_possible_scales) - with open(commitment_maps_path, "w") as f: - json.dump(commitment_maps, f) + generate_data_commitment(data_path, default_possible_scales, data_commitment_path) + with open(data_commitment_path) as f: + data_commitment = json.load(f) # By default select all columns - selected_columns = list(commitment_maps[str(default_possible_scales[0])].keys()) + selected_columns = list(data_commitment[str(default_possible_scales[0])].keys()) prover_gen_settings( data_path, selected_columns, @@ -71,21 +71,21 @@ def prove(computation_path: str, data_path: str): pk_path, ) print("Finished generating proof") - verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps) + verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path) print("Proof path:", proof_path) print("Settings path:", settings_path) print("Verification key path:", vk_path) - print("Commitment maps path:", commitment_maps_path) + print("Commitment maps path:", data_commitment_path) @click.command() def verify(): # Load commitment maps - with open(commitment_maps_path, "r") as f: - commitment_maps = json.load(f) + with open(data_commitment_path, "r") as f: + data_commitment = json.load(f) # By default select all columns - selected_columns = list(commitment_maps[str(default_possible_scales[0])].keys()) - verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps) + selected_columns = list(data_commitment[str(default_possible_scales[0])].keys()) + verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path) @click.command() @@ -96,8 +96,10 @@ def commit(data_path: str, scale_str: str): Now we just assume the data is a list of floats. We should be able to """ scale = int(scale_str) - commitment_maps = get_data_commitment_maps(data_path, [scale]) - print("Commitment maps:", commitment_maps) + generate_data_commitment(data_path, [scale], data_commitment_path) + with open(data_commitment_path) as f: + data_commitment = json.load(f) + print("Commitment maps:", data_commitment) def main(): diff --git a/zkstats/core.py b/zkstats/core.py index f54f261..4b1a04e 100644 --- a/zkstats/core.py +++ b/zkstats/core.py @@ -191,7 +191,7 @@ def prover_gen_proof( # ... # } TCommitmentMap = Mapping[str, str] -# commitment_maps is a mapping[scale, mapping[column_name, commitment_hex]] +# data_commitment is a mapping[scale, mapping[column_name, commitment_hex]] # E.g. { # scale_0: { # "columns_0": "0x...", @@ -201,7 +201,7 @@ def prover_gen_proof( # } TCommitmentMaps = Mapping[str, TCommitmentMap] -def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_columns: Sequence[str], commitment_maps: TCommitmentMaps) -> torch.Tensor: +def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_columns: Sequence[str], data_commitment_path: str) -> torch.Tensor: """ Verify the proof and return the result. @@ -237,6 +237,8 @@ def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_ assert len(proof_instance) == len_inputs + len_outputs, f"lengths mismatch: {len(proof_instance)=}, {len_inputs=}, {len_outputs=}" # 2.1 Check input commitments + with open(data_commitment_path) as f: + data_commitment = json.load(f) # All inputs are hashed so are commitments assert len_inputs == len(selected_columns), f"lengths mismatch: {len_inputs=}, {len(selected_columns)=}" # Sanity check @@ -245,7 +247,7 @@ def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_ # actual_commitment_str = ezkl.vecu64_to_felt(actual_commitment) actual_commitment_str = (actual_commitment) input_scale = input_scales[i] - expected_commitment = commitment_maps[str(input_scale)][column_name] + expected_commitment = data_commitment[str(input_scale)][column_name] assert actual_commitment_str == expected_commitment, f"commitment mismatch: {i=}, {actual_commitment_str=}, {expected_commitment=}" # 2.2 Check output is correct @@ -263,26 +265,29 @@ def verifier_verify(proof_path: str, settings_path: str, vk_path: str, selected_ # =================================================================================================== # =================================================================================================== -def get_data_commitment_maps(data_path: str, scales: Sequence[int]) -> TCommitmentMaps: +def generate_data_commitment(data_path: str, scales: Sequence[int], data_commitment_path: str) -> None: """ - Generate a data commitment map for each scale. Commitments for different scales are required - so that verifiers can verify proofs with different scales. + Generate and store data commitment maps for different scales so that verifiers can verify + proofs with different scales. :param data_path: path to the data file. The data file should be a JSON file with the following format: { "column_0": [number_0, number_1, ...], "column_1": [number_0, number_1, ...], } - :param scales: a list of scales to use for the commitments. - :return: a map from scale to column name to commitment. + :param scales: a list of scales to use for the commitments + :param data_commitment_path: path to store the generated data commitment maps """ + with open(data_path) as f: data_json = json.load(f) - return { + data_commitments = { str(scale): { k: _get_commitment_for_column(v, scale) for k, v in data_json.items() } for scale in scales } + with open(data_commitment_path, "w") as f: + json.dump(data_commitments, f) # ===================================================================================================