ソースを参照

darkfid: Stub merge mining RPC methods

parazyd 1 年間 前
コミット
b3cd719348
2 ファイル変更56 行追加5 行削除
  1. 53 2
      bin/darkfid/src/rpc_xmr.rs
  2. 3 3
      doc/src/testnet/merge-mining.md

+ 53 - 2
bin/darkfid/src/rpc_xmr.rs

@@ -29,8 +29,10 @@ impl DarkfiNode {
     // Gets a unique ID that identifies this merge mined chain and
     // separates it from other chains.
     //
-    // `chain_id`: A unique 32-byte hex-encoded value that identifies
-    //             this merge mined chain.
+    // * `chain_id`: A unique 32-byte hex-encoded value that identifies
+    //   this merge mined chain.
+    //
+    // darkfid will send the hash of the genesis block header.
     //
     // --> {"jsonrpc":"2.0", "method": "merge_mining_get_chain_id", "id": 1}
     // <-- {"jsonrpc":"2.0", "result": {"chain_id": "0f28c...7863"}, "id": 1}
@@ -49,4 +51,53 @@ impl DarkfiNode {
         let resp_obj = HashMap::from([("chain_id".to_string(), genesis_hash.to_string().into())]);
         JsonResponse::new(resp_obj.into(), id).into()
     }
+
+    // RPCAPI:
+    // Gets a blob of data (usually a new block for the merge mined chain)
+    // and its hash to be used for merge mining.
+    //
+    // **Request:**
+    // * `address` - A wallet address on the merge mined chain
+    // * `aux_hash` - Merge mining job that is currently being used
+    // * `height` - Monero height
+    // * `prev_id` - Hash of the previous Monero block
+    //
+    // **Response:**
+    // * `aux_blob` - A hex-encoded blob of data. Merge mined chain defines the
+    //   contents of this blob. It's opaque to p2pool and will not be changed by it
+    // * `aux_diff` - Mining difficulty (decimal number)
+    // * `aux_hash` - A 32-byte hex-encoded hash of the `aux_blob`. Merge mined chain
+    //   defines how exactly this hash is calculated. It's opaque to p2pool.
+    //
+    // --> {"jsonrpc":"2.0", "method": "merge_mining_get_aux_block", "params": {"address": "MERGE_MINED_CHAIN_ADDRESS", "aux_hash": "f6952d6eef555ddd87aca66e56b91530222d6e318414816f3ba7cf5bf694bf0f", "height": 3000000, "prev_id":"ad505b0be8a49b89273e307106fa42133cbd804456724c5e7635bd953215d92a"}, "id": 1}
+    // <-- {"jsonrpc":"2.0", "result": {"aux_blob": "4c6f72656d20697073756d", "aux_diff": 123456, "aux_hash":"f6952d6eef555ddd87aca66e56b91530222d6e318414816f3ba7cf5bf694bf0f"}, "id": 1}
+    pub async fn xmr_merge_mining_get_aux_block(&self, id: u16, params: JsonValue) -> JsonResult {
+        todo!()
+    }
+
+    // RPCAPI:
+    // Submits a PoW solution for the merge mined chain's block. Note that
+    // when merge mining with Monero, the PoW solution is always a Monero
+    // block template with merge mining data included into it.
+    //
+    // **Request:**
+    // * `aux_blob`: Blob of data returned by `merge_mining_get_aux_block`
+    // * `aux_hash`: A 32-byte hex-encoded hash of the `aux_blob`, same as above.
+    // * `blob`: Monero block template that has enough PoW to satisfy the difficulty
+    //   returned by `merge_mining_get_aux_block`. It must also have a merge mining
+    //   tag in `tx_extra` of the coinbase transaction.
+    // * `merkle_proof`: A proof that `aux_hash` was included when calculating the
+    //   Merkle root hash from the merge mining tag
+    // * `path`: A path bitmap (32-bit unsigned integer) that complements `merkle_proof`
+    // * `seed_hash`: A 32-byte hex-encoded key that is used to initialize the
+    //   RandomX dataset
+    //
+    // **Response:**
+    // * `status`: Block submit status
+    //
+    // --> {"jsonrpc":"2.0", "method": "merge_mining_submit_solution", "params": {"aux_blob": "4c6f72656d20697073756d", "aux_hash": "f6952d6eef555ddd87aca66e56b91530222d6e318414816f3ba7cf5bf694bf0f", "blob": "...", "merkle_proof": ["hash1", "hash2", "hash3"], "path": 3, "seed_hash": "22c3d47c595ae888b5d7fc304235f92f8854644d4fad38c5680a5d4a81009fcd"}, "id": 1}
+    // <-- {"jsonrpc":"2.0", "result": {"status": "accepted"}, "id": 1}
+    pub async fn xmr_merge_mining_submit_solution(&self, id: u16, params: JsonValue) -> JsonResult {
+        todo!()
+    }
 }

+ 3 - 3
doc/src/testnet/merge-mining.md

@@ -62,7 +62,7 @@ our work locally. So quit the `monerod` node, and restart it offline
 with fixed difficulty that will make our mining process faster:
 
 ```
-$ ./monerod --testnet --no-igd --data-dir bitmonero --log-level 0 --hide-my-port --fixed-difficulty 5000 --disable-rpc-ban --offline --zmq-pub tcp://127.0.0.1:28083
+$ ./monerod --testnet --no-igd --data-dir bitmonero --log-level 1 --hide-my-port --fixed-difficulty 20000 --disable-rpc-ban --offline --zmq-pub tcp://127.0.0.1:28083
 ```
 
 Now we should also create a Monero wallet. Run `monero-wallet-cli` and
@@ -105,13 +105,13 @@ blocks.
 ## xmrig setup
 
 xmrig is pretty simple. Just start it with a chosen number of threads
-and point it to p2pool's Stratum port. `-u x+1 5000` is defined by the
+and point it to p2pool's Stratum port. `-u x+1 20000` is defined by the
 `--fixed-difficulty` setting we started `monerod` with. `-t 1` is the
 number of CPU threads to use for mining. With a low difficulty, one
 thread should be enough.
 
 ```
-$ ./xmrig -u x+1 5000 -o 127.0.0.1:3333 -t 1
+$ ./xmrig -u x+1 20000 -o 127.0.0.1:3333 -t 1
 ```
 
 Now we should see blocks being mined in p2pool and submitted to our