{ "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 }