mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-04-15 03:00:21 -04:00
234 lines
19 KiB
Plaintext
234 lines
19 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import ezkl\n",
|
|
"import torch\n",
|
|
"from torch import nn\n",
|
|
"import json\n",
|
|
"import os\n",
|
|
"import time\n",
|
|
"import scipy\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import statistics\n",
|
|
"import math"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from zkstats.core import create_dummy, verifier_define_calculation, prover_gen_settings, setup, prover_gen_proof, verifier_verify, generate_data_commitment"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# init path\n",
|
|
"os.makedirs(os.path.dirname('shared/'), exist_ok=True)\n",
|
|
"os.makedirs(os.path.dirname('prover/'), exist_ok=True)\n",
|
|
"verifier_model_path = os.path.join('shared/verifier.onnx')\n",
|
|
"prover_model_path = os.path.join('prover/prover.onnx')\n",
|
|
"verifier_compiled_model_path = os.path.join('shared/verifier.compiled')\n",
|
|
"prover_compiled_model_path = os.path.join('prover/prover.compiled')\n",
|
|
"pk_path = os.path.join('shared/test.pk')\n",
|
|
"vk_path = os.path.join('shared/test.vk')\n",
|
|
"proof_path = os.path.join('shared/test.pf')\n",
|
|
"settings_path = os.path.join('shared/settings.json')\n",
|
|
"srs_path = os.path.join('shared/kzg.srs')\n",
|
|
"witness_path = os.path.join('prover/witness.json')\n",
|
|
"# 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')\n",
|
|
"data_commitment_path = os.path.join('shared/data_commitment.json')\n",
|
|
"precal_witness_path = os.path.join('shared/precal_witness_arr.json')"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"======================= ZK-STATS FLOW ======================="
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"data_path = os.path.join('data.json')\n",
|
|
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
|
|
"create_dummy(data_path, dummy_data_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"scales = [3]\n",
|
|
"selected_columns = ['col_name']\n",
|
|
"generate_data_commitment(data_path, scales, data_commitment_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Users/jernkun/Desktop/zk-stats-lib/zkstats/computation.py:254: 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/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/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/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/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",
|
|
"\n",
|
|
"\n",
|
|
" <------------- Numerical Fidelity Report (input_scale: 3, param_scale: 3, scale_input_multiplier: 1) ------------->\n",
|
|
"\n",
|
|
"+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n",
|
|
"| mean_error | median_error | max_error | min_error | mean_abs_error | median_abs_error | max_abs_error | min_abs_error | mean_squared_error | mean_percent_error | mean_abs_percent_error |\n",
|
|
"+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n",
|
|
"| 0.027862072 | 0.055724144 | 0.055724144 | 0 | 0.027862072 | 0.055724144 | 0.055724144 | 0 | 0.0015525902 | 0.001914166 | 0.001914166 |\n",
|
|
"+-------------+--------------+-------------+-----------+----------------+------------------+---------------+---------------+--------------------+--------------------+------------------------+\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"==== Generate & Calibrate Setting ====\n",
|
|
"scale: [3]\n",
|
|
"setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":3,\"param_scale\":3,\"scale_rebase_multiplier\":1,\"lookup_range\":[-20376,20400],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Fixed\",\"div_rebasing\":false,\"rebase_frac_zero_constants\":false,\"check_mode\":\"UNSAFE\"},\"num_rows\":14432,\"total_assignments\":9957,\"total_const_size\":3628,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,3],\"model_input_scales\":[3],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"required_range_checks\":[[-4,4]],\"check_mode\":\"UNSAFE\",\"version\":\"9.1.0\",\"num_blinding_factors\":null,\"timestamp\":1715154716541}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Verifier/ data consumer side: send desired calculation\n",
|
|
"from zkstats.computation import computation_to_model, State\n",
|
|
"\n",
|
|
"\n",
|
|
"def computation(s: State, data: list[torch.Tensor]) -> torch.Tensor:\n",
|
|
" x = data[0]\n",
|
|
" return s.pstdev(x)\n",
|
|
"\n",
|
|
"error = 0.01\n",
|
|
"\n",
|
|
"# Prover/ data owner side\n",
|
|
"_, prover_model = computation_to_model(computation, precal_witness_path, True, selected_columns, error)\n",
|
|
"prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model, prover_model_path, scales, \"resources\", settings_path)\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"_, verifier_model = computation_to_model(computation, precal_witness_path, False, selected_columns, error)\n",
|
|
"verifier_define_calculation(dummy_data_path, selected_columns, sel_dummy_data_path,verifier_model, verifier_model_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"==== setting up ezkl ====\n",
|
|
"Time setup: 6.489761114120483 seconds\n",
|
|
"=======================================\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 14.5\n",
|
|
"==== Generating Proof ====\n",
|
|
"proof: {'instances': [['d57f47950cdabf2cb79306e0f33e75726a2c2960806e902b0fc88d3ff949a108', '0100000000000000000000000000000000000000000000000000000000000000', '7400000000000000000000000000000000000000000000000000000000000000']], 'proof': '0x226111ffae15c80e6119f0047baaab8c4d7c8a23c0e151612ea15aa0b392d5e41ff859e27413a27ecf49f389f609f97da6e57a8c22b9a7654f6831803ccdac300ae74b6585b1357d93ce08094c3394f420951ba5cc31e2020eec94b7f6d404c42fad18d65fb24b10371ae103a4a7d559dff66a1e5984d1fb1574531a04cdadeb08cb0982209139bf284aab6487cb0de47c821150a43a09ebdf1238b9aa935144026a65fe14b7431e6d99b7e7d96b79171ec8945f1f51d490f36ed2a09d63247a19f88fcf755d39561f31f8466e9d04a101ba1089bf90ab5dfc02fdaf393a48391af75ac358ae6ea4e18a6acafe3a776c0f281c195616875686a08706b08d8c1c0f1985b5ce08c61732db36cccf0836c653cac59a804735d1e8df9b2728f898f81a165c369ae7dd4f180285169719b67cb973ef5ccf073f01f118b0edd5db512d28bbc94d519bf8ff95a3d94e02dd4d04be577a16f41749928cffcee587843ce30d15f8dc966d31d38d6c20d9cceeb6056bbb76abb175a386b334c3674ed2b755076bef17b85e62a395fe7de300e366e9a9d21d8c518fecccbd81f0eba3814e600f8af859994635732afaad0404d8ddcc4b074356484f0ca8e36d74e37f3c232107cff754730e006adf2d39291ac2da51574804907308481d700b05a12ba5e58907ed7d8ee58bc7a471d74e3b0806afbd98f66091b1b68c8fcffb97e688ee34d702f58634c040039676db54308484af99433d946f19e9f8be4bd14fd56e5f310709be7375a68088cb1b12b67e5ba136948d4b2508b8d1fc9757f9c29609fef9141e17c4f6db014637de16944b763a56c2abaeb01b40b83e019da7dda7c2eb90dc12ed2fc5216d0a12b4d597e01d77053d72d9ac89e4d7ef7332cb0ad50423d7ee029b2b9e07ac29a3f0ac8aef6d9835404ec441de37b4b75fd872c2b6b0f520661f70cfec033fbdcc30a9e896a97231d6af377141b831da30d3791c983a64400216f7a5bb124ee7d33fbdef5ee22e6b3da2764d1b7ef8338d670e47910735159b04c36f8e95acc8b521e3f0f6bda81d8ad087dae4397cf12c0bd97b4a4a24242910923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412ff72d37b657a433e775b98e4f0c65fe93c06af70de3ba12f6bfd8cc57af10131cc4460a9bb7ba15d18e3dfc9aab80e0e153b97ef3841cfa58f4b6b231be74cc25dbe13186c96ecdace6e42258ce6aea44bad1c68b7f06135fbaca565a644ca82f8fdcc5cc41380128b618de37f898c3ed52b60db165fde48c55a57459e2298e1ae24ca69867ce09780f2e7102e8728cd9cfa767cf334b795dad4bcdeb8af09b047a84eac9b37c24c6e510d89fc36f2dce6228b2f78e719a3024dc157c4a2b6e1626a904de9bf6cee7a48a709a8a6a90d1695cbbc3896b0cf0f3d5158c86d918144bf70c381efcd09108517d838ebb8c107cf440582dda47ea1745b56809579c09dce79fa87f4ce1571eacfe2f3b09acde8ebf630e5f607b22295d08422d91eb2b00e7a9bb9ae4b0534aa703e08fc321f784790aaee63cc45dfce26b458286f4005df13001d7cb8a0124caae57c0b83ac06d08afdc06b1cb5f2cc3a0475c97bd06521d44fe2a2eb1e160ff2896a6ee26ae836954131c2ff08bec43e47f3d750004068dcdd84972bf9c7265699fd5362bd68b5ff699b7076728b6785fc1f7402f21cb09b3aa26ad3fcbf62cbd5e6af6dbeeb5918a7272bde150eb0b9c099882552516ad9226e226df139f533238f646850596b507be870c1d4434f39bd11f4d651eb9e92b9af47e068d8f52f5f9f55a9ec2e166d55cc041126ef22dde0631b68e096cf3c622a1ce08ce8b1b4aca23ba3fc614d6a91355e122920e7cc5224c9f2c26cb36a3cdf5c82415b4f9157053a03f507ce0aaed5619579daf5bf9e232bbe1290a411ea34c88455617d0a7d38f3fe0111cda025ad4097b402c086b77f195c32ee815c48e2854811b3c1b43735ca08f91e1908b9bc2e5875864bcbc1a63467d0afc5af2abdd6fcc229515f2366324c7c72e9d9471f50ad187074c5a6301ffc609ee9a8d46115933e9eb39bf3ea146187f2ab097e71c46dd520ab7b6443ce67c1b6085754903b93b83d214574098a2c741cd16fee058a9e40d515590234cf8b218c67813695c9b28721c2c536f0d472b8737052a08ecff9630010438856b8caf0062fc67509ecca2431c1e750d3fa653ef9dd634bcfbed9b7a7626848d31b9f22035c243ca06dc2d3d4d722107800ad0203548517a66de54d74f2432fc71d95014ae2265a70966e80e921f261c9680a634b7f684fb32d07094f8d69b46e559e10ef62de18aa7bcf01630ba9cb4c794051ef01bb18f8062b35f8e5a7518ba70f0155987ce05f34dc14206bd00ca5c97f094f6282bb61d67dbd7be62c21a32621b0de5116124009a2f0fd0bf0b064374ca04b2f691cedaa225b50e3ca0db80346a287fc0b9aa9d1a2776a05fed8d2738fde07c418073f8ebad3dd0cbb28f473274277b17f465b6a4e6fa1c0ed155e80b86fdbb031f7a9fef865880bbba3dcef34b19924bbfab9d28c95ac76d9c0cee129f4106948bc8fd617f48a5792eeb9287921b339789af17ef77135941f0b9d2ca21291721678f17d2f97e9f10f8cd7299ec156f76ee113b480416da6f2dfd50430a8c6f3054cc7372d9ad90cdf872f68e8a25e211f8da16b10eeacf6811f1d118e9cb8413640f914933b55d4c49a1bd844e08bc4284822c35cccbf514e47620f16e9a357012087088c09dabfb2ebbb2077d2a4280caf48596c2409066d653042e062eff36984d7a596dd41244b918d9f3bf1ad4077b417dde2f3bac44ce5c87bca598e93e1151c69b50e715a3a605538c360f02f92be96739b54db1ea4e81876921a49305d87a5dee5e84823b71061cfdff0048c68c2cf52c7c521294d6133d6ec140a2976cecec150b8cabf98d8665803126f062cbbdbbffc1605e23b74a5cb9e052d80c3932e96a3a34b1cd58261b706014fd86328298a4f1bdc0f0ff9c73b4ffa40233368e8888b3cf2a01a9af247fa41233ab75d343a92592013bebd4a175884b84f7d49a88eb134ac0373ab93a3dd72ad695697a831393669e33490d48ee1295a590b82872aa0ed4d729ac6ed14469114e8662419b852ed155571132fe1817db24d93e55b8ec199c651c352c5789de25a33d37b8b16be9bf37dfa2f7a5204249216d6c24d21fa9ea02ef8f376a089d007e68f6ff66f9dd5d7db1e52c1b45ddf4d6767fa118cba2beac2d963e7c17a815f0d80b29d4123fa99e6ec9a13c97c73b32ccceb5df7ccc7f0d5cdf9f58d247025b4c6473d782eaaaf0ce4ab86e51c38c4ea09cc6ba99e433044601361f8bca0dbbfecffc64555dac529cdcde8851b244958ea273bf64ffecd11f87fc67efe923ef6228ba519064a323ac292d8da0a1268ffcf174b1a46bf57eb6bd41958e801d3e22444370546e79378c97a76dc7214c9c3aef9c7152d6f8755be3792f740b111e670e45d65bb85efa49f8f496b3ef1a489179801ecce4e7088b4ee0a7ab952b1d90a1935f20dea98723058d1f20dad322bbe426155a9e6edcb32b62d22e3d032216016f61f615b8742b3013312d9db919ff51aa91d5595b060156e83d8fe00338cd2f60d1e7dfd6eeaa4b642677793c3a77cba8f9ed51595ff7f77a09156714ec4ff84cbf9089d8ebb4a66653ba6a80cd23f0bee3d4716279a8db36bc027519c9ddf48f91b06e87a786f0cb5f0634b19b2c0c4b337b0579db507e33fff7f32deffe43335c749418569fe3d07bec0c0e194be09e3a0bdeb909a9e7141f18420000000000000000000000000000000000000000000000000000000000000000162e51404d2cff304835bbb6f8408e6b8fc9e22e1b126a0dce6d41eac9f5b6f9000000000000000000000000000000000000000000000000000000000000000029b1680ad4eba7d45211079504f03c1c1cd6fd92d27d0e39e8fe81b8b699f8ea00f4bf3fb96673f8f081c30066f66016580507b63e33a48c36cdc47826f4477000000000000000000000000000000000000000000000000000000000000000001c8eb6d56661c9e4af98013478a62d3ae138334d278eae58c4c61d6c2160d22e1cdd3dc41356bdbba868bfe73861f6d4ace6dea9d3fbf92e03ae125d702bf6243017e1e50cd00ad93c14a7b213873e606508373ed18fc21191452b6a90b6d68f000000000000000000000000000000000000000000000000000000000000000006949182efc47e8929cb4a9a9f6415a8312a0efedf76bde5846b01ad43be4d5600f4bf3fb96673f8f081c30066f66016580507b63e33a48c36cdc47826f447700000000000000000000000000000000000000000000000000000000000000000000c5e41df9b3ca81d01aa604e75b90d86d50623cd748acd6b79ffbb6dde716b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d445608295b91097bdce9049b14c5386afe269ab536c68a977a324c21eb4efa106867555e09a0d2cc23dc66ceb6c7b5381073864b5cac69d0ec6d133f5b90ca11ad14e251d6f548549623efadabd45dae8672dec97fea5408cbf1aaa98253ec0c78d198e184d5acae87d891ccf37f0fbb3cb8ef7121e8a5309978ba29e86093066a7ce2b7086205544ab8fcd5cf0e48e8d2b4dd74d12913425df83e38b0ad89000000000000000000000000000000000000000000000000000000000000000006ad8596a46989c6b3e0a224aa7ef313eb8918c28921fe02c74d53e8b5fab0a21e3a1e788a05ca7d120092dd2d2caa9c90ffcbe777e10506da92ff3f96a5226a0cfe9b3219938555bcf49655aa593e21b7c53754e516c4b54f0ec2937c8a3c101ed771f1e7db7e5eb482ad2c3d4027880c09611fe4c944598b5e08d0f94385462e463243682fb012c35acddcfd790329764bc72e021a39babe7040c9619e0f302ad5233b25f400f231739c97d0d52f12ff4586cb015abb9415e96fe269865e1902dc082e9b2810e424214ce113272d7758b6b6c1460c9551c49fc653bb6301840fca40929248fcc52e10b95beacc162d8697363cc851f546663b016d1951b9c1242fa7469d5e1b55b990debbc67001543cbd87f193134b4d3660e053d47fd1f712ad1300ebbb733dd4555ea469df0286f0cea4f7af817f125946234059a3a49e2e2a6595ad37fd6273fa60392a0d29e207984682ff9be919e107d94e4e63a6c00ef18b93ac19c6533ec865650fd34e6a651773fff73a101e01ae469517adff0a142646bbc2e1a1c2b624dab78ea12d41a3c3ac59abcc45292463522cd6341ac8135c868c733879bb419d856d541dd0ac594cc0f5d3ba03ee24dc06a863fb501303f32880c329c1810f68a82cdf8cacf94a4d2156cb20fe43ed6535d9be5c75b200e034954d6c1c214334a6e19d40cd5da0776c2b2350f7363c5161ac6e3d332b03eed745e329d8a6fe5c5abc49be96bf65f72b841531db4dcd70229a38a056be0fce6087db5054c1e99e89f3644b8026568f35045fc1cc1fb63e39ed0971076005a47a0572bd40a266f73d204fb1f8f185f394240db5c19351be9f334c99b7a50da372e9c30938121478c001845af0e5c33ca6e908426a90b44c21bfd1983de111b6ab1c43b83ca37dc3534d9d037df3df4a72fac512cedbe100b2d38eabcef32f44dc587e10f13d96e4c3a881383681af805b0505f8929d288fd6a8876fff3d161664d80cf2587f655de52a00fc32843703e9bddaf3e2fa71aee7458e7460ec085ac81be09fb5ef81c5af3b094f67e31bb05983c5c3f8a95e72f6baa246d6781ea4ebb028f648e3af33d4d8ddc4343e2495a2c0d2e0666a231c84786c7ce51004fe2137e9c1599c679a1a369722dc6d25274a02fae4ae4659f67926c686d0071dafab3295822be6a6a2dc00b06028ce24c07f04167f7feecc4670717a7b5056084da0d577370f37b545fc5ede2a35b0ae4c29c85c9a8aeefc16f15b843c12c117d25658f06b66e77841370e11b29bbefec768d0ccd89144e5e68d276adcc02e270a6858af7b3b334a707204a17c23039991854bd9c4cb8febcd152030d9c3cb2e33f70e0b40bec9f6d1dae09f8623a98655fd557d3c7d297a0fc70e7f38b4611d120151f3ba1496c6e8a4ba24baf156579923231ea0df29a83e3a4f62a3ea860a37dfd0c200a795ea22416d4fcb3355525469e20c86e830e97b28f938fd54c206ccd2010277193734b0e3bf660091b0198a9d932c47446c15cdeb3adcbeb9f4114a85efbd7258d1c55be87221bee8b772cca224115913f5cdfedd3d6264c933120877099c9e8c8dadc4cc87894a7eb3292071cc924b8dca5f98a5de49e830c81222b77b0485c2e39e174c6394dd5dde35ad35f348f6207726baec028437304210da735809977626c51a10cff6d81822882c89b1398a609d102bc3cbfcb9ea221977ce76e84b062c1afcb526b6d39bc587eeb087e78a0505ac71eb62a5ddf9c52c10577b4acd5ac6f0723adeafc6f5535d8222ba3da574a20b248317576b3d2b238d9b6beea4d02b83d45ca19196b9dc2e79c78cbf032e9c40a9e138c7748133114f0fba642a4f812129519fdd9208f5078fa570c9e02261683c22c90c10c91f177f12aec9d3ca115fecba8843319c031548a1ca6c1e41611d6b5ec6d722f5d102f71a67e92d0b25566593213e681d38ef61002d87be6a391544e5f08f22f5872245c2d36c6b02f827d935623cf06de1303c70e6601067893d45fd92a93ceb59', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 8.019142866134644 seconds\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Here verifier & prover can concurrently call setup since all params are public to get pk.\n",
|
|
"# Here write as verifier function to emphasize that verifier must calculate its own vk to be sure\n",
|
|
"setup(verifier_model_path, verifier_compiled_model_path, settings_path,vk_path, pk_path )\n",
|
|
"\n",
|
|
"print(\"=======================================\")\n",
|
|
"# Prover generates proof\n",
|
|
"prover_gen_proof(prover_model_path, sel_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Verifier gets result: [14.5]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Verifier verifies\n",
|
|
"res = verifier_verify(proof_path, settings_path, vk_path, selected_columns, data_commitment_path)\n",
|
|
"print(\"Verifier gets result:\", res)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.4"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|