{"action":"created","comment":{"url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/comments/234382273","pull_request_review_id":176024341,"id":234382273,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNDM4MjI3Mw==","diff_hunk":"@@ -0,0 +1,530 @@\n+The rank-1 constraint system API for programmatically defining constraint systems.\n+\n+## Building a proof-of-shuffle constraint system\n+\n+```ascii,no_run\n+A shuffle is a permutation of a list of `k` scalars `{x_i}` into a list of `k` scalars `{y_i}`.\n+\n+Algebraically it can be expressed as a statement that for a free variable `z`, the roots of the two polynomials in terms of `z` are the same up to a permutation:\n+\n+    ∏(x_i - z) == ∏(y_i - z)\n+\n+The prover can commit to blinded scalars `x_i` and `y_i` then receive a random challenge `z`,\n+and build a proof that the above relation holds.\n+\n+K-shuffle requires `2*(K-1)` multipliers.\n+\n+For K > 1:\n+\n+        (x_0 - z)---⊗------⊗---(y_0 - z)        // mulx[0], muly[0]\n+                    |      |\n+        (x_1 - z)---⊗      ⊗---(y_1 - z)        // mulx[1], muly[1]\n+                    |      |\n+                   ...    ...\n+                    |      |\n+    (x_{k-2} - z)---⊗      ⊗---(y_{k-2} - z)    // mulx[k-2], muly[k-2]\n+                   /        \\\n+    (x_{k-1} - z)_/          \\_(y_{k-1} - z)\n+\n+\tConnect left and right sides of the shuffle statement\n+\t    mulx_out[0] = muly_out[0]\n+\n+\tFor i == [0, k-3]:\n+\t    mulx_left[i]  = x_i - z\n+\t    mulx_right[i] = mulx_out[i+1]\n+\t    muly_left[i]  = y_i - z\n+\t    muly_right[i] = muly_out[i+1]\n+\n+\tThe last multipliers connect two last variables (on each side)\n+\t    mulx_left[k-2]  = x_{k-2} - z\n+\t    mulx_right[k-2] = x_{k-1} - z\n+\t    muly_left[k-2]  = y_{k-2} - z\n+\t    muly_right[k-2] = y_{k-1} - z\n+\n+For K = 1:\n+\tConnect x to y directly, omitting the challenge entirely as it cancels out\n+    \tx_0 = y_0\n+```\n+\n+This shuffle `prove` function takes a list of scalar inputs and outputs, makes commitments to them, and creates a proof that the committed outputs are a valid reordering of the committed inputs. \n+The shuffle `verify` function verifies that, given a shuffle proof and a list of committed inputs and outputs, the outputs are a valid reordering of the inputs.\n+\n+Because only the prover knows the scalar values of the inputs and outputs, and the verifier only sees the (blinded) committed inputs and outputs, the verifier has no knowledge of what the underlying inputs and output values are. Therefore, the only information the verifier learns from this protocol is whether or not the committed outputs are a valid shuffle of the committed inputs - this is why it is a zero-knowledge proof.\n+\n+```rust\n+extern crate bulletproofs;\n+extern crate curve25519_dalek;\n+extern crate merlin;\n+extern crate rand;\n+\n+use bulletproofs::r1cs::*;\n+use bulletproofs::{BulletproofGens, PedersenGens};\n+use curve25519_dalek::ristretto::CompressedRistretto;\n+use curve25519_dalek::scalar::Scalar;\n+use merlin::Transcript;\n+use rand::thread_rng;\n+\n+// Shuffle gadget (documented in markdown file)\n+\n+/// A proof-of-shuffle.\n+struct ShuffleProof(R1CSProof);\n+\n+impl ShuffleProof {\n+    fn gadget<CS: ConstraintSystem>(cs: &mut CS, x: &[Variable], y: &[Variable]) {\n+        let z = cs.challenge_scalar(b\"shuffle challenge\");\n+\n+        assert_eq!(x.len(), y.len());\n+        let k = x.len();\n+\n+        if k == 1 {\n+            cs.constrain(y[0] - x[0]);\n+            return;\n+        }\n+\n+        // Make last x multiplier for i = k-1 and k-2\n+        let (_, _, last_mulx_out) = cs.multiply(x[k - 1] - z, x[k - 2] - z);\n+\n+        // Make multipliers for x from i == [0, k-3]\n+        let first_mulx_out = (0..k - 2).rev().fold(last_mulx_out, |prev_out, i| {\n+            let (_, _, o) = cs.multiply(prev_out.into(), x[i] - z);\n+            o\n+        });\n+\n+        // Make last y multiplier for i = k-1 and k-2\n+        let (_, _, last_muly_out) = cs.multiply(y[k - 1] - z, y[k - 2] - z);\n+\n+        // Make multipliers for y from i == [0, k-3]\n+        let first_muly_out = (0..k - 2).rev().fold(last_muly_out, |prev_out, i| {\n+            let (_, _, o) = cs.multiply(prev_out.into(), y[i] - z);\n+            o\n+        });\n+\n+        // Constrain last x mul output and last y mul output to be equal\n+        cs.constrain(first_mulx_out - first_muly_out);\n+    }\n+}\n+```\n+\n+In this example, `ShuffleProof::gadget()` is private function that adds constraints to the constraint system that enforce that `y` (the outputs) are a valid reordering of `x` (the inputs). \n+\n+First, the function gets a challenge scalar `z` by calling the `ConstraintSystem::challenge_scalar`. This challenge is generated from commitments to high-level variables that were passed to the `ConstraintSystem` when it was created. As noted in the `challenge_scalar` documentation, it is important to ensure that the challenge is sound by making sure that low-level variables are bound to the high-level variables. \n+\n+After a check for the lengths of `x` and `y`, the function then makes multipliers to create polynomials in terms of the challenge scalar `z`. It starts with the last multipliers, representing \\\\( (x_{k-1} - z) * (x_{k-2} - z) \\\\) and \\\\( (y_{k-1} - z) * (y_{k-2} - z) \\\\). The outputs to these last multipliers than become an input to the next multiplier. This continues recursively until it reaches \\\\( x_0 \\\\) and \\\\(y_0\\\\). Then, it adds a constraint that \\\\( x_0 = y_0 \\\\), which constrains that the two polynomials in terms of challenge scalar `z` are equal to each other. This is true if and only if `y` is a valid reordering of `x`.","path":"docs/r1cs-docs-example.md","position":112,"original_position":112,"commit_id":"1090aaf52256acaa22cae57c8a2e409f8895fb6a","original_commit_id":"1090aaf52256acaa22cae57c8a2e409f8895fb6a","user":{"login":"cathieyun","id":3314874,"node_id":"MDQ6VXNlcjMzMTQ4NzQ=","avatar_url":"https://avatars3.githubusercontent.com/u/3314874?v=4","gravatar_id":"","url":"https://api.github.com/users/cathieyun","html_url":"https://github.com/cathieyun","followers_url":"https://api.github.com/users/cathieyun/followers","following_url":"https://api.github.com/users/cathieyun/following{/other_user}","gists_url":"https://api.github.com/users/cathieyun/gists{/gist_id}","starred_url":"https://api.github.com/users/cathieyun/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cathieyun/subscriptions","organizations_url":"https://api.github.com/users/cathieyun/orgs","repos_url":"https://api.github.com/users/cathieyun/repos","events_url":"https://api.github.com/users/cathieyun/events{/privacy}","received_events_url":"https://api.github.com/users/cathieyun/received_events","type":"User","site_admin":false},"body":"whoops, good catch","created_at":"2018-11-17T00:07:05Z","updated_at":"2018-11-17T00:07:05Z","html_url":"https://github.com/dalek-cryptography/bulletproofs/pull/219#discussion_r234382273","pull_request_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/comments/234382273"},"html":{"href":"https://github.com/dalek-cryptography/bulletproofs/pull/219#discussion_r234382273"},"pull_request":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219"}},"in_reply_to_id":234377364},"pull_request":{"url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219","id":231654975,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMxNjU0OTc1","html_url":"https://github.com/dalek-cryptography/bulletproofs/pull/219","diff_url":"https://github.com/dalek-cryptography/bulletproofs/pull/219.diff","patch_url":"https://github.com/dalek-cryptography/bulletproofs/pull/219.patch","issue_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/219","number":219,"state":"open","locked":false,"title":"Edit doctest example [WIP]","user":{"login":"hdevalence","id":44879,"node_id":"MDQ6VXNlcjQ0ODc5","avatar_url":"https://avatars2.githubusercontent.com/u/44879?v=4","gravatar_id":"","url":"https://api.github.com/users/hdevalence","html_url":"https://github.com/hdevalence","followers_url":"https://api.github.com/users/hdevalence/followers","following_url":"https://api.github.com/users/hdevalence/following{/other_user}","gists_url":"https://api.github.com/users/hdevalence/gists{/gist_id}","starred_url":"https://api.github.com/users/hdevalence/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hdevalence/subscriptions","organizations_url":"https://api.github.com/users/hdevalence/orgs","repos_url":"https://api.github.com/users/hdevalence/repos","events_url":"https://api.github.com/users/hdevalence/events{/privacy}","received_events_url":"https://api.github.com/users/hdevalence/received_events","type":"User","site_admin":false},"body":"Reformat the shuffle proof doctest in the r1cs docs","created_at":"2018-11-16T21:04:31Z","updated_at":"2018-11-17T00:07:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8f478809aa9fa526e04957ea76cc5bd2a109c3ca","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219/commits","review_comments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219/comments","review_comment_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/219/comments","statuses_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/statuses/1090aaf52256acaa22cae57c8a2e409f8895fb6a","head":{"label":"dalek-cryptography:split-doctest","ref":"split-doctest","sha":"1090aaf52256acaa22cae57c8a2e409f8895fb6a","user":{"login":"dalek-cryptography","id":35540388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTQwMzg4","avatar_url":"https://avatars3.githubusercontent.com/u/35540388?v=4","gravatar_id":"","url":"https://api.github.com/users/dalek-cryptography","html_url":"https://github.com/dalek-cryptography","followers_url":"https://api.github.com/users/dalek-cryptography/followers","following_url":"https://api.github.com/users/dalek-cryptography/following{/other_user}","gists_url":"https://api.github.com/users/dalek-cryptography/gists{/gist_id}","starred_url":"https://api.github.com/users/dalek-cryptography/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalek-cryptography/subscriptions","organizations_url":"https://api.github.com/users/dalek-cryptography/orgs","repos_url":"https://api.github.com/users/dalek-cryptography/repos","events_url":"https://api.github.com/users/dalek-cryptography/events{/privacy}","received_events_url":"https://api.github.com/users/dalek-cryptography/received_events","type":"Organization","site_admin":false},"repo":{"id":119915731,"node_id":"MDEwOlJlcG9zaXRvcnkxMTk5MTU3MzE=","name":"bulletproofs","full_name":"dalek-cryptography/bulletproofs","private":false,"owner":{"login":"dalek-cryptography","id":35540388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTQwMzg4","avatar_url":"https://avatars3.githubusercontent.com/u/35540388?v=4","gravatar_id":"","url":"https://api.github.com/users/dalek-cryptography","html_url":"https://github.com/dalek-cryptography","followers_url":"https://api.github.com/users/dalek-cryptography/followers","following_url":"https://api.github.com/users/dalek-cryptography/following{/other_user}","gists_url":"https://api.github.com/users/dalek-cryptography/gists{/gist_id}","starred_url":"https://api.github.com/users/dalek-cryptography/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalek-cryptography/subscriptions","organizations_url":"https://api.github.com/users/dalek-cryptography/orgs","repos_url":"https://api.github.com/users/dalek-cryptography/repos","events_url":"https://api.github.com/users/dalek-cryptography/events{/privacy}","received_events_url":"https://api.github.com/users/dalek-cryptography/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dalek-cryptography/bulletproofs","description":" A pure-Rust implementation of Bulletproofs using Ristretto.","fork":false,"url":"https://api.github.com/repos/dalek-cryptography/bulletproofs","forks_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/forks","keys_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/teams","hooks_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/hooks","issue_events_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/events{/number}","events_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/events","assignees_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/assignees{/user}","branches_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/branches{/branch}","tags_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/tags","blobs_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/refs{/sha}","trees_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/statuses/{sha}","languages_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/languages","stargazers_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/stargazers","contributors_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/contributors","subscribers_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/subscribers","subscription_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/subscription","commits_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/commits{/sha}","git_commits_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/commits{/sha}","comments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/comments{/number}","issue_comment_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/comments{/number}","contents_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/contents/{+path}","compare_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/merges","archive_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/downloads","issues_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues{/number}","pulls_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls{/number}","milestones_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/milestones{/number}","notifications_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/labels{/name}","releases_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/releases{/id}","deployments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/deployments","created_at":"2018-02-02T01:35:49Z","updated_at":"2018-11-16T08:36:59Z","pushed_at":"2018-11-16T22:55:26Z","git_url":"git://github.com/dalek-cryptography/bulletproofs.git","ssh_url":"git@github.com:dalek-cryptography/bulletproofs.git","clone_url":"https://github.com/dalek-cryptography/bulletproofs.git","svn_url":"https://github.com/dalek-cryptography/bulletproofs","homepage":"","size":3358,"stargazers_count":226,"watchers_count":226,"language":"Rust","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"archived":false,"open_issues_count":21,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":18,"open_issues":21,"watchers":226,"default_branch":"main"}},"base":{"label":"dalek-cryptography:develop","ref":"develop","sha":"48b1dfa2ebb510ac57393f13bc82eecc95acd8ce","user":{"login":"dalek-cryptography","id":35540388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTQwMzg4","avatar_url":"https://avatars3.githubusercontent.com/u/35540388?v=4","gravatar_id":"","url":"https://api.github.com/users/dalek-cryptography","html_url":"https://github.com/dalek-cryptography","followers_url":"https://api.github.com/users/dalek-cryptography/followers","following_url":"https://api.github.com/users/dalek-cryptography/following{/other_user}","gists_url":"https://api.github.com/users/dalek-cryptography/gists{/gist_id}","starred_url":"https://api.github.com/users/dalek-cryptography/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalek-cryptography/subscriptions","organizations_url":"https://api.github.com/users/dalek-cryptography/orgs","repos_url":"https://api.github.com/users/dalek-cryptography/repos","events_url":"https://api.github.com/users/dalek-cryptography/events{/privacy}","received_events_url":"https://api.github.com/users/dalek-cryptography/received_events","type":"Organization","site_admin":false},"repo":{"id":119915731,"node_id":"MDEwOlJlcG9zaXRvcnkxMTk5MTU3MzE=","name":"bulletproofs","full_name":"dalek-cryptography/bulletproofs","private":false,"owner":{"login":"dalek-cryptography","id":35540388,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM1NTQwMzg4","avatar_url":"https://avatars3.githubusercontent.com/u/35540388?v=4","gravatar_id":"","url":"https://api.github.com/users/dalek-cryptography","html_url":"https://github.com/dalek-cryptography","followers_url":"https://api.github.com/users/dalek-cryptography/followers","following_url":"https://api.github.com/users/dalek-cryptography/following{/other_user}","gists_url":"https://api.github.com/users/dalek-cryptography/gists{/gist_id}","starred_url":"https://api.github.com/users/dalek-cryptography/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalek-cryptography/subscriptions","organizations_url":"https://api.github.com/users/dalek-cryptography/orgs","repos_url":"https://api.github.com/users/dalek-cryptography/repos","events_url":"https://api.github.com/users/dalek-cryptography/events{/privacy}","received_events_url":"https://api.github.com/users/dalek-cryptography/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/dalek-cryptography/bulletproofs","description":" A pure-Rust implementation of Bulletproofs using Ristretto.","fork":false,"url":"https://api.github.com/repos/dalek-cryptography/bulletproofs","forks_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/forks","keys_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/teams","hooks_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/hooks","issue_events_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/events{/number}","events_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/events","assignees_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/assignees{/user}","branches_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/branches{/branch}","tags_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/tags","blobs_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/refs{/sha}","trees_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/statuses/{sha}","languages_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/languages","stargazers_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/stargazers","contributors_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/contributors","subscribers_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/subscribers","subscription_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/subscription","commits_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/commits{/sha}","git_commits_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/git/commits{/sha}","comments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/comments{/number}","issue_comment_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/comments{/number}","contents_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/contents/{+path}","compare_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/merges","archive_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/downloads","issues_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues{/number}","pulls_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls{/number}","milestones_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/milestones{/number}","notifications_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/labels{/name}","releases_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/releases{/id}","deployments_url":"https://api.github.com/repos/dalek-cryptography/bulletproofs/deployments","created_at":"2018-02-02T01:35:49Z","updated_at":"2018-11-16T08:36:59Z","pushed_at":"2018-11-16T22:55:26Z","git_url":"git://github.com/dalek-cryptography/bulletproofs.git","ssh_url":"git@github.com:dalek-cryptography/bulletproofs.git","clone_url":"https://github.com/dalek-cryptography/bulletproofs.git","svn_url":"https://github.com/dalek-cryptography/bulletproofs","homepage":"","size":3358,"stargazers_count":226,"watchers_count":226,"language":"Rust","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"archived":false,"open_issues_count":21,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":18,"open_issues":21,"watchers":226,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219"},"html":{"href":"https://github.com/dalek-cryptography/bulletproofs/pull/219"},"issue":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/219"},"comments":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/issues/219/comments"},"review_comments":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219/comments"},"review_comment":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/pulls/219/commits"},"statuses":{"href":"https://api.github.com/repos/dalek-cryptography/bulletproofs/statuses/1090aaf52256acaa22cae57c8a2e409f8895fb6a"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"cathieyun"}}