@ -83,11 +83,13 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -83,11 +83,13 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
block . clear ( ) ;
if ( blocknum = = 30 ) {
// At this point we should need to combine 5 buckets to get enough data points
// So estimateFee(1) should fail and estimateFee(2 ) should return somewhere around
// 8*baserate
// So estimateFee(1,2,3) should fail and estimateFee(4 ) should return somewhere around
// 8*baserate. estimateFee(4) %'s are 100,100,100,100,90 = average 98%
BOOST_CHECK ( mpool . estimateFee ( 1 ) = = CFeeRate ( 0 ) ) ;
BOOST_CHECK ( mpool . estimateFee ( 2 ) . GetFeePerK ( ) < 8 * baseRate . GetFeePerK ( ) + deltaFee ) ;
BOOST_CHECK ( mpool . estimateFee ( 2 ) . GetFeePerK ( ) > 8 * baseRate . GetFeePerK ( ) - deltaFee ) ;
BOOST_CHECK ( mpool . estimateFee ( 2 ) = = CFeeRate ( 0 ) ) ;
BOOST_CHECK ( mpool . estimateFee ( 3 ) = = CFeeRate ( 0 ) ) ;
BOOST_CHECK ( mpool . estimateFee ( 4 ) . GetFeePerK ( ) < 8 * baseRate . GetFeePerK ( ) + deltaFee ) ;
BOOST_CHECK ( mpool . estimateFee ( 4 ) . GetFeePerK ( ) > 8 * baseRate . GetFeePerK ( ) - deltaFee ) ;
}
}
@ -96,9 +98,9 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -96,9 +98,9 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
// Highest feerate is 10*baseRate and gets in all blocks,
// second highest feerate is 9*baseRate and gets in 9/10 blocks = 90%,
// third highest feerate is 8*base rate, and gets in 8/10 blocks = 80%,
// so estimateFee(1) should return 9 *baseRate.
// Third highest feerate has 9 0% chance of being included by 2 blocks,
// so estimateFee(2) should return 8 *baseRate etc...
// so estimateFee(1) should return 10 *baseRate.
// Second highest feerate has 10 0% chance of being included by 2 blocks,
// so estimateFee(2) should return 9 *baseRate etc...
for ( int i = 1 ; i < 10 ; i + + ) {
origFeeEst . push_back ( mpool . estimateFee ( i ) . GetFeePerK ( ) ) ;
origPriEst . push_back ( mpool . estimatePriority ( i ) ) ;
@ -106,10 +108,11 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -106,10 +108,11 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
BOOST_CHECK ( origFeeEst [ i - 1 ] < = origFeeEst [ i - 2 ] ) ;
BOOST_CHECK ( origPriEst [ i - 1 ] < = origPriEst [ i - 2 ] ) ;
}
BOOST_CHECK ( origFeeEst [ i - 1 ] < ( 10 - i ) * baseRate . GetFeePerK ( ) + deltaFee ) ;
BOOST_CHECK ( origFeeEst [ i - 1 ] > ( 10 - i ) * baseRate . GetFeePerK ( ) - deltaFee ) ;
BOOST_CHECK ( origPriEst [ i - 1 ] < pow ( 10 , 10 - i ) * basepri + deltaPri ) ;
BOOST_CHECK ( origPriEst [ i - 1 ] > pow ( 10 , 10 - i ) * basepri - deltaPri ) ;
int mult = 11 - i ;
BOOST_CHECK ( origFeeEst [ i - 1 ] < mult * baseRate . GetFeePerK ( ) + deltaFee ) ;
BOOST_CHECK ( origFeeEst [ i - 1 ] > mult * baseRate . GetFeePerK ( ) - deltaFee ) ;
BOOST_CHECK ( origPriEst [ i - 1 ] < pow ( 10 , mult ) * basepri + deltaPri ) ;
BOOST_CHECK ( origPriEst [ i - 1 ] > pow ( 10 , mult ) * basepri - deltaPri ) ;
}
// Mine 50 more blocks with no transactions happening, estimates shouldn't change
@ -140,8 +143,8 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -140,8 +143,8 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
}
for ( int i = 1 ; i < 10 ; i + + ) {
BOOST_CHECK ( mpool . estimateFee ( i ) . GetFeePerK ( ) > origFeeEst [ i - 1 ] - deltaFee ) ;
BOOST_CHECK ( mpool . estimatePriority ( i ) > origPriEst [ i - 1 ] - deltaPri ) ;
BOOST_CHECK ( mpool . estimateFee ( i ) = = CFeeRate ( 0 ) | | mpool . estimateFee ( i ) . GetFeePerK ( ) > origFeeEst [ i - 1 ] - deltaFee ) ;
BOOST_CHECK ( mpool . estimatePriority ( i ) = = - 1 | | mpool . estimatePriority ( i ) > origPriEst [ i - 1 ] - deltaPri ) ;
}
// Mine all those transactions
@ -161,9 +164,9 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -161,9 +164,9 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
BOOST_CHECK ( mpool . estimatePriority ( i ) > origPriEst [ i - 1 ] - deltaPri ) ;
}
// Mine 1 00 more blocks where everything is mined every block
// Estimates should be below original estimates (not possible for last estimate)
while ( blocknum < 3 65) {
// Mine 2 00 more blocks where everything is mined every block
// Estimates should be below original estimates
while ( blocknum < 4 65) {
for ( int j = 0 ; j < 10 ; j + + ) { // For each fee/pri multiple
for ( int k = 0 ; k < 5 ; k + + ) { // add 4 fee txs for every priority tx
tx . vin [ 0 ] . prevout . n = 10000 * blocknum + 100 * j + k ;
@ -177,7 +180,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
@@ -177,7 +180,7 @@ BOOST_AUTO_TEST_CASE(BlockPolicyEstimates)
mpool . removeForBlock ( block , + + blocknum , dummyConflicted ) ;
block . clear ( ) ;
}
for ( int i = 1 ; i < 9 ; i + + ) {
for ( int i = 1 ; i < 10 ; i + + ) {
BOOST_CHECK ( mpool . estimateFee ( i ) . GetFeePerK ( ) < origFeeEst [ i - 1 ] - deltaFee ) ;
BOOST_CHECK ( mpool . estimatePriority ( i ) < origPriEst [ i - 1 ] - deltaPri ) ;
}