{"action":"created","comment":{"url":"https://api.github.com/repos/nucypher/nucypher/pulls/comments/276518466","pull_request_review_id":228102037,"id":276518466,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI3NjUxODQ2Ng==","diff_hunk":"@@ -14,60 +14,166 @@\n You should have received a copy of the GNU Affero General Public License\n along with nucypher.  If not, see <https://www.gnu.org/licenses/>.\n \"\"\"\n+from typing import Tuple\n+\n+import math\n+from decimal import Decimal\n+\n from math import log\n \n \n-class Economics:\n-    def __init__(\n-            self,\n-            initial_supply=10**9,\n-            initial_inflation=1.0,\n-            T_half=2.0,\n-            T_sat=1.0,\n-            small_staker_multiplier=0.5) -> None:\n+class TokenEconomics:\n+    \"\"\"\n+    Calculate parameters to use in token and escrow deployment\n+    from high-level human-understandable parameters.\n+\n+    Formula for staking in one period:\n+    (totalSupply - currentSupply) * (lockedValue / totalLockedValue) * (k1 + allLockedPeriods) / k2\n+\n+    K2 - Staking coefficient\n+    K1 - Locked periods coefficient\n+\n+    if allLockedPeriods > awarded_periods then allLockedPeriods = awarded_periods\n+    kappa * log(2) / halving_delay === (k1 + allLockedPeriods) / k2\n+\n+    ...but also...\n+\n+    kappa = (small_stake_multiplier + (1 - small_stake_multiplier) * min(T, T1) / T1)\n+    where allLockedPeriods == min(T, T1)\n+    \"\"\"\n+\n+    # Token Denomination\n+    __token_decimals = 18\n+    nunits_per_token = 10 ** __token_decimals          # Smallest unit designation\n+\n+    # Period Definition\n+    hours_per_period = 24                            # Hours in single period\n+    seconds_per_period = hours_per_period * 60 * 60  # Seconds in single period\n+\n+    # Time Constraints\n+    minimum_locked_periods = 30                      # 720 Hours minimum\n+\n+    # Value Constraints\n+    minimum_allowed_locked = 15000 * nunits_per_token\n+    maximum_allowed_locked = int(4e6) * nunits_per_token\n+\n+    # Supply\n+    __default_initial_supply = Decimal(int(1e9) * nunits_per_token)\n+    __default_initial_inflation = Decimal(1.0)\n+    __default_token_halving = Decimal(2.0)     # years\n+    __default_reward_saturation = Decimal(1.0)  # years\n+    __default_small_stake_multiplier = Decimal(0.5)\n+\n+    def __init__(self,\n+                 initial_supply: Decimal = __default_initial_supply,\n+                 initial_inflation: Decimal = __default_initial_inflation,\n+                 halving_delay: Decimal = __default_token_halving,\n+                 reward_saturation: Decimal = __default_reward_saturation,\n+                 small_stake_multiplier: Decimal = __default_small_stake_multiplier\n+                 ):\n         \"\"\"\n-        Calculate parameters to use in token issuer from high-level\n-        human-understandable parameters\n-\n-        :param initial_supply: coins at t=0,\n-        :param initial_inflation: inflation in day 1 expressed in units of year**-1\n-            e.g. 1/365 of all coins in day 1 is 1 year**-1\n-        :param T_half: time for inflation halving in years\n-        :param T_sat: \"saturation\" time - if staking is longer than T_sat, the\n-            reward doesn't get higher\n-        :param small_staker_multiplier: what fraction of max reward rate do we\n-            pay to those who are about to unlock coins\n+        :param initial_supply: Tokens at t=0\n+        :param initial_inflation: Inflation on day 1 expressed in units of year**-1\n+        :param halving_delay: Time for inflation halving in years\n+        :param reward_saturation: \"saturation\" time - if staking is longer than T_sat, the reward doesn't get any higher\n+        :param small_stake_multiplier: Fraction of maximum reward rate paid to those who are about to unlock tokens\n         \"\"\"\n \n-        # Saving input in case we'll need it\n-        self.input_params = dict(\n-                initial_supply=initial_supply,\n-                initial_inflation=initial_inflation,\n-                T_half=T_half,\n-                T_sat=T_sat,\n-                small_staker_multiplier=small_staker_multiplier)\n+        self.initial_supply = initial_supply\n+        self.initial_inflation = initial_inflation\n+        self.token_halving = halving_delay\n+        self.token_saturation = reward_saturation\n+        self.small_stake_multiplier = small_stake_multiplier\n+        self.log_scale = Decimal(log(2))","path":"nucypher/blockchain/economics.py","position":100,"original_position":100,"commit_id":"b6a735dd2d218d9992841e20f16d40406944b187","original_commit_id":"b6a735dd2d218d9992841e20f16d40406944b187","user":{"login":"michwill","id":740600,"node_id":"MDQ6VXNlcjc0MDYwMA==","avatar_url":"https://avatars0.githubusercontent.com/u/740600?v=4","gravatar_id":"","url":"https://api.github.com/users/michwill","html_url":"https://github.com/michwill","followers_url":"https://api.github.com/users/michwill/followers","following_url":"https://api.github.com/users/michwill/following{/other_user}","gists_url":"https://api.github.com/users/michwill/gists{/gist_id}","starred_url":"https://api.github.com/users/michwill/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michwill/subscriptions","organizations_url":"https://api.github.com/users/michwill/orgs","repos_url":"https://api.github.com/users/michwill/repos","events_url":"https://api.github.com/users/michwill/events{/privacy}","received_events_url":"https://api.github.com/users/michwill/received_events","type":"User","site_admin":false},"body":"Ahh, I see, because it's decimal. I'd call it `log2` then","created_at":"2019-04-18T05:04:50Z","updated_at":"2019-04-18T05:04:50Z","html_url":"https://github.com/nucypher/nucypher/pull/866#discussion_r276518466","pull_request_url":"https://api.github.com/repos/nucypher/nucypher/pulls/866","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/comments/276518466"},"html":{"href":"https://github.com/nucypher/nucypher/pull/866#discussion_r276518466"},"pull_request":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/866"}},"in_reply_to_id":276514920},"pull_request":{"url":"https://api.github.com/repos/nucypher/nucypher/pulls/866","id":262709936,"node_id":"MDExOlB1bGxSZXF1ZXN0MjYyNzA5OTM2","html_url":"https://github.com/nucypher/nucypher/pull/866","diff_url":"https://github.com/nucypher/nucypher/pull/866.diff","patch_url":"https://github.com/nucypher/nucypher/pull/866.patch","issue_url":"https://api.github.com/repos/nucypher/nucypher/issues/866","number":866,"state":"open","locked":false,"title":"MiningAdjudicatorDeployer, TokenEconomics and Stake Integration","user":{"login":"KPrasch","id":679404,"node_id":"MDQ6VXNlcjY3OTQwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/679404?v=4","gravatar_id":"","url":"https://api.github.com/users/KPrasch","html_url":"https://github.com/KPrasch","followers_url":"https://api.github.com/users/KPrasch/followers","following_url":"https://api.github.com/users/KPrasch/following{/other_user}","gists_url":"https://api.github.com/users/KPrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/KPrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KPrasch/subscriptions","organizations_url":"https://api.github.com/users/KPrasch/orgs","repos_url":"https://api.github.com/users/KPrasch/repos","events_url":"https://api.github.com/users/KPrasch/events{/privacy}","received_events_url":"https://api.github.com/users/KPrasch/received_events","type":"User","site_admin":false},"body":"### Overview\r\n\r\n- Introduces deployment API for new contract: `MiningAdjudicator`\r\n- Integrates `TokenEconomics` into contract deployment\r\n- Dissolves `blockchain.constants` into more formal interfaces\r\n- Relocate blockchain staking I/O to `Stake` class\r\n- Carefully considers on-chain staking cache invalidation scenarios\r\n\r\n###### References\r\n\r\nFixes: #624 + #354  \r\nOpens: #931 #936 ","created_at":"2019-03-20T03:49:50Z","updated_at":"2019-04-18T05:04:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3609830c50b8cefdce37b300744ba6ab962165e5","assignee":{"login":"KPrasch","id":679404,"node_id":"MDQ6VXNlcjY3OTQwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/679404?v=4","gravatar_id":"","url":"https://api.github.com/users/KPrasch","html_url":"https://github.com/KPrasch","followers_url":"https://api.github.com/users/KPrasch/followers","following_url":"https://api.github.com/users/KPrasch/following{/other_user}","gists_url":"https://api.github.com/users/KPrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/KPrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KPrasch/subscriptions","organizations_url":"https://api.github.com/users/KPrasch/orgs","repos_url":"https://api.github.com/users/KPrasch/repos","events_url":"https://api.github.com/users/KPrasch/events{/privacy}","received_events_url":"https://api.github.com/users/KPrasch/received_events","type":"User","site_admin":false},"assignees":[{"login":"KPrasch","id":679404,"node_id":"MDQ6VXNlcjY3OTQwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/679404?v=4","gravatar_id":"","url":"https://api.github.com/users/KPrasch","html_url":"https://github.com/KPrasch","followers_url":"https://api.github.com/users/KPrasch/followers","following_url":"https://api.github.com/users/KPrasch/following{/other_user}","gists_url":"https://api.github.com/users/KPrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/KPrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KPrasch/subscriptions","organizations_url":"https://api.github.com/users/KPrasch/orgs","repos_url":"https://api.github.com/users/KPrasch/repos","events_url":"https://api.github.com/users/KPrasch/events{/privacy}","received_events_url":"https://api.github.com/users/KPrasch/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"vepkenez","id":188812,"node_id":"MDQ6VXNlcjE4ODgxMg==","avatar_url":"https://avatars2.githubusercontent.com/u/188812?v=4","gravatar_id":"","url":"https://api.github.com/users/vepkenez","html_url":"https://github.com/vepkenez","followers_url":"https://api.github.com/users/vepkenez/followers","following_url":"https://api.github.com/users/vepkenez/following{/other_user}","gists_url":"https://api.github.com/users/vepkenez/gists{/gist_id}","starred_url":"https://api.github.com/users/vepkenez/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vepkenez/subscriptions","organizations_url":"https://api.github.com/users/vepkenez/orgs","repos_url":"https://api.github.com/users/vepkenez/repos","events_url":"https://api.github.com/users/vepkenez/events{/privacy}","received_events_url":"https://api.github.com/users/vepkenez/received_events","type":"User","site_admin":false},{"login":"jMyles","id":311973,"node_id":"MDQ6VXNlcjMxMTk3Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/311973?v=4","gravatar_id":"","url":"https://api.github.com/users/jMyles","html_url":"https://github.com/jMyles","followers_url":"https://api.github.com/users/jMyles/followers","following_url":"https://api.github.com/users/jMyles/following{/other_user}","gists_url":"https://api.github.com/users/jMyles/gists{/gist_id}","starred_url":"https://api.github.com/users/jMyles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jMyles/subscriptions","organizations_url":"https://api.github.com/users/jMyles/orgs","repos_url":"https://api.github.com/users/jMyles/repos","events_url":"https://api.github.com/users/jMyles/events{/privacy}","received_events_url":"https://api.github.com/users/jMyles/received_events","type":"User","site_admin":false},{"login":"cygnusv","id":2564234,"node_id":"MDQ6VXNlcjI1NjQyMzQ=","avatar_url":"https://avatars1.githubusercontent.com/u/2564234?v=4","gravatar_id":"","url":"https://api.github.com/users/cygnusv","html_url":"https://github.com/cygnusv","followers_url":"https://api.github.com/users/cygnusv/followers","following_url":"https://api.github.com/users/cygnusv/following{/other_user}","gists_url":"https://api.github.com/users/cygnusv/gists{/gist_id}","starred_url":"https://api.github.com/users/cygnusv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cygnusv/subscriptions","organizations_url":"https://api.github.com/users/cygnusv/orgs","repos_url":"https://api.github.com/users/cygnusv/repos","events_url":"https://api.github.com/users/cygnusv/events{/privacy}","received_events_url":"https://api.github.com/users/cygnusv/received_events","type":"User","site_admin":false},{"login":"tuxxy","id":3598318,"node_id":"MDQ6VXNlcjM1OTgzMTg=","avatar_url":"https://avatars1.githubusercontent.com/u/3598318?v=4","gravatar_id":"","url":"https://api.github.com/users/tuxxy","html_url":"https://github.com/tuxxy","followers_url":"https://api.github.com/users/tuxxy/followers","following_url":"https://api.github.com/users/tuxxy/following{/other_user}","gists_url":"https://api.github.com/users/tuxxy/gists{/gist_id}","starred_url":"https://api.github.com/users/tuxxy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tuxxy/subscriptions","organizations_url":"https://api.github.com/users/tuxxy/orgs","repos_url":"https://api.github.com/users/tuxxy/repos","events_url":"https://api.github.com/users/tuxxy/events{/privacy}","received_events_url":"https://api.github.com/users/tuxxy/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":687339661,"node_id":"MDU6TGFiZWw2ODczMzk2NjE=","url":"https://api.github.com/repos/nucypher/nucypher/labels/API","name":"API","color":"5319e7","default":false},{"id":1077619713,"node_id":"MDU6TGFiZWwxMDc3NjE5NzEz","url":"https://api.github.com/repos/nucypher/nucypher/labels/Configuration","name":"Configuration","color":"190063","default":false},{"id":1249093579,"node_id":"MDU6TGFiZWwxMjQ5MDkzNTc5","url":"https://api.github.com/repos/nucypher/nucypher/labels/Economics%20%F0%9F%92%B5","name":"Economics 💵","color":"2fce71","default":false},{"id":1244016166,"node_id":"MDU6TGFiZWwxMjQ0MDE2MTY2","url":"https://api.github.com/repos/nucypher/nucypher/labels/Slashing","name":"Slashing","color":"000000","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/nucypher/nucypher/pulls/866/commits","review_comments_url":"https://api.github.com/repos/nucypher/nucypher/pulls/866/comments","review_comment_url":"https://api.github.com/repos/nucypher/nucypher/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nucypher/nucypher/issues/866/comments","statuses_url":"https://api.github.com/repos/nucypher/nucypher/statuses/b6a735dd2d218d9992841e20f16d40406944b187","head":{"label":"KPrasch:slashing-python","ref":"slashing-python","sha":"b6a735dd2d218d9992841e20f16d40406944b187","user":{"login":"KPrasch","id":679404,"node_id":"MDQ6VXNlcjY3OTQwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/679404?v=4","gravatar_id":"","url":"https://api.github.com/users/KPrasch","html_url":"https://github.com/KPrasch","followers_url":"https://api.github.com/users/KPrasch/followers","following_url":"https://api.github.com/users/KPrasch/following{/other_user}","gists_url":"https://api.github.com/users/KPrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/KPrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KPrasch/subscriptions","organizations_url":"https://api.github.com/users/KPrasch/orgs","repos_url":"https://api.github.com/users/KPrasch/repos","events_url":"https://api.github.com/users/KPrasch/events{/privacy}","received_events_url":"https://api.github.com/users/KPrasch/received_events","type":"User","site_admin":false},"repo":{"id":121454306,"node_id":"MDEwOlJlcG9zaXRvcnkxMjE0NTQzMDY=","name":"nucypher","full_name":"KPrasch/nucypher","private":false,"owner":{"login":"KPrasch","id":679404,"node_id":"MDQ6VXNlcjY3OTQwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/679404?v=4","gravatar_id":"","url":"https://api.github.com/users/KPrasch","html_url":"https://github.com/KPrasch","followers_url":"https://api.github.com/users/KPrasch/followers","following_url":"https://api.github.com/users/KPrasch/following{/other_user}","gists_url":"https://api.github.com/users/KPrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/KPrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KPrasch/subscriptions","organizations_url":"https://api.github.com/users/KPrasch/orgs","repos_url":"https://api.github.com/users/KPrasch/repos","events_url":"https://api.github.com/users/KPrasch/events{/privacy}","received_events_url":"https://api.github.com/users/KPrasch/received_events","type":"User","site_admin":false},"html_url":"https://github.com/KPrasch/nucypher","description":"Development Fork of Nucypher","fork":true,"url":"https://api.github.com/repos/KPrasch/nucypher","forks_url":"https://api.github.com/repos/KPrasch/nucypher/forks","keys_url":"https://api.github.com/repos/KPrasch/nucypher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KPrasch/nucypher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KPrasch/nucypher/teams","hooks_url":"https://api.github.com/repos/KPrasch/nucypher/hooks","issue_events_url":"https://api.github.com/repos/KPrasch/nucypher/issues/events{/number}","events_url":"https://api.github.com/repos/KPrasch/nucypher/events","assignees_url":"https://api.github.com/repos/KPrasch/nucypher/assignees{/user}","branches_url":"https://api.github.com/repos/KPrasch/nucypher/branches{/branch}","tags_url":"https://api.github.com/repos/KPrasch/nucypher/tags","blobs_url":"https://api.github.com/repos/KPrasch/nucypher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KPrasch/nucypher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KPrasch/nucypher/git/refs{/sha}","trees_url":"https://api.github.com/repos/KPrasch/nucypher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KPrasch/nucypher/statuses/{sha}","languages_url":"https://api.github.com/repos/KPrasch/nucypher/languages","stargazers_url":"https://api.github.com/repos/KPrasch/nucypher/stargazers","contributors_url":"https://api.github.com/repos/KPrasch/nucypher/contributors","subscribers_url":"https://api.github.com/repos/KPrasch/nucypher/subscribers","subscription_url":"https://api.github.com/repos/KPrasch/nucypher/subscription","commits_url":"https://api.github.com/repos/KPrasch/nucypher/commits{/sha}","git_commits_url":"https://api.github.com/repos/KPrasch/nucypher/git/commits{/sha}","comments_url":"https://api.github.com/repos/KPrasch/nucypher/comments{/number}","issue_comment_url":"https://api.github.com/repos/KPrasch/nucypher/issues/comments{/number}","contents_url":"https://api.github.com/repos/KPrasch/nucypher/contents/{+path}","compare_url":"https://api.github.com/repos/KPrasch/nucypher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KPrasch/nucypher/merges","archive_url":"https://api.github.com/repos/KPrasch/nucypher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KPrasch/nucypher/downloads","issues_url":"https://api.github.com/repos/KPrasch/nucypher/issues{/number}","pulls_url":"https://api.github.com/repos/KPrasch/nucypher/pulls{/number}","milestones_url":"https://api.github.com/repos/KPrasch/nucypher/milestones{/number}","notifications_url":"https://api.github.com/repos/KPrasch/nucypher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KPrasch/nucypher/labels{/name}","releases_url":"https://api.github.com/repos/KPrasch/nucypher/releases{/id}","deployments_url":"https://api.github.com/repos/KPrasch/nucypher/deployments","created_at":"2018-02-14T00:42:49Z","updated_at":"2019-04-06T22:01:09Z","pushed_at":"2019-04-18T02:33:38Z","git_url":"git://github.com/KPrasch/nucypher.git","ssh_url":"git@github.com:KPrasch/nucypher.git","clone_url":"https://github.com/KPrasch/nucypher.git","svn_url":"https://github.com/KPrasch/nucypher","homepage":"","size":14343,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"nucypher:master","ref":"master","sha":"788a027a102f2850011fb3ba92ce885136de883b","user":{"login":"nucypher","id":24552990,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0NTUyOTkw","avatar_url":"https://avatars0.githubusercontent.com/u/24552990?v=4","gravatar_id":"","url":"https://api.github.com/users/nucypher","html_url":"https://github.com/nucypher","followers_url":"https://api.github.com/users/nucypher/followers","following_url":"https://api.github.com/users/nucypher/following{/other_user}","gists_url":"https://api.github.com/users/nucypher/gists{/gist_id}","starred_url":"https://api.github.com/users/nucypher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nucypher/subscriptions","organizations_url":"https://api.github.com/users/nucypher/orgs","repos_url":"https://api.github.com/users/nucypher/repos","events_url":"https://api.github.com/users/nucypher/events{/privacy}","received_events_url":"https://api.github.com/users/nucypher/received_events","type":"Organization","site_admin":false},"repo":{"id":100446516,"node_id":"MDEwOlJlcG9zaXRvcnkxMDA0NDY1MTY=","name":"nucypher","full_name":"nucypher/nucypher","private":false,"owner":{"login":"nucypher","id":24552990,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0NTUyOTkw","avatar_url":"https://avatars0.githubusercontent.com/u/24552990?v=4","gravatar_id":"","url":"https://api.github.com/users/nucypher","html_url":"https://github.com/nucypher","followers_url":"https://api.github.com/users/nucypher/followers","following_url":"https://api.github.com/users/nucypher/following{/other_user}","gists_url":"https://api.github.com/users/nucypher/gists{/gist_id}","starred_url":"https://api.github.com/users/nucypher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nucypher/subscriptions","organizations_url":"https://api.github.com/users/nucypher/orgs","repos_url":"https://api.github.com/users/nucypher/repos","events_url":"https://api.github.com/users/nucypher/events{/privacy}","received_events_url":"https://api.github.com/users/nucypher/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/nucypher/nucypher","description":"A proxy re-encryption network to empower privacy in decentralized systems.","fork":false,"url":"https://api.github.com/repos/nucypher/nucypher","forks_url":"https://api.github.com/repos/nucypher/nucypher/forks","keys_url":"https://api.github.com/repos/nucypher/nucypher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nucypher/nucypher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nucypher/nucypher/teams","hooks_url":"https://api.github.com/repos/nucypher/nucypher/hooks","issue_events_url":"https://api.github.com/repos/nucypher/nucypher/issues/events{/number}","events_url":"https://api.github.com/repos/nucypher/nucypher/events","assignees_url":"https://api.github.com/repos/nucypher/nucypher/assignees{/user}","branches_url":"https://api.github.com/repos/nucypher/nucypher/branches{/branch}","tags_url":"https://api.github.com/repos/nucypher/nucypher/tags","blobs_url":"https://api.github.com/repos/nucypher/nucypher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nucypher/nucypher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nucypher/nucypher/git/refs{/sha}","trees_url":"https://api.github.com/repos/nucypher/nucypher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nucypher/nucypher/statuses/{sha}","languages_url":"https://api.github.com/repos/nucypher/nucypher/languages","stargazers_url":"https://api.github.com/repos/nucypher/nucypher/stargazers","contributors_url":"https://api.github.com/repos/nucypher/nucypher/contributors","subscribers_url":"https://api.github.com/repos/nucypher/nucypher/subscribers","subscription_url":"https://api.github.com/repos/nucypher/nucypher/subscription","commits_url":"https://api.github.com/repos/nucypher/nucypher/commits{/sha}","git_commits_url":"https://api.github.com/repos/nucypher/nucypher/git/commits{/sha}","comments_url":"https://api.github.com/repos/nucypher/nucypher/comments{/number}","issue_comment_url":"https://api.github.com/repos/nucypher/nucypher/issues/comments{/number}","contents_url":"https://api.github.com/repos/nucypher/nucypher/contents/{+path}","compare_url":"https://api.github.com/repos/nucypher/nucypher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nucypher/nucypher/merges","archive_url":"https://api.github.com/repos/nucypher/nucypher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nucypher/nucypher/downloads","issues_url":"https://api.github.com/repos/nucypher/nucypher/issues{/number}","pulls_url":"https://api.github.com/repos/nucypher/nucypher/pulls{/number}","milestones_url":"https://api.github.com/repos/nucypher/nucypher/milestones{/number}","notifications_url":"https://api.github.com/repos/nucypher/nucypher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nucypher/nucypher/labels{/name}","releases_url":"https://api.github.com/repos/nucypher/nucypher/releases{/id}","deployments_url":"https://api.github.com/repos/nucypher/nucypher/deployments","created_at":"2017-08-16T04:07:25Z","updated_at":"2019-04-17T13:03:48Z","pushed_at":"2019-04-18T02:33:40Z","git_url":"git://github.com/nucypher/nucypher.git","ssh_url":"git@github.com:nucypher/nucypher.git","clone_url":"https://github.com/nucypher/nucypher.git","svn_url":"https://github.com/nucypher/nucypher","homepage":"https://nucypher.com","size":10717,"stargazers_count":182,"watchers_count":182,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":67,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":176,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":67,"open_issues":176,"watchers":182,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/866"},"html":{"href":"https://github.com/nucypher/nucypher/pull/866"},"issue":{"href":"https://api.github.com/repos/nucypher/nucypher/issues/866"},"comments":{"href":"https://api.github.com/repos/nucypher/nucypher/issues/866/comments"},"review_comments":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/866/comments"},"review_comment":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nucypher/nucypher/pulls/866/commits"},"statuses":{"href":"https://api.github.com/repos/nucypher/nucypher/statuses/b6a735dd2d218d9992841e20f16d40406944b187"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"michwill"}}