code.vegaprotocol.io/vega@v0.79.0/core/integration/features/amm/0090-VAMM-032.feature (about) 1 Feature: vAMM behaviour when a market settles with distressed AMM. 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 | 0 | 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 oracle spec for settlement data filtering data from "0xCAFECAFE" named "ethMar22Oracle": 48 | property | type | binding | 49 | prices.ETH.value | TYPE_INTEGER | settlement data | 50 And the oracle spec for trading termination filtering data from "0xCAFECAFE" named "ethMar22Oracle": 51 | property | type | binding | 52 | trading.terminated | TYPE_BOOLEAN | trading termination | 53 And the settlement data decimals for the oracle named "ethMar22Oracle" is given in "0" decimal places 54 55 And the markets: 56 | 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 | 57 | ETH/MAR22 | USD | USD | lqm-params | log-normal-risk-model | margin-calculator-1 | 2 | fees-config-1 | default-none | ethMar22Oracle | 1e0 | 0 | SLA-22 | 58 59 # 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 60 Given the parties deposit on asset's general account the following amount: 61 | party | asset | amount | 62 | lp1 | USD | 1000000 | 63 | lp2 | USD | 1000000 | 64 | lp3 | USD | 1000000 | 65 | party1 | USD | 1000000 | 66 | party2 | USD | 1000000 | 67 | party3 | USD | 1000000 | 68 | party4 | USD | 1000000 | 69 | party5 | USD | 1000000 | 70 | vamm1 | USD | 30000 | 71 72 When the parties submit the following liquidity provision: 73 | id | party | market id | commitment amount | fee | lp type | 74 | lp_1 | lp1 | ETH/MAR22 | 600 | 0.02 | submission | 75 | lp_2 | lp2 | ETH/MAR22 | 400 | 0.015 | submission | 76 Then the network moves ahead "4" blocks 77 And the current epoch is "0" 78 79 And the parties place the following orders: 80 | party | market id | side | volume | price | resulting trades | type | tif | reference | 81 | lp1 | ETH/MAR22 | buy | 20 | 40 | 0 | TYPE_LIMIT | TIF_GTC | lp1-b | 82 | party1 | ETH/MAR22 | buy | 1 | 100 | 0 | TYPE_LIMIT | TIF_GTC | | 83 | party2 | ETH/MAR22 | sell | 1 | 100 | 0 | TYPE_LIMIT | TIF_GTC | | 84 | lp1 | ETH/MAR22 | sell | 10 | 160 | 0 | TYPE_LIMIT | TIF_GTC | lp1-s | 85 When the opening auction period ends for market "ETH/MAR22" 86 Then the following trades should be executed: 87 | buyer | price | size | seller | 88 | party1 | 100 | 1 | party2 | 89 90 And the market data for the market "ETH/MAR22" should be: 91 | mark price | trading mode | target stake | supplied stake | open interest | ref price | mid price | static mid price | 92 | 100 | TRADING_MODE_CONTINUOUS | 39 | 1000 | 1 | 100 | 100 | 100 | 93 When the parties submit the following AMM: 94 | party | market id | amount | slippage | base | lower bound | upper bound | lower leverage | upper leverage | proposed fee | 95 | vamm1 | ETH/MAR22 | 30000 | 0.1 | 100 | 85 | 150 | 4 | 4 | 0.01 | 96 Then the AMM pool status should be: 97 | party | market id | amount | status | base | lower bound | upper bound | lower leverage | upper leverage | 98 | vamm1 | ETH/MAR22 | 30000 | STATUS_ACTIVE | 100 | 85 | 150 | 4 | 4 | 99 100 And set the following AMM sub account aliases: 101 | party | market id | alias | 102 | vamm1 | ETH/MAR22 | vamm1-id | 103 And the following transfers should happen: 104 | from | from account | to | to account | market id | amount | asset | is amm | type | 105 | vamm1 | ACCOUNT_TYPE_GENERAL | vamm1-id | ACCOUNT_TYPE_GENERAL | | 30000 | USD | true | TRANSFER_TYPE_AMM_LOW | 106 107 @VAMM 108 Scenario: 0090-VAMM-032: When an AMM is active on a market at time of settlement with a position in a well collateralised state, the market can settle successfully and then all funds on the AMM key are transferred back to the main party's account. 109 When the parties place the following orders: 110 | party | market id | side | volume | price | resulting trades | type | tif | 111 | party4 | ETH/MAR22 | buy | 1 | 110 | 1 | TYPE_LIMIT | TIF_GTC | 112 | party4 | ETH/MAR22 | buy | 1 | 125 | 1 | TYPE_LIMIT | TIF_GTC | 113 # see the trades that make the vAMM go short 114 Then debug trades 115 Then the following trades should be executed: 116 | buyer | price | size | seller | is amm | 117 | party4 | 100 | 1 | vamm1-id | true | 118 | party4 | 100 | 1 | vamm1-id | true | 119 120 When the network moves ahead "1" blocks 121 Then the market data for the market "ETH/MAR22" should be: 122 | mark price | trading mode | mid price | static mid price | supplied stake | target stake | 123 | 100 | TRADING_MODE_CONTINUOUS | 101 | 101 | 1000 | 119 | 124 And the parties should have the following profit and loss: 125 | party | volume | unrealised pnl | realised pnl | is amm | 126 | party4 | 2 | 0 | 0 | | 127 | vamm1-id | -2 | 0 | 0 | true | 128 And the AMM pool status should be: 129 | party | market id | amount | status | base | lower bound | upper bound | lower leverage | upper leverage | 130 | vamm1 | ETH/MAR22 | 30000 | STATUS_ACTIVE | 100 | 85 | 150 | 4 | 4 | 131 132 # No terminate && settle the market 133 When the oracles broadcast data signed with "0xCAFECAFE": 134 | name | value | 135 | trading.terminated | true | 136 Then the network moves ahead "1" blocks 137 And the parties should have the following account balances: 138 | party | asset | market id | general | margin | is amm | 139 | vamm1 | USD | | 0 | | | 140 | vamm1-id | USD | ETH/MAR22 | 29582 | 420 | true | 141 142 # Settlement price is ~9x mark price 143 When the oracles broadcast data signed with "0xCAFECAFE": 144 | name | value | 145 | prices.ETH.value | 1000 | 146 Then the market state should be "STATE_SETTLED" for the market "ETH/MAR22" 147 And then the network moves ahead "1" blocks 148 149 # verify the that the margin balance is released, and then the correct balance if transferred from the pool account back to the party. 150 # We see fees on both trades, a MTM loss transfer, margin being allocated, then the loss transfer from the final settlement 151 # and lastly a transfer of the general account back to the owner. 152 Then debug transfers 153 And the following transfers should happen: 154 | from | from account | to | to account | market id | amount | asset | is amm | type | 155 | | ACCOUNT_TYPE_FEES_MAKER | vamm1-id | ACCOUNT_TYPE_GENERAL | ETH/MAR22 | 1 | USD | true | TRANSFER_TYPE_MAKER_FEE_RECEIVE | 156 | | ACCOUNT_TYPE_FEES_MAKER | vamm1-id | ACCOUNT_TYPE_GENERAL | ETH/MAR22 | 1 | USD | true | TRANSFER_TYPE_MAKER_FEE_RECEIVE | 157 | vamm1-id | ACCOUNT_TYPE_GENERAL | vamm1-id | ACCOUNT_TYPE_MARGIN | ETH/MAR22 | 420 | USD | true | TRANSFER_TYPE_MARGIN_LOW | 158 | vamm1-id | ACCOUNT_TYPE_MARGIN | | ACCOUNT_TYPE_SETTLEMENT | ETH/MAR22 | 420 | USD | true | TRANSFER_TYPE_LOSS | 159 | vamm1-id | ACCOUNT_TYPE_GENERAL | | ACCOUNT_TYPE_SETTLEMENT | ETH/MAR22 | 1380 | USD | true | TRANSFER_TYPE_LOSS | 160 | vamm1-id | ACCOUNT_TYPE_GENERAL | vamm1 | ACCOUNT_TYPE_GENERAL | | 28204 | USD | true | TRANSFER_TYPE_AMM_RELEASE | 161 And the parties should have the following account balances: 162 | party | asset | market id | general | margin | is amm | 163 | vamm1 | USD | | 28204 | | | 164 | vamm1-id | USD | ETH/MAR22 | 0 | 0 | true |