mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-08 05:04:07 -05:00
339 lines
24 KiB
Plaintext
339 lines
24 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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": 10,
|
|
"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": 11,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../zkstats/core.py"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"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": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"tensor(7.9817)\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",
|
|
"\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 = 1))\n",
|
|
"dummy_data_mean = torch.mean(dummy_data_tensor)\n",
|
|
"theory_output = torch.sqrt(torch.var(data_tensor, correction = 1))\n",
|
|
"data_mean = torch.mean(data_tensor)\n",
|
|
"print(dummy_theory_output)"
|
|
]
|
|
},
|
|
{
|
|
"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": 14,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Verifier/ data consumer side:\n",
|
|
"class verifier_model(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super(verifier_model, self).__init__()\n",
|
|
" # w represents mean in this case\n",
|
|
" self.w = nn.Parameter(data = dummy_theory_output, requires_grad = False)\n",
|
|
" self.data_mean = nn.Parameter(data = dummy_data_mean, requires_grad = False)\n",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<=torch.abs(0.01*X.size()[1]*self.data_mean)\n",
|
|
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*self.w*(X.size()[1]-1))<=torch.abs(0.02*self.w*self.w*(X.size()[1]-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": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"theory output: tensor(14.5800)\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",
|
|
" # 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",
|
|
" def forward(self,X):\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<=torch.abs(0.01*X.size()[1]*self.data_mean)\n",
|
|
" return (torch.logical_and(torch.abs(torch.sum((X-self.data_mean)*(X-self.data_mean))-self.w*self.w*(X.size()[1]-1))<=torch.abs(0.02*self.w*self.w*(X.size()[1]-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": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"spawning module 0\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"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: 5.805350065231323 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(14.5800)\n",
|
|
"!@# compiled_model exists? True\n",
|
|
"!@# compiled_model exists? True\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': '1e74882939ae3a2098e3318ec1b5226eaa6061b8b0eabda8e45b92421a6b3c6a113fc6fc2e4846e06f6d42e7bfa7646f114fee612b37b73ddc7eb07cecf865511fc062d866256acba0c16ca2e7f5808c4ec066de9b8585f95022ba8b3465939823b5b259b4bea810e9b4214abafee2b330a19b755919f420f47c78769be2f8f5279d5bec70bd1af5ffe3d36ce6bff89e6d7f39094766163bff2dd3072525975b1f0e266a48cabedd1efbe0c05f78bcc83803d024e7e49c225fce20aa7b8a6a5a232d542387bb949385015c1c5d0cc76eb9d52e3ad3141dd1ffa22a8234ed22071ad04e614107829ad23c13b8bcbabf5640ba07b74b4de9e6d3b2d88e6f99996109412cfbaea26f8d85a8f2c90caaac59cd72209e95e75b29ec0f80418b6fcc5806996b13feb4883750d6dafd28236247cab62590bb55a9fd538abfa403662b8c04409512d3ac0cf276f13343b091965fc701d57060f3b8babb353c34feb8f81524516e031450e83d0c35e057bd36c1f3274cde923d58019b5e44367ddf5efb1027c029cd94f310f3c2d988bbd9f4528cfe5e3ae0f27e956d671a1dd6f4a3392a0a89641ed15a3c273e707e1eb3da5979d87af83a53da9498ad093a23ad567c2d1300c9bc67d92d356f42936149b3e707b0b4c59c58208e5cacc9b1449f80000909736bb1ef90075682673542deba468d38b66c0c450fd4d397d24ce17842af46251e6c4138aed518bf95be2c1788bf0f61f6c127cad90a8dfe1958c52c17c38d0352969b3c18e3ed223785bca86de6b78b3b85497da0dd345fece15a96cdefeb10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec412d2e783f88185bd88d8b3ec10dc2c87863b3660329a92e97638548d3edd3094016dad837f0a742b82b8da3d508a022bf9e0a35715bf136007b961f411d53389a10923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4126608ba68ed7076c715b64d10b4430ecf5741f90f3659882916f93aabec2c90e15ca733c0be416d43597c731118a9b31ee5d57030018b499580eb29675dc71a60a590275a1f39b26f43b9738d9f1aaaa3bf5e613cbf1ff745f9833bbfa8490dc19e57b5e7783e423bce5ec639b742e6ec0635bb1c55442120d5bca6d70179fe000067a7095143517e09ea7495943b531ae49b97f0690ae6ed02491fc0c496feb2acb1227dd6b1c199e8aa07445db0f1357ef558ea85939c3c51fb9e70c4e2ce117ec6ba8e53d50332cc71840b4f1e7813483fb8093a9f700b5090b6db61c9a1f1e21c1fb249ccaae6b2cab2c10891700fe7ec8b08f37d3121a4eeb4b8957deb72933ee1b4c03a7d120e5b1acb3ba30a36df20d6eb63530b115da18abdebb50361745a0c820d03bf619e18a53175f28ae6bd627e72ce276482b9b648cb78909dd22ea03372842740f67b89f83438e18d9be05767822fc193b474d04ae09d8bf141de4760e41ccb7cb65d414064d8ebc9413f08c94814dda1eb5c84045df6bb8dc1450194ca9c8e550053bbe4e696b22a4803d3651b2394b4eeff5841ec329232e2033b0b9c9a998dd3dd615a32e69fa4b35978c99d4ff16d2e8f72b50fe463b7026b3385c9756db32be765bafc31a6b60628f47afdcf36f1ba33841430ec6454206966ee418c99f62ddfb0818b08b482de962f4fe007304bdfbe7dad52a3f69f21f69c3a9ba2a3b7c176f7cf104a46a1cbebc25193f603de2403473ced947748318d1a841190f2995455c545855bad330b005792a8cfafe83c693c01acaf0bad82abc90bacda2413f9c9907dd5c71636baf6bed4f3b1b260a1987e0a6e4bd8ef9093b5476fc4815d4c925abfcf2f2c2aad2ed54d8f6c7591a900a215d730ab90d20676e0bdad803a72f8c4f3ad84f7ca13a036468cd8c781182f6fc5bd832c0591cae057c9b4d1619e1df6b566c00719f58c24ab3c1b1972f7321e7d831963da820ba672f5472dbe7972fc4da14d061b6e1c72d0842091b3ab53e6d0bc0f6fd5b0e59bfb415e96ad4aed1c682acac7a178588a428737c9a2183e9ca53a4d1529a07a94f2b9d9d6c518fd3e676fc588a567d5e1ca70fe1456ff409eb3b70c6fada2d3510edb8063f92f8494a6d6e5d26fdca67bb5152fdbd4a65dc752ba596b98c0b6a72debe01cfe83efd33111cf50853bd8df5cae8b30644fcc66f324fba08842cb472e2a0d1f1e33e4491aa1b6b94abdc3b4c1c868852d2636dc78b6038794a0ed900c0e4c55fe300374166a819daddcd658b83d67c3b533b72454e0b9b35df10cdd56c9b45864b86ed94a3e6a9ba12f9dc4d5e5a92903285082b7340453d310b7d5a1809a0f540d93c0eee2dcbefdc5c9993c1abb9b0a151d0c004705f84c71fe0ed6a172133d8e4c859ec7006407412200d1bd4cbd84407d0a0346419ffba198bdefa47e19953e5993eda23c920c121996e8d109e4c31c9bccc072ce07102293456c00e0c993829ecbb89349fc1b56ff6d1c153a98e003a934f51507127e4022fcbb0fb78554f717e8555c946eb62fe2aef49da6eb86b6de2613d86e227151cbd7f79c31f6a21f0d61c71afc6a8ecd6b77ac43179d0c4f9d7257a313b9bb31c55ef0073a61e615a2f317b1ca3cc5a154d8f7daf0235cfec38ed165ce8da9e2cc2db45a3811592803684a7660c23fb6681ca749459408d9b6ef202a81cc85800fe54957903c481793618ac1c7af471ebd69bd16d5e64e54e1839e95a43ca44000b317351adb1016a11e155db4964e503474bbf2dd59bd91f27cd78e72b65611cdf39628e05f92c5a59962cb2f46caa0341e1b19aa3234659ad0d1f0450f557276e217dc8156d0fe6f7f6ea9350be3e851bb703eff36877fd7de8bc6af35f0e0baf0a24c5d6abf101c6ad9d3551217a3ab5ebd23ceba3fa3aebfffe88dc76210686efcb258ad0aa26d9821dbe94f1eed8e22cd0e80b89f69608533453ceb41d0199400a0f3a3886891386a1733a614dbac117e248a63a7ea69ee54f8ae26e811ad57634e3b3f11c8e9947af149b93b14e452f92e7f3650a21815369ffb5da5d1a0ebfab887692b0ece09a7f848dd3bbc6ee822610270a8a820b8721b1ae324b0e0707cab399503c33e4a65aada696a40e8ee379acfef946400d365b456c94b610c2d53c7fe058708b4371511c92db24e24dcf869ec2d0b66d8adf0f31cb77ba013c75ff101a1fccf3d68d2274b46eb5504557d02121e5b0f2822140e0e9270b00000000000000000000000000000000000000000000000000000000000000001cdd24d269fbe14f304b47e0af9e3b5d8eb085a91cec4f223003b2d1faf6d5ee0000000000000000000000000000000000000000000000000000000000000000200ec7bab3be37c7000c566d0a2121695c08cffc47a440a2c7e0cbc1bbaa3e6a1cc70ba4898acd28f173242e27fefd8573e299af76b7d435ae060a50aba6a9fe056f28fd653fc1162f11a1ea997c5dbd26bf106f38affbf3f33467c64b28df38245582d0efb12caf96474f094973fb6ef7803953ee35e563175b9d164baaecc9067b50a5e689c5d4b1dcbf34bd2209edb093eb23effe6a79e1f2e145ac71ecee0c5ac2ddf0cded66b06aab15b384a1c31fde5c77a5ffcf85830bbd8caefac5020186fb7cb068c0010e226ef541a5dc2d8c0d4cde1a2605eb06bfb6fc9cb55a54076bf83e325106abc9f72294d5b918596c63e64dbf153a8203ed551ab105b31422870c5187bbef35ce8fb27b408c71a888b6a7c5469e091d110f71d18e298e6b0c3fa974d650ad89bd1e268d8dcb1fa2bf329d895405ff9b1828735ce8e110a02df7a9cd1aba7b17af55ffc533a6016a2fd71331d15d0b6024564d0b34cf054c02938bb17fb339252a30676315ecf170ba1f40a96dae2b3ae77c4f3fd1d64ca22ee864aec47e3e568daee4254d5a42aa8008d819dd39e46f9ace951da394b13227b5361c10edb3e4ec0a6a18da28a1bf796d51c7c6b9a86e17c571880b1f6be80cd16133816e7f28c47e6eca4a611b99dc5dd008ed7021d53297426052148b3629238a287d6f791687c30a2b43e2c047d906b07f296e52413b8b11966d44124b0736a96d6c088793c64cda7912c34f17ca00182b27e755860b47f70c9574e5bc0792537b605044c34f7fe6884a7167e630c5f0f044e8c4d1c5d95a2ffa914b2c124b654e6cab360f5e3a721dccd94d68144a29719f19ad96d0589712223fa7b423edd19fb4f75c35030721a474788335f6695ca173cbfb75b76da971dae648e226213940cdd01eee7dd7a0f1f3ad270b11bc61efb9d8ef5248ea62732d3f87cd126c6c4de02f83b6333ab6ce271bc61732519b0eae8ee1f943daad0edfe4311729940ecb8144cdef76bd2cefa96580af862f5b184ab31f4f3078699a2de14605287b803daa4c1fd59937a1e4ffd0252dd92db04087ba245bbae0160bc11e82a7142767f9971f1827cba4b3ee0b8fb3a0fa9f225ff53074aad3ad19792401a1080f2e354d525c00ff92adaaf2357a66860af8a23e994d469afc48e2152a21cb271d73caa15c0dfef49f689376c94c7e9439d4ff11dc90f1dfe8a6c84dde0de23801dd1d7f691f15ddc712ec63d421819550313af6872d54aa696a34de6547b9d402852fb0e1e9bb0bf4388c78b3a40e38a012e884b951b0cb7990d1877703976b2903b17d19159bad0a5450f9f50f7e846db8626eaf7e3ccfb8c12161c4d549332bc0e23d87a40e4fef75a36996cbb66522ceeff54779e06bf063275f3be1606e135488e721dbc4d00c73eedae41a4e7038dc0f094822671a7c167add79c67c7521ec3bf057de222945acf3f79958441e1bdb069ebf57a743b27d57582e8f490003de860b85cf8f4bc9afb5b941e31e4c414a343850d4640fda7b1cf7cf4647ab2ec56808b0cf908e0d8e697748afde2fa9163b8b177865aa33763a8d54c2daf60860f82f36247ce5ce1bc54ec5f213d998d6d3afb36aef88803d3e807e84f01a1353539951e3105049b6294924fc6f9906e71ca7c53d5c66fbc01c4b246a08e401de24862445490b887c11f1e21795c37266f0c394aa8e2da16308dcd7ce393221ec3bf057de222945acf3f79958441e1bdb069ebf57a743b27d57582e8f4900023e7152b6a2424632bbc0c2c0c4fd4ce8e3527b4c9314b7caa948d41e8eb16802e790683c1b707320b759ec83102e52dd19be1992ccc437d21a80ac3b1f9421126cab1f719c22b8f802e2e269feccb0998d04261aacbdd9a28f6d65ba091d6b1109e8beba08bd098564085c0656c62b2ae4e708cc7e67eb705725cd4b06c6d31a00660b1574ea4dd6ba50ad0b90566ad49959d3ee5560aa25ca2fa7ae4ac62e192cbf72ac8ccb9078d922278c04b91eb5dc809e4a8f176d75303a725b254c15253bfbfbb9996194bc42823c7178778ed594bc30bbe43b06a2cb79d8b50ea05f', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 7.799456834793091 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": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"num_inputs: 1\n",
|
|
"prf instances: [[[12907834141446617622, 16863260785082668294, 2215826187815521673, 2191547160659437828], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [15846044116984004302, 17434658319873045084, 12685703199754313893, 2889686633444970017]]]\n",
|
|
"proof boolean: 1.0\n",
|
|
"proof result 1 : 14.5\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.12.1"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|