Awesome
Point verification script
AZTEC 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.
Each participant generated 100.8 million BN254 points. Each one of these contributions is broken up in 20 files themselves structured according to this spec.
Purpose
With this repo, you can:
- Verify that each participant signed the SHA256 digest of each transcript file they generated
- Verify that each participant built upon the previous participant's contribution
- Sign an attestation that you verified your contribution
(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.
(2) proves that each contribution was combined into the final output, and none were discarded.
(3) can be posted publicly, and helps demonstrate to non-participants that a number of independent individuals and institutions took part.
Requirements
In order to run the tools in this repo, you will need:
- Python 3
- Node >10
- pip3
Installation
After cloning this repo, you will need to install npm dependencies by running yarn install
or npm install
in the root directory.
Validation
To launch the validation CLI, run npm run validate
or yarn run validate
. Your terminal should display the following:
To start, enter the address associated with the contribution you would like to validate.
You 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.
Signature validation
Script
This step will:
- Download the participant's transcript 0
- Compute the SHA256 digest of the downloaded file
- Fetch the signature which was submitted by the participant when they took part
- 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)
- Compare the address derived for the public key in (4) to the address you submitted to the validation script
If successful, you will see the computed hash, the fetchd signature, and the recovered address.
The transcript downloaded and signature file can be found in the setup_db
folder.
Inclusion validation
G1 point download script
G2 point download script
Point parsing script
Pairing check script
This step will:
- Download the first G1 point and the first G2 point from each participant's transcript 0
- Install the
py_ecc
python library - Do some light parsing of the downloaded points, transforming binary blobs into EC points
- 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
The 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.
The two equalities which will be checked are:
e(G2_generator, current_participant_first_g1) = e(current_participant_g2, previous_participant_first_g1)
and
e(G2_generator, next_participant_first_g1) = e(next_participant_g2, current_participant_first_g1)
Attestation
Script
After 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.
You 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.
List of participants
0xdbbbef6a9db7ae52e73673747ece3407d8540307
0x740cf03808d45ce6d7519cdaa8c4bafbc0409d8e
0x75d87981d5df0490e2949fb7f1936f16f3b85110
0x7dc00a021cad0cafa9696d7430883a48772aa9bd
0x69dbe791cffd6295a1327f0d2015eaf6e2f52c1d
0x1891ef0a3cdae5b96782bd9e65cdf014ae3c9587
0x3b16821a5dbbff86e4a88ea0621ec6be016cd79a
0xe570b479145327965b88707fe6695316b5982b16
0x1454a61f1d2a90790e04653d02aee637d995f110
0xeeb6cd10a623f8aa2d6b986a842b8340bfab38dd
0x7e5708ded50e35c23d7ef9e22e25412c509b2fcd
0xc7fe9fa93b8b941b714a4158118f5745f42003d6
0x39b3dcdcda1da7051d1ee6df66d3c1d494b4b35f
0x96914c4e5b6ff913522df06604f60a7b26930049
0xdfa007c4b7d0e8dbc87562f564024793d2115129
0xd65b1a3f74d0e65fb8c37755fc4a8bf9c723383e
0xdc08baed2e27e2d69dc479cbfa2d0ec1f45240ab
0x3c22b9cbf6d53d9e00ea506e79f8d0a2233b53c8
0x918a858ed47a61e6866ce475f219ec81feece613
0xdcfb6b6c9613753c0cb6ad0f760e26d496d3c86b
0x53d389867702b19b5b7ba9a12d60b727eae14bb0
0x6a8d553a35122adac225bffa2d97a5ef9549be0e
0x7fc43eabcfc9a1a277bee4aa71b1b91f6295787b
0xacaf87a99d8056d5a2e8daf1a9754301319f2d2e
0x64cb0559ecf1bc692e68b3bac5bfd6391bb161ce
0xdb8f5f7bc1086e59ac909aa845effa09fde735eb
0x864aad25c18680518726cff817f4c7dfa982623a
0x2717aa4d36423416cfa3a716c6a5a8ea108104ca
0x913fd60887e7b99f2ee9115a79f3c5886ad2d47a
0xf95b7ab89fd7d2365a7e6e6a6362489471cd423f
0x0cd54126cf2a83bd0c81f46d99eab8b80d202544
0x3e00521af2e1ef745bb4e59ed80cac14a9103e3c
0x1e7c4a7ec5ee819c6d1db0c10015b73832752a41
0x6c6ef314b536682574a4d5536ae210e3fc7a2e83
0x63f3357c29b029d90789014cfce5f1b50762f456
0x826fee669f9ff0b1d83988a5195e739d0c08d476
0x67156e0f96b43b8e30934f7a809b356c5148721f
0xf02f630d1f2fac0b6c070b7a02a25d534e87c5ec
0xf053adb5d6310219f84b5792db23a4fed3c25d57
0x9f6926882d651affb16975c795b6c2b71348f791
0x5b8e94f4dc4c0cc2989c1ceff7adb7b7f83fc9d7
0xad025662656c27779e7893c8923eb8098c28ab01
0xfc2ec6a21004b9f79ff1ac69e352ec512be6a5aa
0x08d816526bdc9d077dd685bd9fa49f58a5ab8e48
0x037b22bd2ed3df1e5bb8fbf7faa2feac9dda22b0
0x29cfee3953a95a04f78725cf8a83943571441393
0x99a33899af30ad2515c9a6b0968983c098fc8420
0x43f9d5d896055825aecd5736b01d88ffee58ed9f
0x6b542c6ffc8e3880dbd443225d513f1903315859
0x9037a75c997bba5243a884122e9ac5b9c26ee3e2
0x7ab874eeef0169ada0d225e9801a3ffffa26aac3
0xc5c4ef18a806476fbaa1a2727ff4115d3dce7ba2
0x9315d886ea870f47e1619743df8c6e46b3704a42
0x83351a17e7138eac8430d7d17e2e7e71e7b16ce6
0x0653f6401e8d4529b50cc4fb1a0d859c9bf0ef18
0x9407505cdac6be5022d3fa6ad0bc1f5b4284d810
0x158c0148f60abb4a42aed6f6883600dc7ee56907
0x6ce272d67d003a9ba6cd57be41cc5f6a0e9c4be0
0xe4f4ba7af3bc327f48fc35aa82f06bd0f2aa422d
0x6706ea09b9b43efd0cb6c9ffb3bdb538a6af9d0f
0x051f84a3d77324b3765c6fba25ddc62a0975c5fc
0x59839a277fad672ca7652817ede6adf9393dd066
0xc024559c710123b6caf5d225b56913aab339aad0
0xf5e506034b97ec41946f8e203037d655dea0e600
0x0b2059821a9706a8ffe39e530775a8834f33de40
0xe34e752ce6e08d2deb347bed9ebac35973c6a2f0
0x2236060c09298deba9fd23c40f4e2492e86863d5
0xffd1ac3e8818adcbe5c597ea076e8d3210b45df5
0x21f045bda1a7e099c7a5bfd7952e65ce86bfcdae
0x9e12aeb73500577352b2664f1d45d9d4ac7ac61d
0x8540f80fab2afcae8d8fd6b1557b1cf943a0999b
0xabcdef1b9238f734f8fdbf7cb007e73bfe624b8a
0xf3eacd0e23022bddc2035c1bf40674aa73c9c01d
0x86d73b4962acf4e7ef626a73c43a5db68eebf0d0
0x32cefb2dc869bbfe636f7547cda43f561bf88d5a
0xf7a899a23200a56a33a714cfdd3582b09747e544
0x00000080d11010bc5816a0686e93eebcf7544560
0x505e20c0fb8252ca7ac21d54d5432eccd4f2d076
0xb56ab82eda00314971503494beaec6547a415aaa
0xe165f653c8dde97362fa0956cd4f50e1dba0fed9
0x7777238023ba22d86266a5fe43d0b6e17d05d2c5
0x2550d0a2004efd17dc3914ee0015e4f93af235a3
0x70ec9479ed111c4e214bc89e25d576c6c0fa48a0
0xd6acd4d13f3ef64d4ae8eabe1350e87227c4d37e
0x2a130c6c33107a14077b4d5261f8ebb65b908779
0x5b73f2db6a23b3044c4f682a1f13a8e12abdc01d
0xeda98b866ecc8db8b55abec476443cb9c499da60
0xa17ddb3a1ff5e67446c63d320a11766e97085020
0x19db1426ae90c8008fea12f24814d1628c69b655
0xe6c8382ec2cb73f04ce10c982a4b337a19f63a31
0xa986544e7911d1a0a8a2bb3f3ae89a32750e3311
0xbd46134d6060a1386a66793f46d5069eb6be5e9b
0xa490c1b2acf686371382aa6886f008877936fb0f
0xcaf6b409e7a886eda2bed5ce1a890546d34f345f
0x63aab151e3f8c2b2f8d56106d526a26eb3ffe2b6
0x2222979216ea2aec23caf82f35c8ce2376a8c25d
0x83f5752fda8cd711bdded24c5a26c1082a3fad3c
0xbf4f3a01bb3f1d5e994b124784d6e4846b8d322d
0x9066fc5a2e5a60a69116f81e64c37e72151149a4
0x88d116b5cddaf8f8c5ebf837ce6762e9ab3804ce
0x6d8ea0c6d5f04051bee8b200dbff4e7b34364f34
0x07d62a36d35261afecf6cb89382d393a398edc1a
0xa84e201d232f173ec254748e879b87c64d6928b8
0x446fa0c8ead753c7abf0b821f90d4338e72de380
0x16f375e0f83bbdba8071b0c438505eb7fa741fa9
0x8fc37396d421ce68298979c01e2bf39c98960a94
0xc4e3ac28554fa698822f542ec3a81fab53027d59
0x11064f2aadd3ee47f0e13d36d49762f3eac69c3f
0x10f5226c5603abf293feeea9ed7b49c82c0a1562
0xaf2dcb5506ff81e810a66aa067524f362d98d878
0xb83f97a8e3e4ed65d008c738572e7ae2953910bc
0xf81639573a74d47ab408cc9518dfae44643be88b
0x474648ef5b71c4996d495edeb6dcdd7aeb2f7887
0x767cf362df9164337294a29e088fef2f365fd25a
0xa08250f08943671f6a2f92efd1133c20f858f409
0x8c002a5c72d5b2daf0d96c5395179d8ce5d924d8
0x5bbdbaf010eaf6caef40d296d17f0259a27c5c02
0x35293f45d559487d9e8a26aa8bd06f84a38f3929
0x9bee194489b59cc4bed966eb6c25048421813da9
0x4bcb303609f19e71ab82a3a3393c46bfea1e44fc
0xb33b76a232eea680a19889f0f567cafd7ced6ced
0x22ea43c9a56d660b4d65f073c17317b7cb9308aa
0xd8e6f7d6df0c82e3bb7fc39dd2855b7139fed96e
0x867db38c83f4287a71ffd0cdfba6ffae93150ff7
0x2c56c3cc3623250c2bfda0f1704125df652c6044
0x8e907533ca2f493686ee785abffa4a9459eb8d1e
0xcdaaa052191d0ef614e2a3a463b60bb6ec07c1f6
0x71335c1a5f0cd5d1af9c10bed6a3177f916a6d5e
0xd33204a6d9729fbd1afc52d535a8b5bc9bf4d4d1
0xb3daa6d952d57e105c7c02a98c53df712b36db76
0xc25bc1e5ef9d7d4ff79f7851a1c6a5b0610209ad
0x1e17a75616cd74f5846b1b71622aa8e10ea26cc0
0x70bbdb84e4abd452b190f6b7e5d7f131d11d38c8
0x5cdb0039db97409243ca00ca70be8616fba322a0
0x9d6d9c4d2aa7aa68572929cbeb06caf583865c39
0x115c9e1694130640e0237eb8ad66be1ee29e1021
0xeecd1a2e2d9ecc7898b41c64eb5b95b3d4f36d25
0x6ec5515ca4d3d03d3277abf0440302dd88d3d4e7
0x65ee7c57c1eb5fc92f7bfdb7c80aff940c507cc0
0x255a827b8172a4ef2c3cf36d6f86745bc67484c4
0xaf638f50169836d0fa4ba6851852eddc465a77dc
0xf3ad7a80c7debe37db5cee1e3ed45f31a5629e5e
0xc793e40cc38f91a00efc76bb46cc4a556cbfe876
0x762bb0a33f912ab0972541d377e039de0cef8b35
0x5d6610f282fb5a940864da792c6af0bfce9e9fb8
0x93f3b551b8e15a397bcce3494a15c2f26e6f4582
0xd2cb932513eec93fc0a40243c39bf5525c0be5d2
0x36da627552c2166ee81ec2944c131aec4ca8f504
0x0d7cc91c5698995fc44a503e60c270a0fb719bfa
0x7cc2617e201ebac60dd37c940ceff0353bdda0a2
0xe68967c95f5a9bccfdd711a2cbc23ec958f147ef
0x6b6f06c0325125ce5a010a6901ed2231e26b0246
0xc1a075a1f6ab6b74b84e21578f863a613ed5731b
0x2591a8d50ca9a2fa9b9a5b2e02774a6945cbfd2c
0x9a20acff24626e94697ce874f933c32805fa8243
0xdd1b54cf15dd3ff35caa088b40bfb7d586dbd634
0xa3ae668b6239fa3eb1dc26daabb03f244d0259f0
0x7b142aef8f36a4163f8f9ad2aa9b65a1b4f1a931
0x9f61b8e4bcf9d896eed688e352aa8b91c5d03490
0xb51da5f6a840098a2b78a381a2a9716ff1f112c1
0x2db0b18fd469eb489681ab1aeee58019f6342d0a
0x6a3738c6299f45c31697acea647d49edcc9c28a4
0x04a23ba68e4469061cd461e8b847e820d4ced948
0xd243832b1bed5c2306997bb3a6c1698311180a5e
0x4dd5ef35a9d552fe98255d7cb0135c7442433e09
0xa49eec7f4f90598d5117e22e5b54f49408b70ccf
0xadb644f697e4a11a0dcf1d38a88016c99d3b3169
0x5145b8ef462d8b7ac397d5bf880ff651a47ac527
0x1d14c4a99495be54d8fa8e8ffef0ad04db6e73c5
0x9675fb42f8e8f77d0525a05a2e493f109486c551
0xba3ab7472d78c603a0c60751176693e226611eb9
0x0e74ea9735675b5e28cc65f3ac5c70134cf37640
0xcbf62865eab142728810a158ef77c9ed4aaa81b2
0x8b0b3502c6e5859796c69f510de2de8adf6d4225
0x9c3f372a2aacc0d7272f56a4664311b7647b0031
0xa57ec000b7fb9ea9b0119efdee0b8f15f895c2f3