{"action":"created","comment":{"url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/comments/231383343","pull_request_review_id":172070982,"id":231383343,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMTM4MzM0Mw==","diff_hunk":"@@ -0,0 +1,506 @@\n+/* Copyright 2018 by Multy.io\n+ * Licensed under Multy.io license.\n+ *\n+ * See LICENSE for details\n+ */\n+\n+#include \"multy_core/src/bitcoin/bitcoin_transaction_segwit.h\"\n+\n+#include \"multy_core/src/bitcoin/bitcoin_account.h\"\n+#include \"multy_core/src/property_predicates.h\"\n+#include \"multy_core/src/bitcoin/bitcoin_opcode.h\"\n+#include \"multy_core/src/bitcoin/bitcoin_stream.h\"\n+#include \"multy_core/src/api/key_impl.h\"\n+#include \"multy_core/src/utility.h\"\n+#include \"multy_core/src/codec.h\"\n+#include \"multy_core/src/hash.h\"\n+#include \"multy_core/binary_data.h\"\n+\n+#include \"wally_crypto.h\"\n+\n+#include <array>\n+\n+namespace {\n+\n+using namespace multy_core::internal;\n+\n+const unsigned char BITCOIN_INPUT_SEQ_FINAL[] = {0xFF, 0xFF, 0xFF, 0xFF};\n+const unsigned char BITCOIN_LOCK_TIME[] = {0x00, 0x00, 0x00, 0x00};\n+\n+template <typename T>\n+std::string make_id(const std::string& base, const T& suffix)\n+{\n+    std::ostringstream ostr;\n+    ostr << base << suffix;\n+    return ostr.str();\n+}\n+\n+BinaryDataPtr make_script_pub_key(const BinaryData& public_key_hash, BitcoinAddressType address_type)\n+{\n+    BitcoinDataStream sig_stream;\n+    if (address_type == BITCOIN_ADDRESS_P2PKH)\n+    {\n+        sig_stream << OP_DUP;\n+        sig_stream << OP_HASH160;\n+\n+        sig_stream << as_compact_size(public_key_hash.len);\n+        sig_stream << public_key_hash;\n+\n+        sig_stream << OP_EQUALVERIFY;\n+        sig_stream << OP_CHECKSIG;\n+    }\n+    else if (address_type == BITCOIN_ADDRESS_P2SH)\n+    {\n+        sig_stream << OP_HASH160;\n+\n+        sig_stream << as_compact_size(public_key_hash.len);\n+        sig_stream << public_key_hash;\n+\n+        sig_stream << OP_EQUAL;\n+    }\n+    return make_clone(sig_stream.get_content());\n+}\n+\n+BinaryDataPtr make_script_pub_key_from_address(const BitcoinNetType expected_net_type, const std::string& address)\n+{\n+    BitcoinNetType net_type;\n+    BitcoinAddressType address_type;\n+    BinaryDataPtr binary_address = bitcoin_parse_address(address.c_str(),\n+        &net_type, &address_type);\n+    assert(binary_address);\n+\n+    if (address_type != BITCOIN_ADDRESS_P2PKH && address_type != BITCOIN_ADDRESS_P2SH)\n+    {\n+        THROW_EXCEPTION2(ERROR_INVALID_ADDRESS, \"Unsupported address type.\")\n+                << \" Address type: \" << address_type;\n+    }\n+\n+    if (expected_net_type != net_type)\n+    {\n+        THROW_EXCEPTION2(ERROR_INVALID_ADDRESS, \"Wrong net type for address.\")\n+                << \" Expected: \" << expected_net_type\n+                << \" actual:\" << net_type;\n+    }\n+\n+    return make_script_pub_key(*binary_address, address_type);\n+}\n+\n+\n+\n+} // namespace\n+\n+namespace multy_core\n+{\n+namespace internal\n+{\n+\n+BitcoinTransactionSegWitDestination::BitcoinTransactionSegWitDestination(BitcoinNetType net_type)\n+    : amount(m_properties,\n+             \"amount\",\n+             Property::REQUIRED,\n+             &verify_bigger_than<BigInt, 0, ERROR_INVALID_ARGUMENT>),\n+      address(m_properties,\n+              \"address\",\n+              Property::REQUIRED,\n+              [this](const std::string &new_address) {\n+                    this->sig_script = make_script_pub_key_from_address(this->m_net_type, new_address);\n+              }),\n+      is_change(m_properties,\n+                \"is_change\",\n+                Property::OPTIONAL,\n+                [](const int32_t value) {\n+                    if (value != 0 )\n+                    {\n+                        THROW_EXCEPTION(\"NOT SET is_change to segwit TX\");\n+                    }\n+                }),\n+      sig_script(),\n+      m_net_type(net_type)\n+{\n+}\n+\n+//BinaryData BitcoinTransactionSegWitDestination::preview_output()\n+//{\n+//    BitcoinDataStream result;\n+\n+//    result << amount;\n+//    result << sig_script;\n+\n+//    return result.get_content();\n+//}\n+\n+BitcoinTransactionSegWitSource::BitcoinTransactionSegWitSource()\n+    : prev_transaction_hash(\n+              m_properties,\n+              \"prev_tx_hash\",\n+              Property::REQUIRED,\n+              [](const BinaryData& new_tx_out_hash) {\n+                  if (new_tx_out_hash.len != 32)\n+                  {\n+                      THROW_EXCEPTION2(\n+                              ERROR_TRANSACTION_SOURCE_INVALID_PREV_TX_HASH,\n+                              \"Previous transaction hash should be\"\n+                              \"exactly 32 bytes long.\");\n+                  }\n+              }),\n+      prev_transaction_out_index(\n+              m_properties,\n+              \"prev_tx_out_index\",\n+              Property::REQUIRED),\n+      prev_transaction_out_script_pubkey(\n+              m_properties,\n+              \"prev_tx_out_script_pubkey\",\n+              Property::REQUIRED),\n+      private_key(\n+              m_properties,\n+              \"private_key\",\n+              Property::REQUIRED),\n+      sequence(make_clone(BinaryData{BITCOIN_INPUT_SEQ_FINAL, 4}),\n+                m_properties, \"sequence\", Property::OPTIONAL),\n+      script_signature(),\n+      script_witness(),\n+      amount(m_properties, \"amount\", Property::REQUIRED)\n+{\n+}\n+\n+void BitcoinTransactionSegWitSource::sign(hash<256>& hash_prevouts, hash<256>& hash_sequence, hash<256>& hash_outputs, BinaryDataPtr& lock_time)\n+{\n+\n+    const PublicKeyPtr& public_key = private_key.get_value()->make_public_key();\n+    std::array<uint8_t, HASH160_LEN> segwit_script_P2WPKH;\n+    BinaryData public_key_hash_data = as_binary_data(segwit_script_P2WPKH);\n+    bitcoin_hash_160(public_key->get_content(), &public_key_hash_data);\n+\n+    BinaryDataPtr signature;\n+    {\n+        BitcoinDataStream sign_data;\n+        sign_data << static_cast<int32_t>(2); // nVersion bip143 implimented\n+        sign_data << as_binary_data(hash_prevouts);\n+        sign_data << as_binary_data(hash_sequence);\n+        sign_data << reverse(**prev_transaction_hash);\n+        sign_data << prev_transaction_out_index;\n+        sign_data << static_cast<uint8_t>(0x19);\n+        sign_data << OP_DUP;\n+        sign_data << OP_HASH160;\n+        sign_data << as_compact_size(public_key_hash_data.len);\n+        sign_data << public_key_hash_data;\n+        sign_data << OP_EQUALVERIFY;\n+        sign_data << OP_CHECKSIG;\n+        sign_data << *amount;\n+        sign_data << **sequence;\n+        sign_data << as_binary_data(hash_outputs);\n+        sign_data << *lock_time;\n+        sign_data << static_cast<uint32_t>(1); //signature version\n+\n+        signature = private_key.get_value()->sign(sign_data.get_content());\n+    }\n+\n+    BitcoinDataStream sig_script_witness_stream;\n+    sig_script_witness_stream << uint8_t(2); // elements count  (signature, public key)\n+    sig_script_witness_stream << as_compact_size(signature->len + 1);\n+    sig_script_witness_stream << *signature;\n+    sig_script_witness_stream << uint8_t(1); // hash-code type\n+\n+   // const PublicKeyPtr& public_key = private_key.get_value()->make_public_key();\n+    const BinaryData& public_key_data = public_key->get_content();\n+    sig_script_witness_stream << as_compact_size(public_key_data.len);\n+    sig_script_witness_stream << public_key_data;\n+\n+    script_witness = make_clone(sig_script_witness_stream.get_content());\n+}\n+\n+BinaryDataPtr BitcoinTransactionSegWitSource::serialize_with_script_pub_key() const\n+{\n+    BitcoinDataStream result;\n+\n+    result << reverse(**prev_transaction_hash);\n+    result << prev_transaction_out_index;\n+\n+    BinaryDataPtr script_pubkey(make_script_pubkey());\n+    result << as_compact_size(script_pubkey->len);\n+    result << *script_pubkey;\n+    result << **sequence;\n+\n+    return make_clone(result.get_content());\n+}\n+\n+BinaryDataPtr BitcoinTransactionSegWitSource::preview_transaction() const\n+{\n+    BitcoinDataStream result;\n+\n+    result << reverse(**prev_transaction_hash);\n+    result << prev_transaction_out_index;\n+\n+    return make_clone(result.get_content());\n+}\n+\n+BinaryDataPtr BitcoinTransactionSegWitSource::make_script_pubkey() const\n+{\n+    BitcoinDataStream result;\n+\n+    const PublicKeyPtr& public_key = private_key.get_value()->make_public_key();\n+    std::array<uint8_t, HASH160_LEN + 2> segwit_script_P2WPKH;\n+    BinaryData public_key_hash_data = power_slice(as_binary_data(segwit_script_P2WPKH), 2, -2);\n+    segwit_script_P2WPKH[0] = OP_VERSION_BYTE_WITNESS; // Version byte witness\n+    segwit_script_P2WPKH[1] = HASH160_LEN; // Witness program is 20 bytes\n+    bitcoin_hash_160(public_key->get_content(), &public_key_hash_data);\n+\n+    result << static_cast<uint8_t>(0x16); // size script to P2SH","path":"multy_core/src/bitcoin/bitcoin_transaction_segwit.cpp","position":248,"original_position":248,"commit_id":"b39214601cd56d65a2094db2dc275768b48f692d","original_commit_id":"b39214601cd56d65a2094db2dc275768b48f692d","user":{"login":"Enmk","id":1110183,"node_id":"MDQ6VXNlcjExMTAxODM=","avatar_url":"https://avatars3.githubusercontent.com/u/1110183?v=4","gravatar_id":"","url":"https://api.github.com/users/Enmk","html_url":"https://github.com/Enmk","followers_url":"https://api.github.com/users/Enmk/followers","following_url":"https://api.github.com/users/Enmk/following{/other_user}","gists_url":"https://api.github.com/users/Enmk/gists{/gist_id}","starred_url":"https://api.github.com/users/Enmk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Enmk/subscriptions","organizations_url":"https://api.github.com/users/Enmk/orgs","repos_url":"https://api.github.com/users/Enmk/repos","events_url":"https://api.github.com/users/Enmk/events{/privacy}","received_events_url":"https://api.github.com/users/Enmk/received_events","type":"User","site_admin":false},"body":"wth ? isn't that supposed to be `segwit_script_P2WPKH.size()` or something similar?","created_at":"2018-11-07T05:20:43Z","updated_at":"2018-11-07T05:37:45Z","html_url":"https://github.com/Multy-io/Multy-Core/pull/36#discussion_r231383343","pull_request_url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/comments/231383343"},"html":{"href":"https://github.com/Multy-io/Multy-Core/pull/36#discussion_r231383343"},"pull_request":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36"}}},"pull_request":{"url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36","id":227973865,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3OTczODY1","html_url":"https://github.com/Multy-io/Multy-Core/pull/36","diff_url":"https://github.com/Multy-io/Multy-Core/pull/36.diff","patch_url":"https://github.com/Multy-io/Multy-Core/pull/36.patch","issue_url":"https://api.github.com/repos/Multy-io/Multy-Core/issues/36","number":36,"state":"open","locked":false,"title":"Mul 1616 btc seg wit logic tx","user":{"login":"PashaKlybik","id":11669156,"node_id":"MDQ6VXNlcjExNjY5MTU2","avatar_url":"https://avatars2.githubusercontent.com/u/11669156?v=4","gravatar_id":"","url":"https://api.github.com/users/PashaKlybik","html_url":"https://github.com/PashaKlybik","followers_url":"https://api.github.com/users/PashaKlybik/followers","following_url":"https://api.github.com/users/PashaKlybik/following{/other_user}","gists_url":"https://api.github.com/users/PashaKlybik/gists{/gist_id}","starred_url":"https://api.github.com/users/PashaKlybik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PashaKlybik/subscriptions","organizations_url":"https://api.github.com/users/PashaKlybik/orgs","repos_url":"https://api.github.com/users/PashaKlybik/repos","events_url":"https://api.github.com/users/PashaKlybik/events{/privacy}","received_events_url":"https://api.github.com/users/PashaKlybik/received_events","type":"User","site_admin":false},"body":"MUL-1616: Make Bitcoin segwit Tx\r\n    Serialize SegWit transaction\r\n    Sign SegWit transaction\r\n    Refactor testcase for Bitcoin SegWit\r\n    Refactor bitcoin stream","created_at":"2018-11-02T15:29:51Z","updated_at":"2018-11-07T05:37:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4fce7400746a8da00b9dd34b4466a42a4b0f982b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36/commits","review_comments_url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36/comments","review_comment_url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Multy-io/Multy-Core/issues/36/comments","statuses_url":"https://api.github.com/repos/Multy-io/Multy-Core/statuses/b39214601cd56d65a2094db2dc275768b48f692d","head":{"label":"PashaKlybik:MUL-1616-BTC-SegWit-logic-tx","ref":"MUL-1616-BTC-SegWit-logic-tx","sha":"b39214601cd56d65a2094db2dc275768b48f692d","user":{"login":"PashaKlybik","id":11669156,"node_id":"MDQ6VXNlcjExNjY5MTU2","avatar_url":"https://avatars2.githubusercontent.com/u/11669156?v=4","gravatar_id":"","url":"https://api.github.com/users/PashaKlybik","html_url":"https://github.com/PashaKlybik","followers_url":"https://api.github.com/users/PashaKlybik/followers","following_url":"https://api.github.com/users/PashaKlybik/following{/other_user}","gists_url":"https://api.github.com/users/PashaKlybik/gists{/gist_id}","starred_url":"https://api.github.com/users/PashaKlybik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PashaKlybik/subscriptions","organizations_url":"https://api.github.com/users/PashaKlybik/orgs","repos_url":"https://api.github.com/users/PashaKlybik/repos","events_url":"https://api.github.com/users/PashaKlybik/events{/privacy}","received_events_url":"https://api.github.com/users/PashaKlybik/received_events","type":"User","site_admin":false},"repo":{"id":137932216,"node_id":"MDEwOlJlcG9zaXRvcnkxMzc5MzIyMTY=","name":"Multy-Core","full_name":"PashaKlybik/Multy-Core","private":false,"owner":{"login":"PashaKlybik","id":11669156,"node_id":"MDQ6VXNlcjExNjY5MTU2","avatar_url":"https://avatars2.githubusercontent.com/u/11669156?v=4","gravatar_id":"","url":"https://api.github.com/users/PashaKlybik","html_url":"https://github.com/PashaKlybik","followers_url":"https://api.github.com/users/PashaKlybik/followers","following_url":"https://api.github.com/users/PashaKlybik/following{/other_user}","gists_url":"https://api.github.com/users/PashaKlybik/gists{/gist_id}","starred_url":"https://api.github.com/users/PashaKlybik/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PashaKlybik/subscriptions","organizations_url":"https://api.github.com/users/PashaKlybik/orgs","repos_url":"https://api.github.com/users/PashaKlybik/repos","events_url":"https://api.github.com/users/PashaKlybik/events{/privacy}","received_events_url":"https://api.github.com/users/PashaKlybik/received_events","type":"User","site_admin":false},"html_url":"https://github.com/PashaKlybik/Multy-Core","description":"Cross-platform mobile-first library for HD wallets and creating raw transactions of Bitcoin and Ethereum.","fork":true,"url":"https://api.github.com/repos/PashaKlybik/Multy-Core","forks_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/forks","keys_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/teams","hooks_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/hooks","issue_events_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/issues/events{/number}","events_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/events","assignees_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/assignees{/user}","branches_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/branches{/branch}","tags_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/tags","blobs_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/git/refs{/sha}","trees_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/statuses/{sha}","languages_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/languages","stargazers_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/stargazers","contributors_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/contributors","subscribers_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/subscribers","subscription_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/subscription","commits_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/commits{/sha}","git_commits_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/git/commits{/sha}","comments_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/comments{/number}","issue_comment_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/issues/comments{/number}","contents_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/contents/{+path}","compare_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/merges","archive_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/downloads","issues_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/issues{/number}","pulls_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/pulls{/number}","milestones_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/milestones{/number}","notifications_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/labels{/name}","releases_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/releases{/id}","deployments_url":"https://api.github.com/repos/PashaKlybik/Multy-Core/deployments","created_at":"2018-06-19T18:48:39Z","updated_at":"2018-08-29T11:16:38Z","pushed_at":"2018-11-05T10:29:28Z","git_url":"git://github.com/PashaKlybik/Multy-Core.git","ssh_url":"git@github.com:PashaKlybik/Multy-Core.git","clone_url":"https://github.com/PashaKlybik/Multy-Core.git","svn_url":"https://github.com/PashaKlybik/Multy-Core","homepage":"http://multy.io","size":8714,"stargazers_count":0,"watchers_count":0,"language":"C++","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":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Multy-io:master","ref":"master","sha":"db9e80d01c7de1e9d0b4b7a7b0d6a0944252bbe4","user":{"login":"Multy-io","id":32778660,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNzc4NjYw","avatar_url":"https://avatars3.githubusercontent.com/u/32778660?v=4","gravatar_id":"","url":"https://api.github.com/users/Multy-io","html_url":"https://github.com/Multy-io","followers_url":"https://api.github.com/users/Multy-io/followers","following_url":"https://api.github.com/users/Multy-io/following{/other_user}","gists_url":"https://api.github.com/users/Multy-io/gists{/gist_id}","starred_url":"https://api.github.com/users/Multy-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Multy-io/subscriptions","organizations_url":"https://api.github.com/users/Multy-io/orgs","repos_url":"https://api.github.com/users/Multy-io/repos","events_url":"https://api.github.com/users/Multy-io/events{/privacy}","received_events_url":"https://api.github.com/users/Multy-io/received_events","type":"Organization","site_admin":false},"repo":{"id":110231760,"node_id":"MDEwOlJlcG9zaXRvcnkxMTAyMzE3NjA=","name":"Multy-Core","full_name":"Multy-io/Multy-Core","private":false,"owner":{"login":"Multy-io","id":32778660,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNzc4NjYw","avatar_url":"https://avatars3.githubusercontent.com/u/32778660?v=4","gravatar_id":"","url":"https://api.github.com/users/Multy-io","html_url":"https://github.com/Multy-io","followers_url":"https://api.github.com/users/Multy-io/followers","following_url":"https://api.github.com/users/Multy-io/following{/other_user}","gists_url":"https://api.github.com/users/Multy-io/gists{/gist_id}","starred_url":"https://api.github.com/users/Multy-io/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Multy-io/subscriptions","organizations_url":"https://api.github.com/users/Multy-io/orgs","repos_url":"https://api.github.com/users/Multy-io/repos","events_url":"https://api.github.com/users/Multy-io/events{/privacy}","received_events_url":"https://api.github.com/users/Multy-io/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Multy-io/Multy-Core","description":"Cross-platform mobile-first library for HD wallets and creating raw transactions of Bitcoin and Ethereum.","fork":false,"url":"https://api.github.com/repos/Multy-io/Multy-Core","forks_url":"https://api.github.com/repos/Multy-io/Multy-Core/forks","keys_url":"https://api.github.com/repos/Multy-io/Multy-Core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Multy-io/Multy-Core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Multy-io/Multy-Core/teams","hooks_url":"https://api.github.com/repos/Multy-io/Multy-Core/hooks","issue_events_url":"https://api.github.com/repos/Multy-io/Multy-Core/issues/events{/number}","events_url":"https://api.github.com/repos/Multy-io/Multy-Core/events","assignees_url":"https://api.github.com/repos/Multy-io/Multy-Core/assignees{/user}","branches_url":"https://api.github.com/repos/Multy-io/Multy-Core/branches{/branch}","tags_url":"https://api.github.com/repos/Multy-io/Multy-Core/tags","blobs_url":"https://api.github.com/repos/Multy-io/Multy-Core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Multy-io/Multy-Core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Multy-io/Multy-Core/git/refs{/sha}","trees_url":"https://api.github.com/repos/Multy-io/Multy-Core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Multy-io/Multy-Core/statuses/{sha}","languages_url":"https://api.github.com/repos/Multy-io/Multy-Core/languages","stargazers_url":"https://api.github.com/repos/Multy-io/Multy-Core/stargazers","contributors_url":"https://api.github.com/repos/Multy-io/Multy-Core/contributors","subscribers_url":"https://api.github.com/repos/Multy-io/Multy-Core/subscribers","subscription_url":"https://api.github.com/repos/Multy-io/Multy-Core/subscription","commits_url":"https://api.github.com/repos/Multy-io/Multy-Core/commits{/sha}","git_commits_url":"https://api.github.com/repos/Multy-io/Multy-Core/git/commits{/sha}","comments_url":"https://api.github.com/repos/Multy-io/Multy-Core/comments{/number}","issue_comment_url":"https://api.github.com/repos/Multy-io/Multy-Core/issues/comments{/number}","contents_url":"https://api.github.com/repos/Multy-io/Multy-Core/contents/{+path}","compare_url":"https://api.github.com/repos/Multy-io/Multy-Core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Multy-io/Multy-Core/merges","archive_url":"https://api.github.com/repos/Multy-io/Multy-Core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Multy-io/Multy-Core/downloads","issues_url":"https://api.github.com/repos/Multy-io/Multy-Core/issues{/number}","pulls_url":"https://api.github.com/repos/Multy-io/Multy-Core/pulls{/number}","milestones_url":"https://api.github.com/repos/Multy-io/Multy-Core/milestones{/number}","notifications_url":"https://api.github.com/repos/Multy-io/Multy-Core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Multy-io/Multy-Core/labels{/name}","releases_url":"https://api.github.com/repos/Multy-io/Multy-Core/releases{/id}","deployments_url":"https://api.github.com/repos/Multy-io/Multy-Core/deployments","created_at":"2017-11-10T09:55:43Z","updated_at":"2018-11-06T14:43:10Z","pushed_at":"2018-11-05T10:29:30Z","git_url":"git://github.com/Multy-io/Multy-Core.git","ssh_url":"git@github.com:Multy-io/Multy-Core.git","clone_url":"https://github.com/Multy-io/Multy-Core.git","svn_url":"https://github.com/Multy-io/Multy-Core","homepage":"http://multy.io","size":8693,"stargazers_count":19,"watchers_count":19,"language":"C++","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":9,"open_issues":1,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36"},"html":{"href":"https://github.com/Multy-io/Multy-Core/pull/36"},"issue":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/issues/36"},"comments":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/issues/36/comments"},"review_comments":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36/comments"},"review_comment":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/pulls/36/commits"},"statuses":{"href":"https://api.github.com/repos/Multy-io/Multy-Core/statuses/b39214601cd56d65a2094db2dc275768b48f692d"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"Enmk"}}