{"action":"created","comment":{"url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/comments/57131576","id":57131576,"diff_hunk":"@@ -0,0 +1,202 @@\n+// Copyright 2016 The go-ethereum Authors\n+// This file is part of the go-ethereum library.\n+//\n+// The go-ethereum library is free software: you can redistribute it and/or modify\n+// it under the terms of the GNU Lesser General Public License as published by\n+// the Free Software Foundation, either version 3 of the License, or\n+// (at your option) any later version.\n+//\n+// The go-ethereum library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n+// GNU Lesser General Public License for more details.\n+//\n+// You should have received a copy of the GNU Lesser General Public License\n+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.\n+\n+package backends\n+\n+import (\n+\t\"encoding/json\"\n+\t\"fmt\"\n+\t\"math/big\"\n+\t\"sync\"\n+\t\"sync/atomic\"\n+\n+\t\"github.com/ethereum/go-ethereum/accounts/abi/bind\"\n+\t\"github.com/ethereum/go-ethereum/common\"\n+\t\"github.com/ethereum/go-ethereum/core/types\"\n+\t\"github.com/ethereum/go-ethereum/rlp\"\n+\t\"github.com/ethereum/go-ethereum/rpc\"\n+)\n+\n+// rpcBackend implements bind.ContractBackend, and acts as the data provider to\n+// Ethereum contracts bound to Go structs. It uses an RPC connection to delegate\n+// all its functionality.\n+//\n+// Note: The current implementation is a blocking one. This should be replaced\n+// by a proper async version when a real RPC client is created.\n+type rpcBackend struct {\n+\tclient rpc.Client // RPC client connection to interact with an API server\n+\tautoid uint32     // ID number to use for the next API request\n+\tlock   sync.Mutex // Singleton access until we get to request multiplexing\n+}\n+\n+// NewRPCBackend creates a new binding backend to an RPC provider that can be\n+// used to interact with remote contracts.\n+func NewRPCBackend(client rpc.Client) bind.ContractBackend {\n+\treturn &rpcBackend{\n+\t\tclient: client,\n+\t}\n+}\n+\n+// request is a JSON RPC request package assembled internally from the client\n+// method calls.\n+type request struct {\n+\tJsonRpc string        `json:\"jsonrpc\"` // Version of the JSON RPC protocol, always set to 2.0\n+\tId      int           `json:\"id\"`      // Auto incrementing ID number for this request\n+\tMethod  string        `json:\"method\"`  // Remote procedure name to invoke on the server\n+\tParams  []interface{} `json:\"params\"`  // List of parameters to pass through (keep types simple)\n+}\n+\n+// response is a JSON RPC response package sent back from the API server.\n+type response struct {\n+\tJsonRpc string          `json:\"jsonrpc\"` // Version of the JSON RPC protocol, always set to 2.0\n+\tId      int             `json:\"id\"`      // Auto incrementing ID number for this request\n+\tError   json.RawMessage `json:\"error\"`   // Any error returned by the remote side\n+\tResult  json.RawMessage `json:\"result\"`  // Whatever the remote side sends us in reply\n+}\n+\n+// request forwards an API request to the RPC server, and parses the response.\n+//\n+// This is currently painfully non-concurrent, but it will have to do until we\n+// find the time for niceties like this :P\n+func (backend *rpcBackend) request(method string, params []interface{}) (json.RawMessage, error) {\n+\tbackend.lock.Lock()\n+\tdefer backend.lock.Unlock()\n+\n+\t// Ugly hack to serialize an empty list properly\n+\tif params == nil {\n+\t\tparams = []interface{}{}\n+\t}\n+\t// Assemble the request object\n+\treq := &request{\n+\t\tJsonRpc: \"2.0\",\n+\t\tId:      int(atomic.AddUint32(&backend.autoid, 1)),\n+\t\tMethod:  method,\n+\t\tParams:  params,\n+\t}\n+\tif err := backend.client.Send(req); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tres := new(response)\n+\tif err := backend.client.Recv(res); err != nil {\n+\t\treturn nil, err\n+\t}\n+\tif len(res.Error) > 0 {\n+\t\treturn nil, fmt.Errorf(\"remote error: %s\", string(res.Error))\n+\t}\n+\treturn res.Result, nil\n+}\n+\n+// ContractCall implements ContractCaller.ContractCall, delegating the execution of\n+// a contract call to the remote node, returning the reply to for local processing.\n+func (b *rpcBackend) ContractCall(contract common.Address, data []byte, pending bool) ([]byte, error) {\n+\t// Pack up the request into an RPC argument\n+\targs := struct {\n+\t\tTo   common.Address `json:\"to\"`\n+\t\tData string         `json:\"data\"`\n+\t}{\n+\t\tTo:   contract,\n+\t\tData: common.ToHex(data),\n+\t}\n+\t// Execute the RPC call and retrieve the response\n+\tblock := \"latest\"\n+\tif pending {\n+\t\tblock = \"pending\"\n+\t}\n+\tres, err := b.request(\"eth_call\", []interface{}{args, block})\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\tvar hex string\n+\tif err := json.Unmarshal(res, &hex); err != nil {\n+\t\treturn nil, err\n+\t}\n+\t// Convert the response back to a Go byte slice and return\n+\treturn common.FromHex(hex), nil\n+}\n+\n+// AccountNonce implements ContractTransactor.AccountNonce, delegating the\n+// current account nonce retrieval to the remote node.\n+func (b *rpcBackend) AccountNonce(account common.Address) (uint64, error) {\n+\tres, err := b.request(\"eth_getTransactionCount\", []interface{}{account.Hex(), \"pending\"})\n+\tif err != nil {\n+\t\treturn 0, err\n+\t}\n+\tvar hex string\n+\tif err := json.Unmarshal(res, &hex); err != nil {\n+\t\treturn 0, err\n+\t}\n+\treturn new(big.Int).SetBytes(common.FromHex(hex)).Uint64(), nil","path":"accounts/abi/bind/backends/remote.go","position":141,"original_position":141,"commit_id":"2c06e0233fe38c58d988831c84df3cbb7ad35838","original_commit_id":"fe72419b017a2d0a45b3bf561472e0b094d24342","user":{"login":"karalabe","id":129561,"avatar_url":"https://avatars.githubusercontent.com/u/129561?v=3","gravatar_id":"","url":"https://api.github.com/users/karalabe","html_url":"https://github.com/karalabe","followers_url":"https://api.github.com/users/karalabe/followers","following_url":"https://api.github.com/users/karalabe/following{/other_user}","gists_url":"https://api.github.com/users/karalabe/gists{/gist_id}","starred_url":"https://api.github.com/users/karalabe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karalabe/subscriptions","organizations_url":"https://api.github.com/users/karalabe/orgs","repos_url":"https://api.github.com/users/karalabe/repos","events_url":"https://api.github.com/users/karalabe/events{/privacy}","received_events_url":"https://api.github.com/users/karalabe/received_events","type":"User","site_admin":false},"body":"Ah, didn't know about 0. Will fix it up,","created_at":"2016-03-23T09:44:54Z","updated_at":"2016-03-23T09:44:54Z","html_url":"https://github.com/ethereum/go-ethereum/pull/2357#discussion_r57131576","pull_request_url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357","_links":{"self":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/comments/57131576"},"html":{"href":"https://github.com/ethereum/go-ethereum/pull/2357#discussion_r57131576"},"pull_request":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357"}}},"pull_request":{"url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357","id":63089441,"html_url":"https://github.com/ethereum/go-ethereum/pull/2357","diff_url":"https://github.com/ethereum/go-ethereum/pull/2357.diff","patch_url":"https://github.com/ethereum/go-ethereum/pull/2357.patch","issue_url":"https://api.github.com/repos/ethereum/go-ethereum/issues/2357","number":2357,"state":"open","locked":false,"title":"accounts/abi/bind: Go ABI binding generator","user":{"login":"karalabe","id":129561,"avatar_url":"https://avatars.githubusercontent.com/u/129561?v=3","gravatar_id":"","url":"https://api.github.com/users/karalabe","html_url":"https://github.com/karalabe","followers_url":"https://api.github.com/users/karalabe/followers","following_url":"https://api.github.com/users/karalabe/following{/other_user}","gists_url":"https://api.github.com/users/karalabe/gists{/gist_id}","starred_url":"https://api.github.com/users/karalabe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karalabe/subscriptions","organizations_url":"https://api.github.com/users/karalabe/orgs","repos_url":"https://api.github.com/users/karalabe/repos","events_url":"https://api.github.com/users/karalabe/events{/privacy}","received_events_url":"https://api.github.com/users/karalabe/received_events","type":"User","site_admin":false},"body":"This PR is an initial stab at a web3 equivalent Go binding generator. It creates a `abigen` command that takes a contract ABI and input and generates a Go package/file as output containing all **type safe** wrapper code to interact with an instance of the particular contract on the blockchain.\r\n\r\nSome of the features it includes:\r\n\r\n * Wrap all contract methods in type safe Go API functions\r\n * Have separate types (also) for read-only (free) and write-only (paid) calls/transactions\r\n * Have the possibility to fins tune all call/transaction parameters (e.g. gas, price, acc, nonce)\r\n * Implement session types that have the above parameters pre-configured (i.e. simpler API)\r\n * By providing the bytecode, contract deployment methods are also generated\r\n\r\nBeside the binding generation, the PR includes:\r\n\r\n * RPC based contract backend to allow running bindings outside of Geth\r\n * Simulated contract backend to allow testing contracts and/or bindings\r\n\r\n**Logs/events will be implemented in a follow up PR to try and keep the scope of this one a bit more limited. It's already quite large and I see no need to push even more features in, especially since some required dependencies in the RPC side is still pending review.**","created_at":"2016-03-16T16:00:12Z","updated_at":"2016-03-23T09:44:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bda9ce3aefe3b26e533f4d32e5654bb15e6fb465","assignee":null,"milestone":{"url":"https://api.github.com/repos/ethereum/go-ethereum/milestones/20","html_url":"https://github.com/ethereum/go-ethereum/milestones/1.4.0","labels_url":"https://api.github.com/repos/ethereum/go-ethereum/milestones/20/labels","id":1299388,"number":20,"title":"1.4.0","description":"","creator":{"login":"obscuren","id":6264126,"avatar_url":"https://avatars.githubusercontent.com/u/6264126?v=3","gravatar_id":"","url":"https://api.github.com/users/obscuren","html_url":"https://github.com/obscuren","followers_url":"https://api.github.com/users/obscuren/followers","following_url":"https://api.github.com/users/obscuren/following{/other_user}","gists_url":"https://api.github.com/users/obscuren/gists{/gist_id}","starred_url":"https://api.github.com/users/obscuren/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/obscuren/subscriptions","organizations_url":"https://api.github.com/users/obscuren/orgs","repos_url":"https://api.github.com/users/obscuren/repos","events_url":"https://api.github.com/users/obscuren/events{/privacy}","received_events_url":"https://api.github.com/users/obscuren/received_events","type":"User","site_admin":false},"open_issues":36,"closed_issues":91,"state":"open","created_at":"2015-09-10T13:53:50Z","updated_at":"2016-03-22T19:23:46Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357/commits","review_comments_url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357/comments","review_comment_url":"https://api.github.com/repos/ethereum/go-ethereum/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethereum/go-ethereum/issues/2357/comments","statuses_url":"https://api.github.com/repos/ethereum/go-ethereum/statuses/2c06e0233fe38c58d988831c84df3cbb7ad35838","head":{"label":"karalabe:abi-binding-generator","ref":"abi-binding-generator","sha":"2c06e0233fe38c58d988831c84df3cbb7ad35838","user":{"login":"karalabe","id":129561,"avatar_url":"https://avatars.githubusercontent.com/u/129561?v=3","gravatar_id":"","url":"https://api.github.com/users/karalabe","html_url":"https://github.com/karalabe","followers_url":"https://api.github.com/users/karalabe/followers","following_url":"https://api.github.com/users/karalabe/following{/other_user}","gists_url":"https://api.github.com/users/karalabe/gists{/gist_id}","starred_url":"https://api.github.com/users/karalabe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karalabe/subscriptions","organizations_url":"https://api.github.com/users/karalabe/orgs","repos_url":"https://api.github.com/users/karalabe/repos","events_url":"https://api.github.com/users/karalabe/events{/privacy}","received_events_url":"https://api.github.com/users/karalabe/received_events","type":"User","site_admin":false},"repo":{"id":33668567,"name":"go-ethereum","full_name":"karalabe/go-ethereum","owner":{"login":"karalabe","id":129561,"avatar_url":"https://avatars.githubusercontent.com/u/129561?v=3","gravatar_id":"","url":"https://api.github.com/users/karalabe","html_url":"https://github.com/karalabe","followers_url":"https://api.github.com/users/karalabe/followers","following_url":"https://api.github.com/users/karalabe/following{/other_user}","gists_url":"https://api.github.com/users/karalabe/gists{/gist_id}","starred_url":"https://api.github.com/users/karalabe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/karalabe/subscriptions","organizations_url":"https://api.github.com/users/karalabe/orgs","repos_url":"https://api.github.com/users/karalabe/repos","events_url":"https://api.github.com/users/karalabe/events{/privacy}","received_events_url":"https://api.github.com/users/karalabe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/karalabe/go-ethereum","description":"Jeffrey Wilcke's Go implementation of the Ethereum y/w paper","fork":true,"url":"https://api.github.com/repos/karalabe/go-ethereum","forks_url":"https://api.github.com/repos/karalabe/go-ethereum/forks","keys_url":"https://api.github.com/repos/karalabe/go-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/karalabe/go-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/karalabe/go-ethereum/teams","hooks_url":"https://api.github.com/repos/karalabe/go-ethereum/hooks","issue_events_url":"https://api.github.com/repos/karalabe/go-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/karalabe/go-ethereum/events","assignees_url":"https://api.github.com/repos/karalabe/go-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/karalabe/go-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/karalabe/go-ethereum/tags","blobs_url":"https://api.github.com/repos/karalabe/go-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/karalabe/go-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/karalabe/go-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/karalabe/go-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/karalabe/go-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/karalabe/go-ethereum/languages","stargazers_url":"https://api.github.com/repos/karalabe/go-ethereum/stargazers","contributors_url":"https://api.github.com/repos/karalabe/go-ethereum/contributors","subscribers_url":"https://api.github.com/repos/karalabe/go-ethereum/subscribers","subscription_url":"https://api.github.com/repos/karalabe/go-ethereum/subscription","commits_url":"https://api.github.com/repos/karalabe/go-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/karalabe/go-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/karalabe/go-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/karalabe/go-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/karalabe/go-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/karalabe/go-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/karalabe/go-ethereum/merges","archive_url":"https://api.github.com/repos/karalabe/go-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/karalabe/go-ethereum/downloads","issues_url":"https://api.github.com/repos/karalabe/go-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/karalabe/go-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/karalabe/go-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/karalabe/go-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/karalabe/go-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/karalabe/go-ethereum/releases{/id}","deployments_url":"https://api.github.com/repos/karalabe/go-ethereum/deployments","created_at":"2015-04-09T12:51:45Z","updated_at":"2016-02-23T11:27:22Z","pushed_at":"2016-03-21T16:45:57Z","git_url":"git://github.com/karalabe/go-ethereum.git","ssh_url":"git@github.com:karalabe/go-ethereum.git","clone_url":"https://github.com/karalabe/go-ethereum.git","svn_url":"https://github.com/karalabe/go-ethereum","homepage":"","size":57555,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"ethereum:develop","ref":"develop","sha":"b3b110bc951f70df7bd3816033f7a93ed8752c25","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":15452919,"name":"go-ethereum","full_name":"ethereum/go-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/go-ethereum","description":"Official golang implementation of the Ethereum protocol","fork":false,"url":"https://api.github.com/repos/ethereum/go-ethereum","forks_url":"https://api.github.com/repos/ethereum/go-ethereum/forks","keys_url":"https://api.github.com/repos/ethereum/go-ethereum/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/go-ethereum/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/go-ethereum/teams","hooks_url":"https://api.github.com/repos/ethereum/go-ethereum/hooks","issue_events_url":"https://api.github.com/repos/ethereum/go-ethereum/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/go-ethereum/events","assignees_url":"https://api.github.com/repos/ethereum/go-ethereum/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/go-ethereum/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/go-ethereum/tags","blobs_url":"https://api.github.com/repos/ethereum/go-ethereum/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/go-ethereum/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/go-ethereum/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/go-ethereum/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/go-ethereum/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/go-ethereum/languages","stargazers_url":"https://api.github.com/repos/ethereum/go-ethereum/stargazers","contributors_url":"https://api.github.com/repos/ethereum/go-ethereum/contributors","subscribers_url":"https://api.github.com/repos/ethereum/go-ethereum/subscribers","subscription_url":"https://api.github.com/repos/ethereum/go-ethereum/subscription","commits_url":"https://api.github.com/repos/ethereum/go-ethereum/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/go-ethereum/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/go-ethereum/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/go-ethereum/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/go-ethereum/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/go-ethereum/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/go-ethereum/merges","archive_url":"https://api.github.com/repos/ethereum/go-ethereum/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/go-ethereum/downloads","issues_url":"https://api.github.com/repos/ethereum/go-ethereum/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/go-ethereum/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/go-ethereum/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/go-ethereum/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/go-ethereum/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/go-ethereum/releases{/id}","deployments_url":"https://api.github.com/repos/ethereum/go-ethereum/deployments","created_at":"2013-12-26T13:05:46Z","updated_at":"2016-03-23T03:12:45Z","pushed_at":"2016-03-23T09:34:16Z","git_url":"git://github.com/ethereum/go-ethereum.git","ssh_url":"git@github.com:ethereum/go-ethereum.git","clone_url":"https://github.com/ethereum/go-ethereum.git","svn_url":"https://github.com/ethereum/go-ethereum","homepage":"http://ethereum.github.io/go-ethereum/","size":156545,"stargazers_count":1220,"watchers_count":1220,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":396,"mirror_url":null,"open_issues_count":204,"forks":396,"open_issues":204,"watchers":1220,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357"},"html":{"href":"https://github.com/ethereum/go-ethereum/pull/2357"},"issue":{"href":"https://api.github.com/repos/ethereum/go-ethereum/issues/2357"},"comments":{"href":"https://api.github.com/repos/ethereum/go-ethereum/issues/2357/comments"},"review_comments":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357/comments"},"review_comment":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethereum/go-ethereum/pulls/2357/commits"},"statuses":{"href":"https://api.github.com/repos/ethereum/go-ethereum/statuses/2c06e0233fe38c58d988831c84df3cbb7ad35838"}}}}