{"action":"created","comment":{"url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments/34762080","id":34762080,"diff_hunk":"@@ -67,90 +77,200 @@ enum Strictness\n  */\n struct BlockInfo\n {\n+\tfriend class BlockChain;\n public:\n-\t// TODO: make them all private!\n-\th256 parentHash;\n-\th256 sha3Uncles;\n-\tAddress coinbaseAddress;\n-\th256 stateRoot;\n-\th256 transactionsRoot;\n-\th256 receiptsRoot;\n-\tLogBloom logBloom;\n-\tu256 difficulty;\n-\tu256 number;\n-\tu256 gasLimit;\n-\tu256 gasUsed;\n-\tu256 timestamp = Invalid256;\n-\tbytes extraData;\n-\th256 mixHash;\n-\tNonce nonce;\n+\tstatic const unsigned BasicFields = 13;\n \n \tBlockInfo();\n-\texplicit BlockInfo(bytes const& _block, Strictness _s = IgnoreNonce, h256 const& _h = h256()): BlockInfo(&_block, _s, _h) {}\n-\texplicit BlockInfo(bytesConstRef _block, Strictness _s = IgnoreNonce, h256 const& _h = h256());\n+\texplicit BlockInfo(bytesConstRef _data, Strictness _s = CheckEverything, h256 const& _hashWith = h256(), BlockDataType _bdt = BlockData);\n+\texplicit BlockInfo(bytes const& _data, Strictness _s = CheckEverything, h256 const& _hashWith = h256(), BlockDataType _bdt = BlockData): BlockInfo(&_data, _s, _hashWith, _bdt) {}\n \n-\tstatic h256 headerHash(bytes const& _block) { return headerHash(&_block); }\n-\tstatic h256 headerHash(bytesConstRef _block);\n+\tstatic h256 headerHashFromBlock(bytes const& _block) { return headerHashFromBlock(&_block); }\n+\tstatic h256 headerHashFromBlock(bytesConstRef _block);\n+\tstatic RLP extractHeader(bytesConstRef _block);\n \n-\tstatic BlockInfo fromHeader(bytes const& _header, Strictness _s = IgnoreNonce, h256 const& _h = h256()) { return fromHeader(bytesConstRef(&_header), _s, _h); }\n-\tstatic BlockInfo fromHeader(bytesConstRef _header, Strictness _s = IgnoreNonce, h256 const& _h = h256());\n-\n-\texplicit operator bool() const { return timestamp != Invalid256; }\n+\texplicit operator bool() const { return m_timestamp != Invalid256; }\n \n \tbool operator==(BlockInfo const& _cmp) const\n \t{\n-\t\treturn parentHash == _cmp.parentHash &&\n-\t\t\tsha3Uncles == _cmp.sha3Uncles &&\n-\t\t\tcoinbaseAddress == _cmp.coinbaseAddress &&\n-\t\t\tstateRoot == _cmp.stateRoot &&\n-\t\t\ttransactionsRoot == _cmp.transactionsRoot &&\n-\t\t\treceiptsRoot == _cmp.receiptsRoot &&\n-\t\t\tlogBloom == _cmp.logBloom &&\n-\t\t\tdifficulty == _cmp.difficulty &&\n-\t\t\tnumber == _cmp.number &&\n-\t\t\tgasLimit == _cmp.gasLimit &&\n-\t\t\tgasUsed == _cmp.gasUsed &&\n-\t\t\ttimestamp == _cmp.timestamp &&\n-\t\t\textraData == _cmp.extraData &&\n-\t\t\tmixHash == _cmp.mixHash &&\n-\t\t\tnonce == _cmp.nonce;\n+\t\treturn m_parentHash == _cmp.parentHash() &&\n+\t\t\tm_sha3Uncles == _cmp.sha3Uncles() &&\n+\t\t\tm_coinbaseAddress == _cmp.coinbaseAddress() &&\n+\t\t\tm_stateRoot == _cmp.stateRoot() &&\n+\t\t\tm_transactionsRoot == _cmp.transactionsRoot() &&\n+\t\t\tm_receiptsRoot == _cmp.receiptsRoot() &&\n+\t\t\tm_logBloom == _cmp.logBloom() &&\n+\t\t\tm_difficulty == _cmp.difficulty() &&\n+\t\t\tm_number == _cmp.number() &&\n+\t\t\tm_gasLimit == _cmp.gasLimit() &&\n+\t\t\tm_gasUsed == _cmp.gasUsed() &&\n+\t\t\tm_timestamp == _cmp.timestamp() &&\n+\t\t\tm_extraData == _cmp.extraData();\n \t}\n \tbool operator!=(BlockInfo const& _cmp) const { return !operator==(_cmp); }\n \n-\tvoid clear();\n-\n-\tvoid noteDirty() const { m_hash = m_seedHash = m_boundary = h256(); }\n-\n-\tvoid populateFromHeader(RLP const& _header, Strictness _s = IgnoreNonce, h256 const& _h = h256());\n-\tvoid populate(bytesConstRef _block, Strictness _s = IgnoreNonce, h256 const& _h = h256());\n-\tvoid populate(bytes const& _block, Strictness _s = IgnoreNonce, h256 const& _h = h256()) { populate(&_block, _s, _h); }\n \tvoid verifyInternals(bytesConstRef _block) const;\n \tvoid verifyParent(BlockInfo const& _parent) const;\n \tvoid populateFromParent(BlockInfo const& parent);\n \n \tu256 calculateDifficulty(BlockInfo const& _parent) const;\n \tu256 selectGasLimit(BlockInfo const& _parent) const;\n-\th256 const& seedHash() const;\n-\th256 const& hash() const;\n \th256 const& boundary() const;\n \n+\th256 const& parentHash() const { return m_parentHash; }\n+\th256 const& sha3Uncles() const { return m_sha3Uncles; }\n+\n+\tvoid setParentHash(h256 const& _v) { m_parentHash = _v; noteDirty(); }\n+\tvoid setSha3Uncles(h256 const& _v) { m_sha3Uncles = _v; noteDirty(); }\n+\tvoid setTimestamp(u256 const& _v) { m_timestamp = _v; noteDirty(); }\n+\tvoid setCoinbaseAddress(Address const& _v) { m_coinbaseAddress = _v; noteDirty(); }\n+\tvoid setRoots(h256 const& _t, h256 const& _r, h256 const& _u, h256 const& _s) { m_transactionsRoot = _t; m_receiptsRoot = _r; m_stateRoot = _s; m_sha3Uncles = _u; noteDirty(); }\n+\tvoid setGasUsed(u256 const& _v) { m_gasUsed = _v; noteDirty(); }\n+\tvoid setExtraData(bytes const& _v) { m_extraData = _v; noteDirty(); }\n+\tvoid setLogBloom(LogBloom const& _v) { m_logBloom = _v; noteDirty(); }\n+\n+\tAddress const& coinbaseAddress() const { return m_coinbaseAddress; }\n+\th256 const& stateRoot() const { return m_stateRoot; }\n+\th256 const& transactionsRoot() const { return m_transactionsRoot; }\n+\th256 const& receiptsRoot() const { return m_receiptsRoot; }\n+\tLogBloom const& logBloom() const { return m_logBloom; }\n+\tu256 const& number() const { return m_number; }\n+\tu256 const& gasLimit() const { return m_gasLimit; }\n+\tu256 const& gasUsed() const { return m_gasUsed; }\n+\tu256 const& timestamp() const { return m_timestamp; }\n+\tbytes const& extraData() const { return m_extraData; }\n+\n+\tu256 const& difficulty() const { return m_difficulty; }\t\t// TODO: pull out into BlockHeader\n+\n \t/// sha3 of the header only.\n-\th256 headerHash(IncludeNonce _n) const;\n-\tvoid streamRLP(RLPStream& _s, IncludeNonce _n) const;\n+\th256 const& hashWithout() const;\n+\th256 const& hash() const { if (m_hash) return m_hash; throw NoHashRecorded(); }\n+\n+\tvoid clear();\n+\tvoid noteDirty() const { m_hashWithout = m_boundary = m_hash = h256(); }\n+\n+protected:\n+\tvoid populateFromHeader(RLP const& _header, Strictness _s = IgnoreSeal);\n+\tvoid streamRLPFields(RLPStream& _s) const;\n \n-private:\n-\tmutable h256 m_seedHash;\n \tmutable h256 m_hash;\t\t\t\t\t\t///< SHA3 hash of the block header! Not serialised.\n+\n+\th256 m_parentHash;\n+\th256 m_sha3Uncles;\n+\tAddress m_coinbaseAddress;\n+\th256 m_stateRoot;\n+\th256 m_transactionsRoot;\n+\th256 m_receiptsRoot;\n+\tLogBloom m_logBloom;\n+\tu256 m_number;\n+\tu256 m_gasLimit;\n+\tu256 m_gasUsed;\n+\tu256 m_timestamp = Invalid256;\n+\tbytes m_extraData;\n+\n+\tu256 m_difficulty;\t\t// TODO: pull out into BlockHeader\n+\n+private:\n+\tmutable h256 m_hashWithout;\t\t\t\t\t///< SHA3 hash of the block header! Not serialised.\n \tmutable h256 m_boundary;\t\t\t\t\t///< 2^256 / difficulty\n };\n \n inline std::ostream& operator<<(std::ostream& _out, BlockInfo const& _bi)\n {\n-\t_out << _bi.hash() << \" \" << _bi.parentHash << \" \" << _bi.sha3Uncles << \" \" << _bi.coinbaseAddress << \" \" << _bi.stateRoot << \" \" << _bi.transactionsRoot << \" \" <<\n-\t\t\t_bi.receiptsRoot << \" \" << _bi.logBloom << \" \" << _bi.difficulty << \" \" << _bi.number << \" \" << _bi.gasLimit << \" \" <<\n-\t\t\t_bi.gasUsed << \" \" << _bi.timestamp << \" \" << _bi.mixHash << \" \" << _bi.nonce << \" (\" << _bi.seedHash() << \")\";\n+\t_out << _bi.hashWithout() << \" \" << _bi.parentHash() << \" \" << _bi.sha3Uncles() << \" \" << _bi.coinbaseAddress() << \" \" << _bi.stateRoot() << \" \" << _bi.transactionsRoot() << \" \" <<\n+\t\t\t_bi.receiptsRoot() << \" \" << _bi.logBloom() << \" \" << _bi.difficulty() << \" \" << _bi.number() << \" \" << _bi.gasLimit() << \" \" <<\n+\t\t\t_bi.gasUsed() << \" \" << _bi.timestamp();\n \treturn _out;\n }\n \n+template <class BlockInfoSub>\n+class BlockHeaderPolished: public BlockInfoSub\n+{\n+public:\n+\tstatic const unsigned Fields = BlockInfoSub::BasicFields + BlockInfoSub::SealFields;\n+\n+\tBlockHeaderPolished() {}\n+\tBlockHeaderPolished(BlockInfo const& _bi): BlockInfoSub(_bi) {}\n+\texplicit BlockHeaderPolished(bytes const& _data, Strictness _s = IgnoreSeal, h256 const& _h = h256(), BlockDataType _bdt = BlockData) { populate(&_data, _s, _h, _bdt); }\n+\texplicit BlockHeaderPolished(bytesConstRef _data, Strictness _s = IgnoreSeal, h256 const& _h = h256(), BlockDataType _bdt = BlockData) { populate(_data, _s, _h, _bdt); }\n+\n+\t// deprecated - just use constructor instead.\n+\tstatic BlockHeaderPolished fromHeader(bytes const& _data, Strictness _s = IgnoreSeal, h256 const& _h = h256()) { return BlockHeaderPolished(_data, _s, _h, HeaderData); }\n+\tstatic BlockHeaderPolished fromHeader(bytesConstRef _data, Strictness _s = IgnoreSeal, h256 const& _h = h256()) { return BlockHeaderPolished(_data, _s, _h, HeaderData); }\n+\n+\t// deprecated for public API - use constructor.\n+\t// TODO: make private.\n+\tvoid populate(bytesConstRef _data, Strictness _s, h256 const& _h = h256(), BlockDataType _bdt = BlockData)\n+\t{\n+\t\tpopulateFromHeader(_bdt == BlockData ? BlockInfo::extractHeader(_data) : RLP(_data), _s, _h);\n+\t}\n+\n+\tvoid populateFromParent(BlockHeaderPolished const& _parent)\n+\t{\n+\t\tnoteDirty();\n+\t\tBlockInfo::parentHash = _parent.hash();\n+\t\tBlockInfo::populateFromParent(_parent);\n+\t\tBlockInfoSub::populateFromParent(_parent);\n+\t}\n+\n+\t// TODO: consider making private.\n+\tvoid verifyParent(BlockHeaderPolished const& _parent)\n+\t{\n+\t\tif (BlockInfo::parentHash() && BlockInfo::parentHash() != _parent.hash())\n+\t\t\tBOOST_THROW_EXCEPTION(InvalidParentHash());\n+\t\tBlockInfo::verifyParent(_parent);\n+\t\tBlockInfoSub::verifyParent(_parent);\n+\t}\n+\n+\t// deprecated for public API - use constructor.\n+\t// TODO: make private.\n+\tvoid populateFromHeader(RLP const& _header, Strictness _s = IgnoreSeal, h256 const& _h = h256())\n+\t{\n+\t\tBlockInfo::m_hash = _h;\n+\t\tif (_h)\n+\t\t\tassert(_h == dev::sha3(_header.data()));\n+\t\telse\n+\t\t\tBlockInfo::m_hash = dev::sha3(_header.data());\n+\n+\t\tif (_header.itemCount() != BlockInfo::BasicFields + BlockInfoSub::SealFields)\n+\t\t\tBOOST_THROW_EXCEPTION(InvalidBlockHeaderItemCount());\n+\n+\t\tBlockInfo::populateFromHeader(_header, _s);\n+\t\tBlockInfoSub::populateFromHeader(_header, _s);\n+\t}\n+\n+\tvoid clear() { BlockInfo::clear(); BlockInfoSub::clear(); BlockInfoSub::noteDirty(); }\n+\tvoid noteDirty() const { BlockInfo::noteDirty(); BlockInfoSub::noteDirty(); }\n+\n+\th256 headerHash(IncludeProof _i = WithProof) const\n+\t{\n+\t\tRLPStream s;","path":"libethcore/BlockInfo.h","position":268,"original_position":268,"commit_id":"7962a50a39ff48c1f435b5c8399d0fb748c3ae41","original_commit_id":"7962a50a39ff48c1f435b5c8399d0fb748c3ae41","user":{"login":"chriseth","id":9073706,"avatar_url":"https://avatars.githubusercontent.com/u/9073706?v=3","gravatar_id":"","url":"https://api.github.com/users/chriseth","html_url":"https://github.com/chriseth","followers_url":"https://api.github.com/users/chriseth/followers","following_url":"https://api.github.com/users/chriseth/following{/other_user}","gists_url":"https://api.github.com/users/chriseth/gists{/gist_id}","starred_url":"https://api.github.com/users/chriseth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chriseth/subscriptions","organizations_url":"https://api.github.com/users/chriseth/orgs","repos_url":"https://api.github.com/users/chriseth/repos","events_url":"https://api.github.com/users/chriseth/events{/privacy}","received_events_url":"https://api.github.com/users/chriseth/received_events","type":"User","site_admin":false},"body":"return `sha3(rlp(_i))`?","created_at":"2015-07-16T07:32:10Z","updated_at":"2015-07-16T07:32:10Z","html_url":"https://github.com/ethereum/cpp-ethereum/pull/2487#discussion_r34762080","pull_request_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487","_links":{"self":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments/34762080"},"html":{"href":"https://github.com/ethereum/cpp-ethereum/pull/2487#discussion_r34762080"},"pull_request":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487"}}},"pull_request":{"url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487","id":40081283,"html_url":"https://github.com/ethereum/cpp-ethereum/pull/2487","diff_url":"https://github.com/ethereum/cpp-ethereum/pull/2487.diff","patch_url":"https://github.com/ethereum/cpp-ethereum/pull/2487.patch","issue_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/2487","number":2487,"state":"open","locked":false,"title":"Templatify method of block sealing","user":{"login":"gavofyork","id":138296,"avatar_url":"https://avatars.githubusercontent.com/u/138296?v=3","gravatar_id":"","url":"https://api.github.com/users/gavofyork","html_url":"https://github.com/gavofyork","followers_url":"https://api.github.com/users/gavofyork/followers","following_url":"https://api.github.com/users/gavofyork/following{/other_user}","gists_url":"https://api.github.com/users/gavofyork/gists{/gist_id}","starred_url":"https://api.github.com/users/gavofyork/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavofyork/subscriptions","organizations_url":"https://api.github.com/users/gavofyork/orgs","repos_url":"https://api.github.com/users/gavofyork/repos","events_url":"https://api.github.com/users/gavofyork/events{/privacy}","received_events_url":"https://api.github.com/users/gavofyork/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-07-15T23:35:28Z","updated_at":"2015-07-16T07:32:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cf3fb6f9098a36dc8b59000107bf0fd732438f81","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487/commits","review_comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487/comments","review_comment_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/2487/comments","statuses_url":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/7962a50a39ff48c1f435b5c8399d0fb748c3ae41","head":{"label":"ethereum:whizz","ref":"whizz","sha":"7962a50a39ff48c1f435b5c8399d0fb748c3ae41","user":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","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":15460666,"name":"cpp-ethereum","full_name":"ethereum/cpp-ethereum","owner":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","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/cpp-ethereum","description":"Gavin Wood's C++ implementation of the Ethereum yellowpaper.","fork":false,"url":"https://api.github.com/repos/ethereum/cpp-ethereum","forks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/forks","keys_url":"https://api.github.com/repos/ethereum/cpp-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/cpp-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/cpp-ethereum/teams","hooks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/hooks","issue_events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/events","assignees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/cpp-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/tags","blobs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/cpp-ethereum/languages","stargazers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/stargazers","contributors_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contributors","subscribers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscribers","subscription_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscription","commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/cpp-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/cpp-ethereum/merges","archive_url":"https://api.github.com/repos/ethereum/cpp-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/cpp-ethereum/downloads","issues_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/cpp-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/cpp-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/cpp-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/cpp-ethereum/releases{/id}","created_at":"2013-12-26T21:26:06Z","updated_at":"2015-07-15T17:46:26Z","pushed_at":"2015-07-16T04:58:16Z","git_url":"git://github.com/ethereum/cpp-ethereum.git","ssh_url":"git@github.com:ethereum/cpp-ethereum.git","clone_url":"https://github.com/ethereum/cpp-ethereum.git","svn_url":"https://github.com/ethereum/cpp-ethereum","homepage":"www.gavwood.com/Paper.pdf","size":102854,"stargazers_count":499,"watchers_count":499,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":189,"mirror_url":null,"open_issues_count":184,"forks":189,"open_issues":184,"watchers":499,"default_branch":"develop"}},"base":{"label":"ethereum:develop","ref":"develop","sha":"a03428a9eeff061e7e8854c28326d25ed807fd63","user":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","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":15460666,"name":"cpp-ethereum","full_name":"ethereum/cpp-ethereum","owner":{"login":"ethereum","id":6250754,"avatar_url":"https://avatars.githubusercontent.com/u/6250754?v=3","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/cpp-ethereum","description":"Gavin Wood's C++ implementation of the Ethereum yellowpaper.","fork":false,"url":"https://api.github.com/repos/ethereum/cpp-ethereum","forks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/forks","keys_url":"https://api.github.com/repos/ethereum/cpp-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/cpp-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/cpp-ethereum/teams","hooks_url":"https://api.github.com/repos/ethereum/cpp-ethereum/hooks","issue_events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/cpp-ethereum/events","assignees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/cpp-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/tags","blobs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/cpp-ethereum/languages","stargazers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/stargazers","contributors_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contributors","subscribers_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscribers","subscription_url":"https://api.github.com/repos/ethereum/cpp-ethereum/subscription","commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/cpp-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/cpp-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/cpp-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/cpp-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/cpp-ethereum/merges","archive_url":"https://api.github.com/repos/ethereum/cpp-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/cpp-ethereum/downloads","issues_url":"https://api.github.com/repos/ethereum/cpp-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/cpp-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/cpp-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/cpp-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/cpp-ethereum/releases{/id}","created_at":"2013-12-26T21:26:06Z","updated_at":"2015-07-15T17:46:26Z","pushed_at":"2015-07-16T04:58:16Z","git_url":"git://github.com/ethereum/cpp-ethereum.git","ssh_url":"git@github.com:ethereum/cpp-ethereum.git","clone_url":"https://github.com/ethereum/cpp-ethereum.git","svn_url":"https://github.com/ethereum/cpp-ethereum","homepage":"www.gavwood.com/Paper.pdf","size":102854,"stargazers_count":499,"watchers_count":499,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":189,"mirror_url":null,"open_issues_count":184,"forks":189,"open_issues":184,"watchers":499,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487"},"html":{"href":"https://github.com/ethereum/cpp-ethereum/pull/2487"},"issue":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/2487"},"comments":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/issues/2487/comments"},"review_comments":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487/comments"},"review_comment":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/pulls/2487/commits"},"statuses":{"href":"https://api.github.com/repos/ethereum/cpp-ethereum/statuses/7962a50a39ff48c1f435b5c8399d0fb748c3ae41"}}}}