PoP Miner Rewards

From Veriblock Wiki
Revision as of 14:52, 16 August 2018 by TimStall (talk | contribs) (→‎TLDR)
Jump to: navigation, search

See: HowTo_run_PoP_Miner

TLDR

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 tBTC 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 tBTC needed for that reward (as this is due to constantly changing market forces and issues with the tBTC 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 tBTC 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 testnet Bitcoin transaction, submitting it to the tBTC network, and waiting for it to be included in a tBTC block
  2. Submitting a "Proof-of-Proof" (PoP) transaction to NodeCore that proves your Bitcoin transaction was included in the tBTC 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 byte) 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, multiply 'bitcoin.fee.perbyte' x 285. Your bitcoin.fee.max value must be at least this much.
#Measured in satoshis
bitcoin.fee.max=300000

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

What should the tBTC Tx fee be?

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

There is a spectrum of fees:

tBTC Fee/Byte Spend tBTC? 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 tBTC 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 tBTC fee usually means the BTC transaction is accepted more quickly, which leads to a higher PoP reward


Check what the recent tBTC fees are on a blockchain explorer. Take for example the following PoP transaction on tBTC: https://www.blocktrail.com/tBTC/tx/8dbba547dd15907c5eb4757bfa061c7a62b900a020557fde60b19b6e2967cf7d. The Fee / KB is 0.00498592, so divide by 1000 to get the fee per byte: 0.000000499 (or 499 testnet-satoshis per byte). The miner who sent this PoP transaction had the setting 'bitcoin.fee.perbyte = 499' or 'bitcoin.fee.perbyte = 500' in their ncpop.properties file. Consider increasing or decreasing that value given your risk threshold and your observations of other PoP transactions on the tBTC network and their corresponding per-byte 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 tBTC 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 tBTC's transaction's inclusion. The BLOCKTRAIL tBTC 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 tBTC 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.

Is my PoP Transaction on tBTC testnet?

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 tBTC block explorer, 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 tBTC is too low, then the tBTC 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.


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 tBTC network (due to low fee and/or too-fast PoP mining rate), and the tBTC network is temporarily rejecting any additional PoP transactions from you until some of your previous PoP transactions on tBTC 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 tBTC being exploited (which resets the mining difficulty to 1 and results in several orders of magnitude more tBTC blocks per unit time than expected).

Troubleshooting steps: Check a popular tBTC 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.