mirror of
https://github.com/MPCStats/zk-stats-lib.git
synced 2026-01-09 21:48:10 -05:00
322 lines
22 KiB
Plaintext
322 lines
22 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Requirement already satisfied: ezkl==5.0.8 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 1)) (5.0.8)\n",
|
|
"Requirement already satisfied: torch in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 2)) (2.1.1)\n",
|
|
"Requirement already satisfied: requests in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
|
|
"Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 4)) (1.11.4)\n",
|
|
"Requirement already satisfied: numpy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 5)) (1.26.2)\n",
|
|
"Requirement already satisfied: matplotlib in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
|
|
"Requirement already satisfied: statistics in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
|
|
"Requirement already satisfied: onnx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
|
|
"Requirement already satisfied: filelock in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
|
|
"Requirement already satisfied: networkx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.2.1)\n",
|
|
"Requirement already satisfied: fsspec in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.10.0)\n",
|
|
"Requirement already satisfied: sympy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
|
|
"Requirement already satisfied: typing-extensions in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.8.0)\n",
|
|
"Requirement already satisfied: jinja2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.2)\n",
|
|
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from requests->-r ../../requirements.txt (line 3)) (2.1.0)\n",
|
|
"Requirement already satisfied: 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: 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: 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: 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: 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: 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: packaging>=20.0 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (23.2)\n",
|
|
"Requirement already satisfied: python-dateutil>=2.7 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
|
|
"Requirement already satisfied: 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: 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: 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: 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.1 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": 1,
|
|
"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": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%run -i ../../core.py"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"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",
|
|
"comb_data_path = os.path.join('prover/comb_data.json')"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"======================= ZK-STATS FLOW ======================="
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"data_path = os.path.join('data.json')\n",
|
|
"dummy_data_path = os.path.join('shared/dummy_data.json')\n",
|
|
"\n",
|
|
"f_raw_input = open(data_path, \"r\")\n",
|
|
"data = json.loads(f_raw_input.read())[\"input_data\"][0]\n",
|
|
"data_tensor = torch.reshape(torch.tensor(data),(1, len(data), 1))\n",
|
|
"\n",
|
|
"# dummy data for data consumer: make the bound approx same as real data\n",
|
|
"dummy_data = np.random.uniform(min(data), max(data), len(data))\n",
|
|
"json.dump({\"input_data\":[dummy_data.tolist()]}, open(dummy_data_path, 'w'))\n",
|
|
"\n",
|
|
"dummy_data_tensor = torch.reshape(torch.tensor(dummy_data), (1, len(dummy_data),1 ))\n",
|
|
"dummy_theory_output = torch.var(dummy_data_tensor, correction = 0)\n",
|
|
"dummy_data_mean = torch.mean(dummy_data_tensor)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/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",
|
|
" # 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",
|
|
" # some expression of tolerance to error in the inference\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<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*X.size()[1])<0.01*self.w*X.size()[1],x_mean_cons ),self.w)\n",
|
|
"\n",
|
|
"verifier_define_calculation(verifier_model, verifier_model_path, [dummy_data_path])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"theory output: tensor(211.8691)\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\":[0,1272],\"logrows\":14,\"num_inner_cols\":1,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":14432,\"total_assignments\":1512,\"total_const_size\":0,\"model_instance_shapes\":[[1],[1]],\"model_output_scales\":[0,0],\"model_input_scales\":[0],\"module_sizes\":{\"kzg\":[],\"poseidon\":[14432,[1]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"GreaterThan\":{\"a\":0.0}}],\"check_mode\":\"UNSAFE\",\"version\":\"5.0.8\",\"num_blinding_factors\":null}\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Prover/ data owner side\n",
|
|
"theory_output = torch.var(data_tensor, correction = 0)\n",
|
|
"data_mean = torch.mean(data_tensor)\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",
|
|
" # some expression of tolerance to error in the inference\n",
|
|
" x_mean_cons = torch.abs(torch.sum(X)-X.size()[1]*(self.data_mean))<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*X.size()[1])<0.01*self.w*X.size()[1],x_mean_cons ),self.w)\n",
|
|
"\n",
|
|
"prover_gen_settings([data_path], comb_data_path, prover_model,prover_model_path, [0], \"resources\", settings_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Time setup: 1.3333001136779785 seconds\n",
|
|
"=======================================\n",
|
|
"Theory output: tensor(211.8691)\n",
|
|
"==== Generating Witness ====\n",
|
|
"witness boolean: 1.0\n",
|
|
"witness result 1 : 212.0\n",
|
|
"==== Generating Proof ====\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"spawning module 2\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"proof: {'instances': [[[10512373747352303962, 11798585516934984832, 13421675179368312123, 2200257403316998104], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [13802304918419143583, 17632677359615874021, 16753034178384891922, 1784686540294826319]]], 'proof': '147c7dc35a235fa573d773cf5a24530bbdd2658ada4db0605d3dbada87c58a3f201b52103c7c9c75a705edbacc084d395d209af4f7690e7cb877c578c09efa0203ccb74bdcc5f4334149a1cc0a8351f2fca5672f17119fbfe6befaad3d8f94212dfaf91f94b36da0aaa215f51ec9ce15d54f93952ebc87be633b4e79cfa3912a1d2c1b647c2e5bc2ed4cc663ac9641c9f1fbc5e141f8d0f984d0cf5341cf689c27ffd0a99b910a6393707bc17e2cd9bf3e16a377f58ae1b94efb708fa4ec3bd50df0510163723923f80cb780825c62c89414a36de11faa174e76d08ef729bcc92e00eecf39a061d4e5e3c94e2992b3e06a4e5adfa754fdf15e4053e22e53fa1615c8458694033bea27af7e67c631303816fc1dc4a5b14e90cf1102bf5cd6439f05510099ffacf95c91970fde4b8029892a940d65135bcdc479ca2b7a78e458b4000d78d0c8875414653aa6e12160d2de0dd45ce536ca96127f5753b1cbf4bd482fe5d5cc6f008ab64dcd776e3ceea5e71799b67081c7faf0069c7fcb5f9d6918105dade3188d564c2098eec6848b2bb72cc74b2de6f4966517af714da24f2cca2e415654867b72c619f9d6e70bfb58fccd62b25b201f8d4bff39a0921a024bf71e02a81d1bde5557930887327f3d287cd9449ac3233f293bdb93ad223efd4f8506fa41cd8e48555b6b47f059a1b3111e5b71aae4d713f78c9743f036ab5b66e911c9fa49acd2de99a525524bb9f30d1750d988ad032a31708f0dcce010a7fe411ab5621d4609077d13c3d9f66a2cd0abc8b9b397d41e2fd921d88e6d0cc2f89a112b0ef7a77c7f1ea35d91f5274625771d73880b5860165b4a839505a205de88182c378cb0cde0af9080b54674dad655f40dff7160119e9356be921acd5a973404c51c93665c9fce8c29a56a6a714790be7c564b5d53278591998d1db30b566921da3811cd491e907e84166ab9af1a54dcde9ad39862a510a75f7e1ff180183920c07f80e1203cd7069508588a82695ef599edb99c532510a897ad6da57e1f4628c37fb1bf552bb554cb79a30e6b771e6db1130e855e93ec10d785ba898e3dce1cee26e935f636920d04ff5f633d001df751293dca4a45a5e7a49b8c348d9ce3030fc1c70096b96022c79c0e9c73a3ebbab6b67c90524cb1e406f5e122bca6280ba6b9ddbde77bb5566e1540dd7ba039dfd2a90239d13c3f2d094ddb31c188121f579e024cc1b4a93cc24b71419229b80f732f8aa9e3fd08fc21273a56cb5a1a03cbaaead9895c28efd99f1b23503053172cf43d16b3ffe0d8a21074dbe9537d12b7dc9848df8281f270704b4958045aba17ef1fea2929f80c65db3e2968876c12185fc76fc09f45cab5de1f5942c6ffdf47c61c3cc40eb60b7105c0dce781812b7b75a4a05df6930b87ce5fe0262a80d4a4b6b04bf70acfd32b17bc0336ffdf2bc3e5b78a7325490dada7848fd3f2deba9e73418aa8a9343eb05fe0de8d59e70cc46239bd68120d88fadb9703a3bab0e74b6ca211c3afac8b3a9ec9b17d94b808cff40255fd34ec4e18dda65a4391a54a499ac881cdab87933e670fdec6b83a1e71b4eac995d8739897ab847e457e8db1d4170f33400e045461457ee11221d715798ac17278943d0bf35538ddd639e15b2114319097b8b83c6c5bee353c89b203fdb9b3e6e396731667d537f39cf576d7666e1af2c4988863d50e69fd23dd0c0c5db2eef90d5de326037a45ad318fb412282ad15126d7570e8ccf37b35edcb324dc26fd422d006d9595d653c1744c7054a6f256e82fcb469d9c1a6aba003cc907cd8cfdbd37bd392c8c89086332b517d5c7187c6b5f52bc232c62626b97f79b091962c1117f1f11df771e076fe42d39588e034e9a629946d9c9f4738fe2550a02bcde63744d58e7380d4d9a3ca4d54f3d7200cd22761c3956847abfb08749c91e6d3575744783a07e536cf6edae0dbed56771af091266cb4e0c6820f2fa89800d0aaa0121d14426b7f422d2232db59220740723b10ac6793a95181ada3c55730f35bc464c9be05f0a657868346693969e859738af0937eb0b345a15450be35f027c5b3eca40d18c385c849d205e863852a22c99af253c4dfb365e4e47e452c40380ddebeb5625de88c4b660f1756c99bd41912a4e7301558140c7bc169e9d5013d58d26ff7f4d52891a79179cd6119ceccb0d474cb863e9b66a14656c56b69e1b029c38a94549e47cf00033dfb24024fe7b01ffc1b66d66dc38baf249db46db12f2f280fed400fe4d82e45366cc6dda19d009825cb8ab6d4006b702d370f5352069ab77e3ff5fcaf8f17b8a54c64f5f9b1f930f7ed36d523f7225169461b70b02806a7c2c9bd180a95654d3d22d5c8f448c3c15fb823c67244d717118c8fd4b160d38c0ad84e907feac89270f229975322745b7ffb6b16ce6034ff9b8301a042dfe77d834261d0bdb7dc5ed03f4d73dfdd3d6fe6be9fd9a62e9eba427a504bc2dfe77d834261d0bdb7dc5ed03f4d73dfdd3d6fe6be9fd9a62e9eba427a504bc03ae3eff8b47b7b64ce273cb5aa42fffc130a8dbedff9f9f389e35ecfcec45e514d2739698b220915853dc01c966c9313c2188b71cb89d7d0974e567bff50ac12ad0e9850cc32c30ba86de8fe9f56f3ad47234f59ffad8e878797a476e794e4b210cba3e0b2a00023412c4ba8510b6c3840240a0833f8931c533e9e23c7d4b42171883b784e9b1d17961558df984d83733b0dd280b9d3e688035bb9c4650adcd173ec32882b8c7de8d9d139a33d121447a9e66ae8e5be191e1c670b9fc49f0ec0a4d6fe60b4830074cdf55fd30f6686487cd6e2bfc5d73e9e1959e04f4eb855001768285c3f649261387dfe90c026fd41fa17a3dd83535ae29ffe280a3b5ab561da4c5712a60fb495210277ba441b5c95479e6568a38ded98fca7fd8a5f9193114db3b879f08b6c164c97baa51758b077efd34e6bccc81cc365c806ed4733e3901380944c20a574a2a764d88aabb896becf6b21d55b840ebd36640f08ed137442fa952875b50e1686c0883d17556dd02c06afbb1b263938493a6bab987a5ba541e45be6ddf8d92d610c9a5960dbcfa84fc217ed34a041eddaffdcfe4cf7c01f218a70ba8a1f3a989d0fd51cc49a43bf1df227c1915388d76aa779260d063195f0b9dd3f6bae48a309bcbf090e962c8790467f58b498fe32977745069668f9af420c27e2aaa41b817d6d37c1148b69e892e600448cb2aeeef8037dbc5fff916dd12d82da6a3646ee6cd0edf94aff4b08efb1d42085c7bd78c8d4052b425adb3c309da9b832b6dece681d0a5c7ba6beef6c3c9ab19646f9066e93b7f21f0c568cf07a1c0cd4e2cdacbaee454c43db1ec7407361b6d2afa1d832deb06ef15cd9e0d251fe38a2865db75f0f379618924bbf680459b94bee526ab043a0aa79c2d178621dd776c0bfd52c0da2268d1b1b0d326f2373b48c182e6cee9caf45685bc63c70ccb9477fc2ae154d5e23f845012f8a72a705891873ebb8c320d0006a50c217d08b142be848e48b600bee9ba1da52e670626bdd8d3c993f9436a4f0ed8c4220126533b08dcda78f4fa264b53f33985fd38d8ec8edcee0b3cb919887b0faebee20d25ecaecdfc133b81607200eb78c092d6fac989ab01a24d22eca34cafa9fcc40d3015675c1d968fa0b95bdb3c91e20946f9afd5557aed59d0c10c0a9daea117124414cafaa4e15c6a38cb8bbbb311c836bdad2d8bd45e45487c1027d60448660c02ee7ba8f84254f07100c900e35da26be9fef064c74e00a1703ba4d253b1982bf20327e8de7adc7dc0a73e2842798e09a127c94ad9a89de607c895a6f4d3482e003713fae9f126a228ca777c859a06cfc5ddb05ce6d563fcd0d92e08a60d77111ce08766ccd61f301af74743fae1d8c10e6e9e00cffe90f58b1c7d9482e75a2d1c33fe7abf91947a162bde087109ba159bca685cbc9a668a724a40e44f6445106eed4891101bd4f743346797c8c78324eba4c9f786825a41a21170de81922724297efedd5135462f8b46be12db32056b82da430c05b9df1a13e21c2a1ef4aa1fc96d23f8b8b7b22dde8a4c866e00cb552514c6c7715b51b0f927408d4bdb3f1326a6386a2bf50622be55922e60cb6d7e6ee5a1235ae03948811cdde2d200c52bb3bd36e38b0349a04c90fce968e047f84d3098b1a76f7d0ede69baf44f9c99', 'transcript_type': 'EVM'}\n",
|
|
"Time gen prf: 1.9011600017547607 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",
|
|
"verifier_setup(verifier_model_path, verifier_compiled_model_path, settings_path, srs_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, comb_data_path, witness_path, prover_compiled_model_path, settings_path, proof_path, pk_path, srs_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"num_inputs: 1\n",
|
|
"prf instances: [[[10512373747352303962, 11798585516934984832, 13421675179368312123, 2200257403316998104], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [13802304918419143583, 17632677359615874021, 16753034178384891922, 1784686540294826319]]]\n",
|
|
"proof boolean: 1.0\n",
|
|
"proof result 1 : 212.0\n",
|
|
"verified\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Verifier verifies\n",
|
|
"verifier_verify(proof_path, settings_path, vk_path, srs_path)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.0"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|