{"action":"created","comment":{"url":"https://api.github.com/repos/ethereum/sharding/pulls/comments/186277356","pull_request_review_id":117830283,"id":186277356,"diff_hunk":"@@ -0,0 +1,188 @@\n+from sharding.handler.utils.web3_utils import (\n+    mine,\n+)\n+from tests.handler.fixtures import (  # noqa: F401\n+    smc_handler,\n+)\n+from tests.contract.utils.common_utils import (\n+    batch_register,\n+    fast_forward,\n+)\n+from tests.contract.utils.notary_account import (\n+    NotaryAccount,\n+)\n+\n+\n+def test_normal_add_header(smc_handler):  # noqa: F811\n+    web3 = smc_handler.web3\n+\n+    # Register notary 0~2 and fast forward to next period\n+    batch_register(smc_handler, 0, 2)\n+    fast_forward(smc_handler, 1)\n+    current_period = web3.eth.blockNumber // smc_handler.config['PERIOD_LENGTH']\n+    assert current_period == 1\n+    # Check that collation records of shard 0 and shard 1 have not been updated before\n+    assert smc_handler.records_updated_period(0) == 0\n+    assert smc_handler.records_updated_period(1) == 0\n+\n+    CHUNK_ROOT_1_0 = b'\\x10' * 32\n+    smc_handler.add_header(1, 0, CHUNK_ROOT_1_0, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has been updated\n+    assert smc_handler.records_updated_period(0) == 1\n+    assert smc_handler.get_collation_chunk_root(1, 0) == CHUNK_ROOT_1_0\n+\n+    fast_forward(smc_handler, 1)\n+    current_period = web3.eth.blockNumber // smc_handler.config['PERIOD_LENGTH']\n+    assert current_period == 2\n+\n+    CHUNK_ROOT_2_0 = b'\\x20' * 32\n+    smc_handler.add_header(2, 0, CHUNK_ROOT_2_0, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has been updated\n+    assert smc_handler.records_updated_period(0) == 2\n+    assert smc_handler.get_collation_chunk_root(2, 0) == CHUNK_ROOT_2_0\n+    # Check that collation record of shard 1 has never been updated\n+    assert smc_handler.records_updated_period(1) == 0\n+\n+    CHUNK_ROOT_2_1 = b'\\x21' * 32\n+    smc_handler.add_header(2, 1, CHUNK_ROOT_2_1, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 1 has been updated\n+    assert smc_handler.records_updated_period(1) == 2\n+    assert smc_handler.get_collation_chunk_root(2, 1) == CHUNK_ROOT_2_1\n+\n+\n+def test_add_header_wrong_period(smc_handler):  # noqa: F811\n+    web3 = smc_handler.web3\n+    default_gas = smc_handler.config['DEFAULT_GAS']\n+\n+    # Register notary 0~2 and fast forward to next period\n+    batch_register(smc_handler, 0, 2)\n+    fast_forward(smc_handler, 1)\n+    current_period = web3.eth.blockNumber // smc_handler.config['PERIOD_LENGTH']\n+    assert current_period == 1\n+\n+    BLANK_CHUNK_ROOT = b'\\x00' * 32\n+    CHUNK_ROOT_1_0 = b'\\x10' * 32\n+    # Attempt to add collation record with wrong period specified\n+    tx_hash = smc_handler.add_header(\n+        0,\n+        0,\n+        CHUNK_ROOT_1_0,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has not been updated and transaction consume all gas\n+    assert smc_handler.records_updated_period(0) == 0\n+    assert smc_handler.get_collation_chunk_root(1, 0) == BLANK_CHUNK_ROOT\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas\n+\n+    # Second attempt to add collation record with wrong period specified\n+    tx_hash = smc_handler.add_header(\n+        2,\n+        0,\n+        CHUNK_ROOT_1_0,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has not been updated and transaction consume all gas\n+    assert smc_handler.records_updated_period(0) == 0\n+    assert smc_handler.get_collation_chunk_root(1, 0) == BLANK_CHUNK_ROOT\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas\n+\n+    # Add correct collation record\n+    smc_handler.add_header(1, 0, CHUNK_ROOT_1_0, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has been updated\n+    assert smc_handler.records_updated_period(0) == 1\n+    assert smc_handler.get_collation_chunk_root(1, 0) == CHUNK_ROOT_1_0\n+\n+\n+def test_add_header_wrong_shard(smc_handler):  # noqa: F811\n+    web3 = smc_handler.web3\n+    default_gas = smc_handler.config['DEFAULT_GAS']\n+    shard_count = smc_handler.config['SHARD_COUNT']\n+\n+    # Register notary 0~2 and fast forward to next period\n+    batch_register(smc_handler, 0, 2)\n+    fast_forward(smc_handler, 1)\n+    current_period = web3.eth.blockNumber // smc_handler.config['PERIOD_LENGTH']\n+    assert current_period == 1\n+\n+    BLANK_CHUNK_ROOT = b'\\x00' * 32\n+    CHUNK_ROOT_1_0 = b'\\x10' * 32\n+    # Attempt to add collation record with illegal shard_id specified\n+    tx_hash = smc_handler.add_header(\n+        1,\n+        shard_count + 1,\n+        CHUNK_ROOT_1_0,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has not been updated and transaction consume all gas\n+    assert smc_handler.records_updated_period(0) == 0\n+    assert smc_handler.get_collation_chunk_root(1, 0) == BLANK_CHUNK_ROOT\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas\n+\n+    # Second attempt to add collation record with illegal shard_id specified\n+    tx_hash = smc_handler.add_header(\n+        1,\n+        -1,\n+        CHUNK_ROOT_1_0,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has not been updated and transaction consume all gas\n+    assert smc_handler.records_updated_period(0) == 0\n+    assert smc_handler.get_collation_chunk_root(1, 0) == BLANK_CHUNK_ROOT\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas\n+\n+    # Add correct collation record\n+    smc_handler.add_header(1, 0, CHUNK_ROOT_1_0, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has been updated\n+    assert smc_handler.records_updated_period(0) == 1\n+    assert smc_handler.get_collation_chunk_root(1, 0) == CHUNK_ROOT_1_0\n+\n+\n+def test_double_add_header(smc_handler):  # noqa: F811\n+    web3 = smc_handler.web3\n+    default_gas = smc_handler.config['DEFAULT_GAS']\n+\n+    # Register notary 0~2 and fast forward to next period\n+    batch_register(smc_handler, 0, 2)\n+    fast_forward(smc_handler, 1)\n+    current_period = web3.eth.blockNumber // smc_handler.config['PERIOD_LENGTH']\n+    assert current_period == 1\n+\n+    CHUNK_ROOT_1_0 = b'\\x10' * 32\n+    smc_handler.add_header(1, 0, CHUNK_ROOT_1_0, private_key=NotaryAccount(0).private_key)\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 has been updated\n+    assert smc_handler.records_updated_period(0) == 1\n+    assert smc_handler.get_collation_chunk_root(1, 0) == CHUNK_ROOT_1_0\n+\n+    # Attempt to add collation record again with same collation record\n+    tx_hash = smc_handler.add_header(\n+        1,\n+        0,\n+        CHUNK_ROOT_1_0,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that transaction consume all gas\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas\n+\n+    # Attempt to add collation record again with different chunk root\n+    tx_hash = smc_handler.add_header(\n+        1,\n+        0,\n+        b'\\x56' * 32,\n+        private_key=NotaryAccount(0).private_key\n+    )\n+    mine(web3, 1)\n+    # Check that collation record of shard 0 remains the same and transaction consume all gas\n+    assert smc_handler.records_updated_period(0) == 1\n+    assert smc_handler.get_collation_chunk_root(1, 0) == CHUNK_ROOT_1_0\n+    assert web3.eth.getTransactionReceipt(tx_hash)['gasUsed'] == default_gas","path":"tests/contract/test_add_header.py","position":188,"original_position":188,"commit_id":"4010a290442d697359079c72b63c4af984abbaf7","original_commit_id":"078b54af070c1b2e66e923f83c0f717ef7e4f057","user":{"login":"NIC619","id":17670147,"avatar_url":"https://avatars0.githubusercontent.com/u/17670147?v=4","gravatar_id":"","url":"https://api.github.com/users/NIC619","html_url":"https://github.com/NIC619","followers_url":"https://api.github.com/users/NIC619/followers","following_url":"https://api.github.com/users/NIC619/following{/other_user}","gists_url":"https://api.github.com/users/NIC619/gists{/gist_id}","starred_url":"https://api.github.com/users/NIC619/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NIC619/subscriptions","organizations_url":"https://api.github.com/users/NIC619/orgs","repos_url":"https://api.github.com/users/NIC619/repos","events_url":"https://api.github.com/users/NIC619/events{/privacy}","received_events_url":"https://api.github.com/users/NIC619/received_events","type":"User","site_admin":false},"body":"Currently I name it `AddHeader` to conform with other log naming pattern, e.g, `RegisterNotary`, `DeregisterNotary`.\r\nWe can change them to `HeaderAdded`, `NotaryRegistered` in the future if we like.","created_at":"2018-05-06T03:30:49Z","updated_at":"2018-05-06T03:30:50Z","html_url":"https://github.com/ethereum/sharding/pull/83#discussion_r186277356","pull_request_url":"https://api.github.com/repos/ethereum/sharding/pulls/83","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/comments/186277356"},"html":{"href":"https://github.com/ethereum/sharding/pull/83#discussion_r186277356"},"pull_request":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/83"}},"in_reply_to_id":186269546},"pull_request":{"url":"https://api.github.com/repos/ethereum/sharding/pulls/83","id":185193531,"html_url":"https://github.com/ethereum/sharding/pull/83","diff_url":"https://github.com/ethereum/sharding/pull/83.diff","patch_url":"https://github.com/ethereum/sharding/pull/83.patch","issue_url":"https://api.github.com/repos/ethereum/sharding/issues/83","number":83,"state":"open","locked":false,"title":"Implementing phase 1 spec - add_header","user":{"login":"NIC619","id":17670147,"avatar_url":"https://avatars0.githubusercontent.com/u/17670147?v=4","gravatar_id":"","url":"https://api.github.com/users/NIC619","html_url":"https://github.com/NIC619","followers_url":"https://api.github.com/users/NIC619/followers","following_url":"https://api.github.com/users/NIC619/following{/other_user}","gists_url":"https://api.github.com/users/NIC619/gists{/gist_id}","starred_url":"https://api.github.com/users/NIC619/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NIC619/subscriptions","organizations_url":"https://api.github.com/users/NIC619/orgs","repos_url":"https://api.github.com/users/NIC619/repos","events_url":"https://api.github.com/users/NIC619/events{/privacy}","received_events_url":"https://api.github.com/users/NIC619/received_events","type":"User","site_admin":false},"body":"### What was wrong?\r\nimplement part of SMC modification - stage 1 #76\r\n\r\n\r\n### How was it fixed?\r\nImplement `add_header` and `submit_vote` functions.\r\n\r\n1. `add_header`:\r\n- [x] Everyone can call `add_header` to submit collation header(i.e. `collation_records`). \r\n- [x] For each shard and in each period only one collation record can be submitted. Use `records_updated_period` to keep track of in which period was the latest collation record submitted.\r\n- [x] `current_vote` which keeps track of the vote count is cleared once a new collation record is submitted.\r\n- [x] tests\r\n\r\n#### Cute Animal Picture\r\n\r\n![put a cute animal picture link inside the parentheses](https://c1.staticflickr.com/9/8187/8126557438_113558fc5a_b.jpg)","created_at":"2018-05-01T14:45:34Z","updated_at":"2018-05-06T03:30:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7577ccccbd90bc2a621c4f701922c9133143995f","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ethereum/sharding/pulls/83/commits","review_comments_url":"https://api.github.com/repos/ethereum/sharding/pulls/83/comments","review_comment_url":"https://api.github.com/repos/ethereum/sharding/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethereum/sharding/issues/83/comments","statuses_url":"https://api.github.com/repos/ethereum/sharding/statuses/4010a290442d697359079c72b63c4af984abbaf7","head":{"label":"NIC619:implementing_phase_1_spec","ref":"implementing_phase_1_spec","sha":"4010a290442d697359079c72b63c4af984abbaf7","user":{"login":"NIC619","id":17670147,"avatar_url":"https://avatars0.githubusercontent.com/u/17670147?v=4","gravatar_id":"","url":"https://api.github.com/users/NIC619","html_url":"https://github.com/NIC619","followers_url":"https://api.github.com/users/NIC619/followers","following_url":"https://api.github.com/users/NIC619/following{/other_user}","gists_url":"https://api.github.com/users/NIC619/gists{/gist_id}","starred_url":"https://api.github.com/users/NIC619/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NIC619/subscriptions","organizations_url":"https://api.github.com/users/NIC619/orgs","repos_url":"https://api.github.com/users/NIC619/repos","events_url":"https://api.github.com/users/NIC619/events{/privacy}","received_events_url":"https://api.github.com/users/NIC619/received_events","type":"User","site_admin":false},"repo":{"id":103073780,"name":"sharding","full_name":"NIC619/sharding","owner":{"login":"NIC619","id":17670147,"avatar_url":"https://avatars0.githubusercontent.com/u/17670147?v=4","gravatar_id":"","url":"https://api.github.com/users/NIC619","html_url":"https://github.com/NIC619","followers_url":"https://api.github.com/users/NIC619/followers","following_url":"https://api.github.com/users/NIC619/following{/other_user}","gists_url":"https://api.github.com/users/NIC619/gists{/gist_id}","starred_url":"https://api.github.com/users/NIC619/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/NIC619/subscriptions","organizations_url":"https://api.github.com/users/NIC619/orgs","repos_url":"https://api.github.com/users/NIC619/repos","events_url":"https://api.github.com/users/NIC619/events{/privacy}","received_events_url":"https://api.github.com/users/NIC619/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/NIC619/sharding","description":null,"fork":true,"url":"https://api.github.com/repos/NIC619/sharding","forks_url":"https://api.github.com/repos/NIC619/sharding/forks","keys_url":"https://api.github.com/repos/NIC619/sharding/keys{/key_id}","collaborators_url":"https://api.github.com/repos/NIC619/sharding/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/NIC619/sharding/teams","hooks_url":"https://api.github.com/repos/NIC619/sharding/hooks","issue_events_url":"https://api.github.com/repos/NIC619/sharding/issues/events{/number}","events_url":"https://api.github.com/repos/NIC619/sharding/events","assignees_url":"https://api.github.com/repos/NIC619/sharding/assignees{/user}","branches_url":"https://api.github.com/repos/NIC619/sharding/branches{/branch}","tags_url":"https://api.github.com/repos/NIC619/sharding/tags","blobs_url":"https://api.github.com/repos/NIC619/sharding/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/NIC619/sharding/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/NIC619/sharding/git/refs{/sha}","trees_url":"https://api.github.com/repos/NIC619/sharding/git/trees{/sha}","statuses_url":"https://api.github.com/repos/NIC619/sharding/statuses/{sha}","languages_url":"https://api.github.com/repos/NIC619/sharding/languages","stargazers_url":"https://api.github.com/repos/NIC619/sharding/stargazers","contributors_url":"https://api.github.com/repos/NIC619/sharding/contributors","subscribers_url":"https://api.github.com/repos/NIC619/sharding/subscribers","subscription_url":"https://api.github.com/repos/NIC619/sharding/subscription","commits_url":"https://api.github.com/repos/NIC619/sharding/commits{/sha}","git_commits_url":"https://api.github.com/repos/NIC619/sharding/git/commits{/sha}","comments_url":"https://api.github.com/repos/NIC619/sharding/comments{/number}","issue_comment_url":"https://api.github.com/repos/NIC619/sharding/issues/comments{/number}","contents_url":"https://api.github.com/repos/NIC619/sharding/contents/{+path}","compare_url":"https://api.github.com/repos/NIC619/sharding/compare/{base}...{head}","merges_url":"https://api.github.com/repos/NIC619/sharding/merges","archive_url":"https://api.github.com/repos/NIC619/sharding/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/NIC619/sharding/downloads","issues_url":"https://api.github.com/repos/NIC619/sharding/issues{/number}","pulls_url":"https://api.github.com/repos/NIC619/sharding/pulls{/number}","milestones_url":"https://api.github.com/repos/NIC619/sharding/milestones{/number}","notifications_url":"https://api.github.com/repos/NIC619/sharding/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/NIC619/sharding/labels{/name}","releases_url":"https://api.github.com/repos/NIC619/sharding/releases{/id}","deployments_url":"https://api.github.com/repos/NIC619/sharding/deployments","created_at":"2017-09-11T01:00:35Z","updated_at":"2017-09-11T01:00:37Z","pushed_at":"2018-05-06T03:27:24Z","git_url":"git://github.com/NIC619/sharding.git","ssh_url":"git@github.com:NIC619/sharding.git","clone_url":"https://github.com/NIC619/sharding.git","svn_url":"https://github.com/NIC619/sharding","homepage":null,"size":558,"stargazers_count":0,"watchers_count":0,"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,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"ethereum:develop","ref":"develop","sha":"79b22b3d3856bdc64f2cc36133174f6a5e8a39fa","user":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars3.githubusercontent.com/u/6250754?v=4","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"repo":{"id":96542036,"name":"sharding","full_name":"ethereum/sharding","owner":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars3.githubusercontent.com/u/6250754?v=4","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ethereum/sharding","description":null,"fork":false,"url":"https://api.github.com/repos/ethereum/sharding","forks_url":"https://api.github.com/repos/ethereum/sharding/forks","keys_url":"https://api.github.com/repos/ethereum/sharding/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/sharding/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/sharding/teams","hooks_url":"https://api.github.com/repos/ethereum/sharding/hooks","issue_events_url":"https://api.github.com/repos/ethereum/sharding/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/sharding/events","assignees_url":"https://api.github.com/repos/ethereum/sharding/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/sharding/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/sharding/tags","blobs_url":"https://api.github.com/repos/ethereum/sharding/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/sharding/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/sharding/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/sharding/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/sharding/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/sharding/languages","stargazers_url":"https://api.github.com/repos/ethereum/sharding/stargazers","contributors_url":"https://api.github.com/repos/ethereum/sharding/contributors","subscribers_url":"https://api.github.com/repos/ethereum/sharding/subscribers","subscription_url":"https://api.github.com/repos/ethereum/sharding/subscription","commits_url":"https://api.github.com/repos/ethereum/sharding/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/sharding/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/sharding/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/sharding/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/sharding/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/sharding/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/sharding/merges","archive_url":"https://api.github.com/repos/ethereum/sharding/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/sharding/downloads","issues_url":"https://api.github.com/repos/ethereum/sharding/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/sharding/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/sharding/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/sharding/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/sharding/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/sharding/releases{/id}","deployments_url":"https://api.github.com/repos/ethereum/sharding/deployments","created_at":"2017-07-07T13:39:20Z","updated_at":"2018-05-05T14:37:48Z","pushed_at":"2018-05-06T03:27:24Z","git_url":"git://github.com/ethereum/sharding.git","ssh_url":"git@github.com:ethereum/sharding.git","clone_url":"https://github.com/ethereum/sharding.git","svn_url":"https://github.com/ethereum/sharding","homepage":null,"size":473,"stargazers_count":362,"watchers_count":362,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":59,"mirror_url":null,"archived":false,"open_issues_count":5,"license":null,"forks":59,"open_issues":5,"watchers":362,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/83"},"html":{"href":"https://github.com/ethereum/sharding/pull/83"},"issue":{"href":"https://api.github.com/repos/ethereum/sharding/issues/83"},"comments":{"href":"https://api.github.com/repos/ethereum/sharding/issues/83/comments"},"review_comments":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/83/comments"},"review_comment":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethereum/sharding/pulls/83/commits"},"statuses":{"href":"https://api.github.com/repos/ethereum/sharding/statuses/4010a290442d697359079c72b63c4af984abbaf7"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"NIC619"}}