diff --git a/x/dex/exchange/market_order.go b/x/dex/exchange/market_order.go index 6f7baf1fcb..5db98e9807 100644 --- a/x/dex/exchange/market_order.go +++ b/x/dex/exchange/market_order.go @@ -16,6 +16,7 @@ func MatchMarketOrders( settlements *[]*types.Settlement, ) (sdk.Dec, sdk.Dec) { var totalExecuted, totalPrice sdk.Dec = sdk.ZeroDec(), sdk.ZeroDec() + allTakerSettlements := []*types.Settlement{} for idx, marketOrder := range marketOrders { for i := range orderBook { var existingOrder types.OrderBook @@ -40,16 +41,25 @@ func MatchMarketOrders( marketOrder.Quantity = marketOrder.Quantity.Sub(executed) totalExecuted = totalExecuted.Add(executed) totalPrice = totalPrice.Add( - executed.Mul(existingOrder.GetPrice().Add(marketOrder.WorstPrice)).Quo(sdk.NewDec(2)), + executed.Mul(existingOrder.GetPrice()), ) dirtyPrices.Add(existingOrder.GetPrice()) - newSettlements := Settle(marketOrder.FormattedCreatorWithSuffix(), executed, existingOrder, direction, marketOrder.WorstPrice) - *settlements = append(*settlements, newSettlements...) + takerSettlements, makerSettlements := Settle(marketOrder.FormattedCreatorWithSuffix(), executed, existingOrder, direction, marketOrder.WorstPrice) + *settlements = append(*settlements, makerSettlements...) + // taker settlements' clearing price will need to be adjusted after all market order executions finish + allTakerSettlements = append(allTakerSettlements, takerSettlements...) if marketOrder.Quantity.IsZero() { break } } marketOrders[idx].Quantity = marketOrder.Quantity } + if totalExecuted.IsPositive() { + clearingPrice := totalPrice.Quo(totalExecuted) + for _, settlement := range allTakerSettlements { + settlement.ExecutionCostOrProceed = clearingPrice + } + *settlements = append(*settlements, allTakerSettlements...) + } return totalPrice, totalExecuted } diff --git a/x/dex/exchange/market_order_test.go b/x/dex/exchange/market_order_test.go index be63961454..d2fa8bbe38 100644 --- a/x/dex/exchange/market_order_test.go +++ b/x/dex/exchange/market_order_test.go @@ -50,22 +50,22 @@ func TestMatchSingleMarketOrderFromShortBook(t *testing.T) { assert.Equal(t, shortBook[0].GetEntry().Quantity.IsZero(), true) assert.Equal(t, len(settlements), 2) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(5), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Account: "def", }) assert.Equal(t, *settlements[1], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(5), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + Account: "abc", }) } @@ -107,22 +107,22 @@ func TestMatchSingleMarketOrderFromLongBook(t *testing.T) { assert.Equal(t, longBook[0].GetEntry().Quantity.IsZero(), true) assert.Equal(t, len(settlements), 2) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(5), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Account: "def", }) assert.Equal(t, *settlements[1], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(5), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + Account: "abc", }) } @@ -165,7 +165,7 @@ func TestMatchSingleMarketOrderFromMultipleShortBook(t *testing.T) { totalPrice, totalExecuted := exchange.MatchMarketOrders( ctx, longOrders, shortBook, TEST_PAIR(), types.PositionDirection_LONG, &dirtyPrices, &settlements, ) - assert.Equal(t, totalPrice, sdk.NewDec(490)) + assert.Equal(t, totalPrice, sdk.NewDec(480)) assert.Equal(t, totalExecuted, sdk.NewDec(5)) assert.Equal(t, len(dirtyPrices.Get()), 2) assert.Equal(t, dirtyPrices.Has(sdk.NewDec(90)), true) @@ -185,58 +185,58 @@ func TestMatchSingleMarketOrderFromMultipleShortBook(t *testing.T) { }) assert.Equal(t, len(settlements), 6) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(95), - ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + ExecutionCostOrProceed: sdk.NewDec(90), + ExpectedCostOrProceed: sdk.NewDec(90), + Account: "def", }) assert.Equal(t, *settlements[1], types.Settlement{ Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(95), - ExpectedCostOrProceed: sdk.NewDec(90), + ExecutionCostOrProceed: sdk.NewDec(100), + ExpectedCostOrProceed: sdk.NewDec(100), Account: "def", }) assert.Equal(t, *settlements[2], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(2), + Quantity: sdk.NewDec(1), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Account: "ghi", }) assert.Equal(t, *settlements[3], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.NewDec(96), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + Account: "abc", }) assert.Equal(t, *settlements[4], types.Settlement{ Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(2), + ExecutionCostOrProceed: sdk.NewDec(96), ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) assert.Equal(t, *settlements[5], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.NewDec(96), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "ghi", + Account: "abc", }) } @@ -279,7 +279,7 @@ func TestMatchSingleMarketOrderFromMultipleLongBook(t *testing.T) { totalPrice, totalExecuted := exchange.MatchMarketOrders( ctx, shortOrders, longBook, TEST_PAIR(), types.PositionDirection_SHORT, &dirtyPrices, &settlements, ) - assert.Equal(t, totalPrice, sdk.NewDec(510)) + assert.Equal(t, totalPrice, sdk.NewDec(520)) assert.Equal(t, totalExecuted, sdk.NewDec(5)) assert.Equal(t, len(dirtyPrices.Get()), 2) assert.Equal(t, dirtyPrices.Has(sdk.NewDec(100)), true) @@ -299,58 +299,58 @@ func TestMatchSingleMarketOrderFromMultipleLongBook(t *testing.T) { assert.Equal(t, longBook[1].GetEntry().Quantity.IsZero(), true) assert.Equal(t, len(settlements), 6) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(105), - ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + ExecutionCostOrProceed: sdk.NewDec(110), + ExpectedCostOrProceed: sdk.NewDec(110), + Account: "abc", }) assert.Equal(t, *settlements[1], types.Settlement{ Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(105), - ExpectedCostOrProceed: sdk.NewDec(110), + ExecutionCostOrProceed: sdk.NewDec(100), + ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) assert.Equal(t, *settlements[2], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(2), + Quantity: sdk.NewDec(1), ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + Account: "ghi", }) assert.Equal(t, *settlements[3], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(2), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.NewDec(104), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Account: "def", }) assert.Equal(t, *settlements[4], types.Settlement{ Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(2), + ExecutionCostOrProceed: sdk.NewDec(104), ExpectedCostOrProceed: sdk.NewDec(100), Account: "def", }) assert.Equal(t, *settlements[5], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.NewDec(104), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "ghi", + Account: "def", }) } @@ -405,7 +405,7 @@ func TestMatchMultipleMarketOrderFromMultipleShortBook(t *testing.T) { totalPrice, totalExecuted := exchange.MatchMarketOrders( ctx, longOrders, shortBook, TEST_PAIR(), types.PositionDirection_LONG, &dirtyPrices, &settlements, ) - assert.Equal(t, totalPrice, sdk.NewDec(592)) + assert.Equal(t, totalPrice, sdk.NewDec(580)) assert.Equal(t, totalExecuted, sdk.NewDec(6)) assert.Equal(t, len(dirtyPrices.Get()), 2) assert.Equal(t, dirtyPrices.Has(sdk.NewDec(90)), true) @@ -425,76 +425,76 @@ func TestMatchMultipleMarketOrderFromMultipleShortBook(t *testing.T) { }) assert.Equal(t, len(settlements), 8) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(97), - ExpectedCostOrProceed: sdk.NewDec(104), - Account: "jkl", + ExecutionCostOrProceed: sdk.NewDec(90), + ExpectedCostOrProceed: sdk.NewDec(90), + Account: "def", }) assert.Equal(t, *settlements[1], types.Settlement{ Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(97), + ExecutionCostOrProceed: sdk.NewDec(90), ExpectedCostOrProceed: sdk.NewDec(90), Account: "def", }) assert.Equal(t, *settlements[2], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(95), + Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Account: "def", }) assert.Equal(t, *settlements[3], types.Settlement{ Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(95), - ExpectedCostOrProceed: sdk.NewDec(90), - Account: "def", + Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.NewDec(100), + ExpectedCostOrProceed: sdk.NewDec(100), + Account: "ghi", }) assert.Equal(t, *settlements[4], types.Settlement{ Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), - ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Quantity: sdk.NewDec(1), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("96.666666666666666667"), + ExpectedCostOrProceed: sdk.NewDec(104), + Account: "jkl", }) assert.Equal(t, *settlements[5], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(1), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("96.666666666666666667"), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "def", + Account: "abc", }) assert.Equal(t, *settlements[6], types.Settlement{ Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("96.666666666666666667"), ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) assert.Equal(t, *settlements[7], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("96.666666666666666667"), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "ghi", + Account: "abc", }) } @@ -549,7 +549,7 @@ func TestMatchMultipleMarketOrderFromMultipleLongBook(t *testing.T) { totalPrice, totalExecuted := exchange.MatchMarketOrders( ctx, shortOrders, longBook, TEST_PAIR(), types.PositionDirection_SHORT, &dirtyPrices, &settlements, ) - assert.Equal(t, totalPrice, sdk.NewDec(608)) + assert.Equal(t, totalPrice, sdk.NewDec(620)) assert.Equal(t, totalExecuted, sdk.NewDec(6)) assert.Equal(t, len(dirtyPrices.Get()), 2) assert.Equal(t, dirtyPrices.Has(sdk.NewDec(100)), true) @@ -569,29 +569,29 @@ func TestMatchMultipleMarketOrderFromMultipleLongBook(t *testing.T) { assert.Equal(t, longBook[1].GetEntry().Quantity.IsZero(), true) assert.Equal(t, len(settlements), 8) assert.Equal(t, *settlements[0], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(103), - ExpectedCostOrProceed: sdk.NewDec(96), - Account: "jkl", + ExecutionCostOrProceed: sdk.NewDec(110), + ExpectedCostOrProceed: sdk.NewDec(110), + Account: "abc", }) assert.Equal(t, *settlements[1], types.Settlement{ Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(103), + ExecutionCostOrProceed: sdk.NewDec(110), ExpectedCostOrProceed: sdk.NewDec(110), Account: "abc", }) assert.Equal(t, *settlements[2], types.Settlement{ - Direction: types.PositionDirection_SHORT, + Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(105), + Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.NewDec(100), ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) @@ -599,26 +599,26 @@ func TestMatchMultipleMarketOrderFromMultipleLongBook(t *testing.T) { Direction: types.PositionDirection_LONG, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(1), - ExecutionCostOrProceed: sdk.NewDec(105), - ExpectedCostOrProceed: sdk.NewDec(110), - Account: "abc", + Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.NewDec(100), + ExpectedCostOrProceed: sdk.NewDec(100), + Account: "ghi", }) assert.Equal(t, *settlements[4], types.Settlement{ Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), - ExpectedCostOrProceed: sdk.NewDec(100), - Account: "abc", + Quantity: sdk.NewDec(1), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("103.333333333333333333"), + ExpectedCostOrProceed: sdk.NewDec(96), + Account: "jkl", }) assert.Equal(t, *settlements[5], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(1), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("103.333333333333333333"), ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) @@ -626,18 +626,18 @@ func TestMatchMultipleMarketOrderFromMultipleLongBook(t *testing.T) { Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, - Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + Quantity: sdk.NewDec(8).Quo(sdk.NewDec(3)), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("103.333333333333333333"), ExpectedCostOrProceed: sdk.NewDec(100), Account: "abc", }) assert.Equal(t, *settlements[7], types.Settlement{ - Direction: types.PositionDirection_LONG, + Direction: types.PositionDirection_SHORT, PriceSymbol: TEST_PAIR().PriceDenom, AssetSymbol: TEST_PAIR().AssetDenom, Quantity: sdk.NewDec(4).Quo(sdk.NewDec(3)), - ExecutionCostOrProceed: sdk.NewDec(100), + ExecutionCostOrProceed: sdk.MustNewDecFromStr("103.333333333333333333"), ExpectedCostOrProceed: sdk.NewDec(100), - Account: "ghi", + Account: "abc", }) } diff --git a/x/dex/exchange/settlement.go b/x/dex/exchange/settlement.go index aea40523ff..9ae7c4772b 100644 --- a/x/dex/exchange/settlement.go +++ b/x/dex/exchange/settlement.go @@ -16,8 +16,9 @@ func Settle( order types.OrderBook, takerDirection types.PositionDirection, worstPrice sdk.Dec, -) []*types.Settlement { - settlements := []*types.Settlement{} +) ([]*types.Settlement, []*types.Settlement) { + takerSettlements := []*types.Settlement{} + makerSettlements := []*types.Settlement{} order.GetEntry().Quantity = order.GetEntry().Quantity.Sub(quantityTaken) newAllocations := RebalanceAllocations(order) newToSettle := []ToSettle{} @@ -36,27 +37,27 @@ func Settle( } order.GetEntry().Allocation = nonZeroNewAllocations order.GetEntry().AllocationCreator = nonZeroNewCreators - avgPrice := worstPrice.Add(order.GetPrice()).Quo(sdk.NewDec(2)) for _, toSettle := range newToSettle { - settlements = append(settlements, types.NewSettlement( + takerSettlements = append(takerSettlements, types.NewSettlement( taker, takerDirection, order.GetEntry().GetPriceDenom(), order.GetEntry().GetAssetDenom(), toSettle.amount, - avgPrice, worstPrice, - ), types.NewSettlement( + worstPrice, + )) + makerSettlements = append(makerSettlements, types.NewSettlement( toSettle.creator, types.OPPOSITE_POSITION_DIRECTION[takerDirection], order.GetEntry().GetPriceDenom(), order.GetEntry().GetAssetDenom(), toSettle.amount, - avgPrice, + order.GetEntry().Price, order.GetEntry().Price, )) } - return settlements + return takerSettlements, makerSettlements } func SettleFromBook(