Skip to content

Commit

Permalink
Resolve JSON RPC 2.0 non-compliance (#3209)
Browse files Browse the repository at this point in the history
Currently, the JSON RPC requests and responses are not compliant with the spec as the server only accepts strings.
This change is *non-breaking* as it simply adds the ability to understand integers as expected.
Any old code continuing to only send string requests will continue to work as before.
  • Loading branch information
WhoNeedszZz authored Jan 28, 2020
1 parent fb888a3 commit 1527802
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions servers/src/mining/stratumserver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,25 @@ type Tx = mpsc::UnboundedSender<String>;
// http://www.jsonrpc.org/specification
// RPC Methods

/// Represents a compliant JSON RPC 2.0 id.
/// Valid id: Integer, String.
#[derive(Serialize, Deserialize, Debug)]
enum JsonId {
NumId(u32),
StrId(String),
}

#[derive(Serialize, Deserialize, Debug)]
struct RpcRequest {
id: String,
id: JsonId,
jsonrpc: String,
method: String,
params: Option<Value>,
}

#[derive(Serialize, Deserialize, Debug)]
struct RpcResponse {
id: String,
id: JsonId,
jsonrpc: String,
method: String,
result: Option<Value>,
Expand Down Expand Up @@ -501,7 +509,7 @@ impl Handler {
// Issue #1159 - use a serde_json Value type to avoid extra quoting
let job_template_value: Value = serde_json::from_str(&job_template_json).unwrap();
let job_request = RpcRequest {
id: String::from("Stratum"),
id: JsonId::StrId(String::from("Stratum")),
jsonrpc: String::from("2.0"),
method: String::from("job"),
params: Some(job_template_value),
Expand Down

0 comments on commit 1527802

Please sign in to comment.