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

     1  Feature: check VAMM when SLA bond penalty is due
     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                     | 1000  |
    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    Scenario: set up AMM
    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   | 30000   |
    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 | 30000  | 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 | 30000  | 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 |           | 30000  | USD   | true   | TRANSFER_TYPE_AMM_LOW |
    98  
    99      Then the parties should have the following account balances:
   100        | party                                                            | asset | market id | general |
   101        | 137112507e25d3845a56c47db15d8ced0f28daa8498a0fd52648969c4b296aba | USD   | ETH/MAR22 | 30000   |
   102  
   103      Then the parties should have the following account balances:
   104        | party                                                            | asset | market id | margin | general | bond |
   105        | lp1                                                              | USD   | ETH/MAR22 | 960    | 998440  | 600  |
   106        | lp2                                                              | USD   | ETH/MAR22 | 0      | 999600  | 400  |
   107        | 137112507e25d3845a56c47db15d8ced0f28daa8498a0fd52648969c4b296aba | USD   | ETH/MAR22 | 0      | 30000   |      |
   108  
   109      Then the network moves ahead "8" blocks
   110  
   111      Then the parties should have the following account balances:
   112        | party                                                            | asset | market id | margin | general | bond |
   113        | lp1                                                              | USD   | ETH/MAR22 | 960    | 998440  | 540  |
   114        | lp2                                                              | USD   | ETH/MAR22 | 0      | 999600  | 360  |
   115        | 137112507e25d3845a56c47db15d8ced0f28daa8498a0fd52648969c4b296aba | USD   | ETH/MAR22 | 0      | 30000   |      |
   116  
   117      #0042-LIQF-092:All vAMMs active on a market at the end of an epoch receive SLA bonus rebalancing payments with `0` penalty fraction.
   118      #both lp1 and lp2 got SLA penalty while vamm1 did not
   119      Then the following transfers should happen:
   120        | from | to     | from account      | to account             | market id | amount | asset |
   121        | lp1  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 60     | USD   |
   122        | lp2  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 40     | USD   |
   123  
   124      Then the network moves ahead "8" blocks
   125  
   126      When the parties cancel the following AMM:
   127        | party | market id | method           |
   128        | vamm1 | ETH/MAR22 | METHOD_IMMEDIATE |
   129  
   130      Then the parties should have the following account balances:
   131        | party | asset | market id | general |
   132        | vamm1 | USD   | ETH/MAR22 | 30000   |
   133  
   134      Then the network moves ahead "4" blocks
   135      #0042-LIQF-093:A vAMM active on a market during an epoch, which was cancelled prior to the end of an epoch, receives SLA bonus rebalancing payments with `0` penalty fraction.
   136      #both lp1 and lp2 got SLA penalty while vamm1 did not, and asset has been released from alias back to vamm1
   137      Then the following transfers should happen:
   138        | from | to     | from account      | to account             | market id | amount | asset |
   139        | lp1  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 54     | USD   |
   140        | lp2  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 36     | USD   |
   141  
   142      When the parties place the following orders:
   143        | party  | market id | side | volume | price | resulting trades | type       | tif     |
   144        | party4 | ETH/MAR22 | buy  | 4      | 120   | 0                | TYPE_LIMIT | TIF_GTC |
   145  
   146      #0042-LIQF-094:A vAMMs cancelled in a previous epoch does not receive anything and is not considered during SLA rebalancing at the end of an epoch
   147      Then the network moves ahead "12" blocks
   148  
   149      Then the following transfers should happen:
   150        | from | to     | from account      | to account             | market id | amount | asset |
   151        | lp1  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 48     | USD   |
   152        | lp2  | market | ACCOUNT_TYPE_BOND | ACCOUNT_TYPE_INSURANCE | ETH/MAR22 | 32     | USD   |
   153  
   154      Then the parties should have the following account balances:
   155        | party | asset | market id | general |
   156        | vamm1 | USD   | ETH/MAR22 | 30000   |
   157