mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 22:57:59 -05:00
darkfid: Stub merge mining RPC methods
This commit is contained in:
@@ -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!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user