Skip to content

Instantly share code, notes, and snippets.

@lobarrel
Last active July 6, 2023 10:16
Show Gist options
  • Select an option

  • Save lobarrel/359cdf505cc21acd853f55077768d989 to your computer and use it in GitHub Desktop.

Select an option

Save lobarrel/359cdf505cc21acd853f55077768d989 to your computer and use it in GitHub Desktop.
sv1-messages

SV1 Messages

/client-to-server

High-level message format: StandardRequest and Response

mining.subscribe

Request struct definition:

pub  struct  Subscribe<'a> {
    pub  id: u64,
    pub  agent_signature: String,
    pub  extranonce1: Option<Extranonce<'a>>,
}

Response struct definition:

pub  struct  Subscribe<'a> {
	pub  id: u64,
	pub  extra_nonce1: Extranonce<'a>,
	pub  extra_nonce2_size: usize,
	pub  subscriptions: Vec<(String, String)>,
}

JSON request example:

{
    "id": 1,
    "method": "mining.subscribe",
    "params": ["cpuminer/1.0.0"]
}

JSON response example:

{
    "id": 1,
    "result": [
	    [[“mining.set_difficulty”,“731ec5e0649606ff”],
	    [“mining.notify”,“731ec5e0649606ff”]],
	    “e9695791”,4],
	"error": null
}

mining.authorize

Request struct definition:

pub  struct  Authorize {
	pub  id: u64,
	pub  name: String,
	pub  password: String,
}

Response struct definition:

pub  struct  Authorize {
	pub  id: u64,
	authorized: bool,
}

JSON request example:

{
    "id": 2,
    "method": "mining.authorize",
    "params": ["username", "password"]
}

JSON response example:

{
    "id": 2,
    "result": true,
    "error": null
}

mining.submit

Request struct definition:

pub  struct  Submit<'a> {
    pub  id: u64,
	pub  user_name: String,
	pub  job_id: String,
	pub  extra_nonce2: Extranonce<'a>,
	pub  time: HexU32Be,
	pub  nonce: HexU32Be,
	pub  version_bits: Option<HexU32Be>,
}

Response struct definition:

pub  struct  Submit {
	pub  id: u64,
	is_ok: bool,
}

JSON request example:

{
    "id": 3,
    "method": "mining.submit",
    "params": [
	    “username”, 
	    “4f”, 
	    “fe36a31b”, 
	    “504e86ed”, 
	    “e9695791”]
}

JSON response example:

{
    "id": 3,
    "result": true,
    "error": null
}

/server-to-client

High-level message format: Notification (no Response)

mining.notify

Notification struct definition:

pub  struct  Notify<'a> {
	pub  job_id: String,
	pub  prev_hash: PrevHash<'a>,
	pub  coin_base1: HexBytes,
	pub  coin_base2: HexBytes,
	pub  merkle_branch: Vec<MerkleNode<'a>>,
	pub  version: HexU32Be,
	pub  bits: HexU32Be,
	pub  time: HexU32Be,
	pub  clean_jobs: bool,
}

JSON request example:

{
    "id": null,
    "method": "mining.notify",
    "params": [
	    “4f”, 
	    “4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000”,
	    “01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff20020862062f503253482f04b8864e5008”,
	    “072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000”,
	     [],  
	    “00000002”, 
	    “1c2ac4af”, 
	    “504e86b9”, 
	    false]
}

mining.set_difficulty

Notification struct definition:

pub  struct  SetDifficulty {
	pub  value: f64,
}

JSON request example:

{
    "id": null,
    "method": "mining.set_difficulty",
    "params": [2]
}

mining.set_extranonce

Notification struct definition:

pub  struct  SetExtranonce<'a> {
	pub  extra_nonce1: Extranonce<'a>,
	pub  extra_nonce2_size: usize,
}

JSON request example:

{
    "id": null,
    "method": "mining.set_extranonce",
    "params": [“e9695791”,4]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment