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

334 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 /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
"Requirement already satisfied: torch in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 2)) (2.1.1)\n",
"Requirement already satisfied: requests in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
"Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 4)) (1.11.4)\n",
"Requirement already satisfied: numpy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 5)) (1.26.2)\n",
"Requirement already satisfied: matplotlib in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
"Requirement already satisfied: statistics in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
"Requirement already satisfied: onnx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
"Requirement already satisfied: filelock in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
"Requirement already satisfied: sympy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
"Requirement already satisfied: jinja2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.2)\n",
"Requirement already satisfied: networkx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n",
"Requirement already satisfied: fsspec in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.10.0)\n",
"Requirement already satisfied: typing-extensions in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.8.0)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from requests->-r ../../requirements.txt (line 3)) (2023.11.17)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.1.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n",
"Requirement already satisfied: contourpy>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n",
"Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
"Requirement already satisfied: pyparsing>=2.3.1 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n",
"Requirement already satisfied: pillow>=8 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.1.0)\n",
"Requirement already satisfied: kiwisolver>=1.3.1 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n",
"Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n",
"Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.45.1)\n",
"Requirement already satisfied: docutils>=0.3 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n",
"Requirement already satisfied: protobuf>=3.20.2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.1)\n",
"Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.3)\n",
"Requirement already satisfied: mpmath>=0.19 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n",
"\u001b[33mWARNING: You are using pip version 21.2.3; however, version 23.3.2 is available.\n",
"You should consider upgrading via the '/usr/local/bin/python3 -m pip install --upgrade pip' command.\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": 6,
"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 = 1)\n",
"dummy_data_mean = torch.mean(dummy_data_tensor)\n",
"theory_output = torch.var(data_tensor, correction = 1)\n",
"data_mean = torch.mean(data_tensor)"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": [
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/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]-1))<=torch.abs(0.01*self.w*(X.size()[1]-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(212.5777)\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",
" # w represents mean in this case\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]-1))<=torch.abs(0.01*self.w*(X.size()[1]-1)),x_mean_cons ),self.w)\n",
"\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.455188035964966 seconds\n",
"=======================================\n",
"Theory output: tensor(212.5777)\n",
"!@# compiled_model exists? True\n",
"!@# compiled_model exists? True\n",
"==== Generating Witness ====\n",
"witness boolean: 1.0\n",
"witness result 1 : 212.5\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], [14958435514946940528, 17320992765071788231, 18318297740500540397, 2188255106962760522]]], 'proof': '0b562aca073a5a971ff0dd678691c855b68e64d5e16cdc634b34cbacf9d45fac2d1acee07c3f84bb6a6eee25f3ef86fe8e219436a6436491610a2d8219133841205b101dd435bd36cd07a8964959e81da2e6cbe544bb10c3a091dc76389928002db35b4ba178f74f615698252c252b4d93355897b1935fc344af2987cc7e67b41e5a3d0f076c1f8f0298fc2be6e20c285a053bd816aa767d3d612fc0acfa49042e6ed950ad63e0b9dcbb8b94a97077ddb25d3c33ef73b20fe1fac08375f9a0c323d9eda4316a2ffdaaf189d1b32c52c81bdc6d29fdd5871d81b1433418849f7613a74ef2de4464cf7165bab063a0c973e44d6affb151ee46ea19a44b5ea0c7612d834714ddc775d697c5417dfc165ef6070aaa9a1bf77250478112264f88fa1c21b219b804d30420f4b9b2ad67a1151e6293343e3776383ad5715446ef4591040de90462a7589a0ad1c556c55152576fbc3f68aeabbd82fbd128e64e77d4a9982944d57a419767b0874dddc0c0e6cc77e66d4cbeced08222c5f921f261ba631a1ea6e253694a643fe8fb6f2fb98f0b000f22f47aefa5230d82364b7078cdd6ca02552386ff5e6a47dd9bf6faa90e285fd28d850be9654ac71d81530db54d88f00fa620848b4b961f2c9b1ca2be01bb5ebe80fa76c0ced47594126b1081bf837a17c46c9799680c027c5f5bef34b0be12c5074be1121e7d4baadd35ec9ff890db1c3b0f7808665e3d5d72ef2e521d1b175a9e20fcde28ed7c19660f1e5b44d0232ee5620ed08c2d5d78f7f295b5b4a38ba9abb19fb33a43d0058e1772bcb02bab00577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f9118281d6bf0c4f7413fe786410bd96d5eb27b4eebd12a00163fb19e3cc763f6af1012b5c71136c79acde2997608774ea110d86bce04e23a5c06259bc055726a49f500577c5dc7510b687fd03b40c8718ca1b8a1330daa170d56349c5a79de6d10f90593096b71407e34ff579ee7b86792ea873f58f24933247328a34c3e0d1f91180ebaf320c6e4cb0349ecc6f755cc4d09e29dd54ff3b3d5acc6dc046e25f2e30a215d3405ad6dcab3e31140e93dcc2d2ecc1c81fa8e1a59dafc94d4a8a2ba51a62e6f7776ac91c1df263af84596ff07006f87274ebe91a30381527c9ec947076d01744243549ad0c63cd21191ecd33868187e8305584fde64ae5db93055b5e1822866cf11ae790aaac294b1b0ed20258eb2dcb42737a4c82a90d5b3e2df1609c60d5e374dc7b2f7fa7f838788f42226edb6fd3ffcb8186cc3d578eb07ef3355041178e20d0cba11578beaea41c91c7bcba1964772610b3e4434938e0571ff4a8c09908d008edcb548ef9e1b496427d61494bcbd68b1a36ba9ed82bfdbd2ce3e6c16f8d1e97093c8f388b5e56cee46b6df1135fed9ec674c9979e66c89bea0bf341129e204fac4874c0faa09c8b94135cd10313a76c8b748af28149903d3ef43052d5bac27c8849b61cb9257b6272979354276b26c5cd91bd29d73e8f47ccb93c70e11dfe20e510946cedd97aa829a9c538c7d89358a9bbcb64daad76f0e061f962b67ea67345d49afe2dd3b2d54af0ccdf6168680d0bf8166d6159aa0a284d9cb10f463e1b7fac15b40e283cbeb270d600a17246c5fd0370734a5ac90ad2ff7f91c3976b9d591c9b2127eec2894ef9de6f75d93e43e38023edf98e44e5b94e14a2b229417b93c0f43997914964b3d36adec7d9929eac0c5bc673a8e57a395a0d816370a4b3a26235f18a7facb4ba661d72cdb2be7af635a6ce9dc7197c616613f26b4990feee91c08f8aa45c1b67755dafdf3b91dde17b8f409bc21f98f3e1cbf249c06f672a37a5e2795fc3327d418d731eaa0fc7ca4d87f1d05b97bc556605b16c01af57c9a79bfe59ff7a4350c109e225d65ebf2541b8b76be2a5436d086b402d7ac2cf277a41d1c39e08ebf6029e283cdcb45adf745e5203de0b06f48b29a1fbe2e29246b945e339193660b350255addf2354de99766893ad0a321549f1711e25f50dcdfc07cce9b9b0505292971b286f9ad65b9fbb78ab208a2ed09a59bf07b984a8a61593b3d7789726a41d7e5ba6423ec32cf4f10701613aa0effa7a6c18585c9251182f92051e5c61c071965207107e3bb744be56108ef096fbd6d9172abd1c2321b9ce1bb72183f6e0a0946b81089c3275f3a662b37ee730483706c50a926c0804f8a4f0fc7500e40399b7e9028c5128fbf6721e49059318eece234e2430313df413d3b787348a115e3fd6cfda976697112f4a79a2e3beee5f0fc5ef0a35e494355c992018def876f92befa3db83d2513a03a92f2a5d9a9c0ee9b1f208e56c34cf3f71eb7576f09901fbd6c3f9a58b73f259b98917c39a80486c398c2e6515ff1f7645c718f90231911d547e6bc68d787431e18d19201221eff26d700e1c8536810415c2dc8e66b6bad77b17bdcdb0a08147ede6a53c847c436d91400caafeee13bcbd300aa6ab1aca453b02ede8746dc35762f0d59d1e823ebbf1110a97f10dcd7747d46f23e0723403292c38b374a9f2155fb0884adb089fc99ae11f7d06038adfa0f101894d9a600f4e207ee1e01263f193da372c87843471c1fb23139efd8e55d6dd0e59ab349a97d378c2b2582bfc89adfb1480855c273bf0c52904218f54e7fca802daf6b3bc60098f9a6112d7a88dec155b3d5f8dba19d9b619f896b672265ac0393c25f09bf006347ee23fea4b1a3add65bd149b865b648c27352a41d497dabb239e4b0fbb1f714a661c19dd71be830d39194bf19c9506221a82ef855897b5fb45cff2b858c5ba6d4da8e986a7095e042d867af6f11c505d2c2ef2f5dbb284780a28b5631d6adabd8d98f884365ce0356b69e23f5590f661172e56afb6c5153e9cbff345134e41e98fd1a1335a497c495335320e0cff294119e1eee46d6a158ea7b8d69cb37347c8b62e07fc4ba9959156a6b8186f18b2d81d12ad0dbbd6a621d3bcf34494a77181ded3287e8e815c88e86afecc000ec9060d223fa6ff34c6f51be989fd922506c3272bb6fe69807db1c73a7950256f0c082c8229455325dbc8a9c3c13e3cdec1cc0667564b7c9d0889b445f157fcc197b12d134f032759b4f38328f350ac992ac0ccafafa8771b09ac08c927503f60176e03af83c27f49c5f2f50e54e17ccb0ab6d14f138cf366d2136b9e997af91c66c801bc30a2c02e37db117fe4f71b633cf6526b4a73af7ffdfefa23f6fcca393a0322a27926c2df0cc2a08c8abfaa2f0f3cb8759cf9441af4cb5ef64b5cd7886a1700000000000000000000000000000000000000000000000000000000000000002f4c56c5718cd2d10c1c9ad8260edf435c5cf365d3357c91580f3148cd2d5d8400000000000000000000000000000000000000000000000000000000000000001c85712e984123546266e9ae232291c04aa734b86939316f66d7b254b60fdfa42e02f4f7911731b395054f9aa4c56523eb2dac10463b4aed4d0fc80b3a617da20f4256f489ccf5f72a18d0cc661678a67260435654a3f6118425624b055fa1d31b78219d45424003b1641b742da047caddfd710dc422ca54c7352ebbd9d04f522c129836e53973ac617b3ef7389e0fb44993f31fbc8e72f20cda97277a0db20b10ad1c93baf251799d2735f473d152f1015e777297deb06d55cec0c263a32e5e2f07fd4c3f66da2a3f9953a07615667c75b881adb38f858eb320bc12a029c6242e56070fbcf2f1d03177162a0b8ad852c2c288dd63faf2468a60254ac677edae00842921cc1d7991d30f176b0073850663b32364b72e2fdf71729889c7b16a2d0a16533220bf434bca748b679bd4efc3c4b5fef0d0f9a80bcf6ae9fd91da61801f1e6961f500e353127ece0b57bd9f8990109feeab916494d2b9b97cbb3c451f2b42539385528218decd4aa909454f5ad0d8a64e6bf4799914aacd71788ecb491fd16c2c068c3d4c1d7c13a437b3f968080f11902e3fa7bc7241c1ea1bfcd4f107cf6befd8f94ef71db7bfa72a6fcd8268097d19583abe2ed5f4234bbc55916f25a6ce40750e9f3beffe24fc779e5ce162aac6b7835a0e85b7d6df80c204bb140c56120747c441da8a753fd056298ccbbe65b21211f8fceb0e7af97c91565ff72c28c92887c3b3c59bfd19bbb766e8e8e402a2dec3fc7f91e49ae39f6fd37832225ee4f2881d4e7235a57d4f0cc0c6ae5e2f140435c6d8c9e1fa2dedd232fb0e2d19b3c02f2841df7557ea266d2842274b73c740f9c2a359cda6558ba766142b19da5f4efe1cc0adbcc0541ce4731f839f805b14af60d6f7143d9ee7e91c32d01b21eed81d54556b28de7a390decee2a5c0ba15b1ec06723ae7257306aab69390d46e17145e63a40493124c9f65665c0346c1a66882cb49dea033fccb3d144622ea8f85e188adb2561f05450bfa124d4ce4225fd26459103b60edeb0a39c0386079ccef70f5a00bfdea344020a43f0075f0177ba50c1fbdbab0420197f9691f70603ca4dbd7e24c373843fa522c4105073303ba97ee4e57504e80cf6a6910beb1bf105d8fc45f28b9129b23cce2b744791a14b71a8cd1409915cdeae6b09ba7013eaa26d06af7a24c0d8943d2d44f4e94e4758ead37e44e8bf460df743ecfa2424408a0da69ef2c74158595dec9c2d69de2a18dc17828e8b49e809f85466e699085fb10c18310247805e931642dc378ebc82767cdc87e6b23d60482d466581dd24099ea09085eb87a8bd18ccc001995a64fc24a2d1a4f9b1dd5f9adc8a3526180e0beb33156f6bff20ac687d6b16bf6c12a5f719b7bfc76e9dc423c572b1d3ff0582681e3b79596d39e93a4fa8558ea56c2af4f8ba7b943d21c79b8183048b101b78bb22df51c8917a533ac35993b830c153ad8901293ac5914d9e45d314950f0188e0af4b1315ebf227ae71171cb1417ee6287f78a0d97b8664c7ab4fa124b11036a33304d85d3a7636ce8ca5ab5ff649371f6db207061eba9c936fe4516b42055dfa78be8ddcfd00108b4e18d878180499559975b09153791f0b2e90debe66096320b336641ffb3489844620143ab032b67f523b285f1d7b8ac1d2be0e6f9d2564b774a449517410376e6e5b2b4317a47ad76755bd248e6af51e752cd027611b78bb22df51c8917a533ac35993b830c153ad8901293ac5914d9e45d314950f24cb25b1d5f8166ac654765eb74dd1b93b2eb4849bac168f534327bd926ab77d1c7b9c1c5e7a577590dfe87dded61125d01140f678117a7bc4ec230f7f1d8b480c95e46d83b26745a81129a8fb3b722984978d3711ee3e3c07b400537344437a25d875d71db9b459366043300e36d85dc9abd59fccf746c7b3855e083ae54ba4167533486c9d87edf9aa3e3e2ddf2fcd946381734e3f1402f928a9f9027ce2ca037c191ee18259dbd5db0b053562044f97cd6d9eabdf8f9e5e9e223de3f2debc0853a270e3b11c00687ff0d1333780447b4107059b883fc92703574900200c45', 'transcript_type': 'EVM'}\n",
"Time gen prf: 4.567595958709717 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": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"num_inputs: 1\n",
"prf instances: [[[12907834141446617622, 16863260785082668294, 2215826187815521673, 2191547160659437828], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [14958435514946940528, 17320992765071788231, 18318297740500540397, 2188255106962760522]]]\n",
"proof boolean: 1.0\n",
"proof result 1 : 212.5\n",
"verified\n"
]
}
],
"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.10.0"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}