From 273c5ce58affd673c8e4f52af15d8c9275064ab3 Mon Sep 17 00:00:00 2001 From: Cyson Date: Tue, 23 May 2023 14:14:53 -0700 Subject: [PATCH 1/6] Add FOK Market to loadtest --- loadtest/main.go | 2 ++ loadtest/types.go | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/loadtest/main.go b/loadtest/main.go index 9ff74b9a56..75cc0b2959 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -330,6 +330,8 @@ func sampleDexOrderType(config Config) (orderType dextypes.OrderType) { orderType = dextypes.OrderType_LIMIT case Market: orderType = dextypes.OrderType_MARKET + case FOKMarket: + orderType = dextypes.OrderType_FOKMARKET default: panic(fmt.Sprintf("Unknown message type %s\n", msgType)) } diff --git a/loadtest/types.go b/loadtest/types.go index 9db7dc2723..1eb20f3321 100644 --- a/loadtest/types.go +++ b/loadtest/types.go @@ -24,6 +24,7 @@ const ( Tokenfactory string = "tokenfactory" Limit string = "limit" Market string = "market" + FOKMarket string = "fok_market" WasmMintNft string = "wasm_mint_nft" Vortex string = "vortex" ) @@ -88,8 +89,9 @@ func (d *NumericDistribution) InvalidSample() sdk.Dec { } type DexMsgTypeDistribution struct { - LimitOrderPct sdk.Dec `json:"limit_order_percentage"` - MarketOrderPct sdk.Dec `json:"market_order_percentage"` + LimitOrderPct sdk.Dec `json:"limit_order_percentage"` + MarketOrderPct sdk.Dec `json:"market_order_percentage"` + FOKMarketOrderPct sdk.Dec `json:"fok_market_order_percentage"` } type StakingMsgTypeDistribution struct { @@ -115,12 +117,15 @@ type WasmMintNftType struct { } func (d *MsgTypeDistribution) SampleDexMsgs() string { - if !d.Dex.LimitOrderPct.Add(d.Dex.MarketOrderPct).Equal(sdk.OneDec()) { + if !d.Dex.LimitOrderPct.Add(d.Dex.MarketOrderPct).Add(d.Dex.FOKMarketOrderPct).Add(d.Dex.FOKBYVALUEMarketOrderPct).Equal(sdk.OneDec()) { panic("Distribution percentages must add up to 1") } randNum := sdk.MustNewDecFromStr(fmt.Sprintf("%f", rand.Float64())) + fokThreshold := d.Dex.LimitOrderPct.Add(d.Dex.LimitOrderPct) if randNum.LT(d.Dex.LimitOrderPct) { return Limit + } else if randNum.LT(fokThreshold) { + return FOKMarket } return Market } From 5f2d3532ad6c77dffd1c7371021f042b33d4925a Mon Sep 17 00:00:00 2001 From: Cyson Date: Fri, 26 May 2023 13:44:11 -0700 Subject: [PATCH 2/6] Add percentage --- loadtest/config.json | 4 +++- loadtest/main.go | 2 ++ loadtest/types.go | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/loadtest/config.json b/loadtest/config.json index 38e839704b..a586f8843c 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -34,7 +34,9 @@ "message_type_distribution": { "dex": { "limit_order_percentage": "0.2", - "market_order_percentage": "0.8" + "market_order_percentage": "0.4", + "fok_market_order_percentage": "0.2", + "fok_by_value_market_order_percentage": "0.2" }, "staking": { "delegate_percentage": "0.5", diff --git a/loadtest/main.go b/loadtest/main.go index 75cc0b2959..3fef419eff 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -332,6 +332,8 @@ func sampleDexOrderType(config Config) (orderType dextypes.OrderType) { orderType = dextypes.OrderType_MARKET case FOKMarket: orderType = dextypes.OrderType_FOKMARKET + case FOKByValueMarket: + orderType = dextypes.OrderType_FOKMARKETBYVALUE default: panic(fmt.Sprintf("Unknown message type %s\n", msgType)) } diff --git a/loadtest/types.go b/loadtest/types.go index 1eb20f3321..f8f51e827b 100644 --- a/loadtest/types.go +++ b/loadtest/types.go @@ -25,6 +25,7 @@ const ( Limit string = "limit" Market string = "market" FOKMarket string = "fok_market" + FOKByValueMarket string = "fok_by_value_market" WasmMintNft string = "wasm_mint_nft" Vortex string = "vortex" ) @@ -92,6 +93,7 @@ type DexMsgTypeDistribution struct { LimitOrderPct sdk.Dec `json:"limit_order_percentage"` MarketOrderPct sdk.Dec `json:"market_order_percentage"` FOKMarketOrderPct sdk.Dec `json:"fok_market_order_percentage"` + FOKBYVALUEMarketOrderPct sdk.Dec `json:"fok_by_value_market_order_percentage"` } type StakingMsgTypeDistribution struct { @@ -122,10 +124,13 @@ func (d *MsgTypeDistribution) SampleDexMsgs() string { } randNum := sdk.MustNewDecFromStr(fmt.Sprintf("%f", rand.Float64())) fokThreshold := d.Dex.LimitOrderPct.Add(d.Dex.LimitOrderPct) + fokByValueThreshold := d.Dex.LimitOrderPct.Add(d.Dex.LimitOrderPct).Add(d.Dex.FOKBYVALUEMarketOrderPct) if randNum.LT(d.Dex.LimitOrderPct) { return Limit } else if randNum.LT(fokThreshold) { return FOKMarket + } else if randNum.LT(fokByValueThreshold) { + return FOKByValueMarket } return Market } From 21856adb09b85d47f02f4fff379504094860c9fe Mon Sep 17 00:00:00 2001 From: Cyson Date: Tue, 30 May 2023 14:32:26 -0700 Subject: [PATCH 3/6] Test --- loadtest/config.json | 4 ++-- x/dex/types/message_place_orders.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/loadtest/config.json b/loadtest/config.json index a586f8843c..eb84e3d373 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -44,9 +44,9 @@ "begin_redelegate_percentage": "0.25" } }, - "constant": true, + "constant": false, "loadtest_interval": 600, - "message_type": "bank,dex,tokenfactory,staking,failure_dex_malformed,failure_dex_invalid,collect_rewards,distribute_rewards", + "message_type": "dex", "run_oracle": false, "metrics_port": 9695, "wasm_msg_types": { diff --git a/x/dex/types/message_place_orders.go b/x/dex/types/message_place_orders.go index d71b956163..1f39530795 100644 --- a/x/dex/types/message_place_orders.go +++ b/x/dex/types/message_place_orders.go @@ -73,8 +73,8 @@ func (msg *MsgPlaceOrders) ValidateBasic() error { if len(order.PriceDenom) == 0 { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid order, price denom is empty (%s)", err) } - if order.OrderType == OrderType_FOKMARKETBYVALUE || order.OrderType == OrderType_FOKMARKET { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "FOK orders are temporarily disabled") + if order.OrderType == OrderType_FOKMARKETBYVALUE && (order.Nominal.IsNil() || order.Nominal.IsNegative()) { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "invalid nominal value for market by value order (%s)", err) } if order.OrderType == OrderType_STOPLIMIT || order.OrderType == OrderType_STOPLOSS { return sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "stop loss/limit order (%s) are not supported yet", err) From 0053bbf681714ac4c4be68a3b38d6f2ab515cdc8 Mon Sep 17 00:00:00 2001 From: Cyson Date: Wed, 31 May 2023 13:50:06 -0700 Subject: [PATCH 4/6] test --- loadtest/main.go | 1 + loadtest/types.go | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/loadtest/main.go b/loadtest/main.go index 3fef419eff..ed05f256d1 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -363,6 +363,7 @@ func generateDexOrderPlacements(config Config, key cryptotypes.PrivKey, msgPerTx AssetDenom: "ATOM", OrderType: orderType, Data: VortexData, + Nominal: price.Mul(quantity), }) } return orderPlacements diff --git a/loadtest/types.go b/loadtest/types.go index f8f51e827b..d0c568259e 100644 --- a/loadtest/types.go +++ b/loadtest/types.go @@ -123,8 +123,8 @@ func (d *MsgTypeDistribution) SampleDexMsgs() string { panic("Distribution percentages must add up to 1") } randNum := sdk.MustNewDecFromStr(fmt.Sprintf("%f", rand.Float64())) - fokThreshold := d.Dex.LimitOrderPct.Add(d.Dex.LimitOrderPct) - fokByValueThreshold := d.Dex.LimitOrderPct.Add(d.Dex.LimitOrderPct).Add(d.Dex.FOKBYVALUEMarketOrderPct) + fokThreshold := d.Dex.LimitOrderPct.Add(d.Dex.FOKMarketOrderPct) + fokByValueThreshold := d.Dex.LimitOrderPct.Add(d.Dex.FOKMarketOrderPct).Add(d.Dex.FOKBYVALUEMarketOrderPct) if randNum.LT(d.Dex.LimitOrderPct) { return Limit } else if randNum.LT(fokThreshold) { From fb78c4ca52ff1ca8091f2aa0f9495c3a960ef6ba Mon Sep 17 00:00:00 2001 From: Cyson Date: Wed, 31 May 2023 13:52:03 -0700 Subject: [PATCH 5/6] test --- loadtest/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/loadtest/main.go b/loadtest/main.go index ed05f256d1..81a2338ae1 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -333,6 +333,7 @@ func sampleDexOrderType(config Config) (orderType dextypes.OrderType) { case FOKMarket: orderType = dextypes.OrderType_FOKMARKET case FOKByValueMarket: + fmt.Println("sampling fok by value") orderType = dextypes.OrderType_FOKMARKETBYVALUE default: panic(fmt.Sprintf("Unknown message type %s\n", msgType)) From ad0f83514425e3afbfded0e61a5862a36c28f479 Mon Sep 17 00:00:00 2001 From: Cyson Date: Wed, 31 May 2023 14:16:19 -0700 Subject: [PATCH 6/6] test --- loadtest/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loadtest/main.go b/loadtest/main.go index 81a2338ae1..507825a43a 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -364,7 +364,7 @@ func generateDexOrderPlacements(config Config, key cryptotypes.PrivKey, msgPerTx AssetDenom: "ATOM", OrderType: orderType, Data: VortexData, - Nominal: price.Mul(quantity), + Nominal: price.Mul(quantity).Quo(FromMili).Quo(FromMili), }) } return orderPlacements