@@ -225,9 +225,10 @@ impl PoolState {
225225 . ok_or ( Error :: InvalidSwap ) ?;
226226
227227 // used for computing product for swap price
228- let effective_spend_asset_reserve = reserve0 + spend_after_fee;
228+ let effective_spend_asset_reserve =
229+ * reserve0 as u128 + spend_after_fee as u128 ;
229230 let new_receive_asset_reserve_before_fee: u64 = reserve_product
230- . div_ceil ( effective_spend_asset_reserve as u128 )
231+ . div_ceil ( effective_spend_asset_reserve)
231232 . try_into ( )
232233 . map_err ( |_| Error :: InvalidSwap ) ?;
233234 let amount_receive_before_fee: u64 = reserve1
@@ -239,10 +240,13 @@ impl PoolState {
239240 . checked_sub ( amount_receive_before_fee)
240241 . ok_or ( Error :: InvalidSwap ) ?;
241242 let ( new_reserve0, new_reserve1) = {
243+ let new_reserve0 = reserve0
244+ . checked_add ( amount_spend)
245+ . ok_or ( Error :: ReserveOverflow ) ?;
242246 let new_reserve1 = reserve1
243247 . checked_sub ( amount_receive_after_fee)
244248 . ok_or ( Error :: InsufficientLiquidity ) ?;
245- ( reserve0 + amount_spend , new_reserve1)
249+ ( new_reserve0 , new_reserve1)
246250 } ;
247251 Ok ( PoolState {
248252 reserve0 : new_reserve0,
@@ -269,9 +273,10 @@ impl PoolState {
269273 . checked_sub ( spend_after_fee)
270274 . ok_or ( Error :: InvalidSwap ) ?;
271275 // used for computing product for swap price
272- let effective_spend_asset_reserve = reserve1 + spend_after_fee;
276+ let effective_spend_asset_reserve =
277+ * reserve1 as u128 + spend_after_fee as u128 ;
273278 let new_receive_asset_reserve_before_fee: u64 = reserve_product
274- . div_ceil ( effective_spend_asset_reserve as u128 )
279+ . div_ceil ( effective_spend_asset_reserve)
275280 . try_into ( )
276281 . map_err ( |_| Error :: InvalidSwap ) ?;
277282 let amount_receive_before_fee: u64 = reserve0
@@ -286,7 +291,10 @@ impl PoolState {
286291 let new_reserve0 = reserve0
287292 . checked_sub ( amount_receive_after_fee)
288293 . ok_or ( Error :: InsufficientLiquidity ) ?;
289- ( new_reserve0, reserve1 + amount_spend)
294+ let new_reserve1 = reserve1
295+ . checked_add ( amount_spend)
296+ . ok_or ( Error :: ReserveOverflow ) ?;
297+ ( new_reserve0, new_reserve1)
290298 } ;
291299 Ok ( PoolState {
292300 reserve0 : new_reserve0,
0 commit comments