PoP Miner Rewards

From VeriBlock Wiki
Jump to: navigation, search

See: HowTo_run_PoP_Miner, PoP_Reward_Summary

TLDR

See: PoP_Reward_Summary for general guidelines on how PoP rewards work. This article is more technical about getting rewards with the PoP Miner.

Here's a good process for anyone who wants to PoP Mine:

  1. Get a syncing version of NodeCore first (obviously a big deal, hence we're very focused on the low-memory version)
  2. Run the PoP miner with a high-enough fee, checking the BTC block explorer. You want "Time until confirm" to be < 30 minutes.
    1. Run a single instance
    2. First try the "mine" command before automating with a cron job
    3. Try a low frequency like mining every 5 minutes (rapid mining may cause a deadlock on the local miner)
  3. Let PoP run for 5 hours (it takes time for 500 tVBK blocks)
  4. Check viewrecentrewards

If after that, still no reward --> please send log files

Overview

This is a high-level overview of how PoP rewards work. This page answers "if you do X, you have a good chance of getting greater-than-zero reward." It does not try to predict exactly what the reward would be, or the exact BTC needed for that reward (as this is due to constantly changing market forces and issues with the BTC difficulty adjustment algorithm that appear roughly once a month). The exact mechanics are not linear, and there is some luck involved (particularly during abnormal conditions on the BTC network, which happen occasionally).

First, read HowTo_run_PoP_Miner to see the basic operations of the PoP Miner.

PoP Mining works by:

  1. Encapsulating an "endorsement" of a VeriBlock block in a Bitcoin transaction, submitting it to the BTC network, and waiting for it to be included in a BTC block
  2. Submitting a "Proof-of-Proof" (PoP) transaction to NodeCore that proves your Bitcoin transaction was included in the BTC blockchain
  3. Receiving a reward for your PoP transaction, which is paid out 500 blocks after the VeriBlock block you endorsed

There are several variables involved in a successful mine and reward payout:

  • The most important factor is the timeliness of your Bitcoin transaction's inclusion in the Bitcoin blockchain. A Bitcoin transaction that is included in the first possible block is always rewarded the best. The reward tails off sharply for inclusion in subsequent blocks and eventually has no value at all.
  • The control mechanism the miner has over this timeliness factor is the Bitcoin transaction fee. The higher the fee (per kb) paid, the more likely the transaction will be included sooner.
  • The PoP reward is for the block that was endorsed, which is generally the most recent block on the VeriBlock network at the time when you began a PoP mining cycle (not the block the proof-of-proof transaction appears in). The total PoP reward is split between all the endorsements. Therefore, the more endorsements of a given block, the lower the reward per endorsement will be.

Make sure to set your ncpop.properties file (these are example numbers, actual numbers will vary), and restart the PoP miner after saving your changes:

#A safety stop-gap. This is the absolute maximum total fee you are willing to pay for a Bitcoin transaction
#An average PoP transaction is ~285 bytes or 0.285 kb, multiply 'bitcoin.fee.perkb' x 0.285. Your bitcoin.fee.max value must be at least this much.
#Measured in satoshis
bitcoin.fee.max=8000

#Something high enough to win (increase this if your BTC transactions are appearing "unconfirmed" on a block explorer after a new BTC block occurs)
#Measured in satoshis
bitcoin.fee.perkb=20000

What should the BTC Tx fee be?

There is not an exact answer. Some game theory and risk is involved, and as other Bitcoin transactions increase their per-kb fee, the per-kb fee you will need to pay to compete for inclusion in the earliest block will increase accordingly. Also note that a high BTC fee does not guarantee inclusion in the next BTC block; random factors like a BTC miner's refresh time, network latency, etc. can also play a small role.

There is a spectrum of fees:

BTC Fee/Byte Spend BTC? Win VBK? Comment
Too low No No Nothing happens: BTC transaction doesn't get on BTC blockchain, fee not spent, no PoP earned.
Danger Zone Yes No Spend BTC but no PoP reward! If BTC transaction is too delayed then there is no PoP reward.
Border line Yes Yes Fee may or may not be high enough to make it into first Bitcoin block, but does make it into a subsequent block. PoP reward is reduced.
Sufficient fee Yes Yes A higher BTC fee usually means the BTC transaction is accepted more quickly, which leads to a higher PoP reward


Check what the recent BTC fees are on a blockchain explorer. Take for example the following PoP transaction on tBTC (testnet BTC): https://www.blocktrail.com/tBTC/tx/8dbba547dd15907c5eb4757bfa061c7a62b900a020557fde60b19b6e2967cf7d. The Fee / KB is 0.00498592. The miner who sent this PoP transaction had the setting 'bitcoin.fee.perkb= 498592' in their ncpop.properties file. Consider increasing or decreasing that value given your risk threshold and your observations of other PoP transactions on the network and their corresponding per-kb fees.

https://www.blocktrail.com/tBTC

Popreward 1.png

Common reward questions

How can I see my reward?

In the PoP Miner, run the command viewrecentrewards

Also run listoperations to view the current running operations and their status.

I mined PoP, but saw no reward

PoP is rewarded 500 blocks after the endorsed block. At an average of 30 seconds per block, this is about 4.5 hours. So first understand that rewards won't come for ~4.5 hours after your mine operation.

  1. Make sure that your NodeCore instance is in sync with the latest block --> you should be able to run NC_CLI getinfo on your NodeCore instance.
  2. Ensure that a BTC was submitted by the miner (if no transaction was submitted, there are likely other factors to address)
  3. Make sure that your Bitcoin transaction has actually been confirmed in a block
  4. Try to determine the timeliness of your BTC's transaction's inclusion. The BLOCKTRAIL BTC explorer, for example, includes a field Time until confirmed on the transaction detail that is a helpful gauge of timeliness.
  5. If you are seeing PoP mining failures, check your PoP miner logs for suspect lines, see: #Log Troubleshooting
  6. If still not seeing a reward, jump on our telegram channel or submit a github issue.

My transaction is on BTC blockchain, but I got no reward

Even if the PoP Transaction is on BTC, it may be in the "danger zone" where it took too long to be rewarded.

If the "Time until confirmed" is > 20 minutes, there is risk of not getting rewarded.

The way to increase chance of reward is to increase BTC transaction fee such that it is in an earlier block.

Popreward 3.png

The status shows "Done", but I did not see a reward yet

"Done" is a good sign, it means it made it through the mining life cycle.

Similar to PoW mining, "Done" means there is nothing left for the Miner to do.

Check the PoP command: viewrecentrewards (HowTo_run_PoP_Miner#viewrecentrewards) to see reward status at this point.

A reward could be coming, or it is possible due to other reasons listed, that the mining operation finished without reward.

I still do not see a reward

If everything else is covered, then this should be a rare situation.

Do not run multiple instances of the same executable

Do not mine too frequently

If the same log shows two mining operations kicked off at the exact same time - something is probably wrong - try running a single instance with one 'mine' command.

2018-08-15 10:00:00 INFO [miner] ... [aaaa7e51] Mining operation is now: RUNNING
2018-08-15 10:00:00 INFO [miner] ... [bbbb85c1] Mining operation is now: RUNNING

Is my PoP Transaction on the BTC network?

If you PoP mine, you should relatively quickly (within minutes) see an output like so:

INFO: Received pending tx '9268a8e9890993a81ac035c6ea8f69d0ad059b09078a73a7b4bb86514a5858aa', pending balance: '2.906723 BTC'
...
MINER: [2aaef35f] Submitted Bitcoin transaction: 9268a8e9890993a81ac035c6ea8f69d0ad059b09078a73a7b4bb86514a5858aa
MINER: [2aaef35f] Mining operation current action: Waiting for transaction to be included in Bitcoin block

And you should be able to see that on any BTC block explorer (this example uses BTC testnet), such as:

https://www.blocktrail.com/tBTC/tx/9268a8e9890993a81ac035c6ea8f69d0ad059b09078a73a7b4bb86514a5858aa

Who is winning PoP?

This is publicly available from the Explorer.

Looking at the "PoP payouts for this block protecting other blocks" section, one can see the addresses and block for which rewards were paid out:

Popreward 2.png

Avoid these common problems

  • If the BTC is too low, then the BTC transaction will not be accepted, and there will be no PoP reward
  • If the PoP Miner is not connected to a synced version of NodeCore, then the PoP transaction is not guaranteed to go through
  • Submitting a chain of 20+ unconfirmed transactions. As each new Bitcoin transaction consumes an unspent transaction output, you can only submit so many in a row without confirmation before peers reject the transactions outright. This manifests generally in two scenarios:
    • Submit too many transactions inside a Bitcoin block interval. If a normal Bitcoin block time is 10 minutes, and you submit more than 20+ transactions in that window, you'll be unable to continue submitting new transactions until some of your transactions eventually confirm.
    • Submit transactions with too low a fee that they just are not getting confirmed and a backlog accumulates. Again, if you reach 20+ transactions without confirming, you'll be unable to submit further.


Troubleshooting

Standard Troubleshooting Process

If you still cannot see PoP rewards, please follow these steps:

1. Run single instance of PoP Miner
2. Run single mine command
3. Give it a high BTC fee (high enough to ensure it's on BTC block explorer with confirm time < 10 minutes)
4. Is there a PoP transaction ID?
5. Does it go through all 9 phases listed here (note the whole process may take 5 hours): https://wiki.veriblock.org/index.php?title=HowTo_run_PoP_Miner#PoP_Mining_Lifecycle. (If not, what was the last phase)?
6. Can you send the specific BTC transaction ID and PoP Id, along with the PoP Log file?


Log Troubleshooting

The PoP miner produces two log files. bitcoinj.nodecore-pop.log logs the behavior of BitcoinJ--the underlying SPV-level wallet library that the PoP miner uses to communicate with the Bitcoin network. veriblock.nodecore-pop.log logs the behavior of the PoP miner itself--activities like running a new mining command, statuses returned from BitcoinJ about the state of a transaction, info about connectivity to NodeCore, etc.

If you are not receiving PoP rewards and have already set your fees at market-competitive rates as explained above, look for common errors.


bitcoinj.nodecore-pop.log

Received Reject: tx (txid) for reason 'too-long-mempool-chain' (64)

Explanation: You have performed too many PoP transactions (generally >20) in a row without any getting confirmed by the BTC network (due to low fee and/or too-fast PoP mining rate), and the BTC network is temporarily rejecting any additional PoP transactions from you until some of your previous PoP transactions on BTC are confirmed.

Troubleshooting steps: Try increasing your PoP miner's configured fee (see Overview for an example of how to do so) and/or decreasing the frequency at which you PoP mine (generally not recommended more frequently than once every 3 minutes per PoP miner instance)


Waiting for 10 peers required for broadcast, we have 7 ...

Explanation: The BitcoinJ library is having difficulty connecting to enough available peers to confirm that your PoP transactions are properly propagating across the network

Troubleshooting steps: Try lowering the aggression of any firewall between the PoP miner and the internet, check the BitcoinJ logs for any indication of repeated connection failures to peers, and try restarting the PoP miner.


Did not find block (block hash) in endorsed block context headers

Explanation: BitcoinJ is having difficulty in getting all of the requisite context block headers to allow the VeriBlock blockchain to validate the PoP transaction in question. This is usually the result of the difficulty bomb in BTC being exploited (which resets the mining difficulty to 1 and results in several orders of magnitude more BTC blocks per unit time than expected).

Troubleshooting steps: Check a popular BTC block explorer like [1] and look at the block times. If blocks are coming in at a rate faster than roughly once every minute, then the extreme block time is likely the culprit (and you may need to wait a day for it to adjust if several subsequent PoP mining operations also fail). If blocks are coming in at a normal pace, then try closing the PoP miner, deleting the bitcoin-pop-testnet.spvchain file, restarting the PoP miner, and attempting to mine again.

Appendix

Useful sites for PoP Rewards

https://bitcoinfees.earn.com/ --> "Predicting Bitcoin Fees for Transactions"