@@ -17,9 +17,7 @@ use coverage_point_calculator::{
1717use file_store:: traits:: TimestampEncode ;
1818use futures:: { Stream , StreamExt } ;
1919use helium_crypto:: PublicKeyBinary ;
20- use helium_proto:: services:: {
21- poc_mobile as proto,
22- } ;
20+ use helium_proto:: services:: poc_mobile as proto;
2321use mobile_config:: { boosted_hex_info:: BoostedHexes , sub_dao_epoch_reward_info:: EpochRewardInfo } ;
2422use radio_reward_v2:: { RadioRewardV2Ext , ToProtoDecimal } ;
2523use rust_decimal:: prelude:: * ;
@@ -546,12 +544,10 @@ pub fn get_scheduled_tokens_for_poc(total_emission_pool: Decimal) -> Decimal {
546544 total_emission_pool * poc_percent
547545}
548546
549-
550547pub fn get_scheduled_tokens_for_service_providers ( total_emission_pool : Decimal ) -> Decimal {
551548 total_emission_pool * SERVICE_PROVIDER_PERCENT
552549}
553550
554-
555551fn eligible_for_coverage_map (
556552 oracle_boosting_status : OracleBoostingStatus ,
557553 speedtests : & [ Speedtest ] ,
@@ -590,18 +586,13 @@ mod test {
590586 coverage:: { CoveredHexStream , HexCoverage } ,
591587 data_session:: { self , HotspotDataSession , HotspotReward } ,
592588 heartbeats:: { HeartbeatReward , KeyType , OwnedKeyType } ,
593- service_provider:: {
594- self , ServiceProviderDCSessions , ServiceProviderPromotions , ServiceProviderRewardInfos ,
595- } ,
596589 speedtests:: Speedtest ,
597590 speedtests_average:: SpeedtestAverage ,
598591 } ;
599592 use chrono:: { Duration , Utc } ;
600593 use file_store_oracles:: speedtest:: CellSpeedtest ;
601594 use futures:: stream:: { self , BoxStream } ;
602- use helium_proto:: {
603- services:: poc_mobile:: mobile_reward_share:: Reward as MobileReward , ServiceProvider ,
604- } ;
595+ use helium_proto:: services:: poc_mobile:: mobile_reward_share:: Reward as MobileReward ;
605596 use hextree:: Cell ;
606597 use solana:: Token ;
607598 use std:: collections:: HashMap ;
@@ -647,11 +638,6 @@ mod test {
647638 assert_eq ! ( dc_to_hnt_bones( Decimal :: from( 2 ) , dec!( 1.0 ) ) , dec!( 0.00002 ) ) ;
648639 }
649640
650- fn hnt_bones_to_dc ( hnt_bones_amount : Decimal , hnt_bones_price : Decimal ) -> Decimal {
651- let hnt_value = hnt_bones_amount * hnt_bones_price;
652- ( hnt_value / DC_USD_PRICE ) . round_dp_with_strategy ( 0 , RoundingStrategy :: ToNegativeInfinity )
653- }
654-
655641 fn rewards_info_1_hour ( ) -> EpochRewardInfo {
656642 let now = Utc :: now ( ) ;
657643 let epoch_duration = Duration :: hours ( 1 ) ;
@@ -688,14 +674,12 @@ mod test {
688674 assert_eq ! ( dec!( 70 ) , v, "poc gets 70%" ) ;
689675 }
690676
691-
692677 #[ test]
693678 fn test_service_provider_scheduled_tokens ( ) {
694679 let v = get_scheduled_tokens_for_service_providers ( dec ! ( 100 ) ) ;
695680 assert_eq ! ( dec!( 24 ) , v, "service providers get 24%" ) ;
696681 }
697682
698-
699683 #[ test]
700684 fn test_price_conversion ( ) {
701685 let token = Token :: Hnt ;
@@ -1511,178 +1495,4 @@ mod test {
15111495 . into_rewards( reward_shares, & rewards_info. epoch_period)
15121496 . is_none( ) ) ;
15131497 }
1514-
1515- #[ test]
1516- fn service_provider_reward_amounts ( ) {
1517- let hnt_bone_price = dec ! ( 0.00001 ) ;
1518-
1519- let sp1 = ServiceProvider :: HeliumMobile ;
1520-
1521- let rewards_info = rewards_info_1_hour ( ) ;
1522-
1523- let total_sp_rewards = service_provider:: get_scheduled_tokens ( rewards_info. epoch_emissions ) ;
1524- let sp_reward_infos = ServiceProviderRewardInfos :: new (
1525- ServiceProviderDCSessions :: from ( [ ( sp1, dec ! ( 1000 ) ) ] ) ,
1526- ServiceProviderPromotions :: default ( ) ,
1527- total_sp_rewards,
1528- hnt_bone_price,
1529- rewards_info. clone ( ) ,
1530- ) ;
1531-
1532- let mut sp_rewards = HashMap :: < i32 , u64 > :: new ( ) ;
1533- let mut allocated_sp_rewards = 0_u64 ;
1534-
1535- for ( reward_amount, reward) in sp_reward_infos. iter_rewards ( ) {
1536- if let Some ( MobileReward :: ServiceProviderReward ( r) ) = reward. reward {
1537- sp_rewards. insert ( r. service_provider_id , r. amount ) ;
1538- assert_eq ! ( reward_amount, r. amount) ;
1539- allocated_sp_rewards += reward_amount;
1540- }
1541- }
1542-
1543- let sp1_reward_amount = * sp_rewards
1544- . get ( & ( sp1 as i32 ) )
1545- . expect ( "Could not fetch sp1 shares" ) ;
1546- assert_eq ! ( sp1_reward_amount, 999 ) ;
1547-
1548- // confirm the unallocated service provider reward amounts
1549- let unallocated_sp_reward_amount = ( total_sp_rewards - Decimal :: from ( allocated_sp_rewards) )
1550- . round_dp_with_strategy ( 0 , RoundingStrategy :: ToZero )
1551- . to_u64 ( )
1552- . unwrap_or ( 0 ) ;
1553- assert_eq ! ( unallocated_sp_reward_amount, 821_917_807_220 ) ;
1554- }
1555-
1556- #[ test]
1557- fn service_provider_reward_amounts_capped ( ) {
1558- let hnt_bone_price = dec ! ( 1.0 ) ;
1559- let sp1 = ServiceProvider :: HeliumMobile ;
1560-
1561- let rewards_info = rewards_info_1_hour ( ) ;
1562-
1563- let total_sp_rewards_in_bones = dec ! ( 1_0000_0000 ) ;
1564- let total_rewards_value_in_dc = hnt_bones_to_dc ( total_sp_rewards_in_bones, hnt_bone_price) ;
1565-
1566- let sp_reward_infos = ServiceProviderRewardInfos :: new (
1567- // force the service provider to have spend more DC than total rewardable
1568- ServiceProviderDCSessions :: from ( [ ( sp1, total_rewards_value_in_dc * dec ! ( 2.0 ) ) ] ) ,
1569- ServiceProviderPromotions :: default ( ) ,
1570- total_sp_rewards_in_bones,
1571- hnt_bone_price,
1572- rewards_info. clone ( ) ,
1573- ) ;
1574-
1575- let mut sp_rewards = HashMap :: new ( ) ;
1576- let mut allocated_sp_rewards = 0_u64 ;
1577-
1578- for ( reward_amount, reward) in sp_reward_infos. iter_rewards ( ) {
1579- if let Some ( MobileReward :: ServiceProviderReward ( r) ) = reward. reward {
1580- sp_rewards. insert ( r. service_provider_id , r. amount ) ;
1581- assert_eq ! ( reward_amount, r. amount) ;
1582- allocated_sp_rewards += reward_amount;
1583- }
1584- }
1585-
1586- let sp1_reward_amount = * sp_rewards
1587- . get ( & ( sp1 as i32 ) )
1588- . expect ( "Could not fetch sp1 shares" ) ;
1589-
1590- assert_eq ! ( Decimal :: from( sp1_reward_amount) , total_sp_rewards_in_bones) ;
1591- assert_eq ! ( sp1_reward_amount, 1_0000_0000 ) ;
1592-
1593- // confirm the unallocated service provider reward amounts
1594- let unallocated_sp_reward_amount = ( total_sp_rewards_in_bones
1595- - Decimal :: from ( allocated_sp_rewards) )
1596- . round_dp_with_strategy ( 0 , RoundingStrategy :: ToZero )
1597- . to_u64 ( )
1598- . unwrap_or ( 0 ) ;
1599- assert_eq ! ( unallocated_sp_reward_amount, 0 ) ;
1600- }
1601-
1602- #[ test]
1603- fn service_provider_reward_hip87_ex1 ( ) {
1604- // price from hip example and converted to bones
1605- let hnt_bone_price = dec ! ( 0.0001 ) / dec ! ( 1_0000_0000 ) ;
1606- let sp1 = ServiceProvider :: HeliumMobile ;
1607-
1608- let rewards_info = rewards_info_1_hour ( ) ;
1609-
1610- let total_sp_rewards_in_bones = dec ! ( 500_000_000 ) * dec ! ( 1_0000_0000 ) ;
1611-
1612- let sp_reward_infos = ServiceProviderRewardInfos :: new (
1613- ServiceProviderDCSessions :: from ( [ ( sp1, dec ! ( 1_0000_0000 ) ) ] ) ,
1614- ServiceProviderPromotions :: default ( ) ,
1615- total_sp_rewards_in_bones,
1616- hnt_bone_price,
1617- rewards_info. clone ( ) ,
1618- ) ;
1619-
1620- let mut sp_rewards = HashMap :: new ( ) ;
1621- let mut allocated_sp_rewards = 0_u64 ;
1622-
1623- for ( reward_amount, reward) in sp_reward_infos. iter_rewards ( ) {
1624- if let Some ( MobileReward :: ServiceProviderReward ( r) ) = reward. reward {
1625- sp_rewards. insert ( r. service_provider_id , r. amount ) ;
1626- assert_eq ! ( reward_amount, r. amount) ;
1627- allocated_sp_rewards += reward_amount;
1628- }
1629- }
1630-
1631- let sp1_reward_amount_in_bones = * sp_rewards
1632- . get ( & ( sp1 as i32 ) )
1633- . expect ( "Could not fetch sp1 shares" ) ;
1634- // assert expected value in bones
1635- assert_eq ! ( sp1_reward_amount_in_bones, 10_000_000 * 1_0000_0000 ) ;
1636-
1637- // confirm the unallocated service provider reward amounts
1638- let unallocated_sp_reward_amount = ( total_sp_rewards_in_bones
1639- - Decimal :: from ( allocated_sp_rewards) )
1640- . round_dp_with_strategy ( 0 , RoundingStrategy :: ToZero )
1641- . to_u64 ( )
1642- . unwrap_or ( 0 ) ;
1643- assert_eq ! ( unallocated_sp_reward_amount, 49_000_000_000_000_000 ) ;
1644- }
1645-
1646- #[ test]
1647- fn service_provider_reward_hip87_ex2 ( ) {
1648- // price from hip example and converted to bones
1649- let hnt_bone_price = dec ! ( 0.0001 ) / dec ! ( 1_0000_0000 ) ;
1650- let sp1 = ServiceProvider :: HeliumMobile ;
1651-
1652- let rewards_info = rewards_info_1_hour ( ) ;
1653- let total_sp_rewards_in_bones = dec ! ( 500_000_000 ) * dec ! ( 1_0000_0000 ) ;
1654-
1655- let sp_reward_infos = ServiceProviderRewardInfos :: new (
1656- ServiceProviderDCSessions :: from ( [ ( sp1, dec ! ( 100_000_000_000 ) ) ] ) ,
1657- ServiceProviderPromotions :: default ( ) ,
1658- total_sp_rewards_in_bones,
1659- hnt_bone_price,
1660- rewards_info. clone ( ) ,
1661- ) ;
1662-
1663- let mut sp_rewards = HashMap :: new ( ) ;
1664- let mut allocated_sp_rewards = 0_u64 ;
1665-
1666- for ( reward_amount, reward) in sp_reward_infos. iter_rewards ( ) {
1667- if let Some ( MobileReward :: ServiceProviderReward ( r) ) = reward. reward {
1668- sp_rewards. insert ( r. service_provider_id , r. amount ) ;
1669- assert_eq ! ( reward_amount, r. amount) ;
1670- allocated_sp_rewards += reward_amount;
1671- }
1672- }
1673-
1674- let sp1_reward_amount_in_bones = * sp_rewards
1675- . get ( & ( sp1 as i32 ) )
1676- . expect ( "Could not fetch sp1 shares" ) ;
1677- // assert expected value in bones
1678- assert_eq ! ( sp1_reward_amount_in_bones, 500_000_000 * 1_0000_0000 ) ;
1679-
1680- // confirm the unallocated service provider reward amounts
1681- let unallocated_sp_reward_amount = ( total_sp_rewards_in_bones
1682- - Decimal :: from ( allocated_sp_rewards) )
1683- . round_dp_with_strategy ( 0 , RoundingStrategy :: ToZero )
1684- . to_u64 ( )
1685- . unwrap_or ( 0 ) ;
1686- assert_eq ! ( unallocated_sp_reward_amount, 0 ) ;
1687- }
16881498}
0 commit comments