{"id":13570761,"url":"https://github.com/sec-bit/zkPoD-node","last_synced_at":"2025-04-04T07:32:01.871Z","repository":{"id":38401143,"uuid":"193872128","full_name":"sec-bit/zkPoD-node","owner":"sec-bit","description":"zkPoD: A decentralized system for perfect fair data exchange","archived":false,"fork":false,"pushed_at":"2023-05-21T08:07:16.000Z","size":4299,"stargazers_count":211,"open_issues_count":3,"forks_count":37,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-21T20:22:03.479Z","etag":null,"topics":["confidentiality","data-exchange","decentralized-internet","fair-exchange","privacy","zero-knowledge-proofs"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sec-bit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-06-26T09:21:13.000Z","updated_at":"2025-03-02T17:24:29.000Z","dependencies_parsed_at":"2022-08-09T03:16:36.766Z","dependency_job_id":"fc9c60df-ebbc-49a3-bb2e-0d97b16bd7e4","html_url":"https://github.com/sec-bit/zkPoD-node","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sec-bit%2FzkPoD-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sec-bit%2FzkPoD-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sec-bit%2FzkPoD-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sec-bit%2FzkPoD-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sec-bit","download_url":"https://codeload.github.com/sec-bit/zkPoD-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247138913,"owners_count":20890128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["confidentiality","data-exchange","decentralized-internet","fair-exchange","privacy","zero-knowledge-proofs"],"created_at":"2024-08-01T14:00:54.793Z","updated_at":"2025-04-04T07:31:56.864Z","avatar_url":"https://github.com/sec-bit.png","language":"Go","readme":"\n# zkPoD: A decentralized system for data exchange\n\n\n**Available in [ [English](README.md) | [中文](README.zh.md) ]**\n\n[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors)\n[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Discord](https://img.shields.io/discord/586796918248570890.svg)](https://discord.gg/tfUH886)\n[![Build Status](https://travis-ci.org/sec-bit/zkPoD-node.svg?branch=master)](https://travis-ci.org/sec-bit/zkPoD-node)\n\n\n## Overview\n\nzkPoD is a decentralized platform for data exchange between *untrusted parties* realizing \"Payment on Delivery\" without any *trusted third party*. Instead, zkPoD uses blockchain (e.g., Ethereum) as a *trustless third party* to ensure fairness that no party can cheat during data exchange. Moreover, zkPoD is concerned with users' privacy, hiding the intention of users to either blockchain miners or other parties. Any seller can publish data for:\n\n- ***Data Downloading***: Buyers may pay-and-download a data file from a data seller. zkPoD supports data fragments downloading, i.e., buyers may download specific data chunks in one batched transaction. \n\n- ***Data Query***:  zkPoD supports structured data; e.g., the seller organizes data as tables. Multiple columns can be selected as indexed-columns, such that users may pay-and-query records in the table with one or more keywords, and get the records matched. zkPoD ensures that the query results are trustworthy, i.e. (i) if data seller replies with n records, it is impossible that more records are matching that keyword in the table; (ii) these n records are precisely in the table, and any forged records cannot be allowed. \n\nThe three main issues being tackled by zkPoD are\n\n+ The data is precisely what the buyer wants before payment,\n+ The data must be delivered when the buyer pays,\n+ The data won't be leaked before being paid.\n\nA cryptographic protocol, PoD (proof of delivery), is developed to try to solve the issues, ensuring **fairness** between data buyers and sellers. The protocol is zero-knowledge and provable secure (*ongoing work*). See our [technical paper](https://sec-bit.github.io/zkPoD-node/paper.pdf) for more information. \n\nzkPoD is practical and efficient. It could deliver data with TBs in theory. See [performance evaluation section](#Performance) below.\n\n[![asciicast-gif](img/demo.min.gif)](https://asciinema.org/a/251240?autoplay=1\u0026speed=2.71828182846)\n\n## Highlights \n\n+ Decentralization:  zkPoD uses smart contracts on Ethereum as the trustless third party. In theory, zkPoD can be deployed on any blockchains with basic smart contract support. The gas cost in transactions of data exchange is moderate, and the size of data can be up to TBs.\n+ Atomic-swap:  zkPoD supports atomic-swap (as in [ZKCP](https://en.bitcoin.it/wiki/Zero_Knowledge_Contingent_Payment)).\n+ Large data file support.  zkPoD supports delivering large data file within one transaction. See [performance evaluation section](#Performance).\n+ Data query by keywords:  zkPoD supports pay-and-query. Before locating the records interested, a buyer may query for one or more keywords.\n+ Privacy protection: The request of a buyer may be sensitive under some circumstances, the buyer can obfuscate her real intention by adding a few unrelated requests. Then the seller has to respond to all requests without knowing which one is real from the buyer, but she does know that only one response can be visible to the buyer since the buyer only paid for one request. \n+ Inspection of goods:  zkPoD supports the inspection of goods for a buyer at any scale natively. The buyer can randomly select any piece of data at any location and takes it as a sample to check whether it is something she wants or not. Then, the buyer can continue to buy a large amount of data after a satisfied inspection. zkPoD does not set a limit for the number of times a buyer could request for inspection. zkPoD also ensures that every piece of data in every inspection coming from the same data set, including the final batch purchase.\n\n## Project Structure\n\n\u003cp align=\"center\"\u003e \u003cimg src=\"img/overview.svg\"\u003e \u003c/p\u003e\n\n- [zkPoD-node](https://github.com/sec-bit/zkPoD-node) Node application written in Golang for sellers (Alice) and buyers (Bob). It deals with communication, smart contract calling, data transferring, and other zkPoD protocol interactions.\n- [zkPoD-lib](https://github.com/sec-bit/zkPoD-lib) zkPoD core library written in C++ shipping with Golang bindings.\n- [zkPoD-contract](https://github.com/sec-bit/zkPoD-contract) Smart contracts for zkPoD *Decentralized Exchange*.\n\n## Workflow and how it works\n\nWe briefly describe the workflow of transactions on zkPoD by a simplified version of the PoD protocol. \n\nTODO: re-draw this diagram.\n\n![](img/regular.png)\n\n#### Data initialization\n\nData must be processed before being sold. Alice needs to compute the authenticators of data and the Merkle root of them. Authenticators are for data contents and origin verification (even if the data were encrypted). zkPoD supports two modes: plain mode and table mode. \n\n+ plain mode\n+ table mode (CSV files)\n\nFor tabulated data, each row is a record with fixed columns. The buyer may send queries with keywords. Note that the columns must be specified before data initialization to supports keywords.\n\n#### Data transaction\n\nWe present three variant protocols, PoD-AS, PoD-AS* and PoD-CR, used for different purposes. See the [performance evaluation section](#Performance) and our [technical paper](https://sec-bit.github.io/zkPoD-node/paper.pdf) for detailed specification and comparison.\n\nFor simplicity, we introduce two main types of trading mode for data delivery.\n\n+ Atomic-swap mode\n\n1. Bob sends request w.r.t. a data tag\n2. Alice sends encrypted data to Bob (by a one-time random key)\n3. Bob verifies the *encrypted* data with tag by using ZKP.\n4. Bob accepts the data and submits a receipt to the contract (blockchain).\n5. Alice checks the receipt and then reveals the key (for encrypting the data)\n6. Contract (blockchain) verifies if the key matches the receipt and output \"accept\"/\"reject.\"\n\n+ Complaint mode (inspired by Fairswap)\n\n1. Bob sends request w.r.t. a data tag\n2. Alice sends encrypted data to Bob (by a one-time random key)\n3. Bob verifies the *encrypted* data with tag by using ZKP.\n4. Bob accepts the data and submits a receipt to the contract(blockchain).\n5. Alice checks the receipt and then reveals the key (for encrypting the data)\n6. Bob decrypts the data by the key and submits proof of misbehavior to the contract(blockchain) if he finds that Alice was cheating.\n\n### Theories behind\n\nFor fairness and security, the protocol ensures the following requirements:\n\n- {1} Contract (blockchain) cannot learn anything about the data, or encrypted data\n- {2} Bob must submit a correct receipt to get the real key\n- {3} Bob must pay before obtaining the key\n- {4} Bob cannot learn anything from the encrypted data\n- {5} Alice cannot reveal a fake key, which would be ruled out by the verification algorithm of contract(blockchain)\n- {6} Alice cannot send junk data to Bob, who cannot cheat when verifying data tag.\n\nTo ensure **{1, 4, 6}**, we use ZKP based on Pedersen commitments (which is additively homomorphic) with one-time-pad encryption, allowing buyers to verify the data without the help of others. A smart contract is used to exchange crypto coins with keys to ensure **{2, 3, 5}** in the way of transparent, predictable and formally verified (*ongoing work*).\n\nWe use *verifiable random function*, VRF, to support queries with keywords. Currently, zkPoD only supports exact keyword matching. zkPoD adopts *oblivious transfer*, OT, to support privacy-preserving queries.\n\n## Play With It\n\n### Build\n\n*WIP: A building script for all of these steps*\n\n#### 1. Build zkPoD-lib\n\nDependencies of zkPoD-lib could be found [here](https://github.com/sec-bit/zkPoD-lib#dependencies). Make sure you install them first.\n\n```shell\n# Download zkPoD-lib code\nmkdir zkPoD \u0026\u0026 cd zkPoD\ngit clone https://github.com/sec-bit/zkPoD-lib.git\n\n# Pull libsnark submodule\ncd zkPoD-lib\ngit submodule init \u0026\u0026 git submodule update\ncd depends/libsnark\ngit submodule init \u0026\u0026 git submodule update\n\n# Build libsnark\nmkdir build \u0026\u0026 cd build\n# - On Ubuntu\ncmake -DCMAKE_INSTALL_PREFIX=../../install -DMULTICORE=ON -DWITH_PROCPS=OFF -DWITH_SUPERCOP=OFF -DCURVE=MCL_BN128 ..\n# - Or for macOS (see https://github.com/scipr-lab/libsnark/issues/99#issuecomment-367677834)\nCPPFLAGS=-I/usr/local/opt/openssl/include LDFLAGS=-L/usr/local/opt/openssl/lib PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig cmake -DCMAKE_INSTALL_PREFIX=../../install -DMULTICORE=OFF -DWITH_PROCPS=OFF -DWITH_SUPERCOP=OFF -DCURVE=MCL_BN128 ..\nmake \u0026\u0026 make install\n\n# Build zkPoD-lib\ncd ../../..\nmake\n\n# These files should be generated after successful build.\n# pod_setup/pod_setup\n# pod_publish/pod_publish\n# pod_core/libpod_core.so\n# pod_core/pod_core\n\ncd pod_go\nexport GO111MODULE=on\nmake test\n```\n\n#### 2. Build zkPoD-node\n\n```shell\ncd zkPoD\ngit clone https://github.com/sec-bit/zkPoD-node.git\ncd zkPoD-node\nexport GO111MODULE=on\nmake\n```\n\n### Have Fun\n\n#### 1. Setup\n\nWe need a [trusted setup](https://z.cash/technology/paramgen/) to generate zkPoD zkSNARK parameters.\n\nFor convenience and testing purposes, we could download it from [zkPoD-params](https://github.com/sec-bit/zkPoD-params) repo.\n\n```shell\ncd zkPoD-node\nmkdir -p zkPodParam/zksnark_key\ncd zkPodParam/zksnark_key\n# Download zkSNARK pub params, see https://github.com/sec-bit/zkPoD-params\nwget https://raw.githubusercontent.com/sec-bit/zkPoD-params/master/zksnark_key/atomic_swap_vc.pk\nwget https://raw.githubusercontent.com/sec-bit/zkPoD-params/master/zksnark_key/atomic_swap_vc.vk\n```\n\n#### 2. Run node\n\n```shell\ncd zkPoD-node\nmake run\n# A config file named basic.json is generated on local\n```\n\u003e Examples: [`basic.json`](examples/basic.json) - Some basic configs of zkPoD-node program.\n\nTips: \n\nYou should specify `LD_LIBRARY_PATH` for `libpod_core` when executing `zkPoD-node` on Linux. On macOS, you should use `DYLD_LIBRARY_PATH` instead. Check `Makefile` for examples. For convenience, you could set `LD_LIBRARY_PATH` as an environment variable.\n\n```shell\n# On Linux\nexport LD_LIBRARY_PATH=\u003cYOUR_PATH_TO_LIBPOD_CORE\u003e\n\n# Or on macOS\nexport DYLD_LIBRARY_PATH=\u003cYOUR_PATH_TO_LIBPOD_CORE\u003e\n```\n\n#### 3. Save keystore \u0026 get some ETH\n\n- https://faucet.ropsten.be/\n- https://faucet.metamask.io/\n\nTips: A new Ethereum account is generated after the first boot of zkPoD-node. You could read it from the terminal screen or keystore file. Keep your keystore safe. You must have some ETH balance in your Ethereum address for smart contract interaction. Get some for the test from a ropsten Ethereum faucet.\n\n#### 4. As a seller: init data \u0026 publish \n\nOpen a new terminal\n\n```shell\n# On Linux\nexport LD_LIBRARY_PATH=`pwd`/../zkPoD-lib/pod_core/\n\n# Or on macOS\nexport DYLD_LIBRARY_PATH=`pwd`/../zkPoD-lib/pod_core/\n\ncd zkPoD-node\nmkdir bin\ncp ../zkPoD-lib/pod_publish/pod_publish ./bin\n\nwget -O test.txt https://www.gutenberg.org/files/11/11-0.txt\n\n# cp examples/init.json .\n./zkPoD-node -o initdata -init init.json\n# You should get the sigma_mkl_root from logs\n# export sigma_mkl_root=\u003cYOUR_SIGMA_MKL_ROOT\u003e\n./zkPoD-node -o publish -mkl $sigma_mkl_root -eth 200\n# You should get the publish transaction hash\n```\n\u003e Examples: [init.json](examples/init.json) - Use this to describe your data for sell.\n\nTips: For a test, you could use the same Ethereum account for selling and buying. You could also host a zkPoD-node and publish your data description to the [community](https://discord.gg/tfUH886) for trade testing.\n\nHere is everything that you need to let others know.\n\n```\n- Your IP address\n- Your ETH address\n- Data sigma_mkl_root for trade\n- Data description\n- Data bulletin file\n- Data public info \n```\n\nYou could get `bulletin` and `public info` of your data for publishing in path `zkPoD-node/A/publish/$sigma_mkl_root/`.\n\n```\n├── bulletin\n├── extra.json\n├── private\n│   ├── matrix\n│   └── original\n├── public\n│   ├── sigma\n│   └── sigma_mkl_tree\n└── test.txt\n```\n\n#### 5. As a buyer: deposit to contract\n\nYou want to buy some data you interested in from a seller. You could deposit some ETH to *zkPoD exchange contract* first. Your money is still yours before you get the data you want.\n\n```shell\n./zkPoD-node -o deposit -eth 20000 -addr $SELLER_ETH_ADDR\n# You should get the deposit transaction hash\n```\n\n#### 6. As a buyer: purchase data\n\nYou'll make a purchase request to a seller. For convenience, you could fill in some basic info of the seller in the config file.\n\n```shell\n# For test, you could simply copy public info of data from seller folder to project root path.\n# cp A/publish/$sigma_mkl_root/bulletin .\n# cp -r A/publish/$sigma_mkl_root/public .\n./zkPoD-node -o purchase -c config.json\n# You should get the decrypted data in B/transaction/\u003csession_id\u003e folder\n```\n\u003e Examples: [config.json](examples/config.json) - Use this to describe data you are going to buy.\n\nTips:\n1. PoD-AS protocol is much more suitable for permissioned blockchain and only supports up to about 350 KiB on the Ethereum network for the moment due to the block gas limit.\n2. For PoD-AS* protocol, there is no bottleneck in on-chain computation and smart contracts could verify data of unlimited size. But it will have slower off-chain computation.\n3. If the PoD-CR protocol is selected, zkPoD-node complains to the contract automatically with proof proving that the seller is dishonest. As a result, a dishonest seller would never profit from misbehavior.\n\nTODO: Add more examples about a query or private query of table data, and other operations.\n\n## Performance\n\n#### Test Environment\n\n- OS: Ubuntu 16.04.6 LTS x86_64\n- CPU Model: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz\n- CPU Thread Count: 12\n- Memory: 32605840 kB\n\n#### Basic Info\n\n|  Protocol  | Throughput |   Communication   |   Gas Cost (Ethereum)   | Data/Tx (Ethereum) |\n| :----: | :----------------: | :---------------------: | :---------------------: | :---------------------: |\n| PoD-CR |        3.39 MiB/s       |        $O(2n)$        | $O(\\log{}n)$ |         \u003c 100 TiB         |\n| PoD-AS |        3.91 MiB/s       |    $O(2n)$    |    $O(n)$    |        \u003c 350 KiB        |\n| PoD-AS* |    35 KiB/s    |    $O(2n)$    |    $O(1)$    |        Unlimited        |\n\nPoD-AS supports the fastest data delivery with O(n) on-chain computation. The variant is suitable for permissioned blockchain, where the performance (TPS) is high and the computation cost of the smart contract is pretty low.\n\nPoD-AS* is using zkSNARKs to reduce on-chain computation to O(1), but with slower off-chain delivery.\n\nPoD-CR supports fast data delivery and small on-chain computation O(log(n)).\n\n#### Benchmark Results\n\n- Data size: 1024 MiB\n- File type: plain\n- s: 64\n- omp_thread_num: 12\n\n|      Protocol      | Prover (s) | Verifier (s) | Decrypt (s) | Communication Traffic (MiB) | Gas Cost |\n| :------------: | :--------: | :----------: | :---------: | :-------------------------: | :------: |\n| PoD-CR |    124     |     119      |     82      |            2215             | 159,072  |\n|  PoD-AS   |    130     |     131      |    4.187    |            2215             |   `*`    |\n|  PoD-AS*   |    34540     |     344      |    498    |            2226             |   183,485   |\n\n\n`*` PoD-AS protocol does not support 1 GiB file on the Ethereum network at present.\n\n#### Gas Cost on Ethereum\n\nPoD-CR Protocol            |  PoD-AS Protocol      |  PoD-AS* Protocol\n:-------------------------:|:-------------------------:|:-------------------------:\n![](img/Gas-Cost-vs-Data-Size-Batch1.svg)  | ![](img/Gas-Cost-vs-Data-Size-Batch2.svg) | ![](img/Gas-Cost-vs-Data-Size-Batch3.svg) \n\n## Learn more?\n\n+ White paper: an overview introduction of the zkPoD system.\n+ [Technical paper](https://sec-bit.github.io/zkPoD-node/paper.pdf): a document with theoretic details to those who are interested in the theory we are developing.\n+ Community: join us on [*Discord*](https://discord.gg/tfUH886) and follow us on [*Twitter*](https://twitter.com/SECBIT_IO) please!\n\n## Related projects\n\n+ Fairswap:  https://github.com/lEthDev/FairSwap\n+ ZKCP: https://en.bitcoin.it/wiki/Zero_Knowledge_Contingent_Payment\n+ Paypub: https://github.com/unsystem/paypub\n\n## License\n\n[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html)\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore --\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/huyuguang\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2227368?v=4\" width=\"100px;\" alt=\"Hu Yuguang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHu Yuguang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=huyuguang\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-huyuguang\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=huyuguang\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/x0y1\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/33647147?v=4\" width=\"100px;\" alt=\"polymorphism\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epolymorphism\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=x0y1\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-x0y1\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=x0y1\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/10to4\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/35983442?v=4\" width=\"100px;\" alt=\"even\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eeven\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=10to4\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-10to4\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=10to4\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/zer0to0ne\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/36526113?v=4\" width=\"100px;\" alt=\"zer0to0ne\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ezer0to0ne\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=zer0to0ne\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-zer0to0ne\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=zer0to0ne\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://twitter.com/ErrNil\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/36690236?v=4\" width=\"100px;\" alt=\"p0n1\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ep0n1\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=p0n1\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-p0n1\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=p0n1\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/aphasiayc\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/24490151?v=4\" width=\"100px;\" alt=\"aphasiayc\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eaphasiayc\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=aphasiayc\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-aphasiayc\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=aphasiayc\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Vawheter\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/24186846?v=4\" width=\"100px;\" alt=\"Vawheter\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVawheter\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=Vawheter\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-Vawheter\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=Vawheter\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/hzzhang\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/1537758?v=4\" width=\"100px;\" alt=\"Haozhong Zhang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHaozhong Zhang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=hzzhang\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-hzzhang\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=hzzhang\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/pkuzhangchao\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2003972?v=4\" width=\"100px;\" alt=\"Chao Zhang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChao Zhang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-pkuzhangchao\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=pkuzhangchao\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/gy001\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/9260429?v=4\" width=\"100px;\" alt=\"Yu Guo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYu Guo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=gy001\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-gy001\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/sec-bit/zkPoD-node/commits?author=gy001\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":[],"categories":["Applications","Index","Projects"],"sub_categories":["Marketplace","Projects","Ethereum","Zk-Applications"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsec-bit%2FzkPoD-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsec-bit%2FzkPoD-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsec-bit%2FzkPoD-node/lists"}