mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-08 05:04:07 -05:00
368 lines
26 KiB
Plaintext
368 lines
26 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 77,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Requirement already satisfied: ezkl==7.0.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
|
|
"Requirement already satisfied: torch in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 2)) (2.1.1)\n",
|
|
"Requirement already satisfied: requests in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
|
|
"Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 4)) (1.11.4)\n",
|
|
"Requirement already satisfied: numpy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 5)) (1.26.2)\n",
|
|
"Requirement already satisfied: matplotlib in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
|
|
"Requirement already satisfied: statistics in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
|
|
"Requirement already satisfied: onnx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
|
|
"Requirement already satisfied: filelock in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
|
|
"Requirement already satisfied: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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": 78,
|
|
"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": 79,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../zkstats/core.py"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 80,
|
|
"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": 81,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"tensor(7.1972, dtype=torch.float64)\n",
|
|
"tensor(17.8173, dtype=torch.float64)\n",
|
|
"tensor(14.6303)\n",
|
|
"tensor(49.9367)\n"
|
|
]
|
|
}
|
|
],
|
|
"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",
|
|
"# Note, here we make\n",
|
|
"gt5_data_tensor = data_tensor[data_tensor > 5].reshape(1,-1,1)\n",
|
|
"\n",
|
|
"create_dummy(data_path, dummy_data_path)\n",
|
|
"dummy_data = np.array(json.loads(open(dummy_data_path, \"r\").read())['col_name'])\n",
|
|
"\n",
|
|
"dummy_data_tensor = torch.reshape(torch.tensor(dummy_data), (1,-1,1))\n",
|
|
"gt5_dummy_data_tensor = dummy_data_tensor[dummy_data_tensor > 5].reshape(1,-1,1)\n",
|
|
"\n",
|
|
"dummy_theory_output = torch.sqrt(torch.var(gt5_dummy_data_tensor, correction = 1))\n",
|
|
"dummy_data_mean = torch.mean(gt5_dummy_data_tensor)\n",
|
|
"print(dummy_theory_output)\n",
|
|
"print(dummy_data_mean)\n",
|
|
"theory_output = torch.sqrt(torch.var(gt5_data_tensor, correction = 1))\n",
|
|
"data_mean = torch.mean(gt5_data_tensor)\n",
|
|
"print(theory_output)\n",
|
|
"print(data_mean)"
|
|
]
|
|
},
|
|
{
|
|
"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": 82,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"tensor(266., dtype=torch.float64)\n",
|
|
"tensor(True)\n",
|
|
"bool: tensor(True)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Verifier/ data consumer side:\n",
|
|
"class verifier_model(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super(verifier_model, self).__init__()\n",
|
|
" # w represents mean in this case\n",
|
|
" self.w = nn.Parameter(data = dummy_theory_output, requires_grad = False)\n",
|
|
" self.data_mean = nn.Parameter(data = dummy_data_mean, requires_grad = False)\n",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" filter = (X>5)\n",
|
|
" num_fil_X = torch.sum(filter.double())\n",
|
|
" print(num_fil_X)\n",
|
|
" fil_mean_X = torch.where(filter, X, 0.0)\n",
|
|
" x_mean_cons = torch.abs(torch.sum(fil_mean_X)-num_fil_X*(self.data_mean))<=torch.abs(0.01*num_fil_X*self.data_mean)\n",
|
|
" print(x_mean_cons)\n",
|
|
" fil_std_X = torch.where(filter, X, self.data_mean)\n",
|
|
" print(\"bool: \",torch.logical_and(torch.abs(torch.sum((fil_std_X-self.data_mean)*(fil_std_X-self.data_mean))-self.w*self.w*(num_fil_X-1))<=torch.abs(0.02*self.w*self.w*(num_fil_X-1)),x_mean_cons) )\n",
|
|
" return (torch.logical_and(torch.abs(torch.sum((fil_std_X-self.data_mean)*(fil_std_X-self.data_mean))-self.w*self.w*(num_fil_X-1))<=torch.abs(0.02*self.w*self.w*(num_fil_X-1)),x_mean_cons),self.w)\n",
|
|
"\n",
|
|
"verifier_define_calculation(dummy_data_path, selected_columns,sel_dummy_data_path,verifier_model, verifier_model_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 83,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"theory output: tensor(14.6303)\n",
|
|
"tensor(300., 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\":[-153448,40664],\"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\":5734,\"total_const_size\":612,\"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/ data owner side\n",
|
|
"print(\"theory output: \", theory_output)\n",
|
|
"class prover_model(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super(prover_model, self).__init__()\n",
|
|
" # w represents mean in this case\n",
|
|
" self.w = nn.Parameter(data = theory_output, requires_grad = False)\n",
|
|
" self.data_mean = nn.Parameter(data = data_mean, requires_grad = False)\n",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" filter = (X>5)\n",
|
|
" num_fil_X = torch.sum(filter.double())\n",
|
|
" print(num_fil_X)\n",
|
|
" fil_mean_X = torch.where(filter, X, 0.0)\n",
|
|
" x_mean_cons = torch.abs(torch.sum(fil_mean_X)-num_fil_X*(self.data_mean))<=torch.abs(0.01*num_fil_X*self.data_mean)\n",
|
|
" fil_std_X = torch.where(filter, X, self.data_mean)\n",
|
|
" return (torch.logical_and(torch.abs(torch.sum((fil_std_X-self.data_mean)*(fil_std_X-self.data_mean))-self.w*self.w*(num_fil_X-1))<=torch.abs(0.02*self.w*self.w*(num_fil_X-1)),x_mean_cons),self.w)\n",
|
|
"\n",
|
|
"\n",
|
|
"prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 84,
|
|
"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: 25.950548887252808 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(14.6303)\n",
|
|
"!@# compiled_model exists? True\n",
|
|
"!@# compiled_model exists? True\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 14.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': [[[10537101196673941533, 17227541574925932677, 11187715152301828262, 1869164017182098189], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [4944024074473963208, 53172020031966965, 6785527786944351863, 414441106336697639]]], 'proof': '176ea8eeff21f3aac67cddf3af7cb53a640bed68b132f246ecc1c63e87582df217226576f1f58836639e445dabda705702fd7c32efd81348afe6419f85e476ce1fbe3090ceb3783574a75392dc0af2a2cbc55cc850cda0ee3248bd497596154b08c79289f3f72c8755b603e085d2bd3092af423517ddf341bcace06509b5254b0eb2d53ca692fdb43c785b781a7ee000bf7561be98c9333204b926b710b92f251cc2bdec6303022a2a8eacc6d62a32d4551bb6b40245f47cbbb5ed16f694fe8421c292b3e2ed012912588096163e836afc9265a7d0956d75c0d47bcaad70143707b478c8ef7cde993b8bbe00c30694482ea7facde053493de2477631bf8a5fdd251dcdc81a8ad98ee27fd373a9822cd06968bd340b12ebd2860c48f32f4af7f516df7d24179537ef08eaf571da7beff8ab8c0aeb070bd48da9726ab70df8de4b06a59b2af4863f145bb274827a3c4df43ad20874c97013659e9a6a215ce59b271ba53fbdcfeafd4b0b76e4a4fab3459b04a02bd463eaabdd6ad752918b98a29e18617fde9b495beac742fa27600745974c8649fb37b2eac66efa201637d3c7a50f3fb3f9d8cc71bf9e06d579bf8efcde2ff3376fe878c4549d0df6237b0b570307e75f92faa93480ccdb2ff46479b9fedf552fd6e6e9236137ccb3420b8e7d23155198dc61233a1a831a7fa1ece3fb6771aaa678a182b3978801c4aa498eb3a22ac141f7a58ef7a9e50b774c15b0f2921b0e8a75a931cf64ceac83690a30eb291fe98c91e73958d824092171fd5200bc12478d2020b8fa0630bb099c7c35c60a1a4dc6c29bb0cb30168ccff7bf9899277c750ff812d025d60d0499db92524ae213d31af6feb05330c5112bd692e628089f6b071c1094c8e1fc8ea929876aa1c10ee3ac13b687c84b28e1a335ab05c78215c9d3dddc38567de5a4c06088e0cff72c902d3af92fa568939dfc63cc79359d9f25909bfe5f84d49b97bccfde97cb490cbe6555dd663344a4cc8e9b21dc734a78f6b239dcb1390b9aa9f246023b23110b1772e571d06ef1fb46273007ff93f1ca51e2332cbb9838a1e5f1040fe9ee9102ada1fea35667d4ee1ca2637a10f22642d5a0e2cc10347ba52645cb5794fb0c2914a9ddaebc53be4c85717e243fdf541f5df8ba61d9caa48b4b5a66ed5c91ef1b39b7d9da4f4008b3e15cc9aa3cca499bc538c71d38c6e82de7a89a603e0c822ab63ba60f97cbd552da72c83eb9436916c2505556c9fa2b12313c7eeecdc0ed0e77dc9f5e72b48b5f6e98ac5e8a670c65461dc1f7e7640f1ac1cc5fba066e9828704081a56350f291981f3f91ef9175094243dfafda78a29e0eedb96eae3f602888843357914eff9d5ceff92833a4be10f654451ad7ebeeeb72110485b4c3242fe7dc6135a3bdb17437866dc0b68b7510e5a183f5f8cc388be1b921b3a654220e712ab3cda51d61e097bb06fdb720fc42e4b14abb81fa992aec00cf74a4aa202647d58f031556b397caf88fca8a427c5aaca6f4dc43f68a0dde1a77b174b4b92adc6060f2b584172c9d65fbcec7c4a5fc5a708d740d968f572477e7f82cb69e283d0789006da176d2a989ca0774a43fc0e30c459738eb33a39e6676498976f32e84c45c50f9842e5b940c75c5bd7513b5b30880078d5c69830dbd76fc26615c0c2f3ee33623904cbf0f76d432cfab9b6791e291e3945efeafe8225fb92445b12e4f13ef259b0761a8d71353cec23267460850571c57c9edb08777600c5bc5b32325dfeb46b9536e7d74f4ea3cef022f30f127bef3c6c1209e5f8da4f9a7cd38211449e0d8e45244938e79a430084dbc12e8af7eafbca33845bf9998b4e6fb312261eade016b1038f9fde63813c1d06d478d8d7ed4b300e82095a32041f44228102c27933436d12311dec137c0002c370fc9a252be93d5be1288bf061d70ca59280e91f9f4f66d9d5442798a01d2421112026ffdf84565fa81017cc237aa0ecb121ef678d58ccd92377c7ecc86dd8703f323cb58b9ece84bc525d0b6bfd1720f22eaa29aaff0513ee6b355e6e523c8ed521bdf874d429c973bee7c83eadb718215ac41b439a4ee98e978746cd9c6b148840d38c9f61d4bb80fb264ae6c4cf2161b23d5c0b2ee67215cf12b3761873d98a87c71974621f704b1c56606b93823ad06bc7d7b3bbdfdcc2ea0ca54ecad26139954be537e44ea3fd228763704d836eb27e7b1f13cddcda02dc8712a6397990738419572ab1b44c1e8852705399824300d59a8cef7c1d6d86d68ec54944141e637833ecb67d3b6ce1ceb4293b59946911df306066b7c41c786b293e43bdf236b9bf1830c0500d270b8a788f7eef9c2be0443223e13d814ea73ad83af54d233b29fd01a4f0668c487815c12ee0224f5372f76ef19e70b9108c1f0ca5ef3e2bac65b7e933094d7b3d20043ebf764d14fe71762d1e3fc32d8df398a7e6dab8b3f934856c6a1572a03be5373ecb18316e7ff043ae8bd1792e82b740566a50c0a8a448115b990102df9b96f56472dd275387c1f6ac83cf8a3845db794c5d8e48f0e656be8ead8ae6b3dc15dd9239eaa12bd7c19007068e93efb349f329b12349f09193c368d2dee9629176b376b4723e950e8042d7380e68da670360d9dd09731cc68a5f12be0b5e349820b5ac7e89f63cb02226af4ddd1c3e68f4c7ae5f1a986e1a4d534676779f3436a9221cdb76522e6a5057509d5b555462ed4b9194df6f9563435276d1de488c91711064eb6e7d3cfaf0fe8e496ebadaa431c7069517c64e1e2f78abe888755d93e8ae54202abef91f91be625dab1767c61966e92990dbe9574e06fc3e598c108ef5c7e9e6c81c2c7c42d5d574c97aa40a50f782a68af2f475c52d8169b722de88b7d1f351edb83bf21189e66cf2832f31e18fbc928da26dda9919d2bc888bf5d493b5d6af877fd80ba2e422287ee9ffa65e795d8683713a7e659b34408181fe73658394d35a9fc8f03191c3c5bc4d07e2d47ae790f3715ada1ac5fd4828cb5a3a08278620ec7d3147c21754b5065d3c53eb20f23e66672b44efbf324877abd7c414bc69e8143fe83eb16bc15b4088a735868535f6633bd505d82fb2f8e9ff8cd7378ddb8e4fb8aaaa329516d24caaf038cebeb827fc1170baef0649c8efe910fab9bdcc0468e19ea3b17714f4ada2db6a58f29e1a17d41665129a0f4a7f641e12aebaaa8178d1284a62a6c1b2f67422f5479b21eb85b2e4ab4def61fe9a875d7beaeb06bb5ebab0fd81008ebee10874bd0f2f06d7075e75bd505cb1b47916efe275c18cc392bfe38f623ef73263d238aa6aa20489ba60c07a4255a7d45b7f9dc66c37681c9239b63920966737d744360c1b5fbb0dc39100b0e45647c70a10480013eccf0c5c8ca042e2c93a1e6f23c97d2e98bc06f3e7434454256d8f71df24c51d3f0c04db6f93e2e188f050cdd3ad4b3795115c29a55ad8fd9ef16978c6e24b83461b4820ec7aef41c2bdd7cf7949d1adaf91401e72bfee7fef089cd54fa3954ae2dfc7f09d7b8fa0ed250b4735d8b975c6ac7781628bbc3b4b85577ee63cdb183b6885847c3ad420c15b81d707b24ee37f90c01d5dbd0a279b08ee0bf9990e803308e3b2e31306f137275e31f35e959a4f68fd53c4fed16fac7a35b135caa99b345de4e5f9cbe9c13f11716e9a565e3ebc2b96a02dba525c82332949b42279bd7110fe31f47721507035da7e4c94328ad13ee7dba37b2c909af67285d186755c1f3ef61d7ad9bd218336190b49693d7d8ab987397b53fc6e6f77caa7393f6fe70893645bec69bf916e65a7de979450323ec0bee1c76efe09d6d7dd5dd9790843b93cb9d29a9e06d00000000000000000000000000000000000000000000000000000000000000001a9ee159b0c0d6e6702a95794bc9a5fed0eea9dbd18273c0068ed289ef2f6f6606e626f1237db4acd41efc11dccd1fe90f5b65ef92fb44b4a4f525413f5465861d1bb71adc3ae83e09070840282f72b57f913ea50885cb9e527a9dcc0cd226a92717dad289c1a2c7f86328ff58d102ea36db010501fb719d929ea36af458017c0c6285e8715c2b67429fa3265fccf469aca5c204142136359c56225e09f174e71ab98ef07254dd262cd85f2e4091febd07cd105016d8237cc30decb1593556c21c1593d4e187a49d7ad76b81f260d11ff7cfa1bf54f3247abdd6c5302304e5891c951c668fb01f25cfc6a0f4d6b41d887fa33779fe25d9a660599afcb45d516d2b4b0da74361093b182893fd5a0b390862021c6704deadea7a50f2966b3d35f214de5728b19765456cd603946f7feacc1f9bfd2b799fa5e7f33cf5f1691a8b1928010b7aec5f7c6540c352f9acc4095365ac006bba4844f8401a7c8711a5aa2b277920df437f8b19d11e1ea73fb3ea02790298160e2d6f07e161f7226acf2d32195303d7824d504172b260f272ef55944df29ffa0576cdc730b8f7e275a8928f1484f5d96631bb22fa6d45185ae4e0dc9cd3ea692978fb960be882a23bc3bba417f14fd387d07de75880d16ec31656b2661faa8d1c796f79fc1ae92c25b1610813bbf1571c8f4c9a09963230eeb2763f72477fb5b0bf4a29eb731671804abf0f20336d6388354c15d1de7370c71b522fa6af0a7c5483d0e3a90b12d1d09546741ce87fee59d4f086f5e6413ef1e1beb65aae750cf6164e3d78326bd7be66ced20372a2d8d29a814c5c17870a63db7395f4f86910211bfd6e6638069c5e007af922249a5a0914289be878484bccde7f1eb73720339ba53c66fd0835d498682fec167a13dc9d6b80adf0021a9b0e77ad6bf9d5316939100e181645a19579ca422d2160dba669fd0cc53adbe52751714518c9314f0de97d1dd5d4e74b47a90ae23f104c8c4849fd30e821c0c5986ee7991966fcc035ea69c6a1c378e633e8e5731c29316464ce48c341d0fb8d36904fe3f06ddf72fc26657dc95c0b647aa08778062392a736c45a2bcf8ae9bc13a7741dd9ed5c7c61386219b7cea5f9239e3ae37b23f27fdde6058caaf91f0fe0593fa78bc238a2d21e36dd2d76d36df13c8a0fd4132a6116052d2e2c10802c45c76131da4e5d2a58330e2c2e8b03ba11337f22cf1cb849739aacc9553b89b0fc98b8f4a485bc147bc1b2ffaf15c814b16ab084400a9058d2e9d63da4cb8315d5514994df0380d9b232f54c3e0836b4b13656b5dd009e0685ff6c738c71b45ca7b069a6a53590107ed8fca4bab5f5ec67352d35901acaa2fd4a4d7988f56f19d6b2be743ee00aa1f1396e4f45b45a7035b284de371dd3e152e43c9a98f2fee77e10368f618ad9e4b789263234db1e8b247321fc940ca022bb9d44c5f57e04e1714929383ff63b46e75ea9f5cb9d652d0c5c0adcdd194012d88275929639efaa768b550df099301ba6bdc7830017cae92db688094a0b699258bceadd829b0cb7064cb75a41c93f4ca0c43b454f239afce2290e407b0059a1e57770d589c5d748493f06d09db2edcd24d6824784b8eb26eb0403254422aceb163e8595a00f97b536f64badbab689e96217b1209f440e3a5aa3c3f2161aa4fbdc7d84b95b13ba19c2ee27d4705c218c6d0da82b4c61ede70f52bcaf8d2ee8e72ef20c5a1030f6ff3164bbebd6be79f2a574beb99da9799cbb19dda02f19092801f6deca44d59df3436346093455eb940be4b23f2620d6b5d1455a295d1e57b8ab29ffe0513c8c4c9e9e873868fe5a43848d245a33fbb5a200633254721242cf660fe1884ad3c43b26c22c95aa32f2b645fa1e6cbb4eda5bb90c3de7ad1c05ea6c2854ac6ee0f6098595beb8f1564e1cf43e322f16d0154ebd6d480e8310221f89860ad80f4998267c4b4bc33457d99de299de121a21a5ae3496d8b2011a86d33cf4cc2e41e16c4cee096d231491135c791011a1f5591fdc24531bddbf16db53a118f624ffef3be558a6af58ef69cc610a6175dbf318c326f127ab8a8828dd5232c4cbec99d48d353eb810fdc8ddfa8837e59d07e88a108cccf6a5453d28378e3e9d61f36d81b9cd9dfaa079d11dadbb9c5ac728860860b85580de80bd138aa04d623c59f5c85bbd62ba2bc4be2286921c050e935efba94549e3aac172037e6b85c6873fe023b8b8769c42175ffe79a1a3bb1f7db24fd591e18de32db71732be300f61954668702107d4c6cc9a70d519d17a3365aa8b60f56f26ac55c3305cd7f3761bbbcf0c2c51bf8a52d6eb7c6d66e022a6330d4b5d658fd34e941e2189780f5cbac5795b9fd610a040ca9a8b633f3fcd58c1ea89c90cfcb4ce02130b7971b369cc17c19f9b65f2af338db9578857a5dc515109e73977e85e651dd7', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 35.07706904411316 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": 85,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"num_inputs: 1\n",
|
|
"prf instances: [[[10537101196673941533, 17227541574925932677, 11187715152301828262, 1869164017182098189], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [4944024074473963208, 53172020031966965, 6785527786944351863, 414441106336697639]]]\n",
|
|
"proof boolean: 1.0\n",
|
|
"proof result 1 : 14.75\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
|
|
}
|