{"action":"created","comment":{"url":"https://api.github.com/repos/ethereum/EIPs/pulls/comments/225117943","pull_request_review_id":164645349,"id":225117943,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNTExNzk0Mw==","diff_hunk":"@@ -0,0 +1,2314 @@\n+---\n+eip: 1474\n+title: Remote procedure call specification\n+author: Paul Bouchon <mail@bitpshr.net>\n+discussions-to: https://ethereum-magicians.org/t/eip-remote-procedure-call-specification/1537\n+status: Draft\n+type: Standards Track\n+category: Interface\n+created: 2018-10-02\n+---\n+\n+## Simple Summary\n+\n+This proposal defines a standard set of remote procedure call methods that an Ethereum node should implement.\n+\n+## Abstract\n+\n+Nodes created by the current generation of Ethereum clients expose inconsistent and incompatible remote procedure call (RPC) methods because no formal Ethereum RPC specification exists. This proposal standardizes such a specification to provide developers with a predictable Ethereum RPC interface regardless of underlying node implementation.\n+\n+## Specification\n+\n+### Concepts\n+\n+#### RFC-2119\n+\n+The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\",  \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in [RFC-2119](https://www.ietf.org/rfc/rfc2119.txt).\n+\n+#### JSON-RPC\n+\n+Communication with Ethereum nodes is accomplished using [JSON-RPC](https://www.jsonrpc.org/specification), a stateless, lightweight [remote procedure call](https://en.wikipedia.org/wiki/Remote_procedure_call) protocol that uses [JSON](http://www.json.org/) as its data format. Ethereum RPC methods **MUST** be called using [JSON-RPC request objects](https://www.jsonrpc.org/specification#request_object) and **MUST** respond with [JSON-RPC response objects](https://www.jsonrpc.org/specification#response_object).\n+\n+#### Error codes\n+\n+If an Ethereum RPC method encounters an error, the `error` member included on the response object **MUST** be an object containing a `code` member and descriptive `message` member. The following list contains all possible error codes and associated messages:\n+\n+|Code|Message|Meaning|Category|\n+|-|-|-|-|\n+|-32700|Parse error|Invalid JSON|standard|\n+|-32600|Invalid request|JSON is not a valid request object|standard|\n+|-32601|Method not found|Method does not exist|standard|\n+|-32602|Invalid params|Invalid method parameters|standard|\n+|-32603|Internal error|Internal JSON-RPC error|standard|\n+|-32000|Invalid input|Missing or invalid parameters|non-standard|\n+|-32001|Resource not found|Requested resource not found|non-standard|\n+|-32002|Resource unavailable|Requested resource not available|non-standard|\n+|-32003|Transaction rejected|Transaction creation failed|non-standard|\n+|-32004|Method not supported|Method is not implemented|non-standard|\n+\n+Example error response:\n+\n+```sh\n+{\n+    \"id\": 1337\n+    \"jsonrpc\": \"2.0\",\n+    \"error\": {\n+        \"code\": -32003,\n+        \"message\": \"Transaction rejected\"\n+    }\n+}\n+```\n+\n+#### Value encoding\n+\n+Specific types of values passed to and returned from Ethereum RPC methods require special encoding:\n+\n+##### `Quantity`\n+\n+- A `Quantity` value **MUST** be hex-encoded.\n+- A `Quantity` value **MUST** be \"0x\"-prefixed.\n+- A `Quantity` value **MUST** be expressed using the fewest possible hex digits per byte.\n+- A `Quantity` value **MUST** express zero as \"0x0\".\n+\n+Examples `Quantity` values:\n+\n+|Value|Valid|Reason|\n+|-|-|-|\n+|0x|`invalid`|empty not a valid quantity|\n+|0x0|`valid`|interpreted as a quantity of zero|\n+|0x00|`invalid`|leading zeroes not allowed|\n+|0x41|`valid`|interpreted as a quantity of 65|\n+|0x400|`valid`|interpreted as a quantity of 1024|\n+|0x0400|`invalid`|leading zeroes not allowed|\n+|ff|`invalid`|values must be prefixed|\n+\n+\n+##### `Data`\n+\n+- A `Data` value **MUST** be hex-encoded.\n+- A `Data` value **MUST** be \"0x\"-prefixed.\n+- A `Data` value **MUST** be expressed using two hex digits per byte.\n+\n+Examples `Data` values:\n+\n+|Value|Valid|Reason|\n+|-|-|-|\n+|0x|`valid`|interpreted as empty data|\n+|0x0|`invalid`|each byte must be represented using two hex digits|\n+|0x00|`valid`|interpreted as a single zero byte|\n+|0x41|`true`|interpreted as a data value of 65|\n+|0x004200|`true`|interpreted as a data value of 16896|\n+|0xf0f0f|`false`|bytes require two hex digits|\n+|004200|`false`|values must be prefixed|\n+\n+##### Proposing changes\n+\n+New Ethereum RPC methods and changes to existing methods **MUST** be proposed via the traditional EIP process. This allows for community consensus around new method implementations and proposed method modifications. RPC method proposals **MUST** reach \"draft\" status before being added to this proposal and the official Ethereum RPC specification defined herein.","path":"EIPS/eip-1474.md","position":106,"original_position":106,"commit_id":"147609158191a701cf02c8556d5e529ffcb31cd2","original_commit_id":"147609158191a701cf02c8556d5e529ffcb31cd2","user":{"login":"Arachnid","id":17865,"node_id":"MDQ6VXNlcjE3ODY1","avatar_url":"https://avatars2.githubusercontent.com/u/17865?v=4","gravatar_id":"","url":"https://api.github.com/users/Arachnid","html_url":"https://github.com/Arachnid","followers_url":"https://api.github.com/users/Arachnid/followers","following_url":"https://api.github.com/users/Arachnid/following{/other_user}","gists_url":"https://api.github.com/users/Arachnid/gists{/gist_id}","starred_url":"https://api.github.com/users/Arachnid/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Arachnid/subscriptions","organizations_url":"https://api.github.com/users/Arachnid/orgs","repos_url":"https://api.github.com/users/Arachnid/repos","events_url":"https://api.github.com/users/Arachnid/events{/privacy}","received_events_url":"https://api.github.com/users/Arachnid/received_events","type":"User","site_admin":false},"body":"s/traditional//","created_at":"2018-10-15T10:42:54Z","updated_at":"2018-10-15T10:44:16Z","html_url":"https://github.com/ethereum/EIPs/pull/1474#discussion_r225117943","pull_request_url":"https://api.github.com/repos/ethereum/EIPs/pulls/1474","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/comments/225117943"},"html":{"href":"https://github.com/ethereum/EIPs/pull/1474#discussion_r225117943"},"pull_request":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/1474"}}},"pull_request":{"url":"https://api.github.com/repos/ethereum/EIPs/pulls/1474","id":220799613,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIwNzk5NjEz","html_url":"https://github.com/ethereum/EIPs/pull/1474","diff_url":"https://github.com/ethereum/EIPs/pull/1474.diff","patch_url":"https://github.com/ethereum/EIPs/pull/1474.patch","issue_url":"https://api.github.com/repos/ethereum/EIPs/issues/1474","number":1474,"state":"open","locked":false,"title":"EIP: Remote procedure call specification","user":{"login":"bitpshr","id":334586,"node_id":"MDQ6VXNlcjMzNDU4Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/334586?v=4","gravatar_id":"","url":"https://api.github.com/users/bitpshr","html_url":"https://github.com/bitpshr","followers_url":"https://api.github.com/users/bitpshr/followers","following_url":"https://api.github.com/users/bitpshr/following{/other_user}","gists_url":"https://api.github.com/users/bitpshr/gists{/gist_id}","starred_url":"https://api.github.com/users/bitpshr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitpshr/subscriptions","organizations_url":"https://api.github.com/users/bitpshr/orgs","repos_url":"https://api.github.com/users/bitpshr/repos","events_url":"https://api.github.com/users/bitpshr/events{/privacy}","received_events_url":"https://api.github.com/users/bitpshr/received_events","type":"User","site_admin":false},"body":"Much of Ethereum's effectiveness as an enterprise-grade application platform depends on its ability to provide a reliable and predictable developer experience. Nodes created by the current generation of Ethereum clients can expose RPC endpoints with differing method signatures; this forces applications to work around method inconsistencies to maintain compatibility with various Ethereum RPC implementations.\r\n\r\nBoth Ethereum client developers and downstream dapp developers lack a formal Ethereum RPC specification. This proposal attempts to standardize such a specification in a way that's versionable and modifiable through the traditional EIP process.\r\n\r\nThis initial draft was based on the [current Ethereum RPC wiki documentation](https://github.com/ethereum/wiki/wiki/JSON-RPC) with necessary fixes and additions made along the way (such as documenting `eth_signTransaction`).\r\n\r\n**Note:** There doesn't appear to be any RPC-friendly API documentation standard, otherwise I'd be open to using that over markdown. Still, this EIP is meant to provide a human-readable RPC specification and isn't necessarily meant to be program-readable or to drive other documentation tooling (though the markdown itself could drive tooling if desired).\r\n\r\nResolves #1442 (cc @Arachnid)\r\nResolves #136","created_at":"2018-10-05T19:20:09Z","updated_at":"2018-10-15T10:44:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0014cf03cb7abb6f514e36dc9b4a9ee6096c89ae","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ethereum/EIPs/pulls/1474/commits","review_comments_url":"https://api.github.com/repos/ethereum/EIPs/pulls/1474/comments","review_comment_url":"https://api.github.com/repos/ethereum/EIPs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ethereum/EIPs/issues/1474/comments","statuses_url":"https://api.github.com/repos/ethereum/EIPs/statuses/147609158191a701cf02c8556d5e529ffcb31cd2","head":{"label":"bitpshr:eip-rpc","ref":"eip-rpc","sha":"147609158191a701cf02c8556d5e529ffcb31cd2","user":{"login":"bitpshr","id":334586,"node_id":"MDQ6VXNlcjMzNDU4Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/334586?v=4","gravatar_id":"","url":"https://api.github.com/users/bitpshr","html_url":"https://github.com/bitpshr","followers_url":"https://api.github.com/users/bitpshr/followers","following_url":"https://api.github.com/users/bitpshr/following{/other_user}","gists_url":"https://api.github.com/users/bitpshr/gists{/gist_id}","starred_url":"https://api.github.com/users/bitpshr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitpshr/subscriptions","organizations_url":"https://api.github.com/users/bitpshr/orgs","repos_url":"https://api.github.com/users/bitpshr/repos","events_url":"https://api.github.com/users/bitpshr/events{/privacy}","received_events_url":"https://api.github.com/users/bitpshr/received_events","type":"User","site_admin":false},"repo":{"id":134000583,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQwMDA1ODM=","name":"EIPs","full_name":"bitpshr/EIPs","private":false,"owner":{"login":"bitpshr","id":334586,"node_id":"MDQ6VXNlcjMzNDU4Ng==","avatar_url":"https://avatars1.githubusercontent.com/u/334586?v=4","gravatar_id":"","url":"https://api.github.com/users/bitpshr","html_url":"https://github.com/bitpshr","followers_url":"https://api.github.com/users/bitpshr/followers","following_url":"https://api.github.com/users/bitpshr/following{/other_user}","gists_url":"https://api.github.com/users/bitpshr/gists{/gist_id}","starred_url":"https://api.github.com/users/bitpshr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitpshr/subscriptions","organizations_url":"https://api.github.com/users/bitpshr/orgs","repos_url":"https://api.github.com/users/bitpshr/repos","events_url":"https://api.github.com/users/bitpshr/events{/privacy}","received_events_url":"https://api.github.com/users/bitpshr/received_events","type":"User","site_admin":false},"html_url":"https://github.com/bitpshr/EIPs","description":"The Ethereum Improvement Proposal repository","fork":true,"url":"https://api.github.com/repos/bitpshr/EIPs","forks_url":"https://api.github.com/repos/bitpshr/EIPs/forks","keys_url":"https://api.github.com/repos/bitpshr/EIPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bitpshr/EIPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bitpshr/EIPs/teams","hooks_url":"https://api.github.com/repos/bitpshr/EIPs/hooks","issue_events_url":"https://api.github.com/repos/bitpshr/EIPs/issues/events{/number}","events_url":"https://api.github.com/repos/bitpshr/EIPs/events","assignees_url":"https://api.github.com/repos/bitpshr/EIPs/assignees{/user}","branches_url":"https://api.github.com/repos/bitpshr/EIPs/branches{/branch}","tags_url":"https://api.github.com/repos/bitpshr/EIPs/tags","blobs_url":"https://api.github.com/repos/bitpshr/EIPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bitpshr/EIPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bitpshr/EIPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/bitpshr/EIPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bitpshr/EIPs/statuses/{sha}","languages_url":"https://api.github.com/repos/bitpshr/EIPs/languages","stargazers_url":"https://api.github.com/repos/bitpshr/EIPs/stargazers","contributors_url":"https://api.github.com/repos/bitpshr/EIPs/contributors","subscribers_url":"https://api.github.com/repos/bitpshr/EIPs/subscribers","subscription_url":"https://api.github.com/repos/bitpshr/EIPs/subscription","commits_url":"https://api.github.com/repos/bitpshr/EIPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/bitpshr/EIPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/bitpshr/EIPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/bitpshr/EIPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/bitpshr/EIPs/contents/{+path}","compare_url":"https://api.github.com/repos/bitpshr/EIPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bitpshr/EIPs/merges","archive_url":"https://api.github.com/repos/bitpshr/EIPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bitpshr/EIPs/downloads","issues_url":"https://api.github.com/repos/bitpshr/EIPs/issues{/number}","pulls_url":"https://api.github.com/repos/bitpshr/EIPs/pulls{/number}","milestones_url":"https://api.github.com/repos/bitpshr/EIPs/milestones{/number}","notifications_url":"https://api.github.com/repos/bitpshr/EIPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bitpshr/EIPs/labels{/name}","releases_url":"https://api.github.com/repos/bitpshr/EIPs/releases{/id}","deployments_url":"https://api.github.com/repos/bitpshr/EIPs/deployments","created_at":"2018-05-18T20:22:58Z","updated_at":"2018-09-02T10:02:52Z","pushed_at":"2018-10-15T10:39:11Z","git_url":"git://github.com/bitpshr/EIPs.git","ssh_url":"git@github.com:bitpshr/EIPs.git","clone_url":"https://github.com/bitpshr/EIPs.git","svn_url":"https://github.com/bitpshr/EIPs","homepage":"http://eips.ethereum.org/","size":2659,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"ethereum:master","ref":"master","sha":"07da9ea0dccac44e18f49870ef60706ede7fd552","user":{"login":"ethereum","id":6250754,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyNTA3NTQ=","avatar_url":"https://avatars3.githubusercontent.com/u/6250754?v=4","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"repo":{"id":44971752,"node_id":"MDEwOlJlcG9zaXRvcnk0NDk3MTc1Mg==","name":"EIPs","full_name":"ethereum/EIPs","private":false,"owner":{"login":"ethereum","id":6250754,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYyNTA3NTQ=","avatar_url":"https://avatars3.githubusercontent.com/u/6250754?v=4","gravatar_id":"","url":"https://api.github.com/users/ethereum","html_url":"https://github.com/ethereum","followers_url":"https://api.github.com/users/ethereum/followers","following_url":"https://api.github.com/users/ethereum/following{/other_user}","gists_url":"https://api.github.com/users/ethereum/gists{/gist_id}","starred_url":"https://api.github.com/users/ethereum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ethereum/subscriptions","organizations_url":"https://api.github.com/users/ethereum/orgs","repos_url":"https://api.github.com/users/ethereum/repos","events_url":"https://api.github.com/users/ethereum/events{/privacy}","received_events_url":"https://api.github.com/users/ethereum/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ethereum/EIPs","description":"The Ethereum Improvement Proposal repository","fork":false,"url":"https://api.github.com/repos/ethereum/EIPs","forks_url":"https://api.github.com/repos/ethereum/EIPs/forks","keys_url":"https://api.github.com/repos/ethereum/EIPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ethereum/EIPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ethereum/EIPs/teams","hooks_url":"https://api.github.com/repos/ethereum/EIPs/hooks","issue_events_url":"https://api.github.com/repos/ethereum/EIPs/issues/events{/number}","events_url":"https://api.github.com/repos/ethereum/EIPs/events","assignees_url":"https://api.github.com/repos/ethereum/EIPs/assignees{/user}","branches_url":"https://api.github.com/repos/ethereum/EIPs/branches{/branch}","tags_url":"https://api.github.com/repos/ethereum/EIPs/tags","blobs_url":"https://api.github.com/repos/ethereum/EIPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ethereum/EIPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ethereum/EIPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ethereum/EIPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ethereum/EIPs/statuses/{sha}","languages_url":"https://api.github.com/repos/ethereum/EIPs/languages","stargazers_url":"https://api.github.com/repos/ethereum/EIPs/stargazers","contributors_url":"https://api.github.com/repos/ethereum/EIPs/contributors","subscribers_url":"https://api.github.com/repos/ethereum/EIPs/subscribers","subscription_url":"https://api.github.com/repos/ethereum/EIPs/subscription","commits_url":"https://api.github.com/repos/ethereum/EIPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ethereum/EIPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ethereum/EIPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ethereum/EIPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ethereum/EIPs/contents/{+path}","compare_url":"https://api.github.com/repos/ethereum/EIPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ethereum/EIPs/merges","archive_url":"https://api.github.com/repos/ethereum/EIPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ethereum/EIPs/downloads","issues_url":"https://api.github.com/repos/ethereum/EIPs/issues{/number}","pulls_url":"https://api.github.com/repos/ethereum/EIPs/pulls{/number}","milestones_url":"https://api.github.com/repos/ethereum/EIPs/milestones{/number}","notifications_url":"https://api.github.com/repos/ethereum/EIPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ethereum/EIPs/labels{/name}","releases_url":"https://api.github.com/repos/ethereum/EIPs/releases{/id}","deployments_url":"https://api.github.com/repos/ethereum/EIPs/deployments","created_at":"2015-10-26T13:57:23Z","updated_at":"2018-10-15T09:47:07Z","pushed_at":"2018-10-15T10:39:11Z","git_url":"git://github.com/ethereum/EIPs.git","ssh_url":"git@github.com:ethereum/EIPs.git","clone_url":"https://github.com/ethereum/EIPs.git","svn_url":"https://github.com/ethereum/EIPs","homepage":"http://eips.ethereum.org/","size":2628,"stargazers_count":3845,"watchers_count":3845,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":1119,"mirror_url":null,"archived":false,"open_issues_count":387,"license":null,"forks":1119,"open_issues":387,"watchers":3845,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/1474"},"html":{"href":"https://github.com/ethereum/EIPs/pull/1474"},"issue":{"href":"https://api.github.com/repos/ethereum/EIPs/issues/1474"},"comments":{"href":"https://api.github.com/repos/ethereum/EIPs/issues/1474/comments"},"review_comments":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/1474/comments"},"review_comment":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ethereum/EIPs/pulls/1474/commits"},"statuses":{"href":"https://api.github.com/repos/ethereum/EIPs/statuses/147609158191a701cf02c8556d5e529ffcb31cd2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Arachnid"}}