@@ -802,11 +802,19 @@ impl<T: Config> Module<T> {
802
802
// We know the contract is using resources, now calculate the cost for each used resource
803
803
let node_contract_resources = NodeContractResources :: get ( contract. contract_id ) ;
804
804
805
+ let mut bill_resources = true ;
806
+ // If this node contract is deployed on a node which has a rent contract
807
+ // We can ignore billing for the resources used by this node contract
808
+ if ActiveRentContractForNode :: contains_key ( node_contract. node_id ) {
809
+ bill_resources = false
810
+ }
811
+
805
812
let contract_cost = Self :: calculate_resources_cost (
806
813
node_contract_resources. used ,
807
814
node_contract. public_ips ,
808
815
seconds_elapsed,
809
816
pricing_policy. clone ( ) ,
817
+ bill_resources
810
818
) ;
811
819
contract_cost + contract_billing_info. amount_unbilled
812
820
}
@@ -821,6 +829,7 @@ impl<T: Config> Module<T> {
821
829
0 ,
822
830
seconds_elapsed,
823
831
pricing_policy. clone ( ) ,
832
+ true
824
833
) ;
825
834
Percent :: from_percent ( pricing_policy. discount_for_dedication_nodes ) * contract_cost
826
835
}
@@ -842,29 +851,32 @@ impl<T: Config> Module<T> {
842
851
ipu : u32 ,
843
852
seconds_elapsed : u64 ,
844
853
pricing_policy : pallet_tfgrid_types:: PricingPolicy < T :: AccountId > ,
854
+ bill_resources : bool
845
855
) -> u64 {
846
- let hru = U64F64 :: from_num ( resources. hru ) / pricing_policy. su . factor ( ) ;
847
- let sru = U64F64 :: from_num ( resources. sru ) / pricing_policy. su . factor ( ) ;
848
- let mru = U64F64 :: from_num ( resources. mru ) / pricing_policy. cu . factor ( ) ;
849
- let cru = U64F64 :: from_num ( resources. cru ) ;
850
-
851
- let su_used = hru / 1200 + sru / 200 ;
852
- // the pricing policy su cost value is expressed in 1 hours or 3600 seconds.
853
- // we bill every 3600 seconds but here we need to calculate the cost per second and multiply it by the seconds elapsed.
854
- let su_cost = ( U64F64 :: from_num ( pricing_policy. su . value ) / 3600 )
855
- * U64F64 :: from_num ( seconds_elapsed)
856
- * su_used;
857
- debug:: info!( "su cost: {:?}" , su_cost) ;
858
-
859
- let cu = Self :: calculate_cu ( cru, mru) ;
860
-
861
- let cu_cost = ( U64F64 :: from_num ( pricing_policy. cu . value ) / 3600 )
862
- * U64F64 :: from_num ( seconds_elapsed)
863
- * cu;
864
- debug:: info!( "cu cost: {:?}" , cu_cost) ;
865
-
866
- // save total
867
- let mut total_cost = su_cost + cu_cost;
856
+ let mut total_cost = U64F64 :: from_num ( 0 ) ;
857
+
858
+ if bill_resources {
859
+ let hru = U64F64 :: from_num ( resources. hru ) / pricing_policy. su . factor ( ) ;
860
+ let sru = U64F64 :: from_num ( resources. sru ) / pricing_policy. su . factor ( ) ;
861
+ let mru = U64F64 :: from_num ( resources. mru ) / pricing_policy. cu . factor ( ) ;
862
+ let cru = U64F64 :: from_num ( resources. cru ) ;
863
+
864
+ let su_used = hru / 1200 + sru / 200 ;
865
+ // the pricing policy su cost value is expressed in 1 hours or 3600 seconds.
866
+ // we bill every 3600 seconds but here we need to calculate the cost per second and multiply it by the seconds elapsed.
867
+ let su_cost = ( U64F64 :: from_num ( pricing_policy. su . value ) / 3600 )
868
+ * U64F64 :: from_num ( seconds_elapsed)
869
+ * su_used;
870
+ debug:: info!( "su cost: {:?}" , su_cost) ;
871
+
872
+ let cu = Self :: calculate_cu ( cru, mru) ;
873
+
874
+ let cu_cost = ( U64F64 :: from_num ( pricing_policy. cu . value ) / 3600 )
875
+ * U64F64 :: from_num ( seconds_elapsed)
876
+ * cu;
877
+ debug:: info!( "cu cost: {:?}" , cu_cost) ;
878
+ total_cost = su_cost + cu_cost;
879
+ }
868
880
869
881
if ipu > 0 {
870
882
let total_ip_cost = U64F64 :: from_num ( ipu)
0 commit comments