Welcome to the dedicated testing thread for Proof-of-Giving II (POG).POG is a mining algorithm based on POW, POBH, Tithing to the foundation, an integrated mining pool, and some elements of POS.
Please see the following technical description:
https://wiki.biblepay.org/Proof-of-Giving-IIAnd the summary for beginners:
https://wiki.biblepay.org/Proof-of-Giving-for-BeginnersIn summary, POG is integrated in the wallet, it is a mixed mining pool with 20% of the reward to the miner/80% reward split between the integrated pool recipients. The pool participants are based on those who tithed to the foundation (helping our monthly orphan sponsorships) in the last 24 hours. The tithe_weight for each user drives the pool block reward.
The Proof-of-giving difficulty level will be available in the wallet.
It will display:
min_coin_age: This is the minimum age in days a coin is eligibile for tithing.
min_coin_amount: This is the minimum coin amount eligibile for tithing.
max_tithe_amount: This is the maximum allowed tithe amount.
If you meet the conditions you may tithe and become part of the mining pool.
All of the "sowers" (those who tithed) will be rewarded 12 times per day (once every 16 blocks).
After paying the "reaper" (the block solving miner) 20% of the block reward, the remaining 80% will be split among the sowers.
POOL ROUND MECHANICS:
The POG pool is always 205 blocks wide (24 hours), meaning the tithe_weight's in the pool span from the current block back 205 blocks before the current block.
As an example, if sower A tithed at 11 AM yesterday, and sower B tithed at 10 AM today, and the current time is 10:30AM, these two sowers are in the pool. However, a user who tithed 26 hours ago is NOT in todays pool.
As each block passes, the pool will pay 1/16th of the recipients based on the individual sowers Tier. Each tithe is inducted into a tier based on the block # it was Tithed in (not according to its amount).
So what you can expect as far as rewards: You will receive 12 rewards per day if you have active tithes in the pool. Once the tithe expires, you no longer have tithe_weight.
AUTOMATIC TITHING:
The wallet is set up to automatically tithe for you once every 4 hours. The wallet will scan your available coins sorted by age and amount, and use the most applicable SINGLE COIN for a tithe automatically. It will automatically send the Maximum amount possible.
MANUAL TITHING:
Method 1 - QT: To tithe manually, go to the QT send money page, and click Donate to foundation. At this point the POG difficulty parameters will appear on the screen. Select the appropriate tithe amount and click send. If the coins are not old enough or high enough in value, an error will appear.
Method 2 - RPC: From the RPC console, type 'exec tithe amount'.
If the tithe fails, a reason will be given.
CHECKING POG DIFFICULTY:
To see the difficulty parameters, type 'getmininginfo'.
CHECKING HISTORICAL POG GIVING:
Type 'showblock blocknumber'.
See 24_hour_tithes, pog_difficulty, min_coin_age, min_coin_amt, max_tithe_amount.
The historical 24_hour_tithes will show the amount tithed in the last 24 hours.
The block_tithes will show how many legal tithes were inducted from that block.
CHECKING THE POOL:
Type 'exec pogpool'
This report will show the actual live POG POOL and everything in it.
In this pool, we have 16 payment tiers containing an even distribution of sowers (based on each individuals tithe_height).
This will show us the count and sum of tithes per tier.
Note that if a sower's nickname is available, it will be listed here in place of the address.
(In the near future, we will summarize this list in a nicer way, this is basically a verbose list for debugging purposes).
You can also see the tithe totals, and at the bottom, the sum of your own personal tithes.
HOW TO SET NICKNAME:
In your biblepay.conf file set the key 'nickname=my_nickname' and restart the wallet.
WALLET VERSION:
Upgrade to 1.1.6.2+. Start with '-testnet=1' flag.
RPC COMMANDS:
exec tithe tithe_amount min_coin_age min_coin_amount:
This command searches the wallet for coins older than min_coin_age and of greater value than min_coin_amount and tithes that single coin in an amount of "tithe_amount".
exec getdimensionalbalance min_coin_age min_coin_amount
This command scans the local wallet for coins older than min_coin_age and min_coin_amount, and creates a report based on age and value. You can use this command for debug purposes in testnet to find coins that may be applicable for manual tithing. (And for debugging current tithe levels).
exec pogpool:
Use this command to see the current payment tiers (0-15).
You will see the user nickname, public receive address, tithe amount, tier, tithe_height.
Then you will see the total tithes per tier.
Then finally you will see the Highest tithe and the amount of personal tithes you have contributed.
exec bankroll quantity denomination:
This command allows you to generate 'quantity' of tithing BBP notes of 'denomination'. Then you can let them age, and use them for tithing later.
Example: exec bankroll 50 5000, this command will spend 250,000 bbp (back to yourself), and you will receive 50 quantity of 5000 bbp notes. At this point they will age, and they can be used for tithing. Note: We mark the bank notes with a 1millibbp suffix so that we can modify podc_update to skip spending these in the future.
TEST CASES:
1. Verify that once a tithe is sent to the foundation, it can be seen in a historical block. You may do this by sending a tithe, waiting for a confirm, then typing: exec showblock blocknumber. The fields near the bottom labeled pog_ will show if the tithe has been included in the block.
2. Verify that sending more than one tithe in one 24 hour period results in increased tithe_weight for you. And increased total tithes in the pool.
3. Verify the integrity of the pool. Audit the pool and reconcile the pool.
4. Verify the difficulty level parameters per block and per 24 hour period. Ensure difficulty algorithm is oscillating perfectly and properly according to the tithe history.
5. Scan debug.log for any trace of "POG Recipients Invalid". This error should not be in the log.