mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-09 13:38:02 -05:00
304 lines
21 KiB
Plaintext
304 lines
21 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Requirement already satisfied: ezkl==5.0.8 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 1)) (5.0.8)\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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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.1 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": 18,
|
|
"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": 19,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../core.py"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"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",
|
|
"comb_data_path = os.path.join('prover/comb_data.json')"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"======================= ZK-STATS FLOW ======================="
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"data_path = os.path.join('data.json')\n",
|
|
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
|
|
"\n",
|
|
"f_raw_input = open(data_path, \"r\")\n",
|
|
"data = json.loads(f_raw_input.read())[\"input_data\"][0]\n",
|
|
"data_tensor = torch.reshape(torch.tensor(data),(1, len(data), 1))\n",
|
|
"\n",
|
|
"# dummy data for data consumer: make the bound approx same as real data\n",
|
|
"dummy_data = np.round(np.random.uniform(1,10,len(data)),1)\n",
|
|
"json.dump({\"input_data\":[dummy_data.tolist()]}, open(dummy_data_path, 'w'))\n",
|
|
"\n",
|
|
"dummy_data_tensor = torch.reshape(torch.tensor(dummy_data), (1, len(dummy_data),1 ))\n",
|
|
"dummy_theory_output = torch.var(dummy_data_tensor, correction = 0)\n",
|
|
"dummy_data_mean = torch.mean(dummy_data_tensor)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"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(verifier_model, verifier_model_path, [dummy_data_path])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"theory output: tensor(211.8691)\n",
|
|
"==== Generate & Calibrate Setting ====\n",
|
|
"scale: default\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\":1,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":1520,\"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\":\"5.0.8\",\"num_blinding_factors\":null}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Prover/ data owner side\n",
|
|
"theory_output = torch.var(data_tensor, correction = 0)\n",
|
|
"data_mean = torch.mean(data_tensor)\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], comb_data_path, prover_model,prover_model_path, \"default\", \"resources\", settings_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"==== setting up ezkl ====\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"spawning module 0\n",
|
|
"spawning module 2\n",
|
|
"spawning module 0\n",
|
|
"spawning module 2\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Time setup: 3.156574010848999 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': '2b91f6cc04b7748870360f1aba41a1dab6f90110248926c936415704e50e396104b0c64d15c1a9f278acfdda7c0c088270e863c0bd7bb575c09e2b771727fd7e174ad1f548e78319b7c78a49a8315deaada9ce84038be856cf90c350a4ee92f517ce2bd555c800ffc95e574b379f677ed6d62435654fd58a54434bef043429620990be871a03ce71aafddc4f047aef14bdc77be87473cefb2caf6538845c20060b8f8ff0e7cc5ecb9d967c204aaf13d92a86f35527abc2868f1f0bfee4f3c0cb1b3e28eefeee3f1c3d3d817ca7359d378d6bb1aaef6b57d6d4537322d7d772bb220e2a2a95ad15e910e34ed5866efab9afaf635aebaf121ce63fa0302f398a262d6071c67b783c465296530978cda00d421ec454ecb50152eca1f68c06f3a3a207ce4694881127b1a542954bc959273656e299a7fdd9b4b56c00acb888c3cc5b272ab4fb1d9022c2e9583b49939fcd4b7eae62f99ec70e3cea1eb477d949158d0c2756cddca833a96e24fb5edc2091f1592bb574b5b1d09b740530b152e32373281d6bf0c4f7413fe786410bd96d5eb27b4eebd12a00163fb19e3cc763f6af1012b5c71136c79acde2997608774ea110d86bce04e23a5c06259bc055726a49f50ebaf320c6e4cb0349ecc6f755cc4d09e29dd54ff3b3d5acc6dc046e25f2e30a215d3405ad6dcab3e31140e93dcc2d2ecc1c81fa8e1a59dafc94d4a8a2ba51a6098b3fef950bf8837692c13b2f9e160d7e9ca4fc1d02d8b0ff4dfc41e5e7ba2a0ef7350d76e7d81bcbdcb715fb3740bdea312e6b71f30dabd3ffcf90b894b2d12187976b1890519714f43b1b7b96ef4265b6b5a4ed32e0a76ed90ad1090b45cb0bf7479336f1e00b63bf051f47209b0f638356177388012948f6952ace5965c92d575b7d3586008392bc69d487ce90ad9dbc91333e57fcccb0d43cbbd6b1de3a1858d7a0c9ca0ed893a0a08170945f225ca67783702bdc867578ef711b5c20831d41265447aa983cd20648d2a8d89d73f774c54998dd00abde043046706754471224164fc828c505ff4732f780c29b46a60cf908ca4aede86588773d9450f959247e0fcc83e61527d6e51f27323449666d4f74250f52162d81cd1ceef92bc40a2d78fb88e378978cc6d03d6ac95d5b75d857e79af2baf19360bf831a7f8c62f024946516e6f31ac245f816652bffa56332615b1a3581bfb90f3c874b53c51e0622e87c71f8ce9a3a0381899246f36a3559e53694598984a1ba3332a35c2a421526658c5c8814ede358860d47a9c0675ba454084d1e3a7228b2c97a879c083aaf29cb2aa03f8af2a92250d48be2fbe643cff140db6ac16e1276ef6881f2d05eb30a29cf6d7097e89b91d1b08eb889e02d6391f31dbdde632aa8072141ef3c93b708c9bfe92d269438818aed270ecc79ff300756e6ff952f7f21376849198b20f0015166ea2689dbc03808fae76d72c8810b5c1bee032c1f5db8719176bbdb6cc517983f21e3296f32d144c924fc7f77bdd040b5be45c121f0791609066aa4f83624d94f6102554ff42df575ce14f61225c1d60e97cff179f8ccfafbf41d869fba06b36f6e55be96bc2ec2507906f850d2cb66f171c84f7f8dc8506ef8a3c3df5904af9ce96588482eabb8ac4cbcd63771f1881db8a14bb62ec22b687b2d0c12492c4c814966e53037d9e11f90bd200443055e317d19c989cdd0f20fa4db02981e02cc291e3bc5747c23981d0e9fb7f3eaa772476f91fb9ff6aa8ede5197e7990918d7c70d159e8e19c7895db4bb919591fbb004b72a1c1a8d25b5dc7d4af352e80a1bb46223ba9e73970de096c37db5c3ce482d3fca79d7d299cc5f65ad12e7e12688781d6d52810f94848aee7d550f0a1633e918c51478e4fa78cd005d5379e21e91a5cbd6950a739d75742d95fd3253d1fb6f6fdfc6903290c3aed259c8ec982fb03099bf8c73c96eb1cf8fdd94fbda6076b9eec175310a323681ae89384a95210de6d650de6817aa18884a08a7666860c5ad28099fdc3e56f9ad9b731a6d1307aee4704523bd4a02ebb9665eb6709d1a0b1ef90b5e4884ff94f4947a4e4078183ca8472a3504d8a4f051907ba0ab9dde9bf3bb6e27da07d79859759ac68c9a1346d6831dc17877fc2203878545f4e9dfa52837ee10475476e6ac80f690a08812a57443c1aac2f17aab3864e8bc8169a96703896e51f885cf508118bcfe308d1afdef9a68e6495f4a8064faf07facd74f5384ab9666b7a01dc9aed3a71bf3800fec475def14efbd34bf365d1d111c0384b24dab402a1efe0d5d93d446fbfeae181f636c05d17127b71ea2f13d3734076847cd79ca698298b23e7b14671a0ce009ee617d02c52218a7a87afb59914237788e6314fdecf1e5e214705ebdc9fbb2211efbcf3cb7e1f7c18899bab5ce47a4e9fb94a8a6107088ef1035f9f53f337a2a49bab11cbfaf77fec121c528895015134fc5ded7f3a40fe9d111d08a1500db13ed8820eeb749742f4d903dbd4d2bf9ac0bbc240308dfe4c410ca10a4c65e5c22080358392f35a7b1a52bc2299dd6153fa60894b1dc60d503e95afaad09235f0d570327063b2ea3c3eefbf55bb84a5b00ce902508054fba9df925af30639c562be7d16ae153d758bab9453ac70ec8e4f43d88a795d1a3c5f54f5ecc5484813927d8cf8ff69d5d20517f6e4214d08c650549ae70bb9f20a5b7a2eca07737c2c4014f19fbf0904d77e79f98a6c1fb109ec52e5983b1a90e25a6db7b41a63168e30e527b92e8a0712944e0c026ffc934cfdb900c12232ea8d6627c9d2ee1ad08332dc05c8db9a53b305edd9a6beb92c81cab807d85ceeb28e01e3806dfa15761a01d0796f70cda824a6097f99fd30b033eb0f46d4aaa3d820bf4f14aa45b983721193d30401ec34201ebf32af73e2ee191355085614d12b036df827f0e09dcdaf5032f4db27d56336c43ad8498176f2df376df9ca97ff870f58fb716762d338a6508f3931c7c1b0d2918ac0b4614a9dd87e3f418bbd0b13203c65ca7452143672f034ef3bc74035ac19affab1bf4effc59e8833b79dbc514e49d2cf9d00206ddbc029812e8ae1706ef6a7f10d3df731b9d754a2491f3bc9652a07e077d6c7852f31145c25d058bc2a5d6a16ff23ab0359d1e374f8a9e6d97502c14454b02bf80a21165eef9c268f9fda69a85f632c60053842735fb65825a0ad4b5d13530317189173afeb7cd2af00a5c412bfb3a751e8f42df05dd791bf98dd4c12dfb0fc1357e00f3f64d89db1dff4d231bf971daa071a53a0fb1d0e6b3f7f39e6f961056457a2d17e501e257e8be55ea8e322523cdff96d1175f1c77bdcea14d34295f6707680a6f97ba41a47c59f03c022c672f17eff6f04a1e39c7171fe15c6e185a4edac606eebb44fd9e558ccdbff8920dad72447fde59827ca472dbfb818de03ccaa6b01bdde4f1d78102a41199a2bce673e1cfc754a8733657a5ab12430a0a73a4762403961c1063c4f047dad488de14c9077f5a3b649ccb4243dc414928af879db36f12f8aca50385d100306f845fd253406dd869cb4d3cc19586c2a01932943a314526a5ae28a99d789a67cdeb71e94b791094bf16bec66d4302f7c2b1b56948751905aab2d172f077a6ca95140c7366dbf47d0a83482d75ec4d2d03d9db65657ded1f900596d06f13629f8629a1ad9b27724af853530e669c39cdb7879dc624828a118b4f95122fb4faaca13061e9b8692ae3284b866a79b49275b7004633483cbb213294a20b844864d1a3afa59545dd107c05dfa0fb1f80a74a7fd07bf873c3ae241e10c408ed7c8455d006cbf4aedc90a388fd37b9fd1ba48d4c217648fceeed294e586a87a85930a88856429cd72acd68f25112f1aabc9d715650ce565901102e06cabb48780c652444d5004ef258194b7b8a590519b2aa2427df14e730df5f1de8f76a349ae497aa0d610a4ebc51fbe0518314a356f1c19b81ee240d81c6eb1d0b03e262210705de936c862314c87826d11945cc9af1991fefc6143ba91c2d0a147b03db8725be73270886c715511709781dc06eb365018de1028758d377e22d20dbc005b86361b1ab0c2ac16f510c741bd35553b7e43d49b1c6946faf3e1718737db34868cd30382aef8605f69401ac023f5242f1782b4e994bbe2d06fc012c79189d3dd1def9bcdd00b465d772082c7ce0a3b1e30cfcb2147ec891b808ce', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 5.109364986419678 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",
|
|
"verifier_setup(verifier_model_path, verifier_compiled_model_path, settings_path, srs_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, comb_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path, srs_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"num_inputs: 1\n",
|
|
"prf instances: [[[12907834141446617622, 16863260785082668294, 2215826187815521673, 2191547160659437828], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [988086122984763008, 8331390676852675036, 9456440076381036992, 2639995154681636326]]]\n",
|
|
"proof boolean: 1.0\n",
|
|
"proof result 1 : 211.75\n",
|
|
"verified\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Verifier verifies\n",
|
|
"verifier_verify(proof_path, settings_path, vk_path, srs_path)"
|
|
]
|
|
},
|
|
{
|
|
"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
|
|
}
|