mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-08 05:04:07 -05:00
374 lines
26 KiB
Plaintext
374 lines
26 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/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
|
|
"Requirement already satisfied: torch in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n",
|
|
"Requirement already satisfied: requests in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
|
|
"Requirement already satisfied: scipy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n",
|
|
"Requirement already satisfied: numpy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n",
|
|
"Requirement already satisfied: matplotlib in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
|
|
"Requirement already satisfied: statistics in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
|
|
"Requirement already satisfied: onnx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
|
|
"Requirement already satisfied: filelock in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
|
|
"Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n",
|
|
"Requirement already satisfied: sympy in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
|
|
"Requirement already satisfied: networkx in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n",
|
|
"Requirement already satisfied: jinja2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n",
|
|
"Requirement already satisfied: fsspec in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n",
|
|
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n",
|
|
"Requirement already satisfied: idna<4,>=2.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n",
|
|
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n",
|
|
"Requirement already satisfied: certifi>=2017.4.17 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n",
|
|
"Requirement already satisfied: contourpy>=1.0.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n",
|
|
"Requirement already satisfied: cycler>=0.10 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n",
|
|
"Requirement already satisfied: fonttools>=4.22.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n",
|
|
"Requirement already satisfied: kiwisolver>=1.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n",
|
|
"Requirement already satisfied: packaging>=20.0 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n",
|
|
"Requirement already satisfied: pillow>=8 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n",
|
|
"Requirement already satisfied: pyparsing>=2.3.1 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n",
|
|
"Requirement already satisfied: python-dateutil>=2.7 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
|
|
"Requirement already satisfied: docutils>=0.3 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n",
|
|
"Requirement already satisfied: protobuf>=3.20.2 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n",
|
|
"Requirement already satisfied: six>=1.5 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/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/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n",
|
|
"Requirement already satisfied: mpmath>=0.19 in /Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/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.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.3.2\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": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"cov: 3214.7648484848482\n",
|
|
"x mean: 49.5\n",
|
|
"y mean: 227.703\n",
|
|
"dummy_cov: 4.143981818181821\n",
|
|
"dummy x mean: 16.269\n",
|
|
"dummy y mean: 14.982\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())\n",
|
|
"x_vals = data['x']\n",
|
|
"y_vals = data['y']\n",
|
|
"\n",
|
|
"real_cov = statistics.covariance(x_vals, y_vals)\n",
|
|
"x_mean = statistics.mean(x_vals)\n",
|
|
"y_mean = statistics.mean(y_vals)\n",
|
|
"print(\"cov: \",real_cov )\n",
|
|
"print(\"x mean: \", x_mean)\n",
|
|
"print(\"y mean: \", y_mean)\n",
|
|
"\n",
|
|
"\n",
|
|
"create_dummy(data_path, dummy_data_path)\n",
|
|
"dummy_data = json.loads(open(dummy_data_path, \"r\").read())\n",
|
|
"dummy_x_vals = dummy_data['x']\n",
|
|
"dummy_y_vals = dummy_data['y']\n",
|
|
"\n",
|
|
"dummy_cov = statistics.covariance(dummy_x_vals, dummy_y_vals)\n",
|
|
"dummy_x_mean = statistics.mean(dummy_x_vals)\n",
|
|
"dummy_y_mean = statistics.mean(dummy_y_vals)\n",
|
|
"print('dummy_cov: ', dummy_cov)\n",
|
|
"print(\"dummy x mean: \", dummy_x_mean)\n",
|
|
"print(\"dummy y mean: \", dummy_y_mean)\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"scales = [0]\n",
|
|
"selected_columns = ['x', 'y']\n",
|
|
"commitment_maps = get_data_commitment_maps(data_path, scales)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Users/mhchia/Library/Caches/pypoetry/virtualenvs/zkstats-brXmXluj-py3.12/lib/python3.12/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.cov = nn.Parameter(data = torch.tensor(dummy_cov), requires_grad = False)\n",
|
|
" self.x_mean = nn.Parameter(data = torch.tensor(dummy_x_mean), requires_grad = False)\n",
|
|
" self.y_mean = nn.Parameter(data = torch.tensor(dummy_y_mean), requires_grad = False)\n",
|
|
" def forward(self,X,Y):\n",
|
|
" # print(\"x size: \", X.size()[1])\n",
|
|
" # need to enforce same length, not yet\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.x_mean))<=torch.abs(0.01*X.size()[1]*(self.x_mean))\n",
|
|
" y_mean_cons = torch.abs(torch.sum(Y)-Y.size()[1]*(self.y_mean))<=torch.abs(0.01*Y.size()[1]*(self.y_mean))\n",
|
|
" return (torch.logical_and(torch.logical_and(x_mean_cons,y_mean_cons), torch.abs(torch.sum((X-self.x_mean)*(Y-self.y_mean))-(X.size()[1]-1)*(self.cov))<0.01*(X.size()[1]-1)*(self.cov)), self.cov)\n",
|
|
"\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(3214.7649)\n",
|
|
"==== Generate & Calibrate Setting ====\n",
|
|
"scale: [0]\n",
|
|
"setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":0,\"param_scale\":0,\"scale_rebase_multiplier\":10,\"lookup_range\":[-448,6246],\"logrows\":14,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":13120,\"total_assignments\":827,\"total_const_size\":8,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,0],\"model_input_scales\":[0,0],\"module_sizes\":{\"kzg\":[],\"poseidon\":[13120,[2]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"7.0.0\",\"num_blinding_factors\":null}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# prover calculates settings, send to verifier\n",
|
|
"\n",
|
|
"theory_output = torch.tensor(real_cov)\n",
|
|
"print(\"Theory output: \", theory_output)\n",
|
|
"class prover_model(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super(prover_model, self).__init__()\n",
|
|
" self.cov = nn.Parameter(data = torch.tensor(real_cov), requires_grad = False)\n",
|
|
" self.x_mean = nn.Parameter(data = torch.tensor(x_mean), requires_grad = False)\n",
|
|
" self.y_mean = nn.Parameter(data = torch.tensor(y_mean), requires_grad = False)\n",
|
|
" def forward(self,X,Y):\n",
|
|
" # print(\"x size: \", X.size()[1])\n",
|
|
" # need to enforce same length\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.x_mean))<=torch.abs(0.01*X.size()[1]*(self.x_mean))\n",
|
|
" y_mean_cons = torch.abs(torch.sum(Y)-Y.size()[1]*(self.y_mean))<=torch.abs(0.01*Y.size()[1]*(self.y_mean))\n",
|
|
" return (torch.logical_and(torch.logical_and(x_mean_cons,y_mean_cons), torch.abs(torch.sum((X-self.x_mean)*(Y-self.y_mean))-(X.size()[1]-1)*(self.cov))<0.01*(X.size()[1]-1)*(self.cov)), self.cov)\n",
|
|
"\n",
|
|
"# note scale = 2, or 3 makes it more precise, but too big.\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: 3.663957118988037 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(3214.7649)\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 3215.0\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': [[[14955570959218682635, 4667139652385906200, 12836539004462631467, 1774684518626433649], [4224417983558473805, 851357164555783563, 5363851773531956453, 1448631618362554917], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [5743885005642251665, 3430503978676436355, 7149667244725939006, 2902673458086333540]]], 'proof': '09f31a308bb02ed2663ca4b9af3f0dd1bee0126b250e0a9341f158901177c3a61383e691b48fd8a0b1180ae7d907a02f8467bafcba5675e77274185f93a3c0520317ca3e628360b6c0a6ce277f259ad80c13674f2cb30ccc12647142589ace7323086df037f2f7fa2189bd962feec853d12d586c308d425bcbc69e7488a149a11f41c138c2dab61b54439029f1d7119c4ef1c3176d29f32dad8b413c5d950e18148f7d46cb315e67269ded0c7ae98272007bea8ceaf68a5f7f0b64790b078f4a03ab8468919687ead541bc0933800935772927d77489369c58a30f84df7717912fd8bd7ed5c8628b941e7592c5e0f30afa0bcb026ae5241a2d950b2b78da96601380ba104d1ef7e5156473213d4908f90d7d2bdbee93ef004cd526e6f8395f5a276069c4e89f4664bb8415bdc3bf1b900d13006609846db4fd48c0767ec506860aaa348dae3fda720d0de2d575e4de60754d7a9d61a5d0c8202f9df54843ee511fc433548f263248cb5f64a413abce8567c6a5240893622b4f16c18f3f55bc712e8fc3cd51838d1f7691bd6b3351ff713c0d947ae1f0c7c92bb2e03dd4042aa216884b4c03d43f97c0fe73065c897004b0f22a485d4d93c3c5b3ee5810a7acb311b4f76b166dc4bdd3873539ae4969d289dbbc2cc68af763cd2b55a22e2ded6c2166e3424c03fe07850a3a7548849cdfb02a196ab043b6082b75bdccf76f99e127c787d39371d17204d358ddbad8fc45a0838228c6a9c4d704af1e9188e290ab0e8d9208614bde6dae2ed41ac8db3cda64e920de6f1637f662563e58ea21d2ec105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf7123fcfedf2f8de0e89f1bd7b0c9542c1401b3a7c22ffc74f50b0edc74e84c9ff12ddfbfc264b4dd8575d555ba392b120f00d6259947268d08b3c1dad512e03cb105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf726755fdf8425e36069f280491c626203d2df775b1ef47eca8be60efdb05ddb84284d74ad55a6ff524b72e03701bdf084fcdd5bbb0184c8b807bb6f4197822d9a04c417a45da9ade6361a54e8a24d64a75923a8cb843036c8b9165e86cbd4a72311f772d472fea089fa9585be54ad13a59c279cdbd83bd53817b654c90a03933826f85ef10043d1be60e53c826260510925fb09889386f3a3c14df52dbb121f7119f990d421b4b70b62cc73c103f1fa849832a195b45161946e303ca2cb6ffebd0482af2f8bf2ce2caee6443cbc6dd220d609494bba8c76f055c363133cd365700be05b99a2a8c929270f12c03b3862caab2fc5da3a4d129009c00c4c642d1bf81ff8f08f45dd78d799418b0c14615ab7f1c243854c92f362a0e41a95987aad8b2ee4f9eac70c03819ce6268db640f8ddca3eb6c39f7195e5e2daa6439a52421f0a1853a51fa5a13b30a4fb7e45c47db00be615c75e05a9b704c38909036d855a1a06f6c3acff600ff129d9484c17047daea26214293a7208f46ab020b35191cc1a085b6629c57e1d5d494281913d9d1b9202660c93f94ee95df44d8f708e464618563676fe5662760591772b82242de49e982282a6d13bac14e2fc3ac95c18f32fd050f9de6563830ee32a68a993544188734135e5debeaa8d1503f5d419a36b1b402b9e3fc9f90a96ab9c573d2ee0ebb5b62a1c0d9ea784807718f306bfa1272b2107f4a922888be6013d21942e827e51b03828fb746a6e4a3e0c86682ea2f3095a9034e84779b7a5ca12d167c1565cbcdd0e670171909e48de8a43a594f79a03f8ca7de39f8392e1e441134ca7985a485f1b24a47555844ce23d9286415458142d22ed9aeadc629e3612ffe73a820309f275baac28c39e2c6dd9418b313b4c1cb05ca2fa15e7422de4bcb62d881321fad93a3ae4cfa0fcf644b29b68e0efb013c9053cf394ec120133f1745962bf99f13f29507f929ee37d2fbe39c1d536592b1625f24877c9c4873c722c551d501f7c4f5edbfe40d0c4fee8355397c003d61fa48e16e4f5d3162471c3d284fe7ff5b61d35a9131a692ac44bb8c58bc0f5a3133c6eca860ca07b0439b58cb2e127ec6133f0d9c4e56f0ffaccf6d99cfa4c390182a852866328988158c02b1c8061f4e3e68a74434a82b8975670f84634c41d19ab4dbc3e3128d07f1fe82352d5926dbca73306447e0e667d6346c0352701041b63312ddf76fd758b25735465cf47520189122e657fde1a85a164fa599e5bcc0cbcbdae2a151be996024eca34595c85340ada6f906dbaf0525b8e33fb7b670a25a8c85bae74e194d834f4e560086caaa6c98029e59c1725561fd643cc143faf272b32b30bf2eec5d6a3f7f5c0511bb1ef27f3be8466493043bba26da103c1d92e365e8656afefdd5ceb1164be68f4a212caee4e288cd583f6cd91c0fd7840080b01afb3bd8a7c963c4740759e47c56ee95b136d1b69521d120174683dedb390013816788ec6accba2a43747ae433127931c3261ef7da610b6a712a1ccea7b8e1b4ba5d0b2928a94623ff104cfa309c0dcba6acc8f7e2988ee51b3c25fd9d58213b3f88114dda28778d25202e340e4b2205aca600dbaa1e4c21b4852d67ac0341cad5db77bea8eeb57ae8b9c76a73199786fd04300dff83d530b1ddf9c1ead0b1567c6433b17e55e1c2b305dcfdb9420c38ea095c804365f63b49b96c9be94d0301fd5703467576577108eba8ac0d02ae9e54cdd80cfc783eff2575ee59a8ead3062e3c8b30b6cea011fd4986f515bfcdb530b5165d0264801c609f0c58543e3036e8945cc2b5048351993349373d0e0e365fd2e78b330db48d25abdb3f842cb10bbc1fdd0c7cf3fe195032c6979ed6ddb7b101fc345045f35c9f1925ac13c5325c68b8e51ee2c9d379028258d09bbe80ac159b3dd737ee1bdac469afa78127608dcc17fbad79fd9b5fa94c5b3610074f1ff397b869f1a7f33531323f97c298e01758f61a88fccf3de110a34a5c0ccc4c914412221f3b032cfe128965a0ce62a022f4b30e4d2712137aac55fd13fa51d6836c706661cbf62f02bfefb2051ba710fd7ec770a0999ead4f5fc57815c08143917148e2def57ad67644ef785bf921c23132a627f9043983c817e2adfcbc0e53b31e339e82ef27253bd1c9741f182f11103419392dc6127c251218f05d6ead87f1c4b6222768c2c5d2a290f31d6a44b0c186e3f84822a0b9f4638fff30e4fc47da34f9646a04e6db6333745d3b8cac600000000000000000000000000000000000000000000000000000000000000000676395156bf6ae50811fb219177e404109e5478df16101bc24db5de804244ef000000000000000000000000000000000000000000000000000000000000000013c86a8a35bfdb85366862d29e6dc908e88c4bfac4d2040a528ad920229c70d7033b963ceac830010dc072006c2d613ba947c075da228344bdc7a8ab68cb1af913771b211312c8ca13076d6a9a7326f13190c0db8d1e83fb043f327d73c8d283205bf4d0494c32d483199e46f95076caac14e6beccd2baf651c5f06d3278893214f7c7a579804e44ac799d98ff46c37b45bba4c236df2d639319bf73042449df2c10e39664f9f4e1da698950749f37247d8401b38e9a214910ceb18159c2167b0ec73e4c98c686c1124aa692f42923804ca6f9dff999f0301e02788230b8174d2086b552650e0697e9934fe710dc46b38d3cd8786609ffc327cadb0566f3d72314cfb26e3ac3dc546bc3e287552650b0c08a6e124f07b0b2c1553038fd44d15120a0e93db4fd47b9995d959cdbfc250a348d087a66613f244d30e3f7639979d619a9d26c4c1209ccf910cd3a50973e26dcd49c06309158f57e9a98040f10b92b0d8b9a6701fcceff878ecd85f8869014251e827c7cf0f1b7e7d65011390950aa0a560e7267fdda9de8cc45574499923e8c8f4ca7bc045801be7ee95083fd450a151fe9ac1ef30aacd299eb59319685c2dc65ea6d162d4d76f027de84ee893a7e17ef673e0c440a7439c0cc6545bd2588f6b6934b1312870270641c41b861e5662eca43c531f2b7428982128d06fff7d09653b7c69527c37d07cbecb9bd0178c311919068d6e87626a5d16bafb00971768e7bf6fad0a3c91df8f5d7356b9adf1e11f828a3dd8fb569f5cfd75874f7340e9d1c75d6851677a0ff26037ea4e1cd0e11f299e6f298755f7ab015329af8d199f4217ca801d69abaa7fe48485924d98529fb1b54c739c4876586eb1d24658ec3f9734859b6e96ed79af233c4e5b1f28211c658ef7cf4a32994f5508158fdb750e0b8ace9d1dd5b48a8d5c438988f70800afe8d66b4da362644946805d4245466a11b6dd617b4c29b61e41d49ee46b3951b55cb12f2bdc41b3156e946817ea3408383f8fed6009ea3d998b89104391b571e52ff6b4893ae7bd845cf7688f1e6c57539ea1babb34c47f8851a73e6894270028e5266ef4ebeed10194219a3ae39da8e049402c1cdec67c0b7e352eae6d0fc29bbcf9e566f785c10b0272659d4bd38830d057d123506958ecee6f33943bcea2854a90fa73750807cd46f82eb2ea5ea9c3a15747d746099f551ee8a3c4f41610a503d706d5fb63780db63643895255542871503e0af35bb595b26aecef9f18b00084221f3a637ff61b4ff837dd774aa053d93df371102c5b307d4c514bb23881d570b0991892451c3437e3172201b38ec8316301608231f7bcc1396e4d1fa840e28e3421acf48f110788302dbd923c3bc77220f738fec3d38f8329621f006e529a141bcc3a1d4903103f11c5375e34b7cce40751ffe9abb7ea57fa28f87236c142455e48ab03ee991a1a1f4bcf214e4840629bb510abd0d5369edc529f8b7592bc8eae207ccb473a619340873a5ab5fb496074e5d7417f42c9a9e9cb54a23d215908b83f749bf9985d5ba6e59212b1dbae4b8d7089ab69f6729341096d395930131eecd5ed9473c41b9fd4127b7c58196b4fece3cc83ceec2a88203827db283063666e9b0046996cba5ef622193cfc780942e0b05525f17abd1d11c08f7c74808e61bcdb2297e886f4cb91582cc23e59156cf03546a52950ce3543cdb1fd517142455e48ab03ee991a1a1f4bcf214e4840629bb510abd0d5369edc529f8b7592895b5900518f4d127261e116eba2133f1bfb534e8f4fc7d37ae74ebbbf1a77322c3a8b3fe25db8dad72c333e13f968a116c5bef5128293ccae31799f38a870a032b3731ea0ce231a1bf3e2c4cf796e79f56999bc25af38d0a5aae0a8d569fec12cdc264f92f2a56349eb8a37023da3cc8adacf7fd5160fb9793cc6a8ab1335a160d90e39d2bfce32d10ad1dc0152159f73f4fef7c82d04b35641461fc2cbe55033083c37f782d66d0d3691bfa9f6fb23d57e41421462c85897c1bd596f1cb382ca71d46c7a07b574d8a738b50536114936b7eb5172e2407516a48ba238b4deb', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 4.607888221740723 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": [
|
|
"3215.0"
|
|
]
|
|
},
|
|
"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.12.1"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|