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   |