{"id":28630878,"url":"https://github.com/aztecprotocol/ignition-verification","last_synced_at":"2025-06-12T13:08:58.631Z","repository":{"id":44017968,"uuid":"231646944","full_name":"AztecProtocol/ignition-verification","owner":"AztecProtocol","description":"Repository to verify contributions to the AZTEC Ignition ceremony","archived":false,"fork":false,"pushed_at":"2023-03-31T18:45:33.000Z","size":4172,"stargazers_count":17,"open_issues_count":14,"forks_count":7,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-05T23:36:17.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AztecProtocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-03T18:54:54.000Z","updated_at":"2025-04-23T00:43:39.000Z","dependencies_parsed_at":"2023-01-27T05:31:37.571Z","dependency_job_id":null,"html_url":"https://github.com/AztecProtocol/ignition-verification","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AztecProtocol/ignition-verification","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AztecProtocol%2Fignition-verification","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AztecProtocol%2Fignition-verification/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AztecProtocol%2Fignition-verification/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AztecProtocol%2Fignition-verification/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AztecProtocol","download_url":"https://codeload.github.com/AztecProtocol/ignition-verification/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AztecProtocol%2Fignition-verification/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259470953,"owners_count":22862999,"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":[],"created_at":"2025-06-12T13:08:57.049Z","updated_at":"2025-06-12T13:08:58.598Z","avatar_url":"https://github.com/AztecProtocol.png","language":"JavaScript","readme":"# Point verification script\n\nAZTEC ran Ignition, an MPC ceremony to generate a CRS for our privacy network and other zero-knowledge systems like PLONK from October 25th 2019 to the January 2nd 2020. 176 individuals and institutions took part, each generating randomness and adding it to the previous participant's contribution. If even one participant acts honestly and destroys the randomness they generated, the CRS can be trusted.\n\nEach participant generated 100.8 million BN254 points. Each one of these contributions is broken up in 20 files themselves structured according to [this spec](/Transcript_spec.md).\n\n# Purpose\n\nWith this repo, you can:\n\n1. Verify that each participant signed the SHA256 digest of each transcript file they generated\n2. Verify that each participant built upon the previous participant's contribution\n3. Sign an attestation that you verified your contribution\n\n(1) ensures that contributions were in fact uploaded by the owner of the private key associated with the address which participated, and were not replaced or otherwise tampered with.\n\n(2) proves that each contribution was combined into the final output, and none were discarded.\n\n(3) can be posted publicly, and helps demonstrate to non-participants that a number of independent individuals and institutions took part.\n\n# Requirements\n\nIn order to run the tools in this repo, you will need:\n\n- Python 3\n- Node \u003e10\n- pip3\n\n# Installation\n\nAfter cloning this repo, you will need to install npm dependencies by running `yarn install` or `npm install` in the root directory.\n\n# Validation\n\nTo launch the validation CLI, run `npm run validate` or `yarn run validate`. Your terminal should display the following:\n![start](/docs/01_start.png)\n\nTo start, enter the address associated with the contribution you would like to validate.\n\nYou will be presented with a prompt to chose which type of validation you would like to carry out: Signature validation (1), Inclusion validation (2), or both.\n\n![validation](/docs/02_validation_type.png)\n\n## Signature validation\n\n### [Script](/scripts/recoverAddress.sh)\n\nThis step will:\n1. Download the participant's transcript 0\n2. Compute the SHA256 digest of the downloaded file\n3. Fetch the signature which was submitted by the participant when they took part\n4. Use the hash generated in (2) and the signature from (3) with ECRECOVER to extract the public key of the key pair which generated the signature from (3)\n5. Compare the address derived for the public key in (4) to the address you submitted to the validation script\n\n![sig validation](/docs/03_validating_signature.png)\n\nIf successful, you will see the computed hash, the fetchd signature, and the recovered address.\n\n![sig validation](/docs/04_signature_validated.png)\n\nThe transcript downloaded and signature file can be found in the `setup_db` folder.\n\n## Inclusion validation\n\n### [G1 point download script](/scripts/g1.sh)\n### [G2 point download script](/scripts/g2.sh)\n### [Point parsing script](/scripts/parseTranscripts.sh)\n### [Pairing check script](/scripts/checkPairing.py)\n\nThis step will:\n1. Download the first G1 point and the first G2 point from each participant's transcript 0\n2. Install the `py_ecc` python library\n3. Do some light parsing of the downloaded points, transforming binary blobs into EC points\n4. Run a pairing check establishing that the contribution being validated built upon the previous participant's contribution, and was built upon by the next participant\n\n![downloading points](/docs/05_downloading_points.png)\n![python deps](/docs/07_python_dependencies.png)\n![validating_inclusion](/docs/08_validating_inclusion.png)\n\nThe output of the script will display a series of EC points (2 G1 points, 1 G2 point), and the pairing check which was performed using these points.\n\nThe two equalities which will be checked are:\n\n`e(G2_generator, current_participant_first_g1) = e(current_participant_g2, previous_participant_first_g1)`\n\nand\n\n`e(G2_generator, next_participant_first_g1) = e(next_participant_g2, current_participant_first_g1)`\n\n# Attestation\n\n### [Script](/scripts/signAttestation.js)\n\nAfter you have validated a contribution and if you own the associated private key, you can optionally sign an attestation that you have validated your contribution.\n\n![attestation](/docs/09_attestation_signed.png)\n\nYou can publicly post this attestation to link a public profile of yours with a contribution, proving to future users of the output of Ignition that multiple, independent individuals/institutions took part.\n\n# List of participants\n\n```\n0xdbbbef6a9db7ae52e73673747ece3407d8540307\n0x740cf03808d45ce6d7519cdaa8c4bafbc0409d8e\n0x75d87981d5df0490e2949fb7f1936f16f3b85110\n0x7dc00a021cad0cafa9696d7430883a48772aa9bd\n0x69dbe791cffd6295a1327f0d2015eaf6e2f52c1d\n0x1891ef0a3cdae5b96782bd9e65cdf014ae3c9587\n0x3b16821a5dbbff86e4a88ea0621ec6be016cd79a\n0xe570b479145327965b88707fe6695316b5982b16\n0x1454a61f1d2a90790e04653d02aee637d995f110\n0xeeb6cd10a623f8aa2d6b986a842b8340bfab38dd\n0x7e5708ded50e35c23d7ef9e22e25412c509b2fcd\n0xc7fe9fa93b8b941b714a4158118f5745f42003d6\n0x39b3dcdcda1da7051d1ee6df66d3c1d494b4b35f\n0x96914c4e5b6ff913522df06604f60a7b26930049\n0xdfa007c4b7d0e8dbc87562f564024793d2115129\n0xd65b1a3f74d0e65fb8c37755fc4a8bf9c723383e\n0xdc08baed2e27e2d69dc479cbfa2d0ec1f45240ab\n0x3c22b9cbf6d53d9e00ea506e79f8d0a2233b53c8\n0x918a858ed47a61e6866ce475f219ec81feece613\n0xdcfb6b6c9613753c0cb6ad0f760e26d496d3c86b\n0x53d389867702b19b5b7ba9a12d60b727eae14bb0\n0x6a8d553a35122adac225bffa2d97a5ef9549be0e\n0x7fc43eabcfc9a1a277bee4aa71b1b91f6295787b\n0xacaf87a99d8056d5a2e8daf1a9754301319f2d2e\n0x64cb0559ecf1bc692e68b3bac5bfd6391bb161ce\n0xdb8f5f7bc1086e59ac909aa845effa09fde735eb\n0x864aad25c18680518726cff817f4c7dfa982623a\n0x2717aa4d36423416cfa3a716c6a5a8ea108104ca\n0x913fd60887e7b99f2ee9115a79f3c5886ad2d47a\n0xf95b7ab89fd7d2365a7e6e6a6362489471cd423f\n0x0cd54126cf2a83bd0c81f46d99eab8b80d202544\n0x3e00521af2e1ef745bb4e59ed80cac14a9103e3c\n0x1e7c4a7ec5ee819c6d1db0c10015b73832752a41\n0x6c6ef314b536682574a4d5536ae210e3fc7a2e83\n0x63f3357c29b029d90789014cfce5f1b50762f456\n0x826fee669f9ff0b1d83988a5195e739d0c08d476\n0x67156e0f96b43b8e30934f7a809b356c5148721f\n0xf02f630d1f2fac0b6c070b7a02a25d534e87c5ec\n0xf053adb5d6310219f84b5792db23a4fed3c25d57\n0x9f6926882d651affb16975c795b6c2b71348f791\n0x5b8e94f4dc4c0cc2989c1ceff7adb7b7f83fc9d7\n0xad025662656c27779e7893c8923eb8098c28ab01\n0xfc2ec6a21004b9f79ff1ac69e352ec512be6a5aa\n0x08d816526bdc9d077dd685bd9fa49f58a5ab8e48\n0x037b22bd2ed3df1e5bb8fbf7faa2feac9dda22b0\n0x29cfee3953a95a04f78725cf8a83943571441393\n0x99a33899af30ad2515c9a6b0968983c098fc8420\n0x43f9d5d896055825aecd5736b01d88ffee58ed9f\n0x6b542c6ffc8e3880dbd443225d513f1903315859\n0x9037a75c997bba5243a884122e9ac5b9c26ee3e2\n0x7ab874eeef0169ada0d225e9801a3ffffa26aac3\n0xc5c4ef18a806476fbaa1a2727ff4115d3dce7ba2\n0x9315d886ea870f47e1619743df8c6e46b3704a42\n0x83351a17e7138eac8430d7d17e2e7e71e7b16ce6\n0x0653f6401e8d4529b50cc4fb1a0d859c9bf0ef18\n0x9407505cdac6be5022d3fa6ad0bc1f5b4284d810\n0x158c0148f60abb4a42aed6f6883600dc7ee56907\n0x6ce272d67d003a9ba6cd57be41cc5f6a0e9c4be0\n0xe4f4ba7af3bc327f48fc35aa82f06bd0f2aa422d\n0x6706ea09b9b43efd0cb6c9ffb3bdb538a6af9d0f\n0x051f84a3d77324b3765c6fba25ddc62a0975c5fc\n0x59839a277fad672ca7652817ede6adf9393dd066\n0xc024559c710123b6caf5d225b56913aab339aad0\n0xf5e506034b97ec41946f8e203037d655dea0e600\n0x0b2059821a9706a8ffe39e530775a8834f33de40\n0xe34e752ce6e08d2deb347bed9ebac35973c6a2f0\n0x2236060c09298deba9fd23c40f4e2492e86863d5\n0xffd1ac3e8818adcbe5c597ea076e8d3210b45df5\n0x21f045bda1a7e099c7a5bfd7952e65ce86bfcdae\n0x9e12aeb73500577352b2664f1d45d9d4ac7ac61d\n0x8540f80fab2afcae8d8fd6b1557b1cf943a0999b\n0xabcdef1b9238f734f8fdbf7cb007e73bfe624b8a\n0xf3eacd0e23022bddc2035c1bf40674aa73c9c01d\n0x86d73b4962acf4e7ef626a73c43a5db68eebf0d0\n0x32cefb2dc869bbfe636f7547cda43f561bf88d5a\n0xf7a899a23200a56a33a714cfdd3582b09747e544\n0x00000080d11010bc5816a0686e93eebcf7544560\n0x505e20c0fb8252ca7ac21d54d5432eccd4f2d076\n0xb56ab82eda00314971503494beaec6547a415aaa\n0xe165f653c8dde97362fa0956cd4f50e1dba0fed9\n0x7777238023ba22d86266a5fe43d0b6e17d05d2c5\n0x2550d0a2004efd17dc3914ee0015e4f93af235a3\n0x70ec9479ed111c4e214bc89e25d576c6c0fa48a0\n0xd6acd4d13f3ef64d4ae8eabe1350e87227c4d37e\n0x2a130c6c33107a14077b4d5261f8ebb65b908779\n0x5b73f2db6a23b3044c4f682a1f13a8e12abdc01d\n0xeda98b866ecc8db8b55abec476443cb9c499da60\n0xa17ddb3a1ff5e67446c63d320a11766e97085020\n0x19db1426ae90c8008fea12f24814d1628c69b655\n0xe6c8382ec2cb73f04ce10c982a4b337a19f63a31\n0xa986544e7911d1a0a8a2bb3f3ae89a32750e3311\n0xbd46134d6060a1386a66793f46d5069eb6be5e9b\n0xa490c1b2acf686371382aa6886f008877936fb0f\n0xcaf6b409e7a886eda2bed5ce1a890546d34f345f\n0x63aab151e3f8c2b2f8d56106d526a26eb3ffe2b6\n0x2222979216ea2aec23caf82f35c8ce2376a8c25d\n0x83f5752fda8cd711bdded24c5a26c1082a3fad3c\n0xbf4f3a01bb3f1d5e994b124784d6e4846b8d322d\n0x9066fc5a2e5a60a69116f81e64c37e72151149a4\n0x88d116b5cddaf8f8c5ebf837ce6762e9ab3804ce\n0x6d8ea0c6d5f04051bee8b200dbff4e7b34364f34\n0x07d62a36d35261afecf6cb89382d393a398edc1a\n0xa84e201d232f173ec254748e879b87c64d6928b8\n0x446fa0c8ead753c7abf0b821f90d4338e72de380\n0x16f375e0f83bbdba8071b0c438505eb7fa741fa9\n0x8fc37396d421ce68298979c01e2bf39c98960a94\n0xc4e3ac28554fa698822f542ec3a81fab53027d59\n0x11064f2aadd3ee47f0e13d36d49762f3eac69c3f\n0x10f5226c5603abf293feeea9ed7b49c82c0a1562\n0xaf2dcb5506ff81e810a66aa067524f362d98d878\n0xb83f97a8e3e4ed65d008c738572e7ae2953910bc\n0xf81639573a74d47ab408cc9518dfae44643be88b\n0x474648ef5b71c4996d495edeb6dcdd7aeb2f7887\n0x767cf362df9164337294a29e088fef2f365fd25a\n0xa08250f08943671f6a2f92efd1133c20f858f409\n0x8c002a5c72d5b2daf0d96c5395179d8ce5d924d8\n0x5bbdbaf010eaf6caef40d296d17f0259a27c5c02\n0x35293f45d559487d9e8a26aa8bd06f84a38f3929\n0x9bee194489b59cc4bed966eb6c25048421813da9\n0x4bcb303609f19e71ab82a3a3393c46bfea1e44fc\n0xb33b76a232eea680a19889f0f567cafd7ced6ced\n0x22ea43c9a56d660b4d65f073c17317b7cb9308aa\n0xd8e6f7d6df0c82e3bb7fc39dd2855b7139fed96e\n0x867db38c83f4287a71ffd0cdfba6ffae93150ff7\n0x2c56c3cc3623250c2bfda0f1704125df652c6044\n0x8e907533ca2f493686ee785abffa4a9459eb8d1e\n0xcdaaa052191d0ef614e2a3a463b60bb6ec07c1f6\n0x71335c1a5f0cd5d1af9c10bed6a3177f916a6d5e\n0xd33204a6d9729fbd1afc52d535a8b5bc9bf4d4d1\n0xb3daa6d952d57e105c7c02a98c53df712b36db76\n0xc25bc1e5ef9d7d4ff79f7851a1c6a5b0610209ad\n0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0\n0x70bbdb84e4abd452b190f6b7e5d7f131d11d38c8\n0x5cdb0039db97409243ca00ca70be8616fba322a0\n0x9d6d9c4d2aa7aa68572929cbeb06caf583865c39\n0x115c9e1694130640e0237eb8ad66be1ee29e1021\n0xeecd1a2e2d9ecc7898b41c64eb5b95b3d4f36d25\n0x6ec5515ca4d3d03d3277abf0440302dd88d3d4e7\n0x65ee7c57c1eb5fc92f7bfdb7c80aff940c507cc0\n0x255a827b8172a4ef2c3cf36d6f86745bc67484c4\n0xaf638f50169836d0fa4ba6851852eddc465a77dc\n0xf3ad7a80c7debe37db5cee1e3ed45f31a5629e5e\n0xc793e40cc38f91a00efc76bb46cc4a556cbfe876\n0x762bb0a33f912ab0972541d377e039de0cef8b35\n0x5d6610f282fb5a940864da792c6af0bfce9e9fb8\n0x93f3b551b8e15a397bcce3494a15c2f26e6f4582\n0xd2cb932513eec93fc0a40243c39bf5525c0be5d2\n0x36da627552c2166ee81ec2944c131aec4ca8f504\n0x0d7cc91c5698995fc44a503e60c270a0fb719bfa\n0x7cc2617e201ebac60dd37c940ceff0353bdda0a2\n0xe68967c95f5a9bccfdd711a2cbc23ec958f147ef\n0x6b6f06c0325125ce5a010a6901ed2231e26b0246\n0xc1a075a1f6ab6b74b84e21578f863a613ed5731b\n0x2591a8d50ca9a2fa9b9a5b2e02774a6945cbfd2c\n0x9a20acff24626e94697ce874f933c32805fa8243\n0xdd1b54cf15dd3ff35caa088b40bfb7d586dbd634\n0xa3ae668b6239fa3eb1dc26daabb03f244d0259f0\n0x7b142aef8f36a4163f8f9ad2aa9b65a1b4f1a931\n0x9f61b8e4bcf9d896eed688e352aa8b91c5d03490\n0xb51da5f6a840098a2b78a381a2a9716ff1f112c1\n0x2db0b18fd469eb489681ab1aeee58019f6342d0a\n0x6a3738c6299f45c31697acea647d49edcc9c28a4\n0x04a23ba68e4469061cd461e8b847e820d4ced948\n0xd243832b1bed5c2306997bb3a6c1698311180a5e\n0x4dd5ef35a9d552fe98255d7cb0135c7442433e09\n0xa49eec7f4f90598d5117e22e5b54f49408b70ccf\n0xadb644f697e4a11a0dcf1d38a88016c99d3b3169\n0x5145b8ef462d8b7ac397d5bf880ff651a47ac527\n0x1d14c4a99495be54d8fa8e8ffef0ad04db6e73c5\n0x9675fb42f8e8f77d0525a05a2e493f109486c551\n0xba3ab7472d78c603a0c60751176693e226611eb9\n0x0e74ea9735675b5e28cc65f3ac5c70134cf37640\n0xcbf62865eab142728810a158ef77c9ed4aaa81b2\n0x8b0b3502c6e5859796c69f510de2de8adf6d4225\n0x9c3f372a2aacc0d7272f56a4664311b7647b0031\n0xa57ec000b7fb9ea9b0119efdee0b8f15f895c2f3\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faztecprotocol%2Fignition-verification","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faztecprotocol%2Fignition-verification","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faztecprotocol%2Fignition-verification/lists"}