{"action":"created","issue":{"url":"https://api.github.com/repos/zcash/zcash/issues/2266","repository_url":"https://api.github.com/repos/zcash/zcash","labels_url":"https://api.github.com/repos/zcash/zcash/issues/2266/labels{/name}","comments_url":"https://api.github.com/repos/zcash/zcash/issues/2266/comments","events_url":"https://api.github.com/repos/zcash/zcash/issues/2266/events","html_url":"https://github.com/zcash/zcash/issues/2266","id":221919665,"node_id":"MDU6SXNzdWUyMjE5MTk2NjU=","number":2266,"title":"new verifier implemented in Rust","user":{"login":"zookozcash","id":16416064,"node_id":"MDQ6VXNlcjE2NDE2MDY0","avatar_url":"https://avatars3.githubusercontent.com/u/16416064?v=4","gravatar_id":"","url":"https://api.github.com/users/zookozcash","html_url":"https://github.com/zookozcash","followers_url":"https://api.github.com/users/zookozcash/followers","following_url":"https://api.github.com/users/zookozcash/following{/other_user}","gists_url":"https://api.github.com/users/zookozcash/gists{/gist_id}","starred_url":"https://api.github.com/users/zookozcash/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zookozcash/subscriptions","organizations_url":"https://api.github.com/users/zookozcash/orgs","repos_url":"https://api.github.com/users/zookozcash/repos","events_url":"https://api.github.com/users/zookozcash/events{/privacy}","received_events_url":"https://api.github.com/users/zookozcash/received_events","type":"User","site_admin":false},"labels":[{"id":574559315,"node_id":"MDU6TGFiZWw1NzQ1NTkzMTU=","url":"https://api.github.com/repos/zcash/zcash/labels/Rust","name":"Rust","color":"d05010","default":false},{"id":152089339,"node_id":"MDU6TGFiZWwxNTIwODkzMzk=","url":"https://api.github.com/repos/zcash/zcash/labels/SECURITY","name":"SECURITY","color":"e01010","default":false},{"id":546339364,"node_id":"MDU6TGFiZWw1NDYzMzkzNjQ=","url":"https://api.github.com/repos/zcash/zcash/labels/Sapling","name":"Sapling","color":"0e8a16","default":false},{"id":154400305,"node_id":"MDU6TGFiZWwxNTQ0MDAzMDU=","url":"https://api.github.com/repos/zcash/zcash/labels/Zcash%20codebase","name":"Zcash codebase","color":"aef2e0","default":false},{"id":161973759,"node_id":"MDU6TGFiZWwxNjE5NzM3NTk=","url":"https://api.github.com/repos/zcash/zcash/labels/crypto","name":"crypto","color":"ff6b75","default":false},{"id":317477850,"node_id":"MDU6TGFiZWwzMTc0Nzc4NTA=","url":"https://api.github.com/repos/zcash/zcash/labels/error%20handling","name":"error handling","color":"e04040","default":false},{"id":161973760,"node_id":"MDU6TGFiZWwxNjE5NzM3NjA=","url":"https://api.github.com/repos/zcash/zcash/labels/performance","name":"performance","color":"b495f9","default":false},{"id":252191948,"node_id":"MDU6TGFiZWwyNTIxOTE5NDg=","url":"https://api.github.com/repos/zcash/zcash/labels/special%20to%20Zooko","name":"special to Zooko","color":"eb6420","default":false}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":14,"created_at":"2017-04-15T01:52:31Z","updated_at":"2018-12-05T06:59:58Z","closed_at":"2018-12-05T06:59:58Z","author_association":"NONE","body":"Write a new verifier for the Zcash v1 (“Sapling”) ZK-proofs from the ground up in Rust. Run both the current verifier unchanged and the new verifier _in parallel_ so that it doesn't take anymore time (typically), even though it takes more CPU. Wait til both verifiers have completed. If they both return `true`, then the combo returns `true`. If they both return `false` then the combo returns `false`. If they return different things than each other, then the combo logs a detailed error message (including the proof in question and the current message and so on) and then aborts the process.\r\n\r\n(This aborting-the-process part raises questions about blockchain forks and forward progress, but I'm pretty sure it is far more important to alert users and developers and to prevent users from accidentally accepting invalid payments than it is to minimize chances of a blockchain fork. Also, as the Zcash employees well learned during the recent security incident (https://z.cash/blog/security-announcement-2017-04-13.html), I'm firmly of the opinion that the _only_ way to communicate with most users is to abort the process.)"},"comment":{"url":"https://api.github.com/repos/zcash/zcash/issues/comments/444380250","html_url":"https://github.com/zcash/zcash/issues/2266#issuecomment-444380250","issue_url":"https://api.github.com/repos/zcash/zcash/issues/2266","id":444380250,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NDM4MDI1MA==","user":{"login":"daira","id":643204,"node_id":"MDQ6VXNlcjY0MzIwNA==","avatar_url":"https://avatars2.githubusercontent.com/u/643204?v=4","gravatar_id":"","url":"https://api.github.com/users/daira","html_url":"https://github.com/daira","followers_url":"https://api.github.com/users/daira/followers","following_url":"https://api.github.com/users/daira/following{/other_user}","gists_url":"https://api.github.com/users/daira/gists{/gist_id}","starred_url":"https://api.github.com/users/daira/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daira/subscriptions","organizations_url":"https://api.github.com/users/daira/orgs","repos_url":"https://api.github.com/users/daira/repos","events_url":"https://api.github.com/users/daira/events{/privacy}","received_events_url":"https://api.github.com/users/daira/received_events","type":"User","site_admin":false},"created_at":"2018-12-05T06:59:58Z","updated_at":"2018-12-05T06:59:58Z","author_association":"CONTRIBUTOR","body":"What we ended up doing was to:\r\n* write an implementation of the Sprout circuit in Rust to the bellman API, and use it from Sapling activation onward;\r\n* switch to BLS12-381 and Groth16 for Sprout proofs from Sapling activation onward (so, no implementation of BN-254 or PHGR13 in Rust was needed);\r\n* not implement anything else associated with proving or verifying (other than just using librustzcash) in C++."}}
{"actor":{"display_login":"daira"}}