Port fix 37889→38889, Complete Salvium rewrite of README, Docker Salvium updates, XMRAmount → SALAmount, Merge mining warning

This commit is contained in:
Matt Hess
2025-12-25 03:44:02 +00:00
parent b226260f56
commit 63f277c5ae
9 changed files with 107 additions and 219 deletions
+2 -2
View File
@@ -44,8 +44,8 @@ RUN mkdir -p /home/p2pool/.p2pool && \
USER p2pool USER p2pool
EXPOSE 3333 EXPOSE 3333
EXPOSE 37889 EXPOSE 38889
EXPOSE 37888 EXPOSE 38888
VOLUME /home/p2pool/.p2pool VOLUME /home/p2pool/.p2pool
+67 -175
View File
@@ -1,24 +1,11 @@
# Salvium P2Pool # Salvium P2Pool
A fork of the Decentralized pool for monero mining converted for Salvium. Decentralized pool for Salvium mining. Based on [SChernykh's P2Pool](https://github.com/SChernykh/p2pool) for Monero.
Pool status and monitoring pages can be found at https://p2pool.io/, https://p2pool.io/mini/ and https://p2pool.observer/, https://mini.p2pool.observer/
These are 3rd-party pages. If they are down, it doesn't mean there is a problem with P2Pool itself - it keeps mining always thanks to its decentralized nature.
### Build Status ### Build Status
![C/C++ CI](https://github.com/SChernykh/p2pool/actions/workflows/c-cpp.yml/badge.svg) ![C/C++ CI](https://github.com/mxhess/p2pool-salvium/actions/workflows/c-cpp.yml/badge.svg)
![test-sync](https://github.com/SChernykh/p2pool/actions/workflows/test-sync.yml/badge.svg)
![CodeQL](https://github.com/SChernykh/p2pool/actions/workflows/codeql-analysis.yml/badge.svg)
![msvc-analysis](https://github.com/SChernykh/p2pool/actions/workflows/msvc-analysis.yml/badge.svg)
![cppcheck](https://github.com/SChernykh/p2pool/actions/workflows/cppcheck.yml/badge.svg)
<a href="https://scan.coverity.com/projects/schernykh-p2pool">
<img alt="Coverity Scan Build Status"
src="https://scan.coverity.com/projects/23659/badge.svg"/>
</a>
![clang-tidy](https://github.com/SChernykh/p2pool/actions/workflows/clang-tidy.yml/badge.svg)
# Contents # Contents
- [Pool mining vs Solo mining vs P2Pool mining](#pool-mining-vs-solo-mining-vs-p2pool-mining) - [Pool mining vs Solo mining vs P2Pool mining](#pool-mining-vs-solo-mining-vs-p2pool-mining)
- [Features](#features) - [Features](#features)
@@ -27,12 +14,9 @@ These are 3rd-party pages. If they are down, it doesn't mean there is a problem
- [Salvium version support](#salvium-version-support) - [Salvium version support](#salvium-version-support)
- [How to mine on P2Pool](#how-to-mine-on-p2pool) - [How to mine on P2Pool](#how-to-mine-on-p2pool)
- [General Considerations](#general-considerations) - [General Considerations](#general-considerations)
- [GUI for P2Pool](#gui-for-p2pool)
- [Merge mining](#merge-mining)
- [GNU/Linux](#gnulinux) - [GNU/Linux](#gnulinux)
- [Windows](#windows) - [Windows](#windows)
- [Build instructions](#build-instructions) - [Build instructions](#build-instructions)
- [Reproducible builds](#reproducible-builds)
- [Donations](#donations) - [Donations](#donations)
## Pool mining vs Solo mining vs P2Pool mining ## Pool mining vs Solo mining vs P2Pool mining
@@ -41,9 +25,9 @@ Here's the comparison table of the different ways of mining. While pool mining i
|Pool type|Payouts|Fee|Min. payout|Centralized?|Stability|Control|Setup |Pool type|Payouts|Fee|Min. payout|Centralized?|Stability|Control|Setup
|-|-|-|-|-|-|-|-| |-|-|-|-|-|-|-|-|
|Centralized pool|Regular|0-3%|0.001-0.01 XMR|Yes|Less stable due to pool server outages|Pool admin controls your mined funds, what you mine and can execute network attacks|Only miner software is required |Centralized pool|Regular|0-3%|0.001-0.01 SAL|Yes|Less stable due to pool server outages|Pool admin controls your mined funds, what you mine and can execute network attacks|Only miner software is required
|Solo|Rare|0%|0.6 XMR or more|No|As stable as your Salvium node|100% under your control|Salvium node + optional miner |Solo|Rare|0%|Full block reward|No|As stable as your Salvium node|100% under your control|Salvium node + optional miner
|**P2Pool**|Regular|0%|~0.00027 XMR|No|Very stable: node failover and multiple Salvium nodes are supported|100% under your control|Salvium node(s) + P2Pool node(s) + optional miner(s) |**P2Pool**|Regular|0%|~0.04 SAL|No|Very stable: node failover and multiple Salvium nodes are supported|100% under your control|Salvium node(s) + P2Pool node(s) + optional miner(s)
## Features ## Features
@@ -52,15 +36,14 @@ Here's the comparison table of the different ways of mining. While pool mining i
* Trustless: there is no pool wallet, funds are never in custody. All pool blocks pay out to miners directly. * Trustless: there is no pool wallet, funds are never in custody. All pool blocks pay out to miners directly.
* PPLNS payout scheme * PPLNS payout scheme
* **0% fee** * **0% fee**
* **0 XMR payout fee** * **0 SAL payout fee**
* **~0.00027 XMR minimal payout** * **~0.04 SAL minimal payout**
* Fast block times, down to 1 second * Fast block times, down to 1 second
* Uncle blocks are supported to avoid orphans - all your shares will be accounted for! * Uncle blocks are supported to avoid orphans - all your shares will be accounted for!
* Configurable PPLNS window size and block time * Configurable PPLNS window size and block time
* Advanced mempool picking algorithm, it creates blocks with better reward than what salviumd solo mining does * Advanced mempool picking algorithm, it creates blocks with better reward than what salviumd solo mining does
* Password protected private pools * Password protected private pools
* Highly reliable configurations are supported (multiple P2Pool nodes mining to the same wallet, each P2Pool node can use multiple Salvium nodes and switch on the fly if an issue is detected) * Highly reliable configurations are supported (multiple P2Pool nodes mining to the same wallet, each P2Pool node can use multiple Salvium nodes and switch on the fly if an issue is detected)
* Mining through [TOR](docs/TOR.MD) is fully supported
## How payouts work in P2Pool ## How payouts work in P2Pool
@@ -72,122 +55,77 @@ First you need to find a pool share. This share will stay in [PPLNS](https://en.
* Block time: 10 seconds * Block time: 10 seconds
* PPLNS window: up to 2160 blocks (6 hours, auto adjustable to balance payout sizes and frequency) * PPLNS window: up to 2160 blocks (6 hours, auto adjustable to balance payout sizes and frequency)
* Minimum payout = Salvium block reward/2160, ~0.00027 SAL * Minimum payout requires at least 1 share in the PPLNS window and is proportional to the block reward divided across the total window
## Salvium version support ## Salvium version support
- The latest Salvium network upgrade happened on October 13th, 2025 (block 334,750). - The latest Salvium network upgrade happened on October 13th, 2024 (block 334,750).
- The latest P2Pool network upgrade happened on November 11th, 2025. - The latest P2Pool network upgrade happened on November 11th, 2024.
In order to continue mining on P2Pool, you must update both Salvium and P2Pool software to the latest available versions as soon as they are released. In order to continue mining on P2Pool, you must update both Salvium and P2Pool software to the latest available versions as soon as they are released.
|Salvium protocol version|Required Salvium software version|Required P2Pool version |Salvium protocol version|Required Salvium software version|Required P2Pool version
|-|-|-| |-|-|-|
|v11|v1.0.6 or newer is reequired|v4.2 or newer |v11|v1.0.6 or newer|v4.2 or newer
## How to mine on P2Pool ## How to mine on P2Pool
### General Considerations ### General Considerations
- In order to mine on P2Pool, a synced Salvium node using salviumd v1.0.6 or newer is required. If you don't currently have one, you can download the [official Salvium binaries](https://salvium.io/download.html), start `salviumd` on your PC and wait until it's fully synced. Advanced Salvium node setup instructions are [here](https://sethforprivacy.com/guides/run-a-monero-node-advanced/). - In order to mine on P2Pool, a synced Salvium node using salviumd v1.0.6 or newer is required. If you don't currently have one, you can download the [official Salvium binaries](https://salvium.io/download.html), start `salviumd` on your PC and wait until it's fully synced.
- It is highly recommended that you create a separate restricted user account (in your OS) for mining. While P2Pool has been battle-tested for a long time now, any software may have unknown bugs/vulnerabilities. - It is highly recommended that you create a separate restricted user account (in your OS) for mining. While P2Pool has been battle-tested for a long time now, any software may have unknown bugs/vulnerabilities.
- You can mine to a primary wallet address (the one starting with `SC1`) for mining. If you want to mine to a subaddress, you will need to provide both the main address (starting with SC1) and the subaddress (starting with SC1s) using `--wallet` and `--subaddress` command line parameters. - You can mine to a primary wallet address (the one starting with `SC1`) for mining. If you want to mine to a subaddress, you will need to provide both the main address (starting with SC1) and the subaddress (starting with SC1s) using `--wallet` and `--subaddress` command line parameters.
- You can add the `--mini` parameter to your P2Pool command to connect to the **p2pool-mini** sidechain. Note that it will also change the default p2p port from 38889 to 38888. - You can add the `--mini` parameter to your P2Pool command to connect to the **p2pool-mini** sidechain. Note that it will also change the default p2p port from 38889 to 38888.
- Check that ports 19080 (Salvium p2p port) and 38889/38888 (P2Pool/P2Pool mini p2p port) are open in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine. - Check that ports 19080 (Salvium p2p port) and 38889/38888 (P2Pool/P2Pool mini p2p port) are open in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine.
- You can connect multiple miners to the same P2Pool node. The more the better! - You can connect multiple miners to the same P2Pool node. The more the better!
- The steps below assume that you run everything on the same machine. If it's not the case, change `127.0.0.1` to appropriate IP addresses for your setup. - The steps below assume that you run everything on the same machine. If it's not the case, change `127.0.0.1` to appropriate IP addresses for your setup.
- It is highly recommended to create a new mainnet wallet for P2Pool mining because **wallet addresses are PUBLIC on P2Pool**. - It is highly recommended to create a new mainnet wallet for P2Pool mining because **wallet addresses are PUBLIC on P2Pool**.
**Wallet software compatible with P2Pool payouts** **Wallet software compatible with P2Pool payouts**
- [Official Salvium CLI and GUI v1.0.6 and newer](https://salvium.io/download.html) - [Official Salvium CLI and GUI v1.0.6 and newer](https://salvium.io/download.html)
- [Monerujo v3.0.2 "Fluorine Fermi" and newer](https://www.monerujo.io/)
- [Cake Wallet v4.4.5 and newer](https://cakewallet.com/)
- [Monero.com by Cake Wallet](https://monero.com/)
- [Feather Wallet v2.1.0 and newer](https://featherwallet.org/)
- [MyMonero](https://mymonero.com/)
### GUI for P2Pool
- [Gupax](https://github.com/hinto-janai/gupax) project aims to provide an easy to use cross-platform GUI to configure and run P2Pool & [XMRig](https://github.com/xmrig/xmrig).
### Merge mining
Merge mining is available in P2Pool since the fork that happened on October 12th, 2024. Version 4.0 or newer is required to use it.
Blockchains that will support [Merge mining RPC API](https://github.com/SChernykh/p2pool/blob/master/docs/MERGE_MINING.MD#proposed-rpc-api):
- [Townforge](https://townforge.net/) supports it in their [tmp-mm branch](https://git.townforge.net/townforge/townforge/src/branch/tmp-mm) (not released yet)
- [DarkFi](https://dark.fi/) is going to support it, but it's [not ready yet](https://github.com/darkrenaissance/darkfi/issues/244)
```
p2pool.exe --wallet YOUR_SALVIUM_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN
```
Blockchains that support merge mining already: [Tari](https://www.tari.com/)
Tari uses their own gRPC API and requires a different command line:
```
./p2pool --wallet YOUR_SALVIUM_WALLET_ADDRESS --merge-mine tari://TARI_NODE_IP:18102 TARI_WALLET_ADDRESS
```
and on the Tari side
```
./minotari_node --grpc-enabled --mining-enabled
```
TARI_NODE_IP is 127.0.0.1 if you run both on the same machine (recommended).
Merge mining is available on Tari's mainnet:
- Download [Tari suite](https://github.com/tari-project/tari/releases/latest) for your OS
- Run Minotari node and wait until in synchronizes
- Run Minotari console wallet to create a Tari wallet
- Copy the "Tari Address one-sided" from the "Receive" tab of the wallet
- Paste it into the P2Pool command line above
- Everything is ready now to start merge mining Salvium and Tari!
Note that Tari will be mined in solo mode (only full Tari blocks can be mined for now). This doesn't affect P2Pool payouts - they will stay the same.
### GNU/Linux ### GNU/Linux
1. Download the latest P2Pool binaries [here](https://github.com/SChernykh/p2pool/releases/latest). 1. Download the latest P2Pool binaries from the [releases page](https://github.com/mxhess/p2pool-salvium/releases/latest).
- Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions). - Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions).
2. Download the latest XMRig (linux-static-x64) binary [here](https://github.com/xmrig/xmrig/releases/latest). 2. Download the latest XMRig (linux-static-x64) binary [here](https://github.com/xmrig/xmrig/releases/latest).
3. Prepare enough huge pages (each of salviumd/P2Pool/XMRig needs them): 3. Prepare enough huge pages (each of salviumd/P2Pool/XMRig needs them):
``` ```
sudo sysctl vm.nr_hugepages=3072 sudo sysctl vm.nr_hugepages=3072
``` ```
4. Check that ports 19080 (Salvium p2p port) and 38889/38888 (P2Pool/P2Pool mini p2p port) are open in your local firewall to ensure better connectivity. 4. Check that ports 19080 (Salvium p2p port) and 38889/38888 (P2Pool/P2Pool mini p2p port) are open in your local firewall to ensure better connectivity.
5. Start `salviumd` with the following command/options: 5. Start `salviumd` with the following command/options:
```
./salviumd --zmq-pub tcp://127.0.0.1:19083 --out-peers 32 --in-peers 64 --enforce-dns-checkpointing --enable-dns-blocklist
``` ```
./salviumd --zmq-pub tcp://127.0.0.1:19083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist
```
**Note:** **Note:**
The `--zmq-pub` option is required for P2Pool to work properly. The `--zmq-pub` option is required for P2Pool to work properly.
`--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead. `--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead.
`--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080` is needed to have guaranteed good working nodes in your connected peers. `--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors.
`--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors `--enable-dns-blocklist` is needed to ban known bad nodes.
`--enable-dns-blocklist` is needed to ban known bad nodes
6. Start P2Pool with the following command/options: 6. Start P2Pool with the following command/options:
``` ```
./p2pool --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS ./p2pool-salvium --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS
``` ```
7. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes). 7. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes).
8. Start XMRig with the following command/options: 8. Start XMRig with the following command/options:
``` ```
./xmrig -o 127.0.0.1:3333 ./xmrig -o 127.0.0.1:3333
``` ```
- Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!** - Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!**
- To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options: - To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options:
``` ```
./xmrig -u x+10000 -o 127.0.0.1:3333 ./xmrig -u x+10000 -o 127.0.0.1:3333
``` ```
9. XMRig should connect and start mining! 9. XMRig should connect and start mining!
**Additional Information:** **Additional Information:**
- For a more in-depth beginner friendly walk-through with the option of using Docker, please see SethForPrivacy's guide at: https://sethforprivacy.com/guides/run-a-p2pool-node/ - You can check the p2pool.log for any warnings or errors using the following command:
- You can check the p2pool.log for any warnings or errors using the following command:
``` ```
grep -E 'WARNING|ERROR' p2pool.log grep -E 'WARNING|ERROR' p2pool.log
``` ```
@@ -204,49 +142,47 @@ nocreate
} }
``` ```
### Windows ### Windows
**Note:** *Windows SmartScreen may block incoming connections by files that are "Downloaded from the Internet". You can allow 'p2pool.exe' and 'monerod.exe' by double-clicking them, clicking "More Info", then click "Run Anyway" and then closing them immediately so you can run them from the command line. Advanced users can use the PowerShell cmdlet `Unblock-File` to remove this flag.* **Note:** *Windows SmartScreen may block incoming connections by files that are "Downloaded from the Internet". You can allow 'p2pool-salvium.exe' and 'salviumd.exe' by double-clicking them, clicking "More Info", then click "Run Anyway" and then closing them immediately so you can run them from the command line. Advanced users can use the PowerShell cmdlet `Unblock-File` to remove this flag.*
1. Download the latest P2Pool binaries [here](https://github.com/SChernykh/p2pool/releases/latest). 1. Download the latest P2Pool binaries from the [releases page](https://github.com/mxhess/p2pool-salvium/releases/latest).
- Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions). - Alternatively, grab the latest source code for P2Pool and [build it](#build-instructions).
2. Download the latest XMRig binary [here](https://github.com/xmrig/xmrig/releases/latest). 2. Download the latest XMRig binary [here](https://github.com/xmrig/xmrig/releases/latest).
3. Expand the P2Pool binaries into an appropriate location (`%USERPROFILE%/bin` or `C:/bin/` are good options) 3. Expand the P2Pool binaries into an appropriate location (`%USERPROFILE%/bin` or `C:/bin/` are good options)
4. Expand XMRig binary into an appropriate location (the same folder as P2Pool is fine). 4. Expand XMRig binary into an appropriate location (the same folder as P2Pool is fine).
5. Prepare huge pages to work properly (each of monerod/P2Pool/XMRig needs them): 5. Prepare huge pages to work properly (each of salviumd/P2Pool/XMRig needs them):
- On Windows 10 or above, run XMRig at least once as Administrator (right-click Run As Administrator) - On Windows 10 or above, run XMRig at least once as Administrator (right-click Run As Administrator)
- On earlier versions of Windows, you'll need to run XMRig as Administrator at least once per login. - On earlier versions of Windows, you'll need to run XMRig as Administrator at least once per login.
6. Create "Monero" folder inside extracted P2Pool folder and copy Monero binaries there. 6. Create "Salvium" folder inside extracted P2Pool folder and copy Salvium binaries there.
7. Open a command prompt and navigate to the folder where you extracted P2Pool. 7. Open a command prompt and navigate to the folder where you extracted P2Pool.
**Note:** *When running the below commands, Windows Firewall may prompt to allow connections, click "Allow" if prompted.* **Note:** *When running the below commands, Windows Firewall may prompt to allow connections, click "Allow" if prompted.*
8. Start `monerod` with the following command/options: 8. Start `salviumd` with the following command/options:
``` ```
.\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist .\Salvium\salviumd.exe --zmq-pub tcp://127.0.0.1:19083 --out-peers 32 --in-peers 64 --enforce-dns-checkpointing --enable-dns-blocklist
``` ```
**Note:** **Note:**
The `--zmq-pub` option is required for P2Pool to work properly. The `--zmq-pub` option is required for P2Pool to work properly.
`--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead. `--out-peers 32 --in-peers 64` is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's **upload** bandwidth is less than **10 Mbit**, use `--out-peers 8 --in-peers 16` instead.
`--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080` is needed to have guaranteed good working nodes in your connected peers. `--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors.
`--enforce-dns-checkpointing` is needed to combat the selfish mining attempts by malicious actors `--enable-dns-blocklist` is needed to ban known bad nodes.
`--enable-dns-blocklist` is needed to ban known bad nodes
9. Start P2Pool with the following command/options: 9. Start P2Pool with the following command/options:
``` ```
.\p2pool.exe --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini .\p2pool-salvium.exe --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS
``` ```
10. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes). 10. Wait until the initial P2Pool sync is finished (shouldn't take more than 5-10 minutes).
11. Start XMRig with the following command/options: 11. Start XMRig with the following command/options:
``` ```
.\xmrig.exe -o 127.0.0.1:3333 .\xmrig.exe -o 127.0.0.1:3333
``` ```
- Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!** - Note that you don't need to specify your wallet address for XMRig. **Wallet addresses set in XMRig config will be ignored!**
- To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options: - To set a custom fixed difficulty for your miner (for example, 10000), instead start XMRig with the following options:
``` ```
xmrig.exe -u x+10000 -o 127.0.0.1:3333 xmrig.exe -u x+10000 -o 127.0.0.1:3333
``` ```
@@ -254,13 +190,13 @@ The `--zmq-pub` option is required for P2Pool to work properly.
13. *(Optional but highly recommended)* You can create a Quickstart by creating a batch (.bat) file with the following contents and placing it in your P2Pool directory along with `xmrig.exe`. 13. *(Optional but highly recommended)* You can create a Quickstart by creating a batch (.bat) file with the following contents and placing it in your P2Pool directory along with `xmrig.exe`.
``` ```
@ECHO OFF @ECHO OFF
start cmd /k %~dp0\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --enforce-dns-checkpointing --enable-dns-blocklist start cmd /k %~dp0\Salvium\salviumd.exe --zmq-pub tcp://127.0.0.1:19083 --out-peers 32 --in-peers 64 --enforce-dns-checkpointing --enable-dns-blocklist
ECHO Wait until the Monero daemon shows fully synced before continuing. This can take some time. Type 'status' in other window to check progress. ECHO Wait until the Salvium daemon shows fully synced before continuing. This can take some time. Type 'status' in other window to check progress.
PAUSE PAUSE
start cmd /k %~dp0\p2pool.exe --wallet YOUR_WALLET_ADDRESS --mini start cmd /k %~dp0\p2pool-salvium.exe --wallet YOUR_WALLET_ADDRESS
ECHO Wait until the daemon shows fully synced before continuing. This can take some time. ECHO Wait until the P2Pool shows fully synced before continuing. This can take some time.
PAUSE PAUSE
%~dp0\xmrig.exe -o 127.0.0.1 %~dp0\xmrig.exe -o 127.0.0.1:3333
``` ```
## Build instructions ## Build instructions
@@ -275,8 +211,8 @@ Only 64-bit builds are supported, in particular ARMv7 or older CPUs are not supp
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on Ubuntu 20.04: Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on Ubuntu 20.04:
``` ```
sudo apt update && sudo apt install git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev sudo apt update && sudo apt install git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool cd p2pool-salvium
mkdir build && cd build mkdir build && cd build
cmake .. cmake ..
make -j$(nproc) make -j$(nproc)
@@ -285,27 +221,12 @@ make -j$(nproc)
### [Arch Linux](https://archlinux.org/packages/extra/x86_64/p2pool/) ### [Arch Linux](https://archlinux.org/packages/extra/x86_64/p2pool/)
``` ```
pacman -S p2pool # Build from source using the instructions above
``` git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool-salvium
### [Nix/NixOS](https://nixos.org) mkdir build && cd build
cmake ..
This is a flake only project. So you have to use [nixUnstable with nix flakes](https://nixos.wiki/wiki/Flakes) to build or install P2Pool. make -j$(nproc)
The commands below use the new flake specific reference-format, so be sure to also set `ca-references` in `--experimental-features`.
Because this project has submodules which are not fixed in _nixUnstable_ yet you have to use the `nix/master` branch:
```
nix shell github:nixos/nix/master
```
Run the binary:
```
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1
```
Run the binary with arguments:
```
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 -- --help
``` ```
### Windows ### Windows
@@ -313,23 +234,23 @@ nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 -- --hel
P2Pool binary (Visual Studio Community 2019 build): P2Pool binary (Visual Studio Community 2019 build):
*NOTE: You need to have the "Desktop Development with C++" module installed.* *NOTE: You need to have the "Desktop Development with C++" module installed.*
``` ```
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool cd p2pool-salvium
mkdir build mkdir build
cd build cd build
cmake .. -G "Visual Studio 16 2019" cmake .. -G "Visual Studio 16 2019"
``` ```
then open generated build\p2pool.sln in Visual Studio and build it there then open generated build\p2pool.sln in Visual Studio and build it there
Alternatively, you can select "Clone a repository" within the GUI, then select "Build" from the menu. Alternatively, you can select "Clone a repository" within the GUI, then select "Build" from the menu.
### macOS ### macOS
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on your Mac: Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on your Mac:
``` ```
brew update && brew install git cmake libuv zmq libpgm curl brew update && brew install git cmake libuv zmq libpgm curl
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool cd p2pool-salvium
mkdir build && cd build mkdir build && cd build
cmake .. cmake ..
make -j$(sysctl -n hw.logicalcpu) make -j$(sysctl -n hw.logicalcpu)
@@ -340,8 +261,8 @@ make -j$(sysctl -n hw.logicalcpu)
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on FreeBSD: Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on FreeBSD:
``` ```
pkg install git cmake libuv libzmq4 curl pkg install git cmake libuv libzmq4 curl
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool cd p2pool-salvium
mkdir build && cd build mkdir build && cd build
cmake .. cmake ..
make make
@@ -352,50 +273,21 @@ make
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally in Termux: Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally in Termux:
``` ```
pkg install git build-essential cmake libuv libzmq libcurl pkg install git build-essential cmake libuv libzmq libcurl
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
cd p2pool cd p2pool-salvium
mkdir build && cd build mkdir build && cd build
cmake .. cmake ..
make -j$(nproc) make -j$(nproc)
``` ```
## Reproducible builds
Starting from v4.9, P2Pool uses [reproducible builds](https://en.wikipedia.org/wiki/Reproducible_builds) to create the release binaries. This allows verification that no vulnerabilities or backdoors have been introduced during the compilation process, and that the compiled binaries correspond to the source code.
It removes the need for trust that the author or maintainer of the code is not malicious/compromised, and that the build server is not compromised.
Anyone can run the same build script on the same source code, and get the same release binaries in the end, confirming their authenticity.
Prerequisites: Ubuntu with Docker and Git installed.
Example of building v4.9 release binaries:
```
git clone --branch v4.9 --recursive https://github.com/SChernykh/p2pool
p2pool/scripts/release/build_all.sh v4.9
```
The binaries will be created in `p2pool/scripts/release` folder. First time you run it, it will take up to several hours to first build the Docker image with all the necessary tools in it. Wait until all builds are finished and then run
```
cd p2pool/scripts/release
./gen_sums.sh
```
to generate the hash sums and compare them with the official release's hash sums.
## Donations ## Donations
If you'd like to support further development of Monero P2Pool, you're welcome to send any amount of XMR to the following address: If you'd like to support further development of Salvium P2Pool, you're welcome to send any amount of SAL to the following address:
``` ```
44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg SC1siDDg9o3hBrSHJPBaGPXmJvPcUku8nD84cCT2PNUn61PxtdtBynHBiCaUf7BbNJctmU8LKabiHNE8x5ReYg6RYEhSqRFcL2W
``` ```
Starting from v4.6, P2Pool will also have an ability to merge mine donations for the author. ## Credits
Note that this will not affect your hashrate or payouts in any way. P2Pool will always (100% of the time) keep mining to your configured Monero wallet address, but it might also use the available merge mining capacity to donate to the author. This project is based on [P2Pool](https://github.com/SChernykh/p2pool) by SChernykh (Monero). All credit for the original P2Pool implementation goes to SChernykh and contributors.
If you merge mine yourself, your settings will take priority.
The merge mining donation runs without a donation server - there is no "phoning home" to a server, everything is done through the P2Pool's network in a decentralized way.
To opt out of this, build P2Pool with `-DWITH_MERGE_MINING_DONATION=OFF` in cmake command line. Due to the architecture of the decentralized P2Pool network, your node will still relay donation messages to other nodes even if you opted out (but it will not process them).
+16 -17
View File
@@ -1,26 +1,26 @@
# Monero P2Pool Docker Compose # Salvium P2Pool Docker Compose
Run your own <b>Monero Node + P2Pool + XMRig</b> in Docker Run your own **Salvium Node + P2Pool + XMRig** in Docker
## Instructions ## Instructions
#### Install docker and docker-compose #### Install docker and docker-compose
[Install Docker](https://docs.docker.com/engine/install/) [Install Docker](https://docs.docker.com/engine/install/)
[Install Docker Compose](https://docs.docker.com/compose/install/) [Install Docker Compose](https://docs.docker.com/compose/install/)
Note: The docker compose plugin uses the command "docker compose" while the pip installed command is "docker-compose". Note: The docker compose plugin uses the command "docker compose" while the pip installed command is "docker-compose".
#### Clone the P2Pool project #### Clone the P2Pool project
``` ```
git clone --recursive https://github.com/SChernykh/p2pool git clone --recursive https://github.com/mxhess/p2pool-salvium
``` ```
#### Configure your Monero address for mining rewards #### Configure your Salvium address for mining rewards
``` ```
cd p2pool/docker-compose cd p2pool-salvium/docker-compose
./configure ./configure
``` ```
Make sure to set your own monero **Wallet Address**. The default is to donate mining to P2Pool development. Make sure to set your own Salvium **Wallet Address** (starting with SC1).
#### Build the docker containers #### Build the docker containers
``` ```
@@ -33,25 +33,24 @@ docker compose up
``` ```
#### Optional #### Optional
* Open ports 18080 (Monero p2p port) and 37889 (P2Pool p2p port) or 37888 (P2Pool-mini p2p port) in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine * Open ports 19080 (Salvium p2p port) and 38889 (P2Pool p2p port) or 38888 (P2Pool-mini p2p port) in your firewall to ensure better connectivity. If you're mining from a computer behind NAT (like a router) you could consider forwarding the ports to your local machine
* An XMRig CPU miner is included by default, but you can connect additional miners to this same p2pool node using port 3333 (or alternate if configured) when you set it as "exposed" in the configuration * An XMRig CPU miner is included by default, but you can connect additional miners to this same p2pool node using port 3333 (or alternate if configured) when you set it as "exposed" in the configuration
* Configure your kernel for maximum mining performance: [XMRig RandomX Optimization Guide](https://xmrig.com/docs/miner/randomx-optimization-guide) * Configure your kernel for maximum mining performance: [XMRig RandomX Optimization Guide](https://xmrig.com/docs/miner/randomx-optimization-guide)
* Many optional configurations and customizations are available by running './configure' * Many optional configurations and customizations are available by running './configure'
#### Other usefull commands #### Other useful commands
* You can **run everything in the background** by adding the "-d" argument to the "docker compose up" command: ```docker compose up -d``` * You can **run everything in the background** by adding the "-d" argument to the "docker compose up" command: ```docker compose up -d```
* You can **stop everything** with CTRL-C or ```docker compose down``` * You can **stop everything** with CTRL-C or ```docker compose down```
* You can **update** by building new images with the ```--no-cache``` option. Example: ```docker compose build --no-cache``` or just update Monero with: ```docker compose build --no-cache monero``` followed by ```docker compose up``` * You can **update** by building new images with the ```--no-cache``` option. Example: ```docker compose build --no-cache``` or just update Salvium with: ```docker compose build --no-cache salvium``` followed by ```docker compose up```
* You can see logs when running in the background for with the "docker compose logs" command: ```docker compose logs -f``` * You can see logs when running in the background with the "docker compose logs" command: ```docker compose logs -f```
* You can pause mining with: ```docker compose pause xmrig``` and resume mining with: ```docker compose unpause xmrig``` * You can pause mining with: ```docker compose pause xmrig``` and resume mining with: ```docker compose unpause xmrig```
* You can disable mining with: ```docker compose stop xmrig``` and re-enable mining with: ```docker compose start xmrig``` * You can disable mining with: ```docker compose stop xmrig``` and re-enable mining with: ```docker compose start xmrig```
* You can view your Server Statistics using a web browser if you enabled that feature in the configuration at: http://localhost:3380 (or alternate port as configured)
#### Uninstall #### Uninstall
Change to p2pool/docker-compose directory <br /> Change to p2pool-salvium/docker-compose directory
Stop and remove all containers: ```docker compose down``` <br /> Stop and remove all containers: ```docker compose down```
Remove the p2pool data: ```docker volume rm p2pool``` <br /> Remove the p2pool data: ```docker volume rm p2pool```
Remove the p2pool-mini data: ```docker volume rm p2pool-mini``` <br /> Remove the p2pool-mini data: ```docker volume rm p2pool-mini```
Remove the monero data: ```docker volume rm monero``` Remove the salvium data: ```docker volume rm salvium```
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
description = "Decentralized pool for Monero mining."; description = "Decentralized pool for Salvium mining.";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs"; nixpkgs.url = "github:nixos/nixpkgs";
@@ -13,8 +13,8 @@
in in
rec { rec {
packages = utils.lib.flattenTree { packages = utils.lib.flattenTree {
p2pool = pkgs.stdenv.mkDerivation { p2pool-salvium = pkgs.stdenv.mkDerivation {
pname = "p2pool"; pname = "p2pool-salvium";
version = "0.0.1"; version = "0.0.1";
src = self; src = self;
@@ -35,7 +35,7 @@
}; };
}; };
defaultPackage = packages.p2pool; defaultPackage = packages.p2pool-salvium;
} }
); );
} }
+7 -7
View File
@@ -379,9 +379,9 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
const uint64_t max_reward = base_reward + total_tx_fees; const uint64_t max_reward = base_reward + total_tx_fees;
LOGINFO(3, "base reward = " << log::Gray() << log::XMRAmount(base_reward) << log::NoColor() << LOGINFO(3, "base reward = " << log::Gray() << log::SALAmount(base_reward) << log::NoColor() <<
", " << log::Gray() << m_mempoolTxs.size() << log::NoColor() << ", " << log::Gray() << m_mempoolTxs.size() << log::NoColor() <<
" transactions, fees = " << log::Gray() << log::XMRAmount(total_tx_fees) << log::NoColor() << " transactions, fees = " << log::Gray() << log::SALAmount(total_tx_fees) << log::NoColor() <<
", weight = " << log::Gray() << total_tx_weight); ", weight = " << log::Gray() << total_tx_weight);
if (!SideChain::split_reward(max_reward, m_shares, m_rewards)) { if (!SideChain::split_reward(max_reward, m_shares, m_rewards)) {
@@ -531,11 +531,11 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
} }
#if TEST_MEMPOOL_PICKING_ALGORITHM #if TEST_MEMPOOL_PICKING_ALGORITHM
LOGINFO(3, "final_reward = " << log::XMRAmount(final_reward) << ", transactions = " << m_numTransactionHashes << ", final_weight = " << final_weight); LOGINFO(3, "final_reward = " << log::SALAmount(final_reward) << ", transactions = " << m_numTransactionHashes << ", final_weight = " << final_weight);
uint64_t final_reward2; uint64_t final_reward2;
fill_optimal_knapsack(data, base_reward, miner_tx_weight, final_reward2, final_fees, final_weight); fill_optimal_knapsack(data, base_reward, miner_tx_weight, final_reward2, final_fees, final_weight);
LOGINFO(3, "best_reward = " << log::XMRAmount(final_reward2) << ", transactions = " << m_numTransactionHashes << ", final_weight = " << final_weight); LOGINFO(3, "best_reward = " << log::SALAmount(final_reward2) << ", transactions = " << m_numTransactionHashes << ", final_weight = " << final_weight);
if (final_reward2 < final_reward) { if (final_reward2 < final_reward) {
LOGERR(1, "fill_optimal_knapsack has a bug, found solution is not optimal. Fix it!"); LOGERR(1, "fill_optimal_knapsack has a bug, found solution is not optimal. Fix it!");
} }
@@ -865,7 +865,7 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
} }
LOGINFO(5, "P2POOL FIRST 200 BYTES: " << hex); LOGINFO(5, "P2POOL FIRST 200 BYTES: " << hex);
LOGINFO(3, "final reward = " << log::Gray() << log::XMRAmount(final_reward) << log::NoColor() << LOGINFO(3, "final reward = " << log::Gray() << log::SALAmount(final_reward) << log::NoColor() <<
", weight = " << log::Gray() << final_weight << log::NoColor() << ", weight = " << log::Gray() << final_weight << log::NoColor() <<
", outputs = " << log::Gray() << m_poolBlockTemplate->m_outputAmounts.size() << log::NoColor() << ", outputs = " << log::Gray() << m_poolBlockTemplate->m_outputAmounts.size() << log::NoColor() <<
", " << log::Gray() << m_numTransactionHashes << log::NoColor() << ", " << log::Gray() << m_numTransactionHashes << log::NoColor() <<
@@ -965,7 +965,7 @@ void BlockTemplate::fill_optimal_knapsack(const MinerData& data, uint64_t base_r
void BlockTemplate::select_mempool_transactions(const Mempool& mempool) void BlockTemplate::select_mempool_transactions(const Mempool& mempool)
{ {
// Only choose transactions that were received 5 or more seconds ago, or high fee (>= 0.006 XMR) transactions // Only choose transactions that were received 5 or more seconds ago, or high fee (>= 0.006 SAL) transactions
m_mempoolTxs.clear(); m_mempoolTxs.clear();
const uint64_t cur_time = seconds_since_epoch(); const uint64_t cur_time = seconds_since_epoch();
@@ -1007,7 +1007,7 @@ void BlockTemplate::select_mempool_transactions(const Mempool& mempool)
// Add a rough upper bound estimation of outputs' size. All outputs have <= 5 bytes for each output's reward (< 0.034359738368 XMR per output) // Add a rough upper bound estimation of outputs' size. All outputs have <= 5 bytes for each output's reward (< 0.034359738368 XMR per output)
k += m_shares.size() * (5 /* reward */ + 1 /* tx_type */ + HASH_SIZE /* stealth address */ + 1 /* viewtag */); k += m_shares.size() * (5 /* reward */ + 1 /* tx_type */ + HASH_SIZE /* stealth address */ + 1 /* viewtag */);
// >= 0.034359738368 XMR is required for a 6 byte varint, add 1 byte per each potential 6-byte varint // >= 0.034359738368 SAL is required for a 6 byte varint, add 1 byte per each potential 6-byte varint
{ {
uint64_t r = BASE_BLOCK_REWARD; uint64_t r = BASE_BLOCK_REWARD;
for (const auto& tx : m_mempoolTxs) { for (const auto& tx : m_mempoolTxs) {
+4 -4
View File
@@ -389,16 +389,16 @@ template<> struct log::Stream::Entry<Hashrate>
} }
}; };
struct XMRAmount struct SALAmount
{ {
explicit FORCEINLINE XMRAmount(uint64_t data) : m_data(data) {} explicit FORCEINLINE SALAmount(uint64_t data) : m_data(data) {}
uint64_t m_data; uint64_t m_data;
}; };
template<> struct log::Stream::Entry<XMRAmount> template<> struct log::Stream::Entry<SALAmount>
{ {
static NOINLINE void put(XMRAmount value, Stream* wrapper) static NOINLINE void put(SALAmount value, Stream* wrapper)
{ {
constexpr uint64_t denomination = 100000000ULL; constexpr uint64_t denomination = 100000000ULL;
+3 -3
View File
@@ -442,7 +442,7 @@ void p2pool::handle_tx(TxMempoolData& tx)
", fee = " << log::Gray() << static_cast<double>(tx.fee) / 1e6 << " um"); ", fee = " << log::Gray() << static_cast<double>(tx.fee) / 1e6 << " um");
if (tx.fee >= HIGH_FEE_VALUE) { if (tx.fee >= HIGH_FEE_VALUE) {
LOGINFO(4, "high fee tx received: " << log::LightBlue() << tx.id << log::NoColor() << ", " << log::XMRAmount(tx.fee) << " - updating block template"); LOGINFO(4, "high fee tx received: " << log::LightBlue() << tx.id << log::NoColor() << ", " << log::SALAmount(tx.fee) << " - updating block template");
update_block_template_async(); update_block_template_async();
} }
@@ -661,7 +661,7 @@ void p2pool::handle_chain_main(ChainMain& data, const char* extra, const std::ve
LOGINFO(2, "new main chain block: height = " << log::Gray() << data.height << log::NoColor() << LOGINFO(2, "new main chain block: height = " << log::Gray() << data.height << log::NoColor() <<
", id = " << log::LightBlue() << data.id << log::NoColor() << ", id = " << log::LightBlue() << data.id << log::NoColor() <<
", timestamp = " << log::Gray() << data.timestamp << log::NoColor() << ", timestamp = " << log::Gray() << data.timestamp << log::NoColor() <<
", reward = " << log::Gray() << log::XMRAmount(data.reward)); ", reward = " << log::Gray() << log::SALAmount(data.reward));
if (!merkle_root.empty()) { if (!merkle_root.empty()) {
const PoolBlock* block = side_chain().find_block_by_merkle_root(merkle_root); const PoolBlock* block = side_chain().find_block_by_merkle_root(merkle_root);
@@ -673,7 +673,7 @@ void p2pool::handle_chain_main(ChainMain& data, const char* extra, const std::ve
const uint64_t payout = block->get_payout(w); const uint64_t payout = block->get_payout(w);
if (payout) { if (payout) {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height); LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::SALAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
} }
else { else {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window"); LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
+2 -5
View File
@@ -243,15 +243,12 @@ Params::Params(int argc, char* const argv[])
} }
#endif #endif
/*
if ((strcmp(argv[i], "--merge-mine") == 0) && (i + 2 < argc)) { if ((strcmp(argv[i], "--merge-mine") == 0) && (i + 2 < argc)) {
m_mergeMiningHosts.emplace_back(argv[i + 1], argv[i + 2]); LOGWARN(0, "Merge mining is not supported in Salvium P2Pool. --merge-mine flag ignored.");
i += 2; i += 2; // Skip the two arguments (host and wallet)
ok = true; ok = true;
} }
*/
#ifdef WITH_TLS #ifdef WITH_TLS
if ((strcmp(argv[i], "--tls-cert") == 0) && (i + 1 < argc)) { if ((strcmp(argv[i], "--tls-cert") == 0) && (i + 1 < argc)) {
m_tlsCert = argv[++i]; m_tlsCert = argv[++i];
+2 -2
View File
@@ -733,7 +733,7 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
const uint64_t payout = block.get_payout(w); const uint64_t payout = block.get_payout(w);
if (payout) { if (payout) {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << m_pool->params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height); LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << m_pool->params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::SALAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
} }
else { else {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << m_pool->params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window"); LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << m_pool->params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
@@ -1236,7 +1236,7 @@ void SideChain::print_status(bool obtain_sidechain_lock) const
"\nYour wallet address = " << m_pool->params().m_displayWallet << "\nYour wallet address = " << m_pool->params().m_displayWallet <<
"\nYour shares = " << our_blocks_in_window_total << " blocks (+" << our_uncles_in_window_total << " uncles, " << our_orphans << " orphans)" "\nYour shares = " << our_blocks_in_window_total << " blocks (+" << our_uncles_in_window_total << " uncles, " << our_orphans << " orphans)"
<< our_blocks_in_window_chart << our_uncles_in_window_chart << << our_blocks_in_window_chart << our_uncles_in_window_chart <<
"\nBlock reward share = " << block_share << "% (" << log::XMRAmount(your_reward) << ')' << "\nBlock reward share = " << block_share << "% (" << log::SALAmount(your_reward) << ')' <<
"\nAnchor point = " << get_latest_checkpoint_height() << "\nAnchor point = " << get_latest_checkpoint_height() <<
"\nChain health = " << m_externalBlockFailures << " consecutive failures" << (m_recoveryMode.load() ? " [RECOVERY MODE]" : "") "\nChain health = " << m_externalBlockFailures << " consecutive failures" << (m_recoveryMode.load() ? " [RECOVERY MODE]" : "")
); );