Files
zk-stats-lib/examples/pvariance/pvariance.ipynb
2024-02-19 22:17:08 +08:00

330 lines
24 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: ezkl==7.0.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
"Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n",
"Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
"Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n",
"Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n",
"Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
"Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
"Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
"Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
"Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n",
"Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
"Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n",
"Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n",
"Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n",
"Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n",
"Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n",
"Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n",
"Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n",
"Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n",
"Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n",
"Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
"Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n",
"Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n",
"Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n",
"Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install -r ../../requirements.txt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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": 3,
"metadata": {},
"outputs": [],
"source": [
"%run -i ../../zkstats/core.py"
]
},
{
"cell_type": "code",
"execution_count": 4,
"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')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"======================= ZK-STATS FLOW ======================="
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"data_path = os.path.join('data.json')\n",
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
"\n",
"data = json.loads(open(data_path, \"r\").read())['col_name']\n",
"data_tensor = torch.reshape(torch.tensor(data),(1,-1, 1))\n",
"\n",
"create_dummy(data_path, dummy_data_path)\n",
"dummy_data = json.loads(open(dummy_data_path, \"r\").read())['col_name']\n",
"dummy_data_tensor = torch.reshape(torch.tensor(dummy_data), (1,-1,1))\n",
"\n",
"dummy_theory_output = torch.var(dummy_data_tensor, correction = 0)\n",
"dummy_data_mean = torch.mean(dummy_data_tensor)\n",
"theory_output = torch.var(data_tensor, correction = 0)\n",
"data_mean = torch.mean(data_tensor)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"scales = [2]\n",
"selected_columns = ['col_name']\n",
"commitment_maps = get_data_commitment_maps(data_path, scales)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/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"
]
}
],
"source": [
"# Verifier/ data consumer side:\n",
"class verifier_model(nn.Module):\n",
" def __init__(self):\n",
" super(verifier_model, self).__init__()\n",
" # w represents mean in this case\n",
" self.w = nn.Parameter(data = dummy_theory_output, requires_grad = False)\n",
" self.data_mean = nn.Parameter(data = dummy_data_mean, requires_grad = False)\n",
"\n",
" def forward(self,X):\n",
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<=torch.abs(0.01*X.size()[1]*self.data_mean)\n",
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*X.size()[1])<=torch.abs(0.01*self.w*X.size()[1]),x_mean_cons ),self.w)\n",
"\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": [
"theory output: tensor(211.8691)\n",
"==== Generate & Calibrate Setting ====\n",
"scale: [2]\n",
"setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":2,\"param_scale\":2,\"scale_rebase_multiplier\":10,\"lookup_range\":[-20332,8],\"logrows\":15,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":1521,\"total_const_size\":8,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,2],\"model_input_scales\":[2],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n"
]
}
],
"source": [
"# Prover/ data owner side\n",
"print(\"theory output: \", theory_output)\n",
"class prover_model(nn.Module):\n",
" def __init__(self):\n",
" super(prover_model, self).__init__()\n",
" self.w = nn.Parameter(data = theory_output, requires_grad = False)\n",
" self.data_mean = nn.Parameter(data = data_mean, requires_grad = False)\n",
" def forward(self,X):\n",
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<=torch.abs(0.01*X.size()[1]*self.data_mean)\n",
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*X.size()[1])<=torch.abs(0.01*self.w*X.size()[1]),x_mean_cons ),self.w)\n",
"\n",
"prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"spawning module 0\n",
"spawning module 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"==== setting up ezkl ====\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"spawning module 0\n",
"spawning module 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Time setup: 3.5368781089782715 seconds\n",
"=======================================\n",
"Theory output: tensor(211.8691)\n",
"==== Generating Witness ====\n",
"witness boolean: 1.0\n",
"witness result 1 : 211.75\n",
"==== Generating Proof ====\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"spawning module 0\n",
"spawning module 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"proof: {'instances': [[[12907834141446617622, 16863260785082668294, 2215826187815521673, 2191547160659437828], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [988086122984763008, 8331390676852675036, 9456440076381036992, 2639995154681636326]]], 'proof': '0b5e0a12a514c47ca624727e98e75a0ca6ca425f69573dc1530aad1cf6c9dad90a894f1bab872236fee193740a577721ec98e336c83c603097e9f3d33f98699f0edea6b0c9fd255fd3fa4765e264f68a612dc7aef3fc27bd1f09904cce3a84c9149269a3e36ed3804ec41fa096ef1a35095aa994e07ab9c93b8a896e16822f890b202500404a04d0a843c31f98974c518df45ab72b3e82ec9b34296ee4b50778112b24bbd973027f66bc2036bf3f8b110957005a58097eb021e888f1fa63e7d008724bd26167ee49989564f80d5ad1c46ce8b0836a1441cc4b128625f96ee417093cfc4296ae646a1bdbdb6b85afc1ba15b5bf1be708330190a4b5bebf6997ed1092ba01cf5d189349a2e482492575a7728858c604ba9382ef71cbcfdf4b655a2fb500f6c074e46f58ee9e250c578144eb7335f6669544cb62a468b8d5d5a62e166350ae9eee3ebbc602bedcd064c797d91a77d5749d4af834386456f3f01f0e0e3ebe7309ea3c0e18c225d5e729206850746d389e6af97b87a8ddd5056e2681120470cb76e4d08f74a27cfdac6b9e549113ce76d8c461c3d824b971a016cf0b0e635b2db27c20a27756525d37f613ed73bf4cf688a6f5074c2514e9a12c9c062695b7a17f313824dd6894ae4a603293b18a248d32c2d8e213ba51e40051cef42340f1a47d48b34b67acf8d782e3c069b597fc6932de5f35b4472fc547b69e0e272a40711b0737ca5f54de0fa8ccefd1ae308f1ad3dc04aabe8c7623ae3e99d22640e977bd6b21ded4b16bc1e6f98f6a2016a8a7e71428ea983f9c597a20ee1800577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f9118281d6bf0c4f7413fe786410bd96d5eb27b4eebd12a00163fb19e3cc763f6af1012b5c71136c79acde2997608774ea110d86bce04e23a5c06259bc055726a49f500577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f91180ebaf320c6e4cb0349ecc6f755cc4d09e29dd54ff3b3d5acc6dc046e25f2e30a215d3405ad6dcab3e31140e93dcc2d2ecc1c81fa8e1a59dafc94d4a8a2ba51a612a5dd249fd1bcdcc5187dad2ed56bc9f813e67c69bac87e0c3359824c59a3061eadb80baac7a55d0522313fca8e38331877f120255c392657b1819e9589c27d2bc413c94a844646a87b39531113a6424fdecf868b284c345cf4080f317cb7a00bca42e97382f8218a00010cb854c8aaa31c8bc4e8cc08fda7eaa118d076dd0906f1f1d3ffb8a947b3d3299126ce65bbfe0beb3077f343fc932018883532b97f1a5a514918e40f778b7119d3a86b4f4b588c20d5b0ec63263ced4f024cb14a392b67420d99baddb89d9bca63528a39d3eb3ba285804e3925b75874cf7f68571f135beb414b40d70376fcaa2a1d71779615272e937b15d8c0d41f10cab079dc9211e9913bc3a003806d2628f16725c82ee7a2ed820f098704c6c0d307557fbace013478fb8c45017513cc0c1fa7d3b9fe5cc6fb28980347b5ce71cfc562e844d40ef0db7c5679ad1fb3d489c7b791eeccb890d89093b3696892d8a43b80f0e7e722cceb48c40fcc78c57d1f6b990ce460d0bef445bac9f090139248a3fc2d57952517a114bb14a45c2b1792ce1cb2cfc8dfe24a6308b31ad9072aa21e4e1a2aaa2e8b6782f479ae27307f79af0328616d412dfbd70a195506d50443978f5146050472951c3c25a5d10fc17a386bcccc20ae0e1c33c80e62446fad270d7f0721ae1e8a676023767f57860f952c672f80c4ce3196ae12d29d00be97a64dc26036650447e9a3e71150189b21f944d45109e2d854709e6f757be5ced2c9c32dd11b5f21215ceebd3d1db8cb5cf06eaaa3009925db8afb42de46fc9195a89be57c6fc119573117c23fd9a808ce39a646c50988ddec022ffac831eee5977feb378629120e2da53dad201e37166c06b25ee2776a6f672a1aec617888962b14220118b83128f5af5ad69938608de56280e917616bc49e4f391bf3f1d601fdb9b7d795d5c11f4be845581803a77c85bf3053e70555265ff48c4519730b8a47e743d77f36c7035e34c4e6e182f89a7bc491b5678454c095423523c3dfd300e8125c9be25590003fc73a2f74aadf96927ebd2ce6837856d09a974d6bc1635a1ce79af84cf94407ba65a8e215291bb060146ec0a18ca49383506f83c31b22e218f3bd7ac90cd12444145bffb0f5393f90272f5be530de74806191bc9ee94d1811052dc3f55abc10664126fa64d31d98d0b93e143830e42e0114030b4b61e229c93ae9f8c503c622b115fa8567a108721c0b984c04a80c304edbad511b617c5603e883fd68c9cd25b9ec9e272a136b8b5e558ef8ef413964f9bf71e418c76df29d20c4998bef8b0758ae00747c0bd03a6f9efd2b1c94c69252f2b44b53ffe52ea90ded93c5386e24a6e1e39003b655d2b84990aef05e9e375acd35c0c958c25fa68b4c98f372cf1515e342c530740e501d32f29a734c33206ff45018f79fbb5c520874ee30d83525a3dfba2790cc6ba74dc88d5f4a603fa438e83bc03484017b1d21529551d7850040d13c9f150c3c62079cbcd6ab8a9c9b85ce475d60fe0cfba6bd18a23e2a3a1ca4d2affb9ec850d17c25885c447445fd2f7a0faff8ebbf9287799d5ec54d532d051dc60bc32370c1c959c7055f45f1b9ecc7b9803c03847705fa549d1912d5092c5ed086982d67e59bddd2f1621f98dcfed74a1b085c63675e3ab67b4393e01f7f513767288887ca7b00996c34f3cbc4e745d1d1ddac52f84e75d5008575912e83fac442417e0bf16c497ebd4f179bfc863b00240df84d43347672b10e91e70cc8ae000571390604c297de74b5b059f7cb4b30ac906c22f238c4515c18147d0a9a57b01027b3934f568645b2db9474dff6c2aa0f75140d1d248e2eb7ebef5b138c94818b111c36a7a4a813a700c953c16ea9df557e483d66fd0ab284946f1b13ca2151821473ea9d8800bfdf026fce3206ca684d57e263269be90cb320de142e12b7755733717be6ea3b0f43ab3ae0f162d13e0528159141be9c27ccf64a4c148c7969e722a69909de9eb5224ea117ead8aef06d738490d0fe086151df04f3171ce4b90bc927a6c7822183378c22edf9092e69d01a2077ac8b5a749202d2990981624705510ede497e5e0d7b49ba9a1be0a00531dc591fc71d9ca983fb3101087757e3234fe6f0f8e8329606ab5dfc1e9ab28eafee44a5d1ce607d2c2aeee900000000000000000000000000000000000000000000000000000000000000001557406b4c6f3991ac6f551c3b7030ba59fcc892f294af6bea70f20af6281d870000000000000000000000000000000000000000000000000000000000000000115dd36f55a60449c94f8253f52ca700aee8e7a2b601adc6fc33b819e939faa52f04011d9cf9c1364b4d4ed1968e1d747c8fe6a536cf147db21a21c7050453d202b13b741b6cfe047212487e0aac035e64f391768eadae178ee7b7c742d8256026222ece58fa102cc188a9e4a7db4c525d71394a6efe45ec142cb585a9389ba32ef03ec65e862d7f0c1051db3e2c99d98d3eb66031828046d0e2c2ff8f22013a26006c29ab6336f3a7d99f5bcdcfe64c7f4acfcf28aa656c74707b29215bbd4f172aef1e5226be896935ef19415c5819160d2c420c7cb9ed4a4adb911bf50f1716462dd482ba987f629b5568780f53443c194c0c8f1c0d77112cf0134a016c251c7b3d583c0db2fe048fa6e6864b42553d450ab8c49f374bcbc4d0adf88fff78146f2045542390ad3c3e464cc8873d21805ac82382bfde2c3b56a5b4a85d21e803208bdf7f35596a0475aac65fb826aa21bfa7fbffa68d64e003bf6ba5eb3ccf0f304044fe93fc4403f9d1808da4f997e4fe17221da4fb558278207c73e5e9171f4beb920d9c8e93b3a0c27800cfd719c832a3867210fe93a16a710a8a90a5640975f9f8fb0a58cfb46b1bd8979badb9de902712cd32e4b1f293eb26c93b9f5a0d25da0a93b33fb7ce447d0bab238983601ed1bee6ca4e879dbe818a83b0c44828a2ca1732fc06155f57bd464a95a57a8c90fff20d93f5a888c0212d0a019342114995aa9a3cb6217d246bc98faeec3d0e1da754fd7e997cf7b71fa7afe5cd4a2193f02576d7d5154237e1e99df6984039acbd6cfa3ee4a50d0b560b5c5ecebb2134760779592c5981d90556e5af9e28553e7776b705272a61dbe9dadb1c8b70174aec71d4083f6ced0a4eab263bb9ddfcd02e72343fe645c240ee84454d8cef142acd673f19998cd5dcf8f29134cdc27596e125124252fdfa789322679847b811b8188ac87a9764a2155327ed4e2416196e613745b3f32346908f4dd26c7af40cd96e1f59743b0d9ed201b9451c8738ae4a3e87937b1ea0a3526f926e1b2f100b35792493c4119421eb5a92e9b4569af7bd185a986346ef9c2f465decb9863e2a07214cd8d9ef429d640827489bb85313e1f2c1b088edd6becd9d8c18d9482d2d8c429a5832cf75b5d84b558ffbbc4da56b2d1fb846c6979fed0b90567eb0f519b46c6d846eb9a41aab98a080186c171ba4449322f7ef2f88594d43870f4b3a03de2ef2becd551fba01f47b0e401c143d852e36583ff8a5840f25600a22258629a5aa218809e2efda76356867c9fcb203378e36c77a98136add28afadc18e8c267580b4cb36403d83199ab3a6b9ae0522a7f7534bfa630db31d5d949283470322a0cb091d435d06ec3d5106d4cc582176f6967895179c699e390f7af583d743055099a696a36c757d3789a3cd1ac3518bc094bdc024562a6b73acc18a44403d21d3f4061ecef250a514e826d105c9e3e1a9e9c6939eb86288a76b354706ead1049db5e821dfcdba2e6f98519f4a97297c4d1d983ce201d345bb2c1f62fe555f13485fe01fe0b428d582fe3150c5c3a6824426ea9c93e35ec21128a5fd9e751e01d3f658c304546359e53caae08eb49cf1e45ec96c9283d1b661e49a5c99c2ff1317e67fea5c60b393236e97ec064130c4d6a5ae48339a54f52a1549a3bda1fc06c5f17b8ba6c246f4ce07833991dd4e3396e76d39a23b38c01d355468057bed21d3f4061ecef250a514e826d105c9e3e1a9e9c6939eb86288a76b354706ead105ae53840b9806c97d4363c6be15d267eedbdfebcf3a807cffaade314b7605fc0607a3e41154b15d83d2f1148dcd9243d74ba339cfe25a7fcfc43bcf1ec25e171030621a355600ead588590c3f6bf52ca14cc74f349902a2e9aec99801c79913116ec6cc82016424f4d23967cc0aa323c64ed89378068f5c126625f820a17e9f1c61b580eeaace7e4c234ba0a2c7544869eadd43449fa1642e44b5d293cbb8e71839b28e9ccadd2b9d878fa64e63e888991d07e8a79dc69f7cbdb10b1c82138929b5e550cb55e3922917b222a612114fc647764cc018d995af240c14baaa637d', 'transcript_type': 'EVM'}\n",
"Time gen prf: 4.350332260131836 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",
"print(\"Theory output: \", theory_output)\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": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"211.75"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Verifier verifies\n",
"verifier_verify(proof_path, settings_path, vk_path, selected_columns, commitment_maps)"
]
},
{
"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
}