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

327 lines
25 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.div(1.0,torch.mean(torch.div(1.0,dummy_data_tensor)))\n",
"theory_output = torch.div(1.0,torch.mean(torch.div(1.0,data_tensor)))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"scales = [6]\n",
"selected_columns = ['col_name']\n",
"commitment_maps = get_data_commitment_maps(data_path, scales)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Verifier/ data consumer side:\n",
"# since have division, scale must be very LARGE, cant use just 0\n",
"# So, we allow error rate to be 10% instead of 1%\n",
"class verifier_model(nn.Module):\n",
" def __init__(self):\n",
" super(verifier_model, self).__init__()\n",
" self.w = nn.Parameter(data = dummy_theory_output, requires_grad = False)\n",
"\n",
" def forward(self,X):\n",
" return (torch.abs((self.w*torch.sum(torch.div(1.0,X)))-X.size()[1])<=torch.abs(0.1*X.size()[1]), self.w)\n",
"\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(45.2144)\n",
"==== Generate & Calibrate Setting ====\n",
"scale: [6]\n",
"setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":6,\"param_scale\":6,\"scale_rebase_multiplier\":10,\"lookup_range\":[-184392,11264],\"logrows\":18,\"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\":911,\"total_const_size\":4,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,6],\"model_input_scales\":[6],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Recip\":{\"scale\":4096.0}},{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n"
]
}
],
"source": [
"# prover calculates settings, send to verifier\n",
"theory_output = torch.div(1.0,torch.mean(torch.div(1.0,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",
" # w represents mean in this case\n",
" self.w = nn.Parameter(data = theory_output, requires_grad = False)\n",
"\n",
" def forward(self,X):\n",
" return (torch.abs((self.w*torch.sum(torch.div(1.0,X)))-X.size()[1])<=torch.abs(0.1*X.size()[1]), 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: 24.54654574394226 seconds\n",
"=======================================\n",
"Theory output: tensor(45.2144)\n",
"==== Generating Witness ====\n",
"witness boolean: 1.0\n",
"witness result 1 : 45.21875\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': [[[11712583131456230033, 7998639690917952521, 17628064685104548320, 3364894255067083796], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [10409296726488761395, 15557203226960814343, 16692342436085548322, 2420882828764455196]]], 'proof': '05fb9004921a98327ee109bfafeda1fc0bf8273671f5358643a354019659693715c59afbd03dd94738a4d6671ac5513c68407779323622113abbab8ef405b8691f935bfde2e6812b4aa603d72fbd003be662e2003e575df155e231a0a380862b2242d7067bda04b5ed7ac58670f9af1e13bf7139cb5cecd780c88de90f7f0dc50c4b2693cf63f39e67eeff28ae2fd9e86f6a985ae815cc659716c4bf3c15abd626320383f4cfbcb37b22dcaa94ed35ec3bb4c66ff75f5aff2fd3f753450a346c268183a0e162e2b38d2a864fa503df1c201b6ccec0390d69cf7627f79fb60feb03467c186a0ccb639bb800a08db6ceae215db8d1bf1176262693e170caa362cc1eacae3599bc1efe545f8d804f8cd55a8aea39fc725b2da37aa3f6944dac3ea22d020b294232a38abedd5af487e8c952f0cb9050e0ca14488d6ef1982eb97a33280da1615d6cfacc7fdf69a4557020abbed91d69b2c343801a62efd00b60110d18a1bc7270ab9dcdd2d015321d23ca0ecf507ba563c7d5ee7a92af20c9d3805c19d732ca1799f923886de3eaff1eb00dd7ec109b4ae42ffa44dfe3e785d3e0d52251a439751e04e81391bae909180966b82f42603ae08e2772122ac42f22059a02188d155ce98f88335b8f9544dcf0e50fcb46b7ad517ac5f94ceaa6d7afab51123a913dd3eccad3fbe01195ad4aae3f85d92b2ce16f7f11fd008e04903bf1c30fcf95be935a5c41d52bf330c03f3dbb55b5595f368fc469ecfd7330335841760358e933c3f81434bd74441130aeb76a1baaefc8cab26819002e4b10383ca7f42e4a925ac8b888bda477f1a0bec17c60f7fd9deff90ef5b5da42cd19e5242dd02994f7111e94254d0fb69ca7112f8df35093369740610ec3f3ffa0c4df7206700cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee9112163c42b0dd51bedce73f85af391ae3f0b1009bb1f1068005f7d6b2d3336c4d11681f239fff806f28f7963123414727b5ea6eee5891263e73d16afe74af381502013e1d1f540e44d404230c3fc863f04db52683e5c3e5b46132f6269d29ba382c61bcef4397f1cc9304199f71408b068fef11763af91d203049893d984010b326a2ff9adc91c0cd928e6304a2519792034df055833af03767bb2944e410d8f01d5d36d43d7876918cacb5f1f07c75f06490b47b6e07631f727574444e064e540cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee910f11c5e96ae255f6a59998bfd19169612eb66d4d17ab20b82e3e84e3702bd0ac086616beacc3aed4640d91a051d747f7bed2f0f3f4c6d6c5e00e9298f3d20fa91ded1b48bc127b99654e066ec23145fbbdfde42a9d0afe34e8a6bdaab53f736b19a7c8b02b31356f477a1119cfaf18050803b5904a1b4d53c87a940244e73cd0208403327f890feb82325bd210cb95d85700a4a9f4308342464f58ed081180e21887190574e70805916e98f8b77e3981c391994219b2e49d16a9eba7ba29e72723413d26e633700268de5e009e74fcfa326548a01cf0bf09db8dd2f955b3cd2c02153ef7dcb2165319e718dac7f9e27ed647a57a42761410ee168c815f6c4924003310d8d0e29b16ae2e248afb19eabaf68e9a33a7ffb747254477efd77c597600283d6c1fa40ef0da29454af40ac71445fd0ee4d5d6db1aa13dfd5530b0606d0277a64f3a119ca52e21a31abeb40e2814de9a39de318ef987d7684e6cbf00ae0240159b6ac041ebbd44d6417a0a97bf2f318817ed10b96fa5759b906be4cc64220274148cd710937d2101d7a836882b77bbfcb3abfd22726ea35204e9632d06023042e8da77edf695d7740a06439f4821401bf851bcfdede6156779acb8bfd4030b9cde94e25732ad7bc4b5c8e815b34627bf83c57d352bbcd12443dbcabeae1fb208e4d9a6c2e240fddf55b935a32b185a7713847cb9dd347f98c474a744d61983aabe1d0752e28d0e3510232b7dadbeab020c8b9e424b239ed534b86c01131bd291bf1ff4937a43bb2ec8c02e50174867b7271d6da90dfed7e7a71b8fd1042e9491e7555e8d765a1b3ec0ed2dcbca634e5c68ef6baa449470674a1acd18f02e3ef38b3e15969b2a83a77c773e2fd921e65439da82550f6914739a6f42f27315b40026b8cf67da186448747aaf73ed22f40a54c7451cec0c51b735aa7a27960581bfa946f0945022cf3d3f90788c3c250afa60299a1d50f57c1bf3595f045e17129f38606c377a6bc8a25c052207dedcd6c58b452f2c80ef9fcde3b9dd129403bc31161e6dccd34bd7fc750248f80ab2a0ab5837a89e3611a46230328ac42529039057681b108e3efbb67670fff0e8de539a2e7645e251ce3fdbfb52234ce52f5cf0b5e65b708f595d60e5063c42326de8d14e96a53784bce7eafe567c931c1eb8f8aa76abf6f79e91bb550bee0c48095a3d5e28a8c0a9c8a200bc616b569c2634bf613e2b0f5d80740cd456842d9c50c63b41ec3c83de65db06da3aca8cd022fc164e41eb03ae735a99aea58093d1bce251a8b3a34a1d8a7fa6d14f365ff21c758add61e95c432d650abb4cc17b9a47f0ca5ec3dd2342951c5008de070a5e19b125c61d2e1d900c18090381a4c8be5ff66ac7d2716c904ceb3a2916c574f11a451e20aec85880a109df0e98e52871cde26e58e785dbdcf9fb2e46b4d73f5f25ea3e6a7cfb15e71d680ece5ef63e903afbf1a6b589d230a3dd92849cedc0ca23466f12d8d192987d395d9d08aab966821d7e761342b4018cfdcf6f1b9894c90f63502bed3110c94104a158f18cb91f3ec42563484515b353397b4c17a2c4ef0eca38a7ec870743db6ee3d966e77d546844cbf0af3156eeb547430932da7c131ff5a85dccfb57e170eb038fd18c7e3fd63b62e4ee94e76f05ae32f5f2999b76118d09d152195830e5bd1d41f187394b80ffbf7617d64c11904d8d8d1d706dee1e9ae9cc76cbe9b8b98ade3487605162b7879234ce2d8c06dd0b09bc615510db1b5e02fc62d606f312b97ebd1918dfcae4734f31978ffccca522b045dd4fdcee2ea26312a5da2218fcbff53ae7a4c4bb1f7e227364e19acd794d374b0c2d512c2f8d6c3dfcfc7457635b906b59fc00c4fbf9073111a25cd2e1b538fe250266071fb63baa0545b65a88fe2f5f7454b50ea6ca54cfd7df8f02d11dfc279f37c49b113ddf3e48ad163927a7f4e8d2034daff6ddb9665356d3dbc93f9d42a212b5e128b566a20a3622df56cf75fdfefc1d0a1339de9ebe662e2c0f9cf77aeb54d3f1247bc2e4c1817fb102aee9940fc99cabe0250b11db656117b8ee89242d2bad7b1d3b429f5f9cb029335199321a07bf727601ec37e8d84c28cb3758a4169fc5142d6d76c8b3347f18202f8d2747afdeabc08d576cbed01511dfe7c962fff359110d261af7fced55ffb80e5818922bea47ff35fc59ca5a9917245bd00aa6015f8a1b6c46b5d5b138796ade8398bfe18408541fb03e0a443e2ae6b43a9a681d50dd0a3555d6c6602e77e6eb73815e3b180848606ddd22fba9ca9415d1c30ba14a5017bbad917cffebaefb6caa7cc2670b47e667fb06387d759d6e72b742dff232450e1b016197861e8cc10058324333abf68c72b55061f2dfeede252aca2af191712b0eda5bead60dab6f74c48f2aa582e91e0590d9dac4b0c3dddbb03f7f28926a00000000000000000000000000000000000000000000000000000000000000000361d86e9cfd01760bdd5c83a9e7ed2701631f059ccbac7977ea856d8bff92390361d86e9cfd01760bdd5c83a9e7ed2701631f059ccbac7977ea856d8bff92391da001b34db03a0e3be258bad2d4c9054b9d51fc4c2dbe519addaff48c7e6593000000000000000000000000000000000000000000000000000000000000000028c098b867c126ebd298e1600775156ec875588232e509a5f6e89fdf6b1aa5f41f91c2057efa4a206f41f8cb323ba23d1f8ce94ee8301b56f09b82a7799a4b9f1385032eccf83ad53141fd67638c319e306a7123f036be28cfbc5b46905dd3b208ef4e02f9985dc8aa43c9d7a1e1f2f34ecc8926fe7659be629dd5e469684cd12e98391448b04e547e620b01749e077e91bad51a38d4836dd136c189f14f6c9c0000000000000000000000000000000000000000000000000000000000000000045da8694c3ff16229710f8ed344b982f71d72a3c363c1291d64f643c659a87904696265a9af61c1325026e68cecaf0720ef1aed7780ad2a707c3813d372fb471853a479251795b3919299130df40cb014b60887454c4b2e808aa11f9e809c911e49ff19b8409f93ae74585568ce03f7982c7c06d34e815219fa42a9472ad9930a6c7bca46f0d673731763970e0247c23fa31957c4b0f1c3944aa35aa0f101f70649f0066d607c6a84d4f0c8932b0d2cd007c71ad54936ccb2bfbba110c1fd2325b3be9ea1cbbd6319fa620d9e7e30c6abce6fecc5ebe6917dc1d7e0253c06d0201596fe287a61698e04406f876c0fcb8818a63b4f6950beefc6c08c73e800772c6b05006e82a3c72538568e21ca656d99d330dcdf66dc66e1ee5e2679a1b4b9075abf176de175cd0ae36e2b20ffbc944c90356942d32b62b0cc549fe7b9f3b40f2014c95288dd806f84f0f9eaa75fd34f95344bf36b0e1bbc0cfbfbb52168941c724f538d9c145daeeb98c4cdc08bb7d3af929007887a7ff3c55b6838fdf41e094ce893fe632b57a18f8695e56d2a5e6b4695f77199285f82b11dec68d1e8b6131e0be446b917cc9808b337776b2b01c5848b5f4cc3586d8018420c7e2b2ac70451be78e9e9ceda09761b2f38215db5b7f60f1988bb597de29deff4a29297cc0f14b8f4eec06a05e237e38feb806fb6b2f11126543d59ce5b51c9c7fa9eb9d015c5aa4219603591a6f5042ff4a4a80a392bbbbb040473add9692f2d6072472a0ce29027e31e72f13dd1bfbdb6d9a0e3ffb8cd8e7dfeca7453707f877dfa69d90cdf7bbd8c93db9330d6de85047e53eae07fa0c8f817029bbe22c907e28454ed14e0bca845d8e541afa75d0da0976d6851958b38397905af1c28d27ee2539b660a72563d48441098972c60f45be65f718c3173a339d745f4fb90f168806565f426dd573f3f151757cb5cb235dfa1ba8d6dc031c617a4642a16bc6c2862502b2914a3e3d5b641e4f49601b9509d99293c5ab85059d295206c0de4f0bae6dcb6c2016aa151aeae6a913d119d025f757c41b7b912ec64d4d83d6adeea68af2bd6e82ba9cd18e8a11bd82a53eadc2975b6a0a332c44cec8aa254ef39fb939e9b337a02c4f262af0cc534c27903509db6c045b0bdce9950034e89cd839d706ac82e5417c1dacaea292454bb0a400afb2b28d8f709aef9217c0e080f71b9cdf08c312810bcb3643051e126370be9f056bfb7ef41058b41d4319cb745072882976ba51c0f17e1904ec8002b6ca848aac2398297f97fb6fa314da73a5efefcf7bc6a7c8621f594f2562e6aafa74e296470c7e9701d58eb2fbd4f9fe6e0aa90bdb0673d3f1d21eff76db1485337caba0050885f32eec477650b84a85ae0d3c240cf19d2b31d62c39861a7883a535efe2eb736f74eea4c06af2274636bb65f41c59181c1132e0852fa03f179009be097c7c0b0615753d638ba2bd1cb068db2ddce0bdd4f2d0526d05a8c4143a8a6333f28e23a8b6d2d76e8cb4664d5db6cf5897788681f610b01dd4c0e9a08aa2d9e758dc8af7f9e0ba6a4f73eec12c2a53929a24d2b34951642e439e67a8d915d3bbc5af9a1d8ea25b3496d1174be8df575f5460acd768e285d63cfc1162412361d2584793351d2edf44c469a82fe59fd89907ea5952ec01ca1f385b812a466a037da72f17b01e64dcc06536f729ecc31a75d6fb49c5955176b67b05077863f965ccdbdd07817697d78e1c8832837454bc9ac1d46661ac90ffcf2ed2d99833f12cc404743fd46c5ec6a2cd527f1a783251fe068fd461fd40f17e1904ec8002b6ca848aac2398297f97fb6fa314da73a5efefcf7bc6a7c8620468d49b9ac2bcf72e4a09ebd470b91833ab8e90293620ddaed53a75b37a51e092de5a7d8728a17a218c40c08a1cd63c560c3743619e1558ba0c4cc2bc17dd210521c2380e2104d689041671b6d2b62e7e75b4c000086442a7bbdea57e864682806b028d3a51ad954d9f4785d4ac30791b20c4550ee506405d3b3c77eb9f9cf', 'transcript_type': 'EVM'}\n",
"Time gen prf: 34.77906394004822 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": [
"45.21875"
]
},
"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": []
},
{
"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
}