mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-08 05:04:07 -05:00
347 lines
24 KiB
Plaintext
347 lines
24 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Requirement already satisfied: ezkl==7.0.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
|
|
"Requirement already satisfied: torch in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 2)) (2.2.0)\n",
|
|
"Requirement already satisfied: requests in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
|
|
"Requirement already satisfied: scipy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 4)) (1.12.0)\n",
|
|
"Requirement already satisfied: numpy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 5)) (1.26.3)\n",
|
|
"Requirement already satisfied: matplotlib in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
|
|
"Requirement already satisfied: statistics in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
|
|
"Requirement already satisfied: onnx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
|
|
"Requirement already satisfied: filelock in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
|
|
"Requirement already satisfied: typing-extensions>=4.8.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.9.0)\n",
|
|
"Requirement already satisfied: sympy in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
|
|
"Requirement already satisfied: networkx in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n",
|
|
"Requirement already satisfied: jinja2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.3)\n",
|
|
"Requirement already satisfied: fsspec in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.12.2)\n",
|
|
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.3.2)\n",
|
|
"Requirement already satisfied: idna<4,>=2.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (3.6)\n",
|
|
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.2.0)\n",
|
|
"Requirement already satisfied: certifi>=2017.4.17 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from requests->-r ../../requirements.txt (line 3)) (2024.2.2)\n",
|
|
"Requirement already satisfied: contourpy>=1.0.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.2.0)\n",
|
|
"Requirement already satisfied: cycler>=0.10 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (0.12.1)\n",
|
|
"Requirement already satisfied: fonttools>=4.22.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.47.2)\n",
|
|
"Requirement already satisfied: kiwisolver>=1.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (1.4.5)\n",
|
|
"Requirement already satisfied: packaging>=20.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n",
|
|
"Requirement already satisfied: pillow>=8 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (10.2.0)\n",
|
|
"Requirement already satisfied: pyparsing>=2.3.1 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (3.1.1)\n",
|
|
"Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
|
|
"Requirement already satisfied: docutils>=0.3 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n",
|
|
"Requirement already satisfied: protobuf>=3.20.2 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.2)\n",
|
|
"Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n",
|
|
"Requirement already satisfied: MarkupSafe>=2.0 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.4)\n",
|
|
"Requirement already satisfied: mpmath>=0.19 in /Users/jernkun/Library/Caches/pypoetry/virtualenvs/zkstats-OJpceffF-py3.11/lib/python3.11/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n",
|
|
"\n",
|
|
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.2.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n",
|
|
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n",
|
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"pip install -r ../../requirements.txt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"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": 13,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../zkstats/core.py"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"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 ======================="
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Step 1\n",
|
|
"Verifier calls `export_onnx` with dummy data, to generate the onnx model. Dummy data is used to infer the shape of the model\n",
|
|
"\n",
|
|
"### Output\n",
|
|
"- `verifier.onnx` file"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"data_path = os.path.join('data.json')\n",
|
|
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
|
|
"\n",
|
|
"data = json.loads(open(data_path, \"r\").read())['col_name']\n",
|
|
"data_tensor = torch.reshape(torch.tensor(data),(1,-1, 1))\n",
|
|
"\n",
|
|
"create_dummy(data_path, dummy_data_path)\n",
|
|
"dummy_data = json.loads(open(dummy_data_path, \"r\").read())['col_name']\n",
|
|
"dummy_data_tensor = torch.reshape(torch.tensor(dummy_data), (1,-1,1))\n",
|
|
"\n",
|
|
"dummy_theory_output = torch.mean(dummy_data_tensor)\n",
|
|
"theory_output = torch.mean(data_tensor)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"scales = [5]\n",
|
|
"selected_columns = ['col_name']\n",
|
|
"commitment_maps = get_data_commitment_maps(data_path, scales)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"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",
|
|
" self.w = nn.Parameter(data = dummy_theory_output, requires_grad = False)\n",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" return (torch.abs(torch.sum(X)-X.size()[1]*(self.w))<=torch.abs(0.01*X.size()[1]*self.w), self.w)\n",
|
|
"\n",
|
|
"\n",
|
|
"verifier_define_calculation(dummy_data_path, selected_columns,sel_dummy_data_path,verifier_model, verifier_model_path)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Step 2\n",
|
|
"- Prover gets the model from the verifier.\n",
|
|
"- Prover overrides the `dummy_theory_output` with `theory_output`\n",
|
|
"- Prover calls `prover_gen_settings`: export onnx file and compute the settings required by `ezkl.calibrate_settings`"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Theory_output: tensor(42.1340)\n",
|
|
"==== Generate & Calibrate Setting ====\n",
|
|
"scale: [5]\n",
|
|
"setting: {\"run_args\":{\"tolerance\":{\"val\":0.0,\"scale\":1.0},\"input_scale\":5,\"param_scale\":5,\"scale_rebase_multiplier\":10,\"lookup_range\":[-1344,0],\"logrows\":12,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":3936,\"total_assignments\":110,\"total_const_size\":4,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,5],\"model_input_scales\":[5],\"module_sizes\":{\"kzg\":[],\"poseidon\":[3936,[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 calculates settings, send to verifier\n",
|
|
"print(\"Theory_output: \", theory_output)\n",
|
|
"class prover_model(nn.Module):\n",
|
|
" def __init__(self):\n",
|
|
" super(prover_model, self).__init__()\n",
|
|
" self.w = nn.Parameter(data = theory_output, requires_grad = False)\n",
|
|
"\n",
|
|
" def forward(self,X):\n",
|
|
" return (torch.abs(torch.sum(X)-X.size()[1]*(self.w))<=torch.abs(0.01*X.size()[1]*self.w), self.w)\n",
|
|
"\n",
|
|
"prover_gen_settings(data_path, selected_columns, sel_data_path, prover_model,prover_model_path, scales, \"resources\", settings_path)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Step 3\n",
|
|
"- Prover generates proof with `prover_gen_proof`:\n",
|
|
" - 1. Compile circuit with `compile_circuit`\n",
|
|
" - Inputs: onnx model, settings path\n",
|
|
" - Outputs: compiled \n",
|
|
" - 2. Generate witness with\n",
|
|
"- Verifier generates keys with "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"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",
|
|
"spawning module 0\n",
|
|
"spawning module 2\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Time setup: 0.5520792007446289 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(42.1340)\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 42.125\n",
|
|
"==== Generating Proof ====\n",
|
|
"proof: {'instances': [[[13487293430113784910, 12778393823498462323, 6887806571578554205, 1244238496825937973], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [1786891257776170021, 2456895193576464786, 15851013958699291921, 426370788491761118]]], 'proof': '08efd7a1fda2afc01ff5d0ed49afb01925f8cb02bb776686f3d7a4c6658781f5297eca58838bd1475976e1ee6e5a5b2274a02946be1e85df4810bfc892ce1366273cacfe9461c95e1982eb90579e1bb6b1a29eebd4995016d927c0587bf19a2205964b01ff6b4338a603b72208d16865a5c0b8e2cd93fe75c11fbec8c38e863206cf9dcd5d765ed1d9e6547d3d7557a38531c9111c97d5ffa8ec7b4b2f66191116eea5b1ada76820f0c36f3ae1e9165bcc7855f8626fdeadc789f4f133efb8d60da3cbd23ff0d9c56a2b00481e850d668106ccb78831035bab253fb786d3861309ffbde5f426272562fce0d20ed2f343702890c5fbf4d722e5ae58dc2a53a7c70e4b3c091ce01dfa5bceeab25cec51d7872919bea8f885ca7792494fd26e8ff817afa7a9402b8b04832aaca1ffb441935fc0fd12cc43f275a0970237f986cb511cfa5b8f2d511648e21493b8c2e502bcc2c943854f5a5be40382cc2bfa5a64392b24ced36c471db650412ced82807257fde7fc9a0b539d58b3f8e3354494b5a109b33059b0e7817f461b0770ebe16f9216523ddf53aa3bf71bee02383605df082d606de609df029deec080e508e192176f4fdd9a27db676153e5c513afcafa011a460c108ad7967d1477950543fc5a20fc21ba292fdbc0d7f9c7fea59e9260fc2e7e95191a0ac236f363d6da602bcd9841fc2748365d695312b38e66188baa5b27cd56b5588da135dc837e7e347c1f4feb84898073fa0250c0ad2d979a2a53b72eab730158091193745751572e6729e125eb06ae00d953d8bb0824978932cc7c161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd5067a76319d9c91e9cbfc89409c37b04a851a5c5eebd3563cd9a0e168a0227e6f20c899f5d46a69e47ee0a8b6f06bfd9dc411ab1030a9bb2872c67ed10d9cfdee161377416d8cbb451075147c682ef3ceb7dd50cb874f4d3cecd973e4434b60d512106651494e9a0f64c81b849c2dba84b44cd19fb74299d861c8ff68c2fbbcd52d0564bc3f875b2e3b2b0e738f56212f7adba7b3870f32c27a083d08b449b9372b6a03a885603559343df78a5c40f3d82edc90082b6055ba2f420a8137d129aa0854e4faed97678cd109988f468da43b6e1900360485ab96db41a762a8176f0024731159b9e2994a2ae8b96b08da94cf79d93fdb2f21674d40f0121cc487e9f62ed7d0013e8452c619088a2dadc8038e05fcdf7ccd23f94b0bd943dfd1a97a73106f47bb64ccd988ea6abb04096dfe7098fd9747acc6295d48baca47fa20d0fb22538304b4ed067fd686d47f2a647501e8f96bd5f420c1f2ba09cf41d2a015090f8026a5c822fad5ef1fa91748df3e31b1735138fadd8307e2f658543e8fb9612d8b5c967cdb9991e55f7c7d3d5b024a5200577f117f1615e511c0cd8098908503109538ab70e67f9ff15a4eb5572bf7c2adccc02923c5796dc90f8523df23d52edd7906ab3f804245363b6af99b367d4e12cb0f9a180e42ec09037dc9842dd12a4237883eb490f140f34b02ce5820b751bff33a9665d85f28aa03c0b32be6cc2aaafb67af4ae7a37e4eead35e893d2a5d7a01d894ee05a15f072c4d540dd9f3003d35dd525cbff23ada47b7ec1a5bf63dfc33b984ac9cd09ff0f5c5b3b90f94038d9840e4951677e410b5c9cf5beb057fdd938c908b9c5c11d26257327bc0d20ec14695db87ee70f4d2d6c6a58621ea93e66b9a7c354bcd125791112f13f8081bdab6e26f6661e528defb983d6d15d2635200102abccc1f935c960fd4be610629453465fcd8e630265e14e83bc282a50485e6d97cd935bea3e40c1526d1ac01257a533b89d8c8ac8ce452b741f9f63c732a2fd8fb7b224caa0789cc83fe4ec7056147d1aadbed40ca5c4b26eed39392771bf327a60aebac215ac04e480541440ecb6f0739ab193a4f66baa73631836817b1db13d9194deedea0f09e626877931a491051aaae8c90bd5011ec55e54b50665dc8c717ff2103fe7fd8156d57a67a2d9aff6e0dd7dfe7d152b9ad575b123ec1e6222b63ddd0fa7d42e0286774f5bd0b6bfbd3a1e855e0caa67994109e0998768bc791506403795aa21f4bdc2b0fdd2c8be9dae91a488921c87a7bdfcead2c5bd431e1642d6431413f09c148acf54003167c50d12fbf0c792067271c327918f209a5bdaff4b3c86006026a5d63270d1e15901a83b26f733464dec07d5fa65c5bf7594b9821d6bf13690db45157e8ab1e099e9ea32663acca414fe7d7ab0b80e97f4cb118d30bc6c485246c3a16e00f05352308c65017096835a1d17a334954430d78e0c57ffd69a7d17d68e43252d3295105b5edb089af547d0d3954f85e03b66ea20c792097b4a5a1fc79e0558217058c589e4988c24019c29c8f510250de99ab13df601b2f686498814ab9db62122b577166e51e60ab6ab86a6237c046a3c6553730c351453233055cbc1b408c001e68e9f559c7fd23b0b17de3b3daf3f3f310ca13e1c729a299060833e1f779270cef4d90c17cb28eb4ed73473c6adbe25fcb1a385547af7a1d1351e6babdd39d1d5c034970a1c5de82fcda4e11d9177da8c9fb2ed1df4657146c1785cb42dcc11c9d6ddc95947ffb1444657fa1a6411a9be2a65e3e6916e7cc160fca077e80cb0b41d1772035caad9e0bb722e3d0a7a22fcb48f52f0f342b18d0ca58fb6241dc2677e78fae6d77b7c5337e7f850d5e52cda96ca348072180372cdb03442f056319641ffa7eccef90ee2ed749eaaa0ed89b692245a1d3026e9e5749d4ff761a5d2aaa8bd28b889dd018712cc03750ec89ce4e79576b3e1069f9bf925325abc82a2cc309985191c61aa467b5d7c3bb44de02faf5698e1cee0acd644c0820b65d232f7dda9b9c8ae28b032e69dfea35cfa456428cec6a3cdd813ae47781bb3a8d0315eef811632509e4c5cdd1c4ed0e196c389f1e7e3e1877204c351867bea10ad515523bf733b4d8c41b5c018a8185293bb2f36ddcbdad4a2a8441de7d623f17b7256608599c456c51523ec37157b4de392ecfe9fce11e8497d6c556f2cd81d76429b7d1d6bd0c6f9d2a75430d17cfcb4376e56f83192177e15a54ac1f7f9481c62bac5b7ef5f2201a2392469c30ce6b5dc400a20d416ccb526fb76396a5c19c6c1a4f05dd4d6b2b4e7d74a73197d76bf7af233fbc770ad5d14576b8d36a1c79d41615489593c674db3adb9e84e9a9ec657910a88c02ae9abffe6b3cc085e3862d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d67145ae267c06757f7c53d978230d903929c1f8b8d646a68515ea18458c7400000000000000000000000000000000000000000000000000000000000000001d8360f3bb72a35c07bbc1db5e73eb667327836b3dd99fc46cffb57f8ef98e5b2a906c9b8252d74b29210768f31ced8dbb4bc3b340cee47bf9811eea0a0fca9128e22a8d248ce436cabd9b3584293bb618582c7a20deb80f6ffda0ffbeaf79072821b1cc587befe159cb17ef20752b01d4fbb8cf6081bc8a866200a3373c763d000000000000000000000000000000000000000000000000000000000000000018078dae74cf20c3f4bbc7179e56bab0c263f2f2f461443b566b862a6e549033272a68a89d23ab9a4db45ae8ae7af80976daa9c5c296d243f732f8de7fee402713c58e4c4d1ff8cae2907be4cef67e6f8998c54450277c140981504cff2a10902ac7b35bbcefb663cf8f2ac37ed4f6f687bb5777955b3c8f671fcea3e6fbbd2613e5070fd1e6ac5f8de9ee1e106ef6e29ca5cbe6610d06d219284b033dcaaa35157e00ad248b17f11d4acca301fd6430445c01eefc4139e6b6d3969b8ef5cd8b023903854efcd640cc26cf959fb40d1806043738acabea6f68de994fb8c2f66402e650ba674cc8533775d558346050f50f44241adf2081bb079a0e635fa020742423204a8ee45ef847856771202e9466576446dea4b015befbf3fe4ad35991c22c369723cb182699e7e04a5dc9cf65381e24bda146a29bc5d8ef07b94365dfaa2cb14ba7b0c73dd5ecee90509a68a6baa272eebaa8c5dc391f034ed0dd714ca20840014ba6a0f03a3f97074b75b7adda0076de554c75aceacf00f173add20190225ce925553057cb3de756f741bbc363c08f165ae2936fafbbb32bac5c465d5b1d44eed467fc79e725adfcb39eb649101e1d0ce7a0375daad998cd15405649210ec51e5a33ca666eb9b3a91c45d50644759f549426ecaab073364199690fcbb31c3303d00b05368fc159dc33aff3d26fd972024ecc3b28caab3a8a144e80fa361372996256173e343b2e20bb99164a2a2095dbf9ffe232b98fe4d228b6c8a0db1145a4465dc325d674a6cd8a7fcc4af6f8860cc5ada689f81cdd36d1397e422920d6c89e69b14c729dd72e53e2c2d1e5d1a1bf428232be94ef9a43c2c89dcc250466e1ec3d536af8b9ea9491f269891c43ee170299d4f1bda2d2a239ad2226c81ff39fc7969c0dda6f483389d09c32b1b59c4bbf06a7984fc1122bfff7b6bf3a01a273327da8bd46dd6874d096065b61dbd7b9dec0ade0f85c1fdcb85df2728f2a9ad41a44bc1020a9918cffcbcb3ecf5500779500140db58955f9e3e1c2830c162d51972b1ab6e12264232b2f60aa8af38b506e0a2aa8c087813f3fe600e2e61d222d6b44fba1fc7eacb057b8fd80a0bd3955a6a5e9f66709b4a0ca6339c5d20085de71cbbbec3e36fc84fd85526514e476608fb483fbabd3be6f4138e5e18627ef103466b63cdecb9fc9508ec07b86199fbdaa1e25aecaf2ee44ae0a6f1abf04d7e20e2b1d16fc9846c40712f327c76cc961f6337413084193288ffdd9a7dc1749ea5ad156779cc1b1c434ee42668fe8b175be145f5cc627d65d3511db422d18c8e557fd96db29cae54e92df157d782484690c29449bc68876ff91f2c68d5d0790f248aafa54201cf96679578a6a8562d9a0a183c2e9a8f618e104d0ea5a8011453915735af39a1a841e7d2a870eb5d65d924ccd2709d18546589681ff491114c3600c33d0cf4dead9f0a6aefc4b590b8b42bc9129645c490a0608c4faac3904d7e20e2b1d16fc9846c40712f327c76cc961f6337413084193288ffdd9a7dc04b174f80c5c35811173ea6b474422c5b162c02322cb1e066ec1681cc7bd29b10bd84205b85b5a935553a7a858872522a6f9b3c779c51f382666503e0a7a4c242fd8027b92b2ee097b8c80799873bcd02e346bbabf1e2d4828cb9c115771e7be155eca74cccf6766964b431dd9aaf1e0aa78fe1d5ba86c5411e9f80ca2f9335c25fe0d558b7c5a58f4f8867d98b98a0e980b68dedce0e6fa3f49ae0b325b92a42ceb800ea4962d5b519259610bab1761e9c7782e6429b03251086998a118e8d41845bf31bdfaa26c2195701027bbe914126d7f91050128988a7dcec69d52ced6', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 0.7556688785552979 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": 20,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"42.125"
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"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
|
|
}
|