3
Merge Mining Manual
Codex Bot edited this page 2026-03-23 03:14:44 +01:00

Merge Mining Manual

Manual do ręcznego odpalania testów Peya + merge_mining_proxy z trzema parent chainami:

  • Monero
  • Zephyr
  • Salvium

Instrukcja jest oparta na działających setupach użytych w bieżących testach.

Stałe

Aux wallet Peyi do proxy:

PtYaM1rSTrt33yeVBcUPtceo2yKJRFCTTczsoyADsxDhD8QFhs83F2VNxtF9VuznCWQ9bKATxfGZ5Qhxv8gM16vd5VRszexWGk7

Auth key do restricted merge mining:

/mnt/duzy/sal11v4/peya-mm-testnet-auth.key

Binarki:

Peya daemon: /mnt/duzy/sal11v4/salvium/build/bin/peyad
Peya proxy:  /mnt/duzy/sal11v4/salvium/build/bin/peya-merge-mining-proxy

Monero daemon:       /mnt/duzy/sal11v4/monero/monero-x86_64-linux-gnu-v0.18.4.6/monerod
Monero wallet-cli:   /mnt/duzy/sal11v4/monero/monero-x86_64-linux-gnu-v0.18.4.6/monero-wallet-cli

Zephyr daemon:       /mnt/duzy/sal11v4/zeph/zephyr-fastfork/build-fastfork/bin/zephyrd
Zephyr wallet-cli:   /mnt/duzy/sal11v4/zeph/zephyr-cli-linux-v2.3.0/zephyr-wallet-cli

Salvium daemon:      /mnt/duzy/sal11v4/sal/salviumd
Salvium wallet-cli:  /mnt/duzy/sal11v4/sal/salvium-wallet-cli

Ważne uwagi

  • Proxy nie ma flagi --testnet.
  • Proxy bierze sieci i chain state z daemonów, do których się łączy.
  • Jeśli po rebuildzie coś zachowuje się dziwnie, najpierw zrestartuj:
    • peyad
    • peya-merge-mining-proxy
  • W naszych testach fałszywy błąd Salvium wynikał właśnie ze starego procesu peyad.
  • Dla ręcznych testów share przez proxy warto zawsze wysyłać z nagłówkiem X-Hash-Difficulty.
  • W requestach getblocktemplate do proxy pole wallet_address jest parentowym adresem miningowym, nie adresem Peyi.
  • Świeży verifier Peyi z genesis nie jest od razu gotowy do aux merge miningu.
  • Jeśli startujesz nowy peyad --testnet od zera, najpierw podnieś go przynajmniej ponad wysokość 5.
  • W praktyce do testów wygodnie jest dobić go od razu trochę wyżej, np. do 8+.

Wspólny verifier Peyi

Najprostszy wspólny verifier:

/mnt/duzy/sal11v4/salvium/build/bin/peyad \
  --testnet \
  --offline \
  --fixed-diff 10 \
  --data-dir /tmp/peya-mm-verify \
  --rpc-bind-port 47980 \
  --zmq-rpc-bind-port 47981 \
  --log-level 1 \
  --non-interactive

Szybki check:

curl -s http://127.0.0.1:47980/get_height
curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' \
  http://127.0.0.1:47980/json_rpc

Jeśli to świeży chain od genesis, podnieś go lokalnym miningiem:

curl -s -H 'Content-Type: application/json' \
  -d '{"miner_address":"PtYaM1rSTrt33yeVBcUPtceo2yKJRFCTTczsoyADsxDhD8QFhs83F2VNxtF9VuznCWQ9bKATxfGZ5Qhxv8gM16vd5VRszexWGk7","threads_count":8,"do_background_mining":false,"ignore_battery":true}' \
  http://127.0.0.1:47980/start_mining

Sprawdzaj wysokość:

curl -s http://127.0.0.1:47980/get_height

Po dojściu przynajmniej do 8 zatrzymaj mining:

curl -s -H 'Content-Type: application/json' -d '{}' http://127.0.0.1:47980/stop_mining

Monero

1. Wygeneruj parentowy adres regtest

printf 'y\n' | \
/mnt/duzy/sal11v4/monero/monero-x86_64-linux-gnu-v0.18.4.6/monero-wallet-cli \
  --regtest \
  --generate-new-wallet /tmp/monero-mm-wallet \
  --password '' \
  --mnemonic-language English \
  --command address

Użyj wygenerowanego adresu Monero z pliku:

cat /tmp/monero-mm-wallet.address.txt

2. Odpal parent daemon

/mnt/duzy/sal11v4/monero/monero-x86_64-linux-gnu-v0.18.4.6/monerod \
  --regtest \
  --offline \
  --fixed-difficulty 30 \
  --data-dir /tmp/monero-mm-parent \
  --rpc-bind-port 28291 \
  --p2p-bind-port 28290 \
  --zmq-rpc-bind-port 28292 \
  --non-interactive

Check:

curl -s http://127.0.0.1:28291/get_height

3. Odpal proxy

/mnt/duzy/sal11v4/salvium/build/bin/peya-merge-mining-proxy \
  --rpc-bind-ip 127.0.0.1 \
  --rpc-bind-port 37780 \
  --monero-daemon-address http://127.0.0.1:28291 \
  --aux-daemon-address http://127.0.0.1:47980 \
  --aux-wallet-address PtYaM1rSTrt33yeVBcUPtceo2yKJRFCTTczsoyADsxDhD8QFhs83F2VNxtF9VuznCWQ9bKATxfGZ5Qhxv8gM16vd5VRszexWGk7 \
  --parent-chain monero \
  --mm-auth-key-file /mnt/duzy/sal11v4/peya-mm-testnet-auth.key

Check:

curl -s http://127.0.0.1:37780/get_height

4. Uderz w proxy z parentowym adresem Monero

Podstaw swój wygenerowany adres Monero zamiast MONERO_REGTEST_ADDRESS:

curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"getblocktemplate","params":{"wallet_address":"MONERO_REGTEST_ADDRESS","reserve_size":60}}' \
  http://127.0.0.1:37780/json_rpc

Zephyr

Ważne

  • Do sensownych testów używaj zephyr-fastfork, nie stockowego testnetu.
  • Stockowy Zephyr testnet nie odtwarza nowoczesnego stanu forków.

1. Wygeneruj parentowy adres testnet

printf 'y\n' | \
/mnt/duzy/sal11v4/zeph/zephyr-cli-linux-v2.3.0/zephyr-wallet-cli \
  --testnet \
  --generate-new-wallet /tmp/zephyr-mm-wallet \
  --password '' \
  --mnemonic-language English \
  --command address

Adres:

cat /tmp/zephyr-mm-wallet.address.txt

2. Odpal fastfork parent daemon

/mnt/duzy/sal11v4/zeph/zephyr-fastfork/build-fastfork/bin/zephyrd \
  --testnet \
  --offline \
  --fixed-difficulty 30 \
  --data-dir /tmp/zephyr-fastfork-mm-parent \
  --rpc-bind-port 17897 \
  --p2p-bind-port 17896 \
  --zmq-rpc-bind-port 17898 \
  --non-interactive

3. Podnieś parent ponad fastforkowe HF

Podstaw swój testnet address Zephyra:

curl -s -H 'Content-Type: application/json' \
  -d '{"miner_address":"ZEPHYR_TESTNET_ADDRESS","threads_count":32,"do_background_mining":false,"ignore_battery":true}' \
  http://127.0.0.1:17897/start_mining

Sprawdzaj:

curl -s http://127.0.0.1:17897/get_height
curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"hard_fork_info"}' \
  http://127.0.0.1:17897/json_rpc

Zatrzymaj mining po wejściu na nowoczesny stan fastforkowy.

4. Odpal proxy

/mnt/duzy/sal11v4/salvium/build/bin/peya-merge-mining-proxy \
  --rpc-bind-ip 127.0.0.1 \
  --rpc-bind-port 37904 \
  --monero-daemon-address http://127.0.0.1:17897 \
  --aux-daemon-address http://127.0.0.1:47980 \
  --aux-wallet-address PtYaM1rSTrt33yeVBcUPtceo2yKJRFCTTczsoyADsxDhD8QFhs83F2VNxtF9VuznCWQ9bKATxfGZ5Qhxv8gM16vd5VRszexWGk7 \
  --parent-chain zephyr \
  --mm-auth-key-file /mnt/duzy/sal11v4/peya-mm-testnet-auth.key

5. Uderz w proxy z testnetowym adresem Zephyra

curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"getblocktemplate","params":{"wallet_address":"ZEPHYR_TESTNET_ADDRESS","reserve_size":60}}' \
  http://127.0.0.1:37904/json_rpc

Salvium

Ważne

  • Salvium testnet ma realne przejście adresów miningowych:
    • na niskiej wysokości działa legacy SaLvT...
    • od HF10 przy wysokości 1100 getblocktemplate wymaga już Carrot SC1T...
  • Dla współczesnych testów merge mining po wejściu na HF10/HF11 używaj już tylko adresu SC1T....

1. Wygeneruj parentowe adresy testnet

printf 'y\n' | \
/mnt/duzy/sal11v4/sal/salvium-wallet-cli \
  --testnet \
  --generate-new-wallet /tmp/salvium-mm-wallet \
  --password '' \
  --mnemonic-language English \
  --command address

Plik wyjściowy zawiera dwa adresy:

  • pierwszy to legacy SaLvT...
  • drugi to Carrot SC1T...
cat /tmp/salvium-mm-wallet.address.txt

2. Odpal parent daemon

/mnt/duzy/sal11v4/sal/salviumd \
  --testnet \
  --offline \
  --fixed-difficulty 30 \
  --data-dir /tmp/salvium-mm-parent \
  --rpc-bind-port 38481 \
  --p2p-bind-port 38480 \
  --zmq-rpc-bind-port 38482 \
  --non-interactive

3. Podnieś parent ponad HF11

Od startu z genesis:

  1. kop do 1100 na legacy SaLvT...
  2. po dojściu do 1100 przełącz mining na SC1T...
  3. dobij przynajmniej powyżej 1200

Start mining na legacy:

curl -s -H 'Content-Type: application/json' \
  -d '{"miner_address":"SALVIUM_LEGACY_ADDRESS","threads_count":32,"do_background_mining":false,"ignore_battery":true}' \
  http://127.0.0.1:38481/start_mining

Check wysokości:

curl -s http://127.0.0.1:38481/get_height
curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"hard_fork_info"}' \
  http://127.0.0.1:38481/json_rpc

Po dojściu do 1100 przełącz mining na carrot:

curl -s -H 'Content-Type: application/json' -d '{}' http://127.0.0.1:38481/stop_mining

curl -s -H 'Content-Type: application/json' \
  -d '{"miner_address":"SALVIUM_CARROT_ADDRESS","threads_count":32,"do_background_mining":false,"ignore_battery":true}' \
  http://127.0.0.1:38481/start_mining

Po dojściu powyżej 1200 zatrzymaj mining:

curl -s -H 'Content-Type: application/json' -d '{}' http://127.0.0.1:38481/stop_mining

4. Odpal proxy

/mnt/duzy/sal11v4/salvium/build/bin/peya-merge-mining-proxy \
  --rpc-bind-ip 127.0.0.1 \
  --rpc-bind-port 37906 \
  --monero-daemon-address http://127.0.0.1:38481 \
  --aux-daemon-address http://127.0.0.1:47980 \
  --aux-wallet-address PtYaM1rSTrt33yeVBcUPtceo2yKJRFCTTczsoyADsxDhD8QFhs83F2VNxtF9VuznCWQ9bKATxfGZ5Qhxv8gM16vd5VRszexWGk7 \
  --parent-chain salvium \
  --mm-auth-key-file /mnt/duzy/sal11v4/peya-mm-testnet-auth.key

Na obecnym VPS-owym układzie produkcyjnym poprawny wzorzec wygląda analogicznie:

/home/pool3/finaltest/bin/peya/peya-merge-mining-proxy \
  --rpc-bind-ip 127.0.0.1 \
  --rpc-bind-port 39936 \
  --aux-daemon-address http://127.0.0.1:17750 \
  --aux-wallet-address PEYaFi7SjGeJs3exrGeKLJKqdYMbu4hP2626E7hRKtoLZe9Kj72CUqA9LcNDRcE6h8CzghWreEN7t8jeyp9CyKqS2wZ5BEtoxh5 \
  --parent-chain salvium \
  --monero-daemon-address http://127.0.0.1:19081 \
  --mm-auth-key-file /home/pool3/finaltest/configs/mm-auth.key

5. Uderz w proxy z carrotowym adresem Salvium

Tu używaj już tylko SC1T...:

curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"getblocktemplate","params":{"wallet_address":"SALVIUM_CARROT_ADDRESS","reserve_size":60}}' \
  http://127.0.0.1:37906/json_rpc

XMRig

Ta sekcja opisuje testowany flow z xmrig-salvium przeciwko peya-merge-mining-proxy.

1. Zbuduj xmrig-salvium

Source tree:

/mnt/duzy/sal11v4/xmrig

Build:

cmake -S /mnt/duzy/sal11v4/xmrig -B /mnt/duzy/sal11v4/xmrig/build
cmake --build /mnt/duzy/sal11v4/xmrig/build -j8

Binarka:

/mnt/duzy/sal11v4/xmrig/build/xmrig

2. Minimalny testowany setup Salvium -> Peya

Sprawdzony runtime był na takim układzie:

  • peyad testnet verifier z --fixed-diff 10
  • salviumd testnet parent z --fixed-difficulty 30
  • peya-merge-mining-proxy --parent-chain salvium
  • parent chain już powyżej HF11
  • parent mining address typu Carrot SC1T...

Ważne:

  • jeśli verifier Peyi startuje od genesis, najpierw podnieś go ponad wysokość 5
  • dla Salvium parenta na nowoczesnym HF używaj już tylko adresu SC1T...

3. Uruchom xmrig-salvium przeciwko proxy

Przykład działającej komendy:

/mnt/duzy/sal11v4/xmrig/build/xmrig \
  --daemon \
  --coin SAL \
  -o 127.0.0.1:37906 \
  -u SALVIUM_CARROT_ADDRESS \
  --threads 2 \
  --donate-level 0 \
  --daemon-poll-interval 500 \
  --daemon-job-timeout 15000 \
  --no-color \
  --print-time 5

Na potrzeby naszych testów SALVIUM_CARROT_ADDRESS może być np.:

SC1TotQbgBa8JHDY6QvbymRviS7CWz9rKjoasZCmajFP7hL7EehF1RpUADNxTzg33iH3WPvLn1RiQJ2tr56c2iN9KD2Gx9GcpGh

4. Co powinieneś zobaczyć

Prawidłowy start wygląda mniej więcej tak:

  • net use daemon 127.0.0.1:37906
  • new job ... coin Salvium
  • cpu accepted ... diff 10

Praktycznie zweryfikowane:

  • xmrig-salvium poprawnie pobiera getblocktemplate z naszego proxy
  • parser Salvium blocktemplate z protocol_tx działa
  • submit wraca accepted po stronie XMRiga
  • w krótkim runie testowym wysokości ruszyły na obu chainach:
    • parent Salvium 1597 -> 1599
    • aux Peya 447 -> 448

To potwierdza realny end-to-end flow:

xmrig-salvium -> peya-merge-mining-proxy -> salviumd + peyad

5. Szybka diagnostyka przy XMRigu

Sprawdzenie wysokości w trakcie runu:

curl -s http://127.0.0.1:38481/get_height
curl -s http://127.0.0.1:47980/get_height

Jeśli XMRig łączy się, ale aux nie rośnie:

  • sprawdź, czy verifier Peyi jest już powyżej aktywacji MM
  • sprawdź, czy proxy jest świeżo po rebuildzie
  • sprawdź, czy parent Salvium jest już na carrotowym stanie HF10/HF11+
  • sprawdź, czy do XMRiga podajesz SC1T..., a nie legacy SaLvT...

Szybka diagnostyka

Status proxy:

curl -s http://127.0.0.1:37780/get_height
curl -s http://127.0.0.1:37904/get_height
curl -s http://127.0.0.1:37906/get_height

Status parentów:

curl -s http://127.0.0.1:28291/get_height
curl -s http://127.0.0.1:17897/get_height
curl -s http://127.0.0.1:38481/get_height

Status aux Peyi:

curl -s http://127.0.0.1:47980/get_height
curl -s -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"0","method":"get_info"}' \
  http://127.0.0.1:47980/json_rpc

Cleanup

Najprostsze sprzątanie po testach:

pkill -f peya-merge-mining-proxy || true
pkill -f '/mnt/duzy/sal11v4/salvium/build/bin/peyad --testnet --offline' || true
pkill -f '/mnt/duzy/sal11v4/monero/monero-x86_64-linux-gnu-v0.18.4.6/monerod' || true
pkill -f '/mnt/duzy/sal11v4/zeph/zephyr-fastfork/build-fastfork/bin/zephyrd' || true
pkill -f '/mnt/duzy/sal11v4/sal/salviumd' || true

Jeśli chcesz zaczynać kompletnie od zera, skasuj też odpowiednie data-dir z /tmp.