code.vegaprotocol.io/vega@v0.79.0/core/integration/features/amm/0090-VAMM-019.feature (about)

     1  Feature: Test vAMM cancellation by abandoning.
     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 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 |
    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     |
    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 | lp1-b     |
    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 | lp1-s     |
    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 | 39           | 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 | 100000 | 0.1      | 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 | 100000 | 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 |           | 100000 | USD   | true   | TRANSFER_TYPE_AMM_LOW |
    98  
    99  
   100    @VAMM
   101    Scenario: 0090-VAMM-019: If a vAMM is cancelled with Abandon Position then it is closed immediately. All funds which were in the general account of the vAMM are returned to the user who created the vAMM and the remaining position and margin funds are moved to the network to close out as it would a regular defaulted position.
   102      # based on 0090-VAMM-008: vAMM creates a position, has some general balance left in general and margin accounts.
   103      When the parties place the following orders:
   104        | party  | market id | side | volume | price | resulting trades | type       | tif     |
   105        | party4 | ETH/MAR22 | buy  | 500    | 155   | 1                | TYPE_LIMIT | TIF_GTC |
   106      # see the trades that make the vAMM go short
   107      Then the following trades should be executed:
   108        | buyer  | price | size | seller   | is amm |
   109        | party4 | 122   | 291  | vamm1-id | true   |
   110      And the market data for the market "ETH/MAR22" should be:
   111        | mark price | trading mode            | mid price | static mid price | best offer price | best bid price |
   112        | 100        | TRADING_MODE_CONTINUOUS | 157       | 157              | 160              | 155            |
   113  
   114      # trying to trade again causes no trades because the AMM has no more volume
   115      When the parties place the following orders:
   116        | party  | market id | side | volume | price | resulting trades | type       | tif     |
   117        | party4 | ETH/MAR22 | buy  | 500    | 150   | 0                | TYPE_LIMIT | TIF_GTC |
   118  
   119      # the AMM's mid price has moved to 150, but it has no volume +150 so that best offer comes from the orderbook of 160
   120      Then the market data for the market "ETH/MAR22" should be:
   121        | mark price | trading mode            | mid price | static mid price | best offer price | best bid price |
   122        | 100        | TRADING_MODE_CONTINUOUS | 157       | 157              | 160              | 155            |
   123  
   124      When the network moves ahead "1" blocks
   125  	Then the parties should have the following profit and loss:
   126        | party    | volume | unrealised pnl | realised pnl | is amm |
   127        | party4   | 291    | 0              | 0            |        |
   128        | vamm1-id | -291   | 0              | 0            | true   |
   129      # Notional value therefore is 317 * 122
   130      And the market data for the market "ETH/MAR22" should be:
   131        | mark price | trading mode            | mid price | static mid price | best offer price | best bid price |
   132        | 122        | TRADING_MODE_CONTINUOUS | 157       | 157              | 160              | 155            |
   133      
   134      # vAMM receives fees, but loses out in the MTM settlement
   135      And the following transfers should happen:
   136         | from     | from account            | to       | to account           | market id | amount | asset | is amm | type                            |
   137         |          | ACCOUNT_TYPE_FEES_MAKER | vamm1-id | ACCOUNT_TYPE_GENERAL | ETH/MAR22 | 143    | USD   | true   | TRANSFER_TYPE_MAKER_FEE_RECEIVE |
   138         | vamm1-id | ACCOUNT_TYPE_GENERAL    | vamm1-id | ACCOUNT_TYPE_MARGIN  | ETH/MAR22 | 74548  | USD   | true   | TRANSFER_TYPE_MARGIN_LOW        |
   139      And the parties should have the following account balances:
   140        | party    | asset | market id | general | margin | is amm |
   141        | vamm1    | USD   |           | 900000  |        |        |
   142        | vamm1-id | USD   | ETH/MAR22 | 25595   | 74548  | true   |
   143  
   144      # Immediate cancellation: return vAMM general balance back to the party, margin is confiscated.
   145      When the parties cancel the following AMM:
   146        | party | market id | method           |
   147        | vamm1 | ETH/MAR22 | METHOD_IMMEDIATE |
   148      Then the AMM pool status should be:
   149        | party | market id | amount | status           | base | lower bound | upper bound | lower leverage | upper leverage |
   150        | vamm1 | ETH/MAR22 | 100000 | STATUS_CANCELLED | 100  | 85          | 150         | 4              | 4              |
   151      And the parties should have the following account balances:
   152        | party    | asset | market id | general | margin | is amm |
   153        | vamm1    | USD   |           | 925595  |        |        |
   154      And the following transfers should happen:
   155         | from     | from account         | to    | to account             | market id | amount | asset | is amm | type                      |
   156         | vamm1-id | ACCOUNT_TYPE_GENERAL | vamm1 | ACCOUNT_TYPE_GENERAL   | ETH/MAR22 | 25595  | USD   | true   | TRANSFER_TYPE_AMM_RELEASE |
   157         | vamm1-id | ACCOUNT_TYPE_MARGIN  |       | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 74548  | USD   | true   | TRANSFER_TYPE_AMM_RELEASE |
   158