code.vegaprotocol.io/vega@v0.79.0/core/integration/features/amm/pegged-orders-market-tick.feature (about) 1 Feature: 0090-VAMM-036: With an existing book consisting solely of vAMM orders, pegged orders referencing best bid/best ask remain deployed, pegged to their pegs, where the best buy/sell vAMM order price acts as the best bid, or best ask peg respectively. 2 3 Background: 4 Given the average block duration is "1" 5 And the margin calculator named "margin-calculator-1": 6 | search factor | initial factor | release factor | 7 | 1.2 | 1.5 | 1.7 | 8 And the log normal risk model named "log-normal-risk-model": 9 | risk aversion | tau | mu | r | sigma | 10 | 0.001 | 0.0011407711613050422 | 0 | 0.9 | 3.0 | 11 And the liquidity monitoring parameters: 12 | name | triggering ratio | time window | scaling factor | 13 | lqm-params | 1.00 | 20s | 1 | 14 15 And the following network parameters are set: 16 | name | value | 17 | market.value.windowLength | 60s | 18 | network.markPriceUpdateMaximumFrequency | 0s | 19 | limits.markets.maxPeggedOrders | 6 | 20 | market.auction.minimumDuration | 1 | 21 | market.fee.factors.infrastructureFee | 0.001 | 22 | market.fee.factors.makerFee | 0.004 | 23 | spam.protection.max.stopOrdersPerMarket | 5 | 24 | market.liquidity.equityLikeShareFeeFraction | 1 | 25 | market.amm.minCommitmentQuantum | 1 | 26 | market.liquidity.bondPenaltyParameter | 0.2 | 27 | market.liquidity.stakeToCcyVolume | 1 | 28 | market.liquidity.successorLaunchWindowLength | 1h | 29 | market.liquidity.sla.nonPerformanceBondPenaltySlope | 0.1 | 30 | market.liquidity.sla.nonPerformanceBondPenaltyMax | 0.6 | 31 | validators.epoch.length | 10s | 32 | market.liquidity.earlyExitPenalty | 0.25 | 33 | market.liquidity.maximumLiquidityFeeFactorLevel | 0.25 | 34 #risk factor short:3.5569036 35 #risk factor long:0.801225765 36 And the following assets are registered: 37 | id | decimal places | 38 | USD | 2 | 39 And the fees configuration named "fees-config-1": 40 | maker fee | infrastructure fee | 41 | 0.0004 | 0.001 | 42 43 And the liquidity sla params named "SLA-22": 44 | price range | commitment min time fraction | performance hysteresis epochs | sla competition factor | 45 | 0.5 | 0.6 | 1 | 1.0 | 46 47 And the markets: 48 | id | quote name | asset | liquidity monitoring | risk model | margin calculator | auction duration | fees | price monitoring | data source config | linear slippage factor | quadratic slippage factor | sla params | decimal places | 49 | ETH/MAR22 | USD | USD | lqm-params | log-normal-risk-model | margin-calculator-1 | 2 | fees-config-1 | default-none | default-eth-for-future | 1e0 | 0 | SLA-22 | 1 | 50 51 # Setting up the accounts and vAMM submission now is part of the background, because we'll be running scenarios 0090-VAMM-006 through 0090-VAMM-014 on this setup 52 Given the parties deposit on asset's general account the following amount: 53 | party | asset | amount | 54 | lp1 | USD | 1000000 | 55 | lp2 | USD | 1000000 | 56 | lp3 | USD | 1000000 | 57 | party1 | USD | 1000000 | 58 | party2 | USD | 1000000 | 59 | party3 | USD | 1000000 | 60 | party4 | USD | 1000000 | 61 | party5 | USD | 1000000 | 62 | vamm1 | USD | 1000000 | 63 64 When the parties submit the following liquidity provision: 65 | id | party | market id | commitment amount | fee | lp type | 66 | lp_1 | lp1 | ETH/MAR22 | 600 | 0.02 | submission | 67 | lp_2 | lp2 | ETH/MAR22 | 400 | 0.015 | submission | 68 Then the network moves ahead "4" blocks 69 And the current epoch is "0" 70 71 And the parties place the following orders: 72 | party | market id | side | volume | price | resulting trades | type | tif | reference | 73 | lp1 | ETH/MAR22 | buy | 20 | 40 | 0 | TYPE_LIMIT | TIF_GTC | LP1BO | 74 | party1 | ETH/MAR22 | buy | 1 | 100 | 0 | TYPE_LIMIT | TIF_GTC | | 75 | party2 | ETH/MAR22 | sell | 1 | 100 | 0 | TYPE_LIMIT | TIF_GTC | | 76 | lp1 | ETH/MAR22 | sell | 10 | 160 | 0 | TYPE_LIMIT | TIF_GTC | LP1SO | 77 When the opening auction period ends for market "ETH/MAR22" 78 Then the following trades should be executed: 79 | buyer | price | size | seller | 80 | party1 | 100 | 1 | party2 | 81 82 And the market data for the market "ETH/MAR22" should be: 83 | mark price | trading mode | target stake | supplied stake | open interest | ref price | mid price | static mid price | 84 | 100 | TRADING_MODE_CONTINUOUS | 399 | 1000 | 1 | 100 | 100 | 100 | 85 When the parties submit the following AMM: 86 | party | market id | amount | slippage | base | lower bound | upper bound | lower leverage | upper leverage | proposed fee | 87 | vamm1 | ETH/MAR22 | 1000000 | 0.01 | 100 | 85 | 150 | 4 | 4 | 0.01 | 88 Then the AMM pool status should be: 89 | party | market id | amount | status | base | lower bound | upper bound | lower leverage | upper leverage | 90 | vamm1 | ETH/MAR22 | 1000000 | STATUS_ACTIVE | 100 | 85 | 150 | 4 | 4 | 91 92 And set the following AMM sub account aliases: 93 | party | market id | alias | 94 | vamm1 | ETH/MAR22 | vamm1-id | 95 And the following transfers should happen: 96 | from | from account | to | to account | market id | amount | asset | is amm | type | 97 | vamm1 | ACCOUNT_TYPE_GENERAL | vamm1-id | ACCOUNT_TYPE_GENERAL | | 1000000 | USD | true | TRANSFER_TYPE_AMM_LOW | 98 99 @VAMM 100 Scenario: Simply submit pegged orders, cancel all orders on the orderbook, the pegged orders should be pegged to the AMM orders, AMM orders may not stick to market ticks. 101 When the parties place the following pegged iceberg orders: 102 | party | market id | side | volume | peak size | minimum visible size | pegged reference | offset | 103 | lp1 | ETH/MAR22 | buy | 100 | 10 | 2 | BID | 5 | 104 | lp1 | ETH/MAR22 | sell | 100 | 10 | 2 | ASK | 5 | 105 Then the order book should have the following volumes for market "ETH/MAR22": 106 | side | price | volume | 107 | buy | 40 | 20 | 108 | buy | 94 | 10 | 109 | sell | 106 | 10 | 110 | sell | 160 | 10 | 111 112 # ensure moving the network by 1 block doesn't change a thing 113 When the network moves ahead "1" blocks 114 Then the order book should have the following volumes for market "ETH/MAR22": 115 | side | price | volume | 116 | buy | 40 | 20 | 117 | buy | 94 | 10 | 118 | sell | 106 | 10 | 119 | sell | 160 | 10 | 120 121 # Now cancel the LP1BO and LP1SO orders, the pegged orders should remain where they are. 122 When the parties cancel the following orders: 123 | party | reference | 124 | lp1 | LP1BO | 125 | lp1 | LP1SO | 126 Then the order book should have the following volumes for market "ETH/MAR22": 127 | side | price | volume | 128 | buy | 40 | 0 | 129 | buy | 94 | 10 | 130 | sell | 106 | 10 | 131 | sell | 160 | 0 | 132 133 # We pass through block end CheckBook call without problems, and the book volumes still check out. 134 When the network moves ahead "1" blocks 135 Then the order book should have the following volumes for market "ETH/MAR22": 136 | side | price | volume | 137 | buy | 40 | 0 | 138 | buy | 94 | 10 | 139 | sell | 106 | 10 | 140 | sell | 160 | 0 | 141 142 # Now trade, but not necessarily at market tick-compatible price, let's see what happens to the pegged orders. Based on the book, we know there's a buy order at 99, and a sell order at 101 143 When the parties place the following orders: 144 | party | market id | side | volume | price | resulting trades | type | tif | reference | 145 | party2 | ETH/MAR22 | sell | 5 | 99 | 1 | TYPE_LIMIT | TIF_GTC | | 146 And the network moves ahead "1" blocks 147 Then the order book should have the following volumes for market "ETH/MAR22": 148 | side | price | volume | 149 | buy | 40 | 0 | 150 | buy | 93 | 10 | 151 | sell | 99 | 0 | 152 | sell | 106 | 10 | 153 | sell | 160 | 0 | 154