mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-08 05:04:07 -05:00
343 lines
25 KiB
Plaintext
343 lines
25 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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.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": 32,
|
|
"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": 33,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../zkstats/core.py"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"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": 35,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"data_path = os.path.join('data.json')\n",
|
|
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
|
|
"\n",
|
|
"data = np.array(json.loads(open(data_path, \"r\").read())['col_name'])\n",
|
|
"data_tensor = torch.reshape(torch.tensor(data),(1,-1, 1))\n",
|
|
"# remember that our create_dummy creates random numbers in range 1 - 30, so need to make sure this example the filter doesnt\n",
|
|
"# get filter out all data\n",
|
|
"create_dummy(data_path, dummy_data_path)\n",
|
|
"dummy_data = np.array(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",
|
|
"# # where(element > 20)\n",
|
|
"gt20_dummy_data_tensor = dummy_data_tensor[dummy_data_tensor > 20].reshape(1,-1,1)\n",
|
|
"dummy_theory_output = torch.mean(gt20_dummy_data_tensor)\n",
|
|
"\n",
|
|
"gt20_data_tensor = data_tensor[data_tensor > 20].reshape(1,-1,1)\n",
|
|
"theory_output = torch.mean(gt20_data_tensor)\n"
|
|
]
|
|
},
|
|
{
|
|
"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": 36,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Verifier/ data consumer side: send desired calculation\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",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" # where part\n",
|
|
" filter = (X>20)\n",
|
|
" num_fil_X = torch.sum(filter.double())\n",
|
|
" fil_X = torch.where(filter, X, 0.0)\n",
|
|
" return (torch.abs(torch.sum(fil_X)-num_fil_X*self.w)<=torch.abs(0.01*num_fil_X*self.w), 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": 37,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Theory_output: tensor(50.2196, dtype=torch.float64)\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\":[-154296,1206],\"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\":3318,\"total_const_size\":306,\"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\",{\"Div\":{\"denom\":100.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",
|
|
"gt30_data_tensor = data_tensor[data_tensor > 20].reshape(1,-1,1)\n",
|
|
"theory_output = torch.mean(gt30_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",
|
|
" # where part\n",
|
|
" filter = (X>20)\n",
|
|
" num_fil_X = torch.sum(filter.double())\n",
|
|
" fil_X = torch.where(filter, X, 0.0)\n",
|
|
"\n",
|
|
" return (torch.abs(torch.sum(fil_X)-num_fil_X*self.w)<=torch.abs(0.01*num_fil_X*self.w), 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": 38,
|
|
"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: 26.11175513267517 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(50.2196, dtype=torch.float64)\n",
|
|
"!@# compiled_model exists? False\n",
|
|
"!@# compiled_model exists? True\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 50.25\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': [[[12572659313263335624, 14443766455855958404, 432930639589567449, 1881177029071802301], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [2359119529189047257, 1186270854317446351, 12298916256516019502, 1116401204062057155]]], 'proof': '2fdcccf3147d0fd78981aacedc04a84fd5f85175fe3f82d29da419f241a79e622777e8afa6fb96db586ace343bfd30b3c714ef283afe03649b62428dcd461a9c0a51ac5443fbf47f630dfbf0097b0846d3ea8272662d047d14363e1becf379782e1fe34bbb01dbdda6fe850372f2f8760a8c8a9c0ef659f6ac9885a5b6e6a28005307dcdc7153f81dd80287f0cad008d5e5ccf9798f87f959e797a6f822e113d1175179b47d9f81149e2852ff55b940f0c337d357b51042953e8652827a626b71151076631997d34c44a03948cedea275fe232d1302f92ff54203999c9e2ca4624e5a9f7b8985e85f4a43d504d556372dbcbb4495661ab1f1cc2f4dd49434c0f251de3691943b7d0afbd76ff1f9f9ce1db9d93a254ab559788a1027bdf7f71d809062d6cf12a15c722006b47c0e9c6f7d4f264336e39a072468ca5166710891d098c93611eda31ca03739aa5c90bd1822aea2d1e251627341cb99473eb0439e126a3a831fe95fc7ca410ddd0516487042c93e6ace4f12f5fba4fc8411706b0b1233c3706eb61c31ee8d8ac38f97e4572fecee1311c98e9ff41ec9d6cca9cbf16050fcd1291f4aac758dfabbd4c8d802484e83e6ebdbb347848f87184a3fd22ad21dc2a9c181731bda7b076a9d9bfa7c6c0554e348b050f6cc1092a8359123dda1008ce50679999eb180141575be504d8a9f232387401d1476b149f622f3adccc2cd793580df8028fbd9a02997aa381591228b231449a0b81b212c3ab2f1eaaaa2f3686dee9801ae8ffe100d697d07cc50eb737c29bf4f564e12948ae520e74a92e4bab5b9005277f8775de4dacd3a228ba311b93503a4bfedeba1f18719bc8e60ce6f0a42116e709c417a29e66b4bf5386419d6bdc7b2cc1ad63df2d8894ba7821b7af4eb20134b11b07c441a0061a984ee2ae9b4ce489aa8414d4f9e81b51e623233f9bb5b7ebfdc5b4a8caff774ed29fac406aed5f03b033e913a0bdb4dc2d0cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee911cc28134f62ae8698540f8d07d28a9354ba493055d55d7301d4091939fde37530e1cd3f0fdf9ffa4dc5db1ce50104795a503100bab90766811aad1d84707509702da6a7f27f5fb834ad1c62739946dd0e25139dd724cb32a11b18ec2e704d461003ba79ce2fb819fc6e35ca29eeaf2e00219c9478855b828a2f73a84067bdc332ab7014768e92e38e2a971e1dfef6a73c0dd32fd20b8976496b47deea031e3f425a9e0be1c043f94cd919319a29d4494b3f32459e58d188ed650675540a3d8662cc95de50b3c9cd70bcbdbe4c8a08e6099299444703fef8fccab7c782f8eebd100376fe8153d63807041f27ff20f3c7546c159f123c07cd4b21eebe38cad5a3d0dccafa4e3aa16c2dc9bed7464efd43bc3741a2b9274a7bf3afe35ed1c0b910e1edd1dc4612f2b53265b894b896f4706bc918d4966b2a7d728c490df4d76aa401216b1cc71cc9f574b6008e02653710b78204fdd82c09c1156693193c3c7154f25e92fbe099391335da50c7a1db87bc104a53773053ad5a572b584c5cddfb64d02f81511ca83117fd013470ab332aea731c62fbf6bd0e644099db570e7f030ce13d57d0dd22f770dc365429ad6e19719ebc8409252c97e508c66fde78f5b054b00737a62bf81874afb5fd59eb8f8eb4c513c6a0b3787cfff9fa564d1a00c2cf92f69fe858f0e2c1bf0adcde93cbc00b1310346d8a96804cbeedc91584f24f86416fcb091e3e03ca2927120be744666a9b31b98f9a37d21a38b11bc4954119d791166a6d133d8d3de27861c02e62c2293f3d7226df4b7f2698ff8a76cbab4bb9705300976836ba21ef9c1d5f92334a547468193d0a4c21ba2e8c9042cc8410c662e378b4f701ad77d453b033f869d3f4a496dd4eac399a89e4b7b034b38342aba2eb972947665f8e5d8ed5ce62e73e65663b706c5340b247669617f7ef5afdf4d0aceff062c52229d3cafc947b704729f7a9921aca5e37539615ab757c27a067a0e29c39555ea3d322d713033c589c39796bc218953c745f446adae02774ff17828f3ab94e7246ed36ee7104bd4eae72400ee42ee253bf0bf24d6241aa06780ae266382b27a8d57fda333a1f7edfb3c09a19f7a0e3b6e3b5c8e856203f5ea1ffc236fa71ea163d2ee8f4baefd8821068c10e9711b2cca31284dacdd44ac3003ff2b20aa6fa42dba2d8bbf7731152a74cb348ff286a10508fa10b2c872dafd6a6f1e733b02229dfc8a76c76c091276fc30e65662eaddc02f18e2f818c5d6dc407e21efe1f2f8810805f0603730e0c54ac03486d029b0eb3c8593f6a1b5b2277e7d07adf8fc71fd572471b6305d85928218fd6a85cf591ca797d214567935ff0c442faaa30ba3ed1842de9fb514d34ad58a63bf909a3c3a70ce0af1bd4aafaa683006f270aca66c4799fa0009101f327e62c46248fdb902871ba201931e821fcf7703071baa6c96c736c30464e108b18d975eb963b36641df28613116c067a4d5f713af6c7a31f40bb092c0cdb43ff1519b47871710257816316f89cdb0807d4c992eec4c0031fb230064fa1d5551a0485625642466575712e7d317a3591e82db0f24157eb338d4fa82570232413b8db86f7fe00815306979a5da2478db2e044e771f0a829d62a38ef91a5290ec96fe7a4a21b154f22acbc3d29308d4c5a4a68072138fed754f45d3fc42b445faafed45c6d7ac37c62b4de7077bccdb5c3d17ac081587ba7ad735f95da682e95ccab51468487f7bfbeaf6558f5a6897aaaa65415a05f04687000a0bbfc3ae88089e955e404595c57ceceda74d94d1c3da21f082862f77dc9c0fae3ecaeefc70f378fc6e632e6530bee3050c1bb8ac967281d1592727c56773649731c37971fdb1d0a6520c2fd19ad6367591646b6c3bf9130a2f0c150148b864f6a86b71150995422e4d74539d70e06cf4482cce0c806acad07db10d2a15a50528453f0dc60c2dc5934c6fd3bced765f8dd16ac77c3c3ca6f15b3408f5bd78f7deab02fbd90fae0f78211934919edf53214aa47f1382cb10030bb42c3a4a6f009c0fefb328ae52d8e72ca09121f7fa90d348b64b542d0c117b40a01de8c410b2f0721732275e9165e618c885c0f9435a281dd9525b66abad6e16f10b19a4159558f055ca074f5ff1661584f13fd4e8a81da625072f52ddd6653cac20e76d117448870de7e22d8423fe6569c039aba51764dc629320f7ed882cbbd32da2bb6d7ca31e5ebf7cd544abd5f326fec648ebe9363495d5f4da961b6f481a01e8ebb007a27cc407499f083e8382f25fa2f12dd57b98be4473ce8643b0dd5425fbebc5c8edc1275548d0b21c8967f1f39e05c4347ed3d3b1bed69c72f81e0503bbab9a55ebd90d138cbc67761ddfa4d00679b7368df0c66e55f96add45cc5c27000617680b4c04c1628142545025734fb2d5a29d20e20e97116b4156ebedd710d257fecf4ee7df152c455f2e67a52fcf30ee91d2d5e11b8aec208f9415e22e1ca8cc59732100840f3b82b1a6033b091547e4436ff7c70d6fe10d80fe0b37cf0777ba633f8c3bc0c8384b8c2f02d59f991460a484691189e0f01a9680c9318301dc058889d9170c17575f2504a98ea24010cd39cf0bf1c991f77d03a6bb3bfb06e27e6a9a2e07a917e7111eaa64e946f50cedf9b03001f8f352cde1aa25c9e9191ffda954f9a9bc3eb7cecbd320f43ede62cfb9d3dd67bf6fe2e3d4dfac48fa099de2955a0bac775e26a8c121c1636efc19862469225d452794e0cacca1b2020000000000000000000000000000000000000000000000000000000000000000191ffda954f9a9bc3eb7cecbd320f43ede62cfb9d3dd67bf6fe2e3d4dfac48fa00a907c0033870e5d0edc36890d2b6a6d7c5666da5096aa947d8d811ad8e894d118a1423749b0438cfbf42bee4deced29ac0c466c5a981be0459bed4760fb6e7037b5c9e019f31cd2ee9208f9b5e1df814ef428881bb196f9004ffe86080137e1c6d5c626951028db2c97da9c31a23bda5b1a4e05824e868003fe1356fdb5775020d9effe5fc6ee86a74d5e2ca6d7692b20bf556e739de580af7826067280d1711e866c6a5074a7e0d69db4764e52ea82e4828b4bf4749142ae83750ed2f6d9625b9a1af03ddc6a1169d6368c585560a16265a472a3fead5c40f4f31ebb075290800e750da132857e842db7034fac387aa6cf6de154dc7f32ff8c26c4c6430c924b3db48223f57a2f6ec31c14c96133187f859852f9b4132e9588ccb6bb7efac1ee1bd6d83e9734460aab83eb2a0f622ae801ad8d70d6bf699cbaee7add5aa93001ec040a90c411188a1671598bdba42e5cd697e8a39d103f061a0efa59457f8073c90b2b9516f4f67a0eb747119cc8e56a814a66f6a16f8540aa78ea754cc840b96d6b109f347709e32213bef57f045c10457c3522db50868cbf22d87574f9a04776204ccc4d4fda17134387657dea4f98133bd3d5352f8498ae7255b985d2627d281118df0e8dcf4bde40621bb6f32b0528fbb43d53be5864a14a9f61fdb2623322c9ff40527f6c8b96b2b60640adbb2ee0c4c7c8717af0c7df33211cf492f21cea87b01e93214d27623b5f3d011a19a0a66e3f29a74278df2760b47f0cb222e1bbc3372cb99d53ae3c207fc40fb860746077a44ebc6d3393be89b191c73212c128b5c9e723a0dcc41b51a54beb191399eddd1525f0c89720e926f16135c2f1f53aa73e9cead06f82e0d7d2823f28cb4d29a047efcd8c4b48386444c21e43507b97cf098389764fe5a0a41e274045bcbec58fddca7d184761adc6ab831a2b72de6518fdbec821cfa9ad477eb16d45515a99a6f4845962cbd0e059926ee95911c4547fdb840a9956776948b12878821da6c973c7a2a1e2cc05bc115c0e7e40920d7e7e6207e9e513dc81b783c793e1d502a4b246ad8a61503231948b73e8dae06836d6321f1e20ea45b5cb7a78b2d3b250b1d46f0dd2ef5e5f3ffee014296b31dabe8d700b662d46f165cc7d745e0f74e4f0d6a33ffbb2903d9ea9b3a32f9732e7021fbde764128e74954f720e9cd1c0151f435b84a8eb57c49de180ea821421ede9e17e535a9d51a4908b8312344c8d95139098fd4e331122ad5ad235416502bd9d0211eb1580b5aece365d17ceddd888f845d52fdf95bd2955d83f95313e82866ff0e2501597a793c742a90c52776ead93fc596e76ba3ba862c0a03b736840472d17a64e0777ffaa69b43bc2e82ddbd39002aeeb6b019603fe43453302f0118e483588acbf45935e8dedb3861b9792964b12795f6b191f82bedc9376822ee184a562921200243778bf9fd7d2398f95f6a361b2454acfae4b094d508aba0ec0ea95b429b27ea4df4f688b8f0d663cf9531921ff9f6d25c83ac77db898ecbfd06da3608ce418fd3becb4f4e91dfaa72b6e7cef756585fae45f81ecca49756f001c7026c6fec7bb16d10c5ea4a5da34339fabc5df66ae4ccd90bd684061419ab054e8145f8ac37eb8f5e3fcfc3b7b317a243df87e519221a99b4ef0fee65fe2a011d6d33a6ca994b12dca055bb6eabae8c733e9b29e07e68dd369053e68d46ad2a04940fe79428858f0586e81ff0718d4e37f37cf4e7ab45581be2e38b91581821d655b2030c3b92ceb8417f4af1009db1a375c371f3694251f98921e0fef6f40352ebb756cb2e11b6698e390c331cb3b688715819e34a865c6968f50f01a2c625cfc66819c45a77d4fcf29f900842a277fc5d0653bfc18395d58d316ac22bac27ff3a17098ac5deb83392b4655255a17389a8a5c1b84e2e84a9f7da52fa03e61a0c9524024a81596865f42e2a199ea51f6afed30f5653f504307d7d4bfb418101eaa6405d677a4a600ff733bfdea08fb822e12a026ae95fc36c816ac777a2d30d36e5abf57e8852698c0481a03467ccef5857100ae5071a172827cfe38e51c32b36a7426aeb812317e949aa8cdfaba4cf137d93ccaf520ae3d488402d8fb0681ec77aa87c06a064aa81698b023f3ee19f7dfc7e46df45605dce26fe0cc81dd91911799bbd9987ae058b4e48342e89043bac062148a525de3b3d6418bd0266cd0fd8bc0a4d2abe4d9b7f64fef8b191cd07329c4df8fa0d934387764d3d81e978141da6cff3d13942c9df5194709c544cdd028fbcf481ba2ff24b89a4e57300920963ddbf9de96b13e6bbcdbaf55672c532a29264f4eb1a502cb3c523e570658f28d0b99968357d74f26fbe336614bf12807d4308eff13e2a96c4c9f716adf8a1', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 35.637612104415894 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": 39,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"num_inputs: 1\n",
|
|
"prf instances: [[[12572659313263335624, 14443766455855958404, 432930639589567449, 1881177029071802301], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [2359119529189047257, 1186270854317446351, 12298916256516019502, 1116401204062057155]]]\n",
|
|
"proof boolean: 1.0\n",
|
|
"proof result 1 : 50.25\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
|
|
}
|