{"action":"created","comment":{"url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/comments/237231177","pull_request_review_id":179480199,"id":237231177,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNzIzMTE3Nw==","diff_hunk":"@@ -1061,253 +1061,112 @@ impl JobTransport for SigningJobTransport {\n #[cfg(test)]\n mod tests {\n \tuse std::sync::Arc;\n-\tuse std::collections::{BTreeSet, BTreeMap, VecDeque};\n \tuse ethereum_types::H256;\n-\tuse ethkey::{self, Random, Generator, KeyPair, verify_public, public_to_address};\n-\tuse acl_storage::DummyAclStorage;\n-\tuse key_server_cluster::{NodeId, DummyKeyStorage, SessionId, SessionMeta, Error, KeyStorage};\n-\tuse key_server_cluster::cluster_sessions::ClusterSession;\n-\tuse key_server_cluster::cluster::tests::DummyCluster;\n-\tuse key_server_cluster::generation_session::tests::MessageLoop as KeyGenerationMessageLoop;\n-\tuse key_server_cluster::message::Message;\n-\tuse key_server_cluster::signing_session_ecdsa::{SessionImpl, SessionParams};\n-\n-\tstruct Node {\n-\t\tpub node_id: NodeId,\n-\t\tpub cluster: Arc<DummyCluster>,\n-\t\tpub key_storage: Arc<DummyKeyStorage>,\n-\t\tpub session: SessionImpl,\n-\t}\n+\tuse ethkey::{self, Random, Generator, Public, verify_public, public_to_address};\n+\tuse key_server_cluster::{SessionId, Error, KeyStorage};\n+\tuse key_server_cluster::cluster::tests::{MessagesLoop};\n+\tuse key_server_cluster::signing_session_ecdsa::SessionImpl;\n+\tuse key_server_cluster::generation_session::tests::MessageLoop as GenerationMessageLoop;\n \n-\tstruct MessageLoop {\n-\t\tpub session_id: SessionId,\n-\t\tpub requester: KeyPair,\n-\t\tpub nodes: BTreeMap<NodeId, Node>,\n-\t\tpub queue: VecDeque<(NodeId, NodeId, Message)>,\n-\t\tpub acl_storages: Vec<Arc<DummyAclStorage>>,\n-\t\tpub version: H256,\n-\t}\n+\t#[derive(Debug)]\n+\tpub struct MessageLoop(pub MessagesLoop);\n \n \timpl MessageLoop {\n-\t\tpub fn new(gl: &KeyGenerationMessageLoop) -> Self {\n-\t\t\tlet version = gl.nodes.values().nth(0).unwrap().key_storage.get(&Default::default()).unwrap().unwrap().versions.iter().last().unwrap().hash;\n-\t\t\tlet mut nodes = BTreeMap::new();\n-\t\t\tlet session_id = gl.session_id.clone();\n-\t\t\tlet requester = Random.generate().unwrap();\n-\t\t\tlet signature = Some(ethkey::sign(requester.secret(), &SessionId::default()).unwrap());\n-\t\t\tlet master_node_id = gl.nodes.keys().nth(0).unwrap().clone();\n-\t\t\tlet mut acl_storages = Vec::new();\n-\t\t\tfor (i, (gl_node_id, gl_node)) in gl.nodes.iter().enumerate() {\n-\t\t\t\tlet acl_storage = Arc::new(DummyAclStorage::default());\n-\t\t\t\tacl_storages.push(acl_storage.clone());\n-\t\t\t\tlet cluster = Arc::new(DummyCluster::new(gl_node_id.clone()));\n-\t\t\t\tlet session = SessionImpl::new(SessionParams {\n-\t\t\t\t\tmeta: SessionMeta {\n-\t\t\t\t\t\tid: session_id.clone(),\n-\t\t\t\t\t\tself_node_id: gl_node_id.clone(),\n-\t\t\t\t\t\tmaster_node_id: master_node_id.clone(),\n-\t\t\t\t\t\tthreshold: gl_node.key_storage.get(&session_id).unwrap().unwrap().threshold,\n-\t\t\t\t\t\tconfigured_nodes_count: gl.nodes.len(),\n-\t\t\t\t\t\tconnected_nodes_count: gl.nodes.len(),\n-\t\t\t\t\t},\n-\t\t\t\t\taccess_key: \"834cb736f02d9c968dfaf0c37658a1d86ff140554fc8b59c9fdad5a8cf810eec\".parse().unwrap(),\n-\t\t\t\t\tkey_share: Some(gl_node.key_storage.get(&session_id).unwrap().unwrap()),\n-\t\t\t\t\tacl_storage: acl_storage,\n-\t\t\t\t\tcluster: cluster.clone(),\n-\t\t\t\t\tnonce: 0,\n-\t\t\t\t}, if i == 0 { signature.clone().map(Into::into) } else { None }).unwrap();\n-\t\t\t\tnodes.insert(gl_node_id.clone(), Node { node_id: gl_node_id.clone(), cluster: cluster, key_storage: gl_node.key_storage.clone(), session: session });\n-\t\t\t}\n+\t\tpub fn new(num_nodes: usize, threshold: usize) -> Result<Self, Error> {\n+\t\t\tlet ml = GenerationMessageLoop::new(num_nodes).init(threshold)?;\n+\t\t\tml.0.loop_until(|| ml.0.is_empty()); // complete generation session\n \n-\t\t\tlet nodes_ids: Vec<_> = nodes.keys().cloned().collect();\n-\t\t\tfor node in nodes.values() {\n-\t\t\t\tfor node_id in &nodes_ids {\n-\t\t\t\t\tnode.cluster.add_node(node_id.clone());\n-\t\t\t\t}\n-\t\t\t}\n+\t\t\tOk(MessageLoop(ml.0))\n+\t\t}\n \n-\t\t\tMessageLoop {\n-\t\t\t\tsession_id: session_id,\n-\t\t\t\trequester: requester,\n-\t\t\t\tnodes: nodes,\n-\t\t\t\tqueue: VecDeque::new(),\n-\t\t\t\tacl_storages: acl_storages,\n-\t\t\t\tversion: version,\n-\t\t\t}\n+\t\tpub fn init_with_version(self, key_version: Option<H256>) -> Result<(Self, Public, H256), Error> {\n+\t\t\tlet message_hash = H256::random();\n+\t\t\tlet requester = Random.generate().unwrap();\n+\t\t\tlet signature = ethkey::sign(requester.secret(), &SessionId::default()).unwrap();\n+\t\t\tself.0.cluster(0).client()\n+\t\t\t\t.new_ecdsa_signing_session(Default::default(), signature.into(), key_version, message_hash.clone())","path":"secret_store/src/key_server_cluster/client_sessions/signing_session_ecdsa.rs","position":94,"original_position":94,"commit_id":"a98361740b2e5e884cdc639ba52a39efbeb471ae","original_commit_id":"a98361740b2e5e884cdc639ba52a39efbeb471ae","user":{"login":"niklasad1","id":14157425,"node_id":"MDQ6VXNlcjE0MTU3NDI1","avatar_url":"https://avatars1.githubusercontent.com/u/14157425?v=4","gravatar_id":"","url":"https://api.github.com/users/niklasad1","html_url":"https://github.com/niklasad1","followers_url":"https://api.github.com/users/niklasad1/followers","following_url":"https://api.github.com/users/niklasad1/following{/other_user}","gists_url":"https://api.github.com/users/niklasad1/gists{/gist_id}","starred_url":"https://api.github.com/users/niklasad1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/niklasad1/subscriptions","organizations_url":"https://api.github.com/users/niklasad1/orgs","repos_url":"https://api.github.com/users/niklasad1/repos","events_url":"https://api.github.com/users/niklasad1/events{/privacy}","received_events_url":"https://api.github.com/users/niklasad1/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n\t\t\t\t.new_ecdsa_signing_session(Default::default(), signature.into(), key_version, message_hash)\r\n```","created_at":"2018-11-28T19:37:45Z","updated_at":"2018-11-28T19:37:45Z","html_url":"https://github.com/paritytech/parity-ethereum/pull/9850#discussion_r237231177","pull_request_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/comments/237231177"},"html":{"href":"https://github.com/paritytech/parity-ethereum/pull/9850#discussion_r237231177"},"pull_request":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850"}}},"pull_request":{"url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850","id":227746487,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3NzQ2NDg3","html_url":"https://github.com/paritytech/parity-ethereum/pull/9850","diff_url":"https://github.com/paritytech/parity-ethereum/pull/9850.diff","patch_url":"https://github.com/paritytech/parity-ethereum/pull/9850.patch","issue_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/9850","number":9850,"state":"open","locked":false,"title":"SecretStore: use in-memory transport in cluster tests","user":{"login":"svyatonik","id":985319,"node_id":"MDQ6VXNlcjk4NTMxOQ==","avatar_url":"https://avatars0.githubusercontent.com/u/985319?v=4","gravatar_id":"","url":"https://api.github.com/users/svyatonik","html_url":"https://github.com/svyatonik","followers_url":"https://api.github.com/users/svyatonik/followers","following_url":"https://api.github.com/users/svyatonik/following{/other_user}","gists_url":"https://api.github.com/users/svyatonik/gists{/gist_id}","starred_url":"https://api.github.com/users/svyatonik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/svyatonik/subscriptions","organizations_url":"https://api.github.com/users/svyatonik/orgs","repos_url":"https://api.github.com/users/svyatonik/repos","events_url":"https://api.github.com/users/svyatonik/events{/privacy}","received_events_url":"https://api.github.com/users/svyatonik/received_events","type":"User","site_admin":false},"body":"closes #9635 (at least if my assumption that it has been caused by timeout is true)\r\n\r\nThis PR doesn't introduces any new functionality, though it has some (non-negligible) non-test code modifications. These are mostly about splitting huge `cluster.rs` into several files:\r\n- `cluster_connections.rs` - contains trait for connections used by cluster + test implementation of these traits;\r\n- `cluster_connections_net.rs` - network implementation of connection traits. This isn't a new code - it is moved from the `cluster.rs`;\r\n`cluster_message_processor.rs` - entity that connects cluster connections with cluster sessions.\r\n\r\nTest-related notes:\r\n1) all tests from in `cluster.rs` are now using in-memory connections implementation => no timeouts;\r\n2) there's still single place where timeouts are used - 1000ms when network connections are established in `key_server.rs` tests. I thought about switching to in-memory connections there too, but decided to leave as-is at least for now (until writing proper tests for net-connections). So treat these like integration tests for now. Also - iirc this timeout has never failed - 1s is enough for establishing network connections;\r\n3) most of changes in  tests from `cluster.rs` and various `*_session.rs` are about switching to the new `MessagesLoop` from `cluster.rs` (this removes a lot of duplicate && boilerplate code). It isn't finished yet (there are more `*_session.rs`), but enough for first PR.","created_at":"2018-11-01T20:19:36Z","updated_at":"2018-11-28T19:37:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bab543394909269b05069b61857763f59c17c380","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":309708100,"node_id":"MDU6TGFiZWwzMDk3MDgxMDA=","url":"https://api.github.com/repos/paritytech/parity-ethereum/labels/A0-pleasereview%20%F0%9F%A4%93","name":"A0-pleasereview 🤓","color":"666666","default":false},{"id":441816407,"node_id":"MDU6TGFiZWw0NDE4MTY0MDc=","url":"https://api.github.com/repos/paritytech/parity-ethereum/labels/M4-core%20%E2%9B%93","name":"M4-core ⛓","color":"F5FCE6","default":false}],"milestone":{"url":"https://api.github.com/repos/paritytech/parity-ethereum/milestones/24","html_url":"https://github.com/paritytech/parity-ethereum/milestone/24","labels_url":"https://api.github.com/repos/paritytech/parity-ethereum/milestones/24/labels","id":3503556,"node_id":"MDk6TWlsZXN0b25lMzUwMzU1Ng==","number":24,"title":"2.3","description":"","creator":{"login":"5chdn","id":15729797,"node_id":"MDQ6VXNlcjE1NzI5Nzk3","avatar_url":"https://avatars3.githubusercontent.com/u/15729797?v=4","gravatar_id":"","url":"https://api.github.com/users/5chdn","html_url":"https://github.com/5chdn","followers_url":"https://api.github.com/users/5chdn/followers","following_url":"https://api.github.com/users/5chdn/following{/other_user}","gists_url":"https://api.github.com/users/5chdn/gists{/gist_id}","starred_url":"https://api.github.com/users/5chdn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/5chdn/subscriptions","organizations_url":"https://api.github.com/users/5chdn/orgs","repos_url":"https://api.github.com/users/5chdn/repos","events_url":"https://api.github.com/users/5chdn/events{/privacy}","received_events_url":"https://api.github.com/users/5chdn/received_events","type":"User","site_admin":false},"open_issues":142,"closed_issues":192,"state":"open","created_at":"2018-07-17T17:36:15Z","updated_at":"2018-11-28T15:25:41Z","due_on":"2019-01-07T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850/commits","review_comments_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850/comments","review_comment_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/comments{/number}","comments_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/9850/comments","statuses_url":"https://api.github.com/repos/paritytech/parity-ethereum/statuses/a98361740b2e5e884cdc639ba52a39efbeb471ae","head":{"label":"paritytech:fix_ss_tests","ref":"fix_ss_tests","sha":"a98361740b2e5e884cdc639ba52a39efbeb471ae","user":{"login":"paritytech","id":14176906,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTc2OTA2","avatar_url":"https://avatars2.githubusercontent.com/u/14176906?v=4","gravatar_id":"","url":"https://api.github.com/users/paritytech","html_url":"https://github.com/paritytech","followers_url":"https://api.github.com/users/paritytech/followers","following_url":"https://api.github.com/users/paritytech/following{/other_user}","gists_url":"https://api.github.com/users/paritytech/gists{/gist_id}","starred_url":"https://api.github.com/users/paritytech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paritytech/subscriptions","organizations_url":"https://api.github.com/users/paritytech/orgs","repos_url":"https://api.github.com/users/paritytech/repos","events_url":"https://api.github.com/users/paritytech/events{/privacy}","received_events_url":"https://api.github.com/users/paritytech/received_events","type":"Organization","site_admin":false},"repo":{"id":46714939,"node_id":"MDEwOlJlcG9zaXRvcnk0NjcxNDkzOQ==","name":"parity-ethereum","full_name":"paritytech/parity-ethereum","private":false,"owner":{"login":"paritytech","id":14176906,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTc2OTA2","avatar_url":"https://avatars2.githubusercontent.com/u/14176906?v=4","gravatar_id":"","url":"https://api.github.com/users/paritytech","html_url":"https://github.com/paritytech","followers_url":"https://api.github.com/users/paritytech/followers","following_url":"https://api.github.com/users/paritytech/following{/other_user}","gists_url":"https://api.github.com/users/paritytech/gists{/gist_id}","starred_url":"https://api.github.com/users/paritytech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paritytech/subscriptions","organizations_url":"https://api.github.com/users/paritytech/orgs","repos_url":"https://api.github.com/users/paritytech/repos","events_url":"https://api.github.com/users/paritytech/events{/privacy}","received_events_url":"https://api.github.com/users/paritytech/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/paritytech/parity-ethereum","description":"The fast, light, and robust EVM and WASM client.","fork":false,"url":"https://api.github.com/repos/paritytech/parity-ethereum","forks_url":"https://api.github.com/repos/paritytech/parity-ethereum/forks","keys_url":"https://api.github.com/repos/paritytech/parity-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paritytech/parity-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paritytech/parity-ethereum/teams","hooks_url":"https://api.github.com/repos/paritytech/parity-ethereum/hooks","issue_events_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/paritytech/parity-ethereum/events","assignees_url":"https://api.github.com/repos/paritytech/parity-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/paritytech/parity-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/paritytech/parity-ethereum/tags","blobs_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paritytech/parity-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/paritytech/parity-ethereum/languages","stargazers_url":"https://api.github.com/repos/paritytech/parity-ethereum/stargazers","contributors_url":"https://api.github.com/repos/paritytech/parity-ethereum/contributors","subscribers_url":"https://api.github.com/repos/paritytech/parity-ethereum/subscribers","subscription_url":"https://api.github.com/repos/paritytech/parity-ethereum/subscription","commits_url":"https://api.github.com/repos/paritytech/parity-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/paritytech/parity-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/paritytech/parity-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/paritytech/parity-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paritytech/parity-ethereum/merges","archive_url":"https://api.github.com/repos/paritytech/parity-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paritytech/parity-ethereum/downloads","issues_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/paritytech/parity-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/paritytech/parity-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paritytech/parity-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/paritytech/parity-ethereum/releases{/id}","deployments_url":"https://api.github.com/repos/paritytech/parity-ethereum/deployments","created_at":"2015-11-23T11:07:32Z","updated_at":"2018-11-28T12:14:48Z","pushed_at":"2018-11-28T17:56:45Z","git_url":"git://github.com/paritytech/parity-ethereum.git","ssh_url":"git@github.com:paritytech/parity-ethereum.git","clone_url":"https://github.com/paritytech/parity-ethereum.git","svn_url":"https://github.com/paritytech/parity-ethereum","homepage":"https://parity.io","size":59630,"stargazers_count":5023,"watchers_count":5023,"language":"Rust","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1120,"mirror_url":null,"archived":false,"open_issues_count":208,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1120,"open_issues":208,"watchers":5023,"default_branch":"master"}},"base":{"label":"paritytech:master","ref":"master","sha":"3a6e04ba150d4bc2badb707cdc0efdfc5159aef6","user":{"login":"paritytech","id":14176906,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTc2OTA2","avatar_url":"https://avatars2.githubusercontent.com/u/14176906?v=4","gravatar_id":"","url":"https://api.github.com/users/paritytech","html_url":"https://github.com/paritytech","followers_url":"https://api.github.com/users/paritytech/followers","following_url":"https://api.github.com/users/paritytech/following{/other_user}","gists_url":"https://api.github.com/users/paritytech/gists{/gist_id}","starred_url":"https://api.github.com/users/paritytech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paritytech/subscriptions","organizations_url":"https://api.github.com/users/paritytech/orgs","repos_url":"https://api.github.com/users/paritytech/repos","events_url":"https://api.github.com/users/paritytech/events{/privacy}","received_events_url":"https://api.github.com/users/paritytech/received_events","type":"Organization","site_admin":false},"repo":{"id":46714939,"node_id":"MDEwOlJlcG9zaXRvcnk0NjcxNDkzOQ==","name":"parity-ethereum","full_name":"paritytech/parity-ethereum","private":false,"owner":{"login":"paritytech","id":14176906,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MTc2OTA2","avatar_url":"https://avatars2.githubusercontent.com/u/14176906?v=4","gravatar_id":"","url":"https://api.github.com/users/paritytech","html_url":"https://github.com/paritytech","followers_url":"https://api.github.com/users/paritytech/followers","following_url":"https://api.github.com/users/paritytech/following{/other_user}","gists_url":"https://api.github.com/users/paritytech/gists{/gist_id}","starred_url":"https://api.github.com/users/paritytech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paritytech/subscriptions","organizations_url":"https://api.github.com/users/paritytech/orgs","repos_url":"https://api.github.com/users/paritytech/repos","events_url":"https://api.github.com/users/paritytech/events{/privacy}","received_events_url":"https://api.github.com/users/paritytech/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/paritytech/parity-ethereum","description":"The fast, light, and robust EVM and WASM client.","fork":false,"url":"https://api.github.com/repos/paritytech/parity-ethereum","forks_url":"https://api.github.com/repos/paritytech/parity-ethereum/forks","keys_url":"https://api.github.com/repos/paritytech/parity-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/paritytech/parity-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/paritytech/parity-ethereum/teams","hooks_url":"https://api.github.com/repos/paritytech/parity-ethereum/hooks","issue_events_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/paritytech/parity-ethereum/events","assignees_url":"https://api.github.com/repos/paritytech/parity-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/paritytech/parity-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/paritytech/parity-ethereum/tags","blobs_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/paritytech/parity-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/paritytech/parity-ethereum/languages","stargazers_url":"https://api.github.com/repos/paritytech/parity-ethereum/stargazers","contributors_url":"https://api.github.com/repos/paritytech/parity-ethereum/contributors","subscribers_url":"https://api.github.com/repos/paritytech/parity-ethereum/subscribers","subscription_url":"https://api.github.com/repos/paritytech/parity-ethereum/subscription","commits_url":"https://api.github.com/repos/paritytech/parity-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/paritytech/parity-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/paritytech/parity-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/paritytech/parity-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/paritytech/parity-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/paritytech/parity-ethereum/merges","archive_url":"https://api.github.com/repos/paritytech/parity-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/paritytech/parity-ethereum/downloads","issues_url":"https://api.github.com/repos/paritytech/parity-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/paritytech/parity-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/paritytech/parity-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/paritytech/parity-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/paritytech/parity-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/paritytech/parity-ethereum/releases{/id}","deployments_url":"https://api.github.com/repos/paritytech/parity-ethereum/deployments","created_at":"2015-11-23T11:07:32Z","updated_at":"2018-11-28T12:14:48Z","pushed_at":"2018-11-28T17:56:45Z","git_url":"git://github.com/paritytech/parity-ethereum.git","ssh_url":"git@github.com:paritytech/parity-ethereum.git","clone_url":"https://github.com/paritytech/parity-ethereum.git","svn_url":"https://github.com/paritytech/parity-ethereum","homepage":"https://parity.io","size":59630,"stargazers_count":5023,"watchers_count":5023,"language":"Rust","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1120,"mirror_url":null,"archived":false,"open_issues_count":208,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1120,"open_issues":208,"watchers":5023,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850"},"html":{"href":"https://github.com/paritytech/parity-ethereum/pull/9850"},"issue":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/issues/9850"},"comments":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/issues/9850/comments"},"review_comments":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850/comments"},"review_comment":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/pulls/9850/commits"},"statuses":{"href":"https://api.github.com/repos/paritytech/parity-ethereum/statuses/a98361740b2e5e884cdc639ba52a39efbeb471ae"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"niklasad1"}}