@ -64,9 +64,30 @@ uint64_t komodo_moneysupply(int32_t height)
else return ( COIN * 100000000 + ( height - 1 ) * 3 + komodo_earned_interest ( height , - 1 ) ) ;
}
uint64_t _komodo_interestnew ( uint64_t nValue , uint32_t nLockTime , uint32_t tiptime )
{
int32_t minutes ; uint64_t interest = 0 ;
if ( ( minutes = ( tiptime - nLockTime ) / 60 ) > = 60 )
{
if ( minutes > 365 * 24 * 60 )
minutes = 365 * 24 * 60 ;
minutes - = 59 ;
interest = ( ( nValue / 10512000 ) * minutes ) ;
}
return ( interest ) ;
}
uint64_t komodo_interestnew ( int32_t txheight , uint64_t nValue , uint32_t nLockTime , uint32_t tiptime )
{
uint64_t interest = 0 ;
if ( komodo_moneysupply ( txheight ) < MAX_MONEY & & nLockTime > = LOCKTIME_THRESHOLD & & tiptime ! = 0 & & nLockTime < tiptime & & nValue > = 10 * COIN )
interest = _komodo_interestnew ( nValue , nLockTime , tiptime ) ;
return ( interest ) ;
}
uint64_t komodo_interest ( int32_t txheight , uint64_t nValue , uint32_t nLockTime , uint32_t tiptime )
{
int32_t minutes , exception ; uint64_t numerator , denominator , interest = 0 ; uint32_t activation ;
int32_t minutes , exception ; uint64_t interestnew , numerator , denominator , interest = 0 ; uint32_t activation ;
activation = 1491350400 ; // 1491350400 5th April
if ( ASSETCHAINS_SYMBOL [ 0 ] ! = 0 )
return ( 0 ) ;
@ -111,11 +132,15 @@ uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uin
interest = ( numerator / denominator ) ;
else interest = ( numerator * minutes ) / ( ( uint64_t ) 365 * 24 * 60 ) ;
}
else
else if ( txheight < 1000000 )
{
numerator = ( nValue * KOMODO_INTEREST ) ;
interest = ( numerator / denominator ) / COIN ;
interestnew = _komodo_interestnew ( nValue , nLockTime , tiptime ) ;
//if ( interest != interestnew )
printf ( " path0 current interest %.8f vs new %.8f for ht.%d %.8f locktime.%u tiptime.%u \n " , dstr ( interest ) , dstr ( interestnew ) , txheight , dstr ( nValue ) , nLockTime , tiptime ) ;
}
else interest = _komodo_interestnew ( nValue , nLockTime , tiptime ) ;
}
else
{
@ -132,12 +157,16 @@ uint64_t komodo_interest(int32_t txheight,uint64_t nValue,uint32_t nLockTime,uin
interest = ( numerator / denominator ) / COIN ;
else interest = ( ( numerator * minutes ) / ( ( uint64_t ) 365 * 24 * 60 ) ) / COIN ;
}
else
else if ( txheight < 1000000 )
{
numerator = ( nValue / 20 ) ; // assumes 5%!
interest = ( ( numerator * minutes ) / ( ( uint64_t ) 365 * 24 * 60 ) ) ;
//fprintf(stderr,"interest %llu %.8f <- numerator.%llu minutes.%d\n",(long long)interest,(double)interest/COIN,(long long)numerator,(int32_t)minutes);
interestnew = _komodo_interestnew ( nValue , nLockTime , tiptime ) ;
if ( interest ! = interestnew )
printf ( " path1 current interest %.8f vs new %.8f for ht.%d %.8f locktime.%u tiptime.%u \n " , dstr ( interest ) , dstr ( interestnew ) , txheight , dstr ( nValue ) , nLockTime , tiptime ) ;
}
else interest = _komodo_interestnew ( nValue , nLockTime , tiptime ) ;
}
if ( 0 & & numerator = = ( nValue * KOMODO_INTEREST ) )
fprintf ( stderr , " komodo_interest.%d %lld %.8f nLockTime.%u tiptime.%u minutes.%d interest %lld %.8f (%llu / %llu) prod.%llu \n " , txheight , ( long long ) nValue , ( double ) nValue / COIN , nLockTime , tiptime , minutes , ( long long ) interest , ( double ) interest / COIN , ( long long ) numerator , ( long long ) denominator , ( long long ) ( numerator * minutes ) ) ;