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

332 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.sqrt(torch.var(dummy_data_tensor, correction = 0))\n",
"dummy_data_mean = torch.mean(dummy_data_tensor)\n",
"theory_output = torch.sqrt(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",
" 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",
" # since we square\n",
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*self.w*X.size()[1])<=torch.abs(0.02*self.w*self.w*X.size()[1]),x_mean_cons ),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(14.5557)\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\":[-40670,8],\"logrows\":16,\"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",
" # since we square\n",
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*self.w*X.size()[1])<=torch.abs(0.02*self.w*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: 6.7214109897613525 seconds\n",
"=======================================\n",
"Theory output: tensor(14.5557)\n",
"==== Generating Witness ====\n",
"witness boolean: 1.0\n",
"witness result 1 : 14.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], [15846044116984004302, 17434658319873045084, 12685703199754313893, 2889686633444970017]]], 'proof': '1d228f3a6465192abe2e43777fc0ae41e0d309c3934336e6233b30d1007b7af307e6521d40dc611e4445cc380f5c695ad1eefe604440deca2c8975c32423127e043315736eb068a11eed3ca64fd57921ebbcd7b2e73c837b76fad7266b70185c0bc7b88431f5c76b34bb88f446aec0e46de76739b1108d059cacca5e4af1fa2f1164b434015826c5dc0fb589643d48720f9e50d960468d469542e4f8a59a3ea030032ebc3160ef9a09b6f880bed1b1530957b3be7ebd0a3872191b03dcac37ca10b12dbbaadb1ed9bf6400aa1cf7020b57a7c4f4cac7912a082f946c49257d871e46abbad2347ddcd3172edd8613d21bc758db434f8a7f0c2876a4205adac6c6251b2bb1985344ed931196da8a2ba0fb4ef25a35a42cfd1cb8e676aaae3295dd08c705f7517185b216cd719c71f8f2aa1b48b2af989a63aad995ec2015f19bab02c453749ce9c5885756b4626bed5c2eee3aab8b2a76769d48d875e370f6488a08914338188463736b8d07a1e99f6de9df6a38798a9656d3fa93a4f4d61382cc0a974e11ff7f9d7afcb549cd2f843c13db9901f1de4441a2d691b19aea4b47610a8377b10dac6ed91214ff559cb0a63f1c082081910347a85861e3dac6b6657a228ea76a913d323e3a2e191feda439ccd743b9adadf88e2562548782771f6b190afd0721667029a664a898cd957a5d0370b972e929d651d67b0d54fb5dc291cf0c023de0c1326b14aa4a127661dc5716ad7856fa6be58a6b6bb3b4f92fa5755700356ecb0de1c0aa1effbe87ff75b4c2e7f7d677fb39c9cd3e304ec4b8b3c52310923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412d2e783f88185bd88d8b3ec10dc2c87863b3660329a92e97638548d3edd3094016dad837f0a742b82b8da3d508a022bf9e0a35715bf136007b961f411d53389a10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4126608ba68ed7076c715b64d10b4430ecf5741f90f3659882916f93aabec2c90e15ca733c0be416d43597c731118a9b31ee5d57030018b499580eb29675dc71a60f9fdb414fccee239901d04657b1594f4d493329394a86c757c6797ad26ffe7f2a3c87171e68d706d5cda749229ac119359fe192ad72b2c4b6f499e9e74aa62a0a04896395bcf6b0524c25a53ab6868bf9c078b97a4aec720e936cb0bc57e07f2ebc937645fc4574e511c394d41a8ceeba732e4284c7e78bd3252702be88b36512ec8bc796364a45e0f432995a459213d33658df3189770b450813f4b775c9191e1772c1496509b9da0ee0199afcd30b02e0e3332c570e2f06c266d43d620f3a05a0da3ede38f2d9de5d051b94b2f43959b51345e7cfbf505a29b9b17051014c09960a67bb44545b1fadac84f9df4387554817dab9f69775d2174f7d7ce47a8225fc785c2c54b79b226d30b6b2f0ce84d4a3d81545fa1780b5426c357d5e203f0100c42d01fc9ae7f9f3d278a25855499f446785cfbc42cfc46a905cb72e5e062d1599c6078a121fbec390f4540f185bb3685444d73deb005b147fd3e40bee560cb6376947567446d4c7edfe19364ea9af3951695418cb4f43442efe3706fe841c1a495cf620d4ceff834f7aef01139361dccb70af1788b6e91313fc63ecf54e26e04958a936abe65ccf9c856faf2911dd7fcca43a6556e3cdcb28393e8ba7582137d757620fd8b39e9ad9db23d8aff21d5e7d6544ccd57ca4804ea6104927aa2dfac952348a1e974e4ae36279a68ef760b5eeb03111be4fd6538500411a92d512f46c220f33cd4a2ab3c0a7be2df25f8500c229887bbbcbc9078e04102e70160a315938acd6edcbee894a72ae98c4e880220058b861337790e50d0c4a78acdb08d1a40873efb3d94aef3dec26bf9369ca87579a267d874f08c76ac68f4174560e5746758804cdcaba8c4d570a2271e48f2e1d3ff6e6c415263b35f28e6d1cf41d01654b45f848add26c1ae810d72d15867793093c917ec9f2918df0ac010d4313bdd508480a4ca58b2e10bcf8c5b0f926d65d09f5393e7e21ef9d756b05748d05bc3f0c255c567b888bea68f5cba531330c53a520788b8d1adaac7efef9c3622a3dd4e8eecc3f7a5b25f390c7eae5ac0c8389aa7cb3bfdfd4a3fd8acd147c402ea5bea6b149725d784265543e3a505746fc4cabb39d6179eb96aa4645bdca0111a8c04bd85f012fa2df5c589e61e2afc416a43ea196755c71f5c46ecd04c90c1282fc1bff41cfc1027e6fe5b177d0ff171f38133cbabc8f04214f97dd3a34d416d75f5cf6b340cfb4616cb6785566eec281188d669f187e032636039ca7b0981ed3acfc219dc6573fbc74123587c37c1c29a050104881c94f5d81d27747061c167a23a611261e21fed34772b06082ffb815cf96b34c5d9737d0e7fc362306d225088b3e38ccec5c96ed85c3790f1dc17febc7ba9a821ed5e4429db8dbe67e2e2c28c96a7daa75c055d6a8d6678645fe312a295f7df6f3c61c58b13a3c6666182f6662a992e4d232e71c75e36d9ffffdd36ce918f35b05398f18ecc206f38d540629ae6ed924caa46dbd283ad10bd2dd1db198c7336692ae663338e1bafb249a150f4c9a66b978fbf849fbe562fbabd8dbbabbce6c5cbec2a81cfd297cc3ab190b58949df4a42d2803eea4e2c85c82aa1e9cf7b5555ce0653f0e7e18f1788f6a272c940b1fa31934194b4520fc2039760f16c5ad7573755c52d6d25ea60b544c1a42623ff9e0b39ef1d6aefbbb86be66b0dcd7e8376895ba7b14e03cfb6f800825ae2f97a0515886aa9dfb1824a990fe2054051801554378ff42c49bbc7d550e2097b1f68a3e4cc69b33751c275832149365734aa86eaf18bf07f532ede162f810c2ea7ead20932a6663deb4765ab085d46e1b7eaca283ef080103401379b56305837cb074a16cca5e7e6f90ad436a7ec3cf464c0c03f3c4b0260a6dcc5cc6660c5f099e1df3123e9b716a88f1c23d1dded00889fec3f207b721b9bbf1d168932530394381ae20474324f819eb7979effbeae9f948adc74cdacfd691160c98361675c034340a9543bb476467d277bdfc686e2fb0b0dd65062aef2bd2f6becde1205c132ea52ba2443b4e5da8137fae1807d62383e20b54bfa889a695c56ed9971826abdd0c483db890ba468c3a910586e777e036ce6c615247abee3918f155c32bd4dccb21c3609150c91636f8f2adaf3b3fc84de044b5a61de9abd1ca7d726400000000000000000000000000000000000000000000000000000000000000001dcd9062d092285b46aa02f806f73a27f8e860fa459578206c0ca50ecf2c464000000000000000000000000000000000000000000000000000000000000000001a1af53ec7e72c85c8ed80b0ba1eaa3f104f08e5ebe14525e298071a6c5d1c240b58878200416016ec267d1e9bfa13a032f356b8b3292269959f93260223abc02cf767754fe808a84928304ce32b1fe873f1b5f3b9bbf0e334fdbab930d86acf1f1dc8c5d29f42ff6173bdf6aaacccd895f3a0fdd136209d64e5a4333d1b80ec29e11f11ed0e1e9b5158d468be31096abad6d77fbf1638a687fcad12db99607028e363d00e1aa46804cc1c6f45a10b6b962e7d31968a912fb2145c91a6b5a7c5034895297b67132ecaa43069e46e94783b4ceaa1eecec9d125fffdfa9cb81c9a0878b6452da1899e6f62f256e5c899b055e4a29751b59c5cfaf4c4b3521fde8b053cd60043731b18e7bc80c205d6e39c472246795e7d6eaa4f2ff2ca597cded525f135aa36c5a784ca7d43f20a3fceee9cb5164cbf5ce28367bf50ee8576c369026645fe4e2861ff86a2dc60832fcc68fcff4613c6d880a9344e562071e7eefe26557cd5902623e8944af7848088e90aa6fbf48728cb8823bc7e0fa9ce7744d42c866a26d9a1243f17150614a281f71270c5d38d6e55aa4d24a04cd268cae71e09314b30fc51cc871efab0b35ff059498a0b7ca03bd601aef14401cf4b7d46bd052d5456ef1502e6e8d2add4733e0979a0de9f3ee2cb9c54f49573d3d0e2a26d2dd009bf6a1170f5aa43d0edc5bb0934b31bc764440030ea67cab328850d32400170f7ff31a6ea502a38de90b12a207ca6c16cce5afc92e1062067c965c05f25243ec02b4dd3a37d06a93b9d54fceb456c21efc41c1c2c707bd74530185d06c122d38f92856f6a629b51cd747fb151ecf9c968d02059f8fa813ece862ff756b6184341e7c22266dfd5ffd2739e4dd99135960bd47acf09e309318d062d6d7c261fa1049a0c31e89f007bf33e673c2e32ab98393a9f13036a0885e459ab9975da14fc28d187f30fefceb15f92ad32c338eb6fecf0335c21e80484ae4600eac15c18d8df7664b83ddeadb42cfd3daaf5697255ef9a0cc18d852d6715b1666dff13121bd0f7baedee0ee792cf3ba39e0d50693eaac3c626204dbdca4cebf1da5ca32c336790b1cbabe9f739fe2885874d614e9f10901c9e3a8ecb25b7a5e566f58514cce863bb7738feae95cf38658ef9ce588d7e9b7fe90a3fef839a70ae86656701f4999f6b93bf3c34f838b7e64f56c1a81139684913fa3b83932b49a38c5b282f1fd381c0bc818bf5575d03ff583f3cc1a75a956a6fbeb58d7963c5ef071ce526ae82b7a93d27f7b915da0e2165c85bf9330cce22d18b5889c327c3093df56b099ce751511d0d628c9882dada3d33e8f6a273f25aafe923fd5a7b419700e3011e75e6cbc29d4207dd647c35bd93cbf8f9b91689c3fe92285a7d93ef15782a131f019c8963645ddec951494019d286eb1fee7429efcfd789e259cdb578af22d21bdbc89ee82ab56377b1d4856d462015be0f87b1ecaed1f15d4b24e97b6f4a1f1c7514a6391c8db99ad12cbd384be19c05eb6de9b8f7bf5229b2f93af9bba1b606fe5ebd211f40137a31c67d5aa6f2d446811a698f347bd9255d3ed128376b130f27934a06909625a5f23902a861b89151590dc7f4c6ad94db8052063f78fc4e019b59a82b8acaaffb44c9c5f9bceb8d9bb02f74740ceff3c7975b12a517ba470ad1e896243e5716d94dcc6500eccbf0f0e5593848ffb1e7470f93be130ae01b1bdbc89ee82ab56377b1d4856d462015be0f87b1ecaed1f15d4b24e97b6f4a1f2341f9753f9a6a207d128d064cb27874dec5f961b14539930aa10dea348334340680344c8aca7caede36cf9145f2afb6df8c781a61b850c89aacbb025ffba97728c059b0f970b23d7c152dc149378ae2c6fa13dc4e7c49c268e44f41a7a2b56d005fb9efcb56909273de73d621a54b57e98b584a7d297b0fca343dce145be02708ae714f372dfdd244883a31ab6ca7b4d1bc6e82e097d6e7b95803cd6238b40b2ec7046164645bf4c45d75414438e81277114ab7e3b3dd4e609950e0dc797e8b2c1d1571766bdef773597ac5fa12c505e3580a96b600cc8346adad5ef61cc105', 'transcript_type': 'EVM'}\n",
"Time gen prf: 8.515859842300415 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": [
"14.5"
]
},
"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
}