Files
zk-stats-lib/examples/regression/regression.ipynb
2024-02-19 22:17:08 +08:00

365 lines
26 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: ezkl==7.0.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 1)) (7.0.0)\n",
"Requirement already satisfied: torch in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 2)) (2.1.1)\n",
"Requirement already satisfied: requests in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 3)) (2.31.0)\n",
"Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 4)) (1.11.4)\n",
"Requirement already satisfied: numpy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 5)) (1.26.2)\n",
"Requirement already satisfied: matplotlib in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 6)) (3.8.2)\n",
"Requirement already satisfied: statistics in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 7)) (1.0.3.5)\n",
"Requirement already satisfied: onnx in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from -r ../../requirements.txt (line 8)) (1.15.0)\n",
"Requirement already satisfied: fsspec in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (2023.10.0)\n",
"Requirement already satisfied: typing-extensions in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (4.8.0)\n",
"Requirement already satisfied: jinja2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.1.2)\n",
"Requirement already satisfied: filelock in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (3.13.1)\n",
"Requirement already satisfied: sympy in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from torch->-r ../../requirements.txt (line 2)) (1.12)\n",
"Requirement already satisfied: 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: 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: 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: 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: 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: 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: 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: 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: 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: python-dateutil>=2.7 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (2.8.2)\n",
"Requirement already satisfied: fonttools>=4.22.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from matplotlib->-r ../../requirements.txt (line 6)) (4.45.1)\n",
"Requirement already satisfied: 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: 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: docutils>=0.3 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from statistics->-r ../../requirements.txt (line 7)) (0.20.1)\n",
"Requirement already satisfied: protobuf>=3.20.2 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from onnx->-r ../../requirements.txt (line 8)) (4.25.1)\n",
"Requirement already satisfied: six>=1.5 in /Users/jernkun/Library/Python/3.10/lib/python/site-packages (from python-dateutil>=2.7->matplotlib->-r ../../requirements.txt (line 6)) (1.16.0)\n",
"Requirement already satisfied: MarkupSafe>=2.0 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from jinja2->torch->-r ../../requirements.txt (line 2)) (2.1.3)\n",
"Requirement already satisfied: mpmath>=0.19 in /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages (from sympy->torch->-r ../../requirements.txt (line 2)) (1.3.0)\n",
"\u001b[33mWARNING: You are using pip version 21.2.3; however, version 23.3.2 is available.\n",
"You should consider upgrading via the '/usr/local/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install -r ../../requirements.txt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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": 4,
"metadata": {},
"outputs": [],
"source": [
"%run -i ../../zkstats/core.py"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"reg fit: [1.98835287 3.14238058 0.06413647]\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",
"x1_vals = data['x1']\n",
"x2_vals = data['x2']\n",
"y_vals = data['y']\n",
"\n",
"create_dummy(data_path, dummy_data_path)\n",
"dummy_data = json.loads(open(dummy_data_path, \"r\").read())\n",
"dummy_x1_vals = dummy_data['x1']\n",
"dummy_x2_vals = dummy_data['x2']\n",
"dummy_y_vals = dummy_data['y']\n",
"\n",
"\n",
"def stacked_x(*args):\n",
" result = np.column_stack((*args, np.ones_like(args[0])))\n",
" return result\n",
"\n",
"x_one = stacked_x(x1_vals, x2_vals)\n",
"dummy_x_one = stacked_x(dummy_x1_vals, dummy_x2_vals)\n",
"\n",
"w_vals = np.matmul(np.matmul(np.linalg.inv(np.matmul(x_one.transpose(), x_one)), x_one.transpose()), y_vals)\n",
"dummy_w_vals = np.matmul(np.matmul(np.linalg.inv(np.matmul(dummy_x_one.transpose(), dummy_x_one)), dummy_x_one.transpose()), dummy_y_vals)\n",
"\n",
"print(\"reg fit: \", w_vals)\n",
"w_tensor = torch.tensor(w_vals).reshape(1,-1,1)\n",
"dummy_w_tensor = torch.tensor(dummy_w_vals).reshape(1,-1,1)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"scales = [0]\n",
"selected_columns = ['x1', 'x2', 'y']\n",
"commitment_maps = get_data_commitment_maps(data_path, scales)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Verifier/ data consumer side:\n",
"class verifier_model(nn.Module):\n",
" def __init__(self):\n",
" super(verifier_model, self).__init__()\n",
" self.w = nn.Parameter(data = dummy_w_tensor, requires_grad = False)\n",
"\n",
" def forward(self, *args):\n",
" # infer Y from the last parameter\n",
" Y = args[-1]\n",
" X_one = torch.cat((*args[:-1], torch.ones_like(args[0])), dim=2)\n",
" X_T = torch.transpose(X_one, 1, 2)\n",
" return (\n",
" torch.sum(torch.abs(X_T @ X_one @ self.w - X_T @ Y)) <= 0.01 * torch.sum(torch.abs(X_T @ Y)),\n",
" self.w\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": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Theory output: tensor([[[1.9884],\n",
" [3.1424],\n",
" [0.0641]]], dtype=torch.float64)\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\":[-23296,18300],\"logrows\":16,\"num_inner_cols\":2,\"variables\":[[\"batch_size\",1]],\"input_visibility\":{\"Hashed\":{\"hash_is_public\":true,\"outlets\":[]}},\"output_visibility\":\"Public\",\"param_visibility\":\"Private\"},\"num_rows\":11808,\"total_assignments\":794,\"total_const_size\":13,\"model_instance_shapes\":[[1],[1,3,1]],\"model_output_scales\":[0,0],\"model_input_scales\":[0,0,0],\"module_sizes\":{\"kzg\":[],\"poseidon\":[11808,[3]],\"elgamal\":[0,[0]]},\"required_lookups\":[\"Abs\",{\"Div\":{\"denom\":100.0}},{\"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 = w_tensor\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 = w_tensor, requires_grad = False)\n",
"\n",
" def forward(self, *args):\n",
" # infer Y from the last parameter\n",
" Y = args[-1]\n",
" X_one = torch.cat((*args[:-1], torch.ones_like(args[0])), dim=2)\n",
" X_T = torch.transpose(X_one, 1, 2)\n",
" return (\n",
" torch.sum(torch.abs(X_T @ X_one @ self.w - X_T @ Y)) <= 0.01 * torch.sum(torch.abs(X_T @ Y)),\n",
" self.w\n",
" )\n",
"# try scale = [3] for more accuracy\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": 11,
"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: 6.932987928390503 seconds\n",
"=======================================\n",
"Theory output: tensor([[[1.9884],\n",
" [3.1424],\n",
" [0.0641]]], dtype=torch.float64)\n",
"!@# compiled_model exists? False\n",
"!@# compiled_model exists? True\n",
"==== Generating Witness ====\n",
"witness boolean: 1.0\n",
"witness result 1 : 2.0\n",
"witness result 2 : 3.0\n",
"witness result 3 : 0.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': [[[6145674602038562713, 11796601694033167407, 3132644448460071153, 1431119980703310933], [17187590983289934876, 11857991285122296962, 971807162298867662, 379283799527326290], [3957842973089931008, 9845595232537184463, 786695466761881781, 2995319695946854765], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [6425625360762666998, 7924344314350639699, 14762033076929465436, 2023505479389396574], [415066004289224689, 11886516471525959549, 3696305541684646538, 3035258219084094862], [0, 0, 0, 0]]], 'proof': '10363b8402c70e7b80d4f2acd6c3babe01485159a5bccda49d49459ca566e85e2d2c53f12010849171586e24e4d7162f7d183277453197b328311743f255dcb2162cacf200e8d9766319ccc0f01761dc05e8d247ab9390cd3207fd13399d1bb906e3ff51f966b2ed8bffc54e226603bd1c18835dae832c7fb6ed3d8af340a18f28aa38b6ac3145e9c0d93d21d2446d7ee7890d4a1e590322e9406b6e5d823c86258bbb8b7c7ea512419fa7fcd6d57e52285e6ef29905fb822bf0d1648e4842fd0362fd965f28966b3bd0404e74de92e4175bbee869f497d580ed3f6eeddb25ca038fdc208815b0cbda4359c68e1072676af1a6aa18c6b71ecf696f293eb844b60e875c268721ac53e6df3c3eb18f347c0b98b12c9fda5d5b83be995de763ee8924a8e8a77a97be449876959ef32f92967cd544e2717907eae28d6b6da5b5a5650362a14f328af3c701f4d424bf603723d90dc213930530283c7352b4aa17de531c9c5472035b0a1153b4ba444ce48068bed1999abc660a70361fc6d14679663a24496a0c995452b942dd6f300adcd4b6872e23b23f4897025edb7d9089114dc417c0ff75d0ea6db3f757461bcd50e66d09f99ca47b81c8f83eca57d8eaa872be08c62f216d4c543d953a62b03f0f6e309ffc7abae407ddc1f5a97344d28f4c2627fd04dc21df9d34323733bf27c92a94824e39591ac1e472f0a49bb159f1a0d01e709eaeb3dd2d2e517dc6dcd1c109bdac3a32d63b799fdce2d2e18cbcf05a1413c17fb45ddbce66922d6a65fe4340e8f806544b6409942669bc928a82d3bf0a050c74ca14b1cde0fb5d7cf415aaa5fd82ba54ac40bb133e56d600b160307ae02d2eb733a4e2e3921e5e8ad3118657cbc2609b8b4012b328c932ade76c46c9271b9fd15cef1c1bb15c118f4a4a5a4452d6236f82387de3b34b6c82225afb04381b758979d25643aa9366d3c2bf4f7d6cad2d87a4f05bee59ef9f2e24b9f91bd70ae2e4e785dacb57b21afd92807e236c297059545d36060ad5f03a1a41b0628c0246eb7a48a82f20b1f987852c1b2fdc73a79d16276458fadd94b17145eef33610923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec4110923fc17f250f67ea7d803fbab9e04874f72097b6846c22a3c3f63e8991af6e29fc13f6d413264d51b687e311ca85a42d45c84aa11ae401a823f20ff9c6ec41163b2f3a9dcaa385da2f6f53f99fb603971e3e501433d52466625bf7823457e12ceebda1cda7b745179ef24891b80d23bd9eeb20a1148cf7df2a9faf09917a7c1d6632e3ade0d5e7c98d10014adb9e8d0221f784884ecd055037d7eb39b81cf808507452c206b761a503b13ab4dec7b43ad138db5909d8e364af418cc2e11f040e2e67a122381fa19d96ae8012411b106efac18dc3f0a1ace12a06fcc4eaa6322e4d505f2d8914e5c373083e31253a2343d082b40f6b717b4a671f0da05c594c04c15a747429065de787205d953b13fe25a932b56c1314220f0bf2c84cfebad32d7c6be9cfd18ca78f35e60ed5eb3120d74f667ef5eee7e92816e7492c1ec6c022d614bac43448397254b5662ea4df7c41440ad2b697a63244fedf6726e75e1324e3bc6ef48e1af1c34637a196c9975aa4a1d7b05e946772f190b90c98cb95af16b8bad6bbcfd2b48704ae2c20665852ae1c5487422ebe3a7927265b2324c56b0cb02f6ab662d8db9cf46eddebc4257dc0936afd521389d72d7a5f141405ba972248791134cda356dd7a639f33fc4033fe840f0a497a3e4d2a9de194ab4eb2f62262385589734fed696e95b3794f37b53bc16080957575f8cc8b168a177ba61b0ef4ebcb1ef431f8d9d4382dbca7ef56b3c9152cb162801285c1453f9e1c6c9500809c5f0e726f3e3670a5051ed8036d021a5c3900cf5552ebb8634f12d8306b2c33e52fd5b01c00a5dab6179014aba31f81d89af6b6ace472e3b9d07042e4f8215f6f4cd4e46d4f6e5f7ee0c2606dc35f016fa1bffb328638aaaf0ff5a61bb422b7f9e94bda3da2fe6711c1970b7daa7207f8efacbb38749bc43c48297873772aa7df302d5fc5154768e838fac1b27b2f8508ebc970df1da4975db184e4bd15006be00aa35edae04ba1db60a819f23cde460c185752bd2aa4a73cdddb62ed652b9c8ae85ebde279e9a284039d474f34339f223771bb3c9fb6e671a051797b1113df76ba267d0139fe5d4c9165cb562bcc3e5994e7a74989e66691e75927fcce1e6898a2dadc3501c647224735f7466a9673a6f73e92f28734c903d0c37624ae2eca506b158068d94813f3e881c8b90f32c6805d1e705989cfbef142a212ba4a2d00e49b6e0add6f1b674fb67c94cb1fd0c14616cca3938c36e0ca026c3d29e81799c78123f83efeb9b249e27501349e03e0ea22bb39236b5d1bb1e3d297da4415589e7b5eef4e9839cbb0b3c6c2bd481bb1436cf5f502c48e05cbc0b8d2afde27e78c4a11ffed4f42f667634eb55d503ca8affd1799d46f8854d380558547de2f72d67215390d9f1573db08d3987362bbf585c4aeb823c543aaf10a5393658b26169cf7d0bf847f906ecc3ac8a83c1155001e894550c7cb58ea28c5c58ee4441c1ceff039685125b032212294a1cc25556ad81f6048ca83b9550de8d493fdca009559504041e20bba4f9223800d9ac34cdff6556b75aad4ef3b6730cb08230f25453c0c8f094193f9409b21e7dbf10fb0393191a387b67a74d5f4ac8f7788d821dc29a8816db1d9919f55bf4cbd70800dacc90f45ca028e14b65620de9ba1992b013de6beb457553c8c80e5214b66e031de993b603ca55eb3d103bca8278fc70d597edb9d73b9e708cebdc378723e32330ca4c577d2bdb04d627fd2e769d537258aab478cd5159127e71f58625dc3d4ef99985043b6e62716d17bc9d63de018239a52302147c8beae161429e768f2d47492a04a9527406a8fac8189f6a3a1fc07a4e0581c59fd60c2eb62588f40e3068f963ad427e9a42f29cb783ddb0c612a16a8277e4e6f4de5cd274303d2b1969263d9a649f2dd17f7f52f764951fa471d1ef4d0f5931abf036e078a941227ddd5c3944a24c9412825a3cc2cb3468205c1133412ad93d22222d12be4d2e0720db0420ce72c0b94586176964f4c27e827ae01bc7127685ead9f137d6b5fce8e5676620ab887db8f45be8e08e7640344d3b513642c2f74fe43c88b61099c7d5deb78fbe058cef88cfc7b23012f700dc494401bfe4061b2be48f1e52208b7df0bc29678f67882c00cee3965ed2d0600ba46941781e7c7e4a7888e18f1167bd942115f26aa4512391e5face0865c6ec0a3238e12cb191063169fde5a2d75a935e764474bd449b2b7c5ae425dfff3acb8df87fb006d1af4057d22a2d729c363a53e12dee1631cc2b60da3d0ec7d9a73e56adc5323004f05c5d0b5aaf9ac907bc980c84291d5e019d512de89fba79d702a27035806ccab0c626468e515a32f04ceb2902bc739186d3046168c2a049e2c4db8db14203b3ab21f34d6b605322ba502cef14d709ef2c63ab5f7a159cb4608de814d992af4f58ecfd8b28ec5b9b4c0ea13ca3a03083f742552347fbd9c902634e2b6f429ef93e1bf027c8670af5a412cf1bb284ca66e97dc6b6b777f1e127d24ee187313a7c57adeaff22484160808c0e24a9c8e9f685daa41c0803ceef39bda45caf421e427bff6c81b276c211ebe2da60ae469da6da7361fd97a1e9bc0ababafe4ea0a2d8683b81c6e6f5487fb15ea47373c42be61b15b982aff9eb2d51ceb98054622aec825f2e7df026d5d52b5dad614871c2411cd56c430f4974556e1611e8f2300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b997c6ad9e5e5152988759fb761f3844bc83ac9d151c6cff8cb7bd3f0a44c20460b789913f493ba5b275e4ce25700cc79ccffd6171df491677e4d6fb93e651b397359286926d26ff04e4aa1593c836358ba9125cae022073c97f0988f349000c6bc227357a4b7a33c495c1408e8be8c6535fff89891a2442872cfb50acb1100000000000000000000000000000000000000000000000000000000000000000c83e172f44abfc6ca10cd398588f51dc65101b2709a59be62782d643d16d2da008c12ac4d46f5558ff19805d3b294c193d91d522b13fcc013bbb6b71354c85429d5ac72c50250eae7a067f9724cdc0a50fa33741f2c0475f2787e79205d987014f1425cba488236f69ef9ae8c37a5672b34d728af5df057bb51d3d2455d32450330e57e5745f78c740ae5070c2cc68c589e46d1942a021c5f3883066d57010319cb1265679dacd85a8a69e4305317f68cda5cf026e2ad932e54c8ff0981e17a267b148a67e06631d4992d2831c9ddb4ca952e65a454bbad4a096aa57ba25ccd0acb4ba5e77748f854bb5bbe3a8cebf380960b4ccd55c1989567ebec2781547e2da648df8932d81a5ec8e005ed23111b307c9e84761eb6bda0955018c52768a92732811e15beeb47b0b53aace5b16e706ebf522a114df3b547aecea30aa7e29f27177bb6a06747ca9533d7d995d82c03a312b78cd5aeab2bca0ee0233684b28004674de45a9c4f592730bb9554cc9ceb00166a143e6c76079a73aba19bf65f3702858250efdc20ae4d28d5d816140b3fcac87ab4386caa4a2551061433074cb301905a91305134c2aaca9c6b84650eedb09897f4af4f0e043cc206fd02b6f82423ed99ddb43ac9d854b90b449343f661fc2ecd3cc4dfca63c84b0eca184982ce060b5403ad4d8a63627162e670d57399d75d76258394ff225287b2f03d8a2f1d289bf2a8fbe030a30171b74c408d193ed9eedd72eedcf36b4ddfa13adf7d637126104bc7093fa9d943363048fa5f9ef825237610f1f0b2435c36a25b2b9c2bff27dfd69d82c7a5119d179b5b9e95b09fa0ed05b7cd5a5ad626bcdb1cc6e26301165b36a87a452ebb48802afeb24bab6643517ef6fab9564cbe58a2aafe0bb10515117a799c53a32438d63d874f665d1644a691bae6b3dddcdf5b62e8a3d8eff31b40e8edbe537fa1561b4e76739f8a75e091eccc0c2948ccad5a55c04da798b915400143aaf0edb15051c0e73e950bf7e2d23f418aa96775cd9a1c8ba518a5191375b0a2484253c53e92ec578504daa8d46fe79553a349de65bfd3ceda3239411bb9368ea86f8b05206be515e9b162ed4c50f743ecc85686a675a8136c75b763008d595d5502781903e25ce9dea5211a8c585c30b05576cd4423e46a635bc6911be9a0dc3cbe774b0aa83fde3f61365d8f2deb66e5bf0686571b22e111173820152e140db55b9a0c719b37029511dffd2a12b938560614cdd01e50e88c1e574a2cc2a6178a734157c11b49a6c95aac86bf1ab189d9247538fee5407992bdeacb05b5f2c5f43024990a5641eb143c963996947549e656274af399e0da9bff6d16173936057ae4cedb9fa7a796a32f90e85464e11bf259000c80824abf58abaf2614ec76b14274dc40aa619ba43725a5f855e5ed21c91aa61c3afc8c8ad11ded1c2b3122b5330a4b10bad5f4e9749442986c1444a8640a63e984c1d7efd7d86cf907949f4e34ec12691d5f8dd43471085e6ebb3add8107de4a993fb6332ad9a15f24fb973a42183e566991ed2318298c5de7fa18c1208c29764a08462aa9ab0829082166da97ee2e8b1b776f6544c00d343b74e2c50476fce8edfb22e824d1802e157739c5e7c08f5a05ed269686d8d246b2008408263adfd551626ce32a95879c11e28654bd5021f0553df99175dcbde3529b64a2def7718efbcb6c0c53e5c8c623ba0f4289b1f6adb62c2c87b38a234d8488ee4c1ca28223f739633eb7733225157739c5e7c08f5a05ed269686d8d246b2008408263adfd551626ce32a95879c0c11bc3763d38c46aca5de6ef5171f34b5666eec438cdf9552668bf629ed31ed205e46753d9dd22311b2b61e3247ab7d997bbdb0414f73cc0139af136284f16d22eb9c51fd738229ceee3e05cb9048def5a01381f0c52cc5618af947820b0ffe0ca248df137ee23efb4554333963e256e88ded17a0115e7da1ebda195fd30600029ea3aead2a96326aa07310eadfc6076d140206a9e52a03d4c269faf3239c0f01f28b7ea5a9f842658449aa240d7d3df85700d6687a597883633ced3316083623a791c50a053d121bef0d2fa4ac046822d36919007dd7d7e06b0f39b358a6c4', 'transcript_type': 'EVM'}\n",
"Time gen prf: 9.653532981872559 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": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"num_inputs: 3\n",
"prf instances: [[[6145674602038562713, 11796601694033167407, 3132644448460071153, 1431119980703310933], [17187590983289934876, 11857991285122296962, 971807162298867662, 379283799527326290], [3957842973089931008, 9845595232537184463, 786695466761881781, 2995319695946854765], [12436184717236109307, 3962172157175319849, 7381016538464732718, 1011752739694698287], [6425625360762666998, 7924344314350639699, 14762033076929465436, 2023505479389396574], [415066004289224689, 11886516471525959549, 3696305541684646538, 3035258219084094862], [0, 0, 0, 0]]]\n",
"proof boolean: 1.0\n",
"proof result 1 : 2.0\n",
"proof result 2 : 3.0\n",
"proof result 3 : 0.0\n",
"verified\n"
]
}
],
"source": [
"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
}