@@ -4,6 +4,7 @@ use soroban_sdk::{Address, Env, Map, String};
44use crate :: core:: escrow:: EscrowManager ;
55use crate :: core:: validators:: milestone:: validate_and_convert_milestone_index;
66use crate :: error:: ContractError ;
7+ use crate :: modules:: fee:: distribution:: calculate_and_distribute_fees;
78use crate :: modules:: {
89 fee:: { FeeCalculator , FeeCalculatorTrait } ,
910 math:: { BasicArithmetic , BasicMath } ,
@@ -59,29 +60,17 @@ impl DisputeManager {
5960
6061 let fee_result =
6162 FeeCalculator :: calculate_standard_fees ( total, escrow. platform_fee ) ?;
62- let total_fees = BasicMath :: safe_add ( fee_result. trustless_work_fee , fee_result. platform_fee ) ?;
63-
64- if fee_result. trustless_work_fee > 0 {
65- token_client. transfer ( & contract_address, & trustless_work_address, & fee_result. trustless_work_fee ) ;
66- }
67- if fee_result. platform_fee > 0 {
68- token_client. transfer (
69- & contract_address,
70- & escrow. roles . platform ,
71- & fee_result. platform_fee ,
72- ) ;
73- }
74-
75- for ( addr, amount) in distributions. iter ( ) {
76- if amount > 0 {
77- let fee_share =
78- BasicMath :: safe_div ( BasicMath :: safe_mul ( amount, total_fees) ?, total) ?;
79- let net_amount = BasicMath :: safe_sub ( amount, fee_share) ?;
80- if net_amount > 0 {
81- token_client. transfer ( & contract_address, & addr, & net_amount) ;
82- }
83- }
84- }
63+
64+ calculate_and_distribute_fees (
65+ e,
66+ & token_client,
67+ & contract_address,
68+ & trustless_work_address,
69+ & escrow. roles . platform ,
70+ & fee_result,
71+ & distributions,
72+ total,
73+ ) ?;
8574
8675 e. storage ( ) . persistent ( ) . set ( & DataKey :: Escrow , & escrow) ;
8776 e. storage ( )
@@ -131,28 +120,17 @@ impl DisputeManager {
131120
132121 let fee_result =
133122 FeeCalculator :: calculate_standard_fees ( total, escrow. platform_fee ) ?;
134- let total_fees = BasicMath :: safe_add ( fee_result. trustless_work_fee , fee_result. platform_fee ) ?;
135-
136- if fee_result. trustless_work_fee > 0 {
137- token_client. transfer ( & contract_address, & trustless_work_address, & fee_result. trustless_work_fee ) ;
138- }
139- if fee_result. platform_fee > 0 {
140- token_client. transfer (
141- & contract_address,
142- & escrow. roles . platform ,
143- & fee_result. platform_fee ,
144- ) ;
145- }
146-
147- for ( addr, amount) in distributions. iter ( ) {
148- if amount > 0 {
149- let fee_share = BasicMath :: safe_div ( BasicMath :: safe_mul ( amount, total_fees) ?, total) ?;
150- let net_amount = BasicMath :: safe_sub ( amount, fee_share) ?;
151- if net_amount > 0 {
152- token_client. transfer ( & contract_address, & addr, & net_amount) ;
153- }
154- }
155- }
123+
124+ calculate_and_distribute_fees (
125+ e,
126+ & token_client,
127+ & contract_address,
128+ & trustless_work_address,
129+ & escrow. roles . platform ,
130+ & fee_result,
131+ & distributions,
132+ total,
133+ ) ?;
156134
157135 let mut updated_milestones = escrow. milestones . clone ( ) ;
158136 let mut new_flags = milestone. flags . clone ( ) ;
0 commit comments