{"id":16036269,"url":"https://github.com/noot/zku-project","last_synced_at":"2026-05-13T03:06:35.958Z","repository":{"id":38799186,"uuid":"499636776","full_name":"noot/zku-project","owner":"noot","description":null,"archived":false,"fork":false,"pushed_at":"2022-07-03T15:38:38.000Z","size":3087,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-03T00:15:58.264Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Solidity","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/noot.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}},"created_at":"2022-06-03T20:03:34.000Z","updated_at":"2022-06-12T22:42:32.000Z","dependencies_parsed_at":"2022-09-20T12:05:22.856Z","dependency_job_id":null,"html_url":"https://github.com/noot/zku-project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/noot/zku-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noot%2Fzku-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noot%2Fzku-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noot%2Fzku-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noot%2Fzku-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noot","download_url":"https://codeload.github.com/noot/zku-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noot%2Fzku-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32965805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T23:30:32.555Z","status":"online","status_checked_at":"2026-05-13T02:00:07.132Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-10-08T22:02:23.425Z","updated_at":"2026-05-13T03:06:35.939Z","avatar_url":"https://github.com/noot.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Proof-of-Funds\n\nAn application that allows a user to prove they had at least some amount of funds at a certain block.\n\n## How it works\n\nThe zk component of this application creates a proof of inclusion within some set of addresses and that the prover owns the private key of one of these addresses.\n\nOn the verifier side, the verifier checks that these addresses have a certain balance and that the zk-proof is valid.\n\n- circuits: contains `MerkleTree.circom` that creates a merkle tree of addresses and `Address.circom` that outputs an address given a private key. `main.circom` combines these two circuits and proves that a private key is known for some address in the merkle tree.\n- contracts: `Verifier.sol` verifies the zk-proof. \n- backend: allows prover to easily find set of addresses to use in the set that have a certain balance.\n- ui: allows users to easily generate and verify fund proofs.\n\nThis project could be generalized to prove membership in any set of accounts, for example a set of token owners.\n\n## Instructions\n\nDependencies:\n- circom 2.0\n- npm / node.js\n\nTo install dependencies and build the circuits:\n```bash\nmake build\n```\n\nTo test:\n```bash\nnpx hardhat test\n```\n\n## UI (development)\n\nTo run the UI locally, firstly import the following key (hardhat's first deterministic key) into MetaMask:\n```\n0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80\n```\n\nMake sure MetaMask's network is set to `localhost:8545`.\n\nThen, run the following script to build and deploy the contract and start the UI:\n```bash\nbash scripts/start-ui.sh\n```\n\nThen, go to `http://localhost:3000` to see the UI.\n\n## UI (Goerli testnet)\n\nMake sure MetaMask's network is set to Goerli and you have an account with some Goerli ETH in it (unless you want to prove you have 0 ETH!)\n\nThen, run the following script to build and deploy the contract and start the UI:\n```bash\nbash scripts/start-ui.sh\n```\n\nThen, go to `http://localhost:3000` to see the UI.\n\n## Applications\n\nProof-of-Funds has potential applications including, but not limited to:\n- proof of ownership at a certain time\n- privacy-preserving airdrop claims\n- authentication, login, DAO access (if extended to tokens)\n- proof of minimal capital (eg. loans)\n- stablecoin collateralization proof\n\nWhile many of these are currently doable, proof-of-funds allows them to be done in a privacy-preserving manner.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoot%2Fzku-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoot%2Fzku-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoot%2Fzku-project/lists"}