@@ -936,6 +936,7 @@ pub mod pallet {
936936
937937 fn handle_filled_orders (
938938 is_bid : bool ,
939+ pool : & Pool < T > ,
939940 base_asset : T :: AssetKind ,
940941 quote_asset : T :: AssetKind ,
941942 orderer : & T :: AccountId ,
@@ -953,7 +954,11 @@ pub mod pallet {
953954 // Release amount would be different based on `is_bid`. If it is bid order, `q`
954955 // amount of base asset would be released. While if it is ask order, `p*q` amount of
955956 // quote asset would be released.
956- let released = if is_bid { q } else { p * q } ;
957+ let released = if is_bid { q } else {
958+ let r: T :: Unit = p * q;
959+ let ( p_adj, _, q_adj) = pool. decimal_adjustment ( ) ;
960+ r. denom ( p_adj. unwrap_or ( 0 ) + q_adj. unwrap_or ( 0 ) )
961+ } ;
957962 // 1. Release the frozen asset
958963 T :: AssetsFreezer :: decrease_frozen (
959964 asset1. clone ( ) ,
@@ -963,8 +968,16 @@ pub mod pallet {
963968 ) ?;
964969 // 2. Transfer assets between orderer and owner of limit order
965970 let ( transfer1, transfer2) = if is_bid { ( q, released) } else { ( released, q) } ;
966- T :: Assets :: transfer ( asset1. clone ( ) , & owner, orderer, transfer1, Preserve ) ?;
967- T :: Assets :: transfer ( asset2. clone ( ) , orderer, & owner, transfer2, Preserve ) ?;
971+ T :: Assets :: transfer ( asset1. clone ( ) , & owner, & orderer, transfer1, Preserve ) ?;
972+ T :: Assets :: transfer ( asset2. clone ( ) , & orderer, & owner, transfer2, Preserve ) ?;
973+ log:: debug!( target: LOG_TARGET , "HandleFilledOrder {:?} {:?} {:?} {:?} {:?} {:?}" ,
974+ orderer,
975+ transfer1,
976+ transfer2,
977+ owner,
978+ transfer2,
979+ transfer1,
980+ ) ;
968981 }
969982
970983 Ok ( ( ) )
@@ -1224,6 +1237,7 @@ pub mod pallet {
12241237 }
12251238 Self :: handle_filled_orders (
12261239 is_bid,
1240+ & pool,
12271241 base_asset. clone ( ) ,
12281242 quote_asset. clone ( ) ,
12291243 orderer,
@@ -1362,24 +1376,25 @@ pub mod pallet {
13621376 }
13631377 // Narrow it down if it is not equal to target price
13641378 let one: T :: Unit = One :: one ( ) ;
1379+ let one_normalized = one. normalize ( Some ( pool. base_decimals ) ) ;
13651380 if pool_price < target {
13661381 // 'pool_price' should become bigger
13671382 if is_bid {
13681383 // If it is bid order, more base assets should be swapped out
1369- min = mid + one . normalize ( Some ( pool . base_decimals ) ) ;
1384+ min = mid + one_normalized ;
13701385 } else {
13711386 // If it is ask order, less base assets should be swapped in
1372- max = mid - one . normalize ( Some ( pool . base_decimals ) ) ;
1387+ max = mid - one_normalized ;
13731388 }
13741389 swap_quantity = mid;
13751390 } else {
13761391 // 'pool_price' should become smaller
13771392 if is_bid {
13781393 // If it is bid order, less base assets should be swapped out
1379- max = mid - One :: one ( ) ;
1394+ max = mid - one_normalized ;
13801395 } else {
13811396 // If it is ask order, more base assets should be swapped in
1382- min = mid + One :: one ( ) ;
1397+ min = mid + one_normalized ;
13831398 }
13841399 }
13851400 }
0 commit comments