code.vegaprotocol.io/vega@v0.79.0/core/integration/features/pap/0097-PAPU-023.feature (about)

     1  Feature: Given the program is currently in an automated auction, if a program's expiry timestamp is reached, the program will only be cancelled when the current auction uncrosses at which point no further auctions will take place. (0097-PAPU-023).
     2      Background:
     3          Given time is updated to "2024-09-24T00:00:00Z"
     4          And the average block duration is "1"
     5  
     6          Given the log normal risk model named "log-normal-risk-model":
     7              | risk aversion | tau | mu | r | sigma |
     8              | 0.000001      | 0.1 | 0  | 0 | 1.0   |
     9          And the following network parameters are set:
    10              | name                                    | value |
    11              | market.value.windowLength               | 60s   |
    12              | network.markPriceUpdateMaximumFrequency | 0s    |
    13              | limits.markets.maxPeggedOrders          | 6     |
    14              | market.auction.minimumDuration          | 1     |
    15              | market.fee.factors.infrastructureFee    | 0.001 |
    16              | market.fee.factors.makerFee             | 0.004 |
    17              | spam.protection.max.stopOrdersPerMarket | 5     |
    18              | validators.epoch.length                 | 60m   |
    19          And the liquidity monitoring parameters:
    20              | name       | triggering ratio | time window | scaling factor |
    21              | lqm-params | 1.0              | 20s         | 1              |
    22          And the fees configuration named "fees-config-1":
    23              | maker fee | infrastructure fee |
    24              | 0.0004    | 0.001              |
    25          And the price monitoring named "price-monitoring":
    26              | horizon | probability | auction extension |
    27              | 3600    | 0.99        | 30                |
    28          And the liquidity sla params named "SLA-22":
    29              | price range | commitment min time fraction | performance hysteresis epochs | sla competition factor |
    30              | 0.5         | 0.6                          | 1                             | 1.0                    |
    31          And the following network parameters are set:
    32              | name                           | value |
    33              | limits.markets.maxPeggedOrders | 2     |
    34          And the following assets are registered:
    35              | id  | decimal places |
    36              | ETH | 0              |
    37  
    38          And the spot markets:
    39              | id      | name    | base asset | quote asset | liquidity monitoring | risk model            | auction duration | fees          | price monitoring | sla params |
    40              | BTC/ETH | BTC/ETH | BTC        | ETH         | lqm-params           | log-normal-risk-model | 2                | fees-config-1 | price-monitoring | SLA-22     |
    41  
    42          Given the parties deposit on asset's general account the following amount:
    43              | party  | asset | amount     |
    44              | party1 | ETH   | 1000000000 |
    45              | party2 | ETH   | 1000000000 |
    46              | party3 | ETH   | 1000000000 |
    47              | party1 | BTC   | 1000000000 |
    48              | party3 | BTC   | 1000000000 |
    49              | lpprov | ETH   | 1000000000 |
    50              | lpprov | BTC   | 1000000000 |
    51  
    52          When the parties submit the following liquidity provision:
    53              | id  | party  | market id | commitment amount | fee | lp type    |
    54              | lp1 | lpprov | BTC/ETH   | 937000            | 0.1 | submission |
    55              | lp1 | lpprov | BTC/ETH   | 937000            | 0.1 | submission |
    56          And the parties place the following pegged iceberg orders:
    57              | party  | market id | peak size | minimum visible size | side | pegged reference | volume | offset |
    58              | lpprov | BTC/ETH   | 2         | 1                    | buy  | MID              | 50     | 100    |
    59              | lpprov | BTC/ETH   | 2         | 1                    | sell | MID              | 50     | 100    |
    60  
    61          # place orders and generate trades - slippage 100
    62          And the parties place the following orders:
    63              | party  | market id | side | volume | price   | resulting trades | type       | tif     | reference |
    64              | party2 | BTC/ETH   | buy  | 1      | 950000  | 0                | TYPE_LIMIT | TIF_GTC | t2-b-1    |
    65              | party1 | BTC/ETH   | buy  | 1      | 1000000 | 0                | TYPE_LIMIT | TIF_GFA | t1-b-1    |
    66              | party3 | BTC/ETH   | sell | 1      | 1000000 | 0                | TYPE_LIMIT | TIF_GTC | t2-s-1    |
    67  
    68          When the opening auction period ends for market "BTC/ETH"
    69  
    70          And the following trades should be executed:
    71              | buyer  | price   | size | seller |
    72              | party1 | 1000000 | 1    | party3 |
    73          And the mark price should be "1000000" for the market "BTC/ETH"
    74  
    75          And the composite price oracles from "0xCAFECAFE2":
    76              | name         | price property   | price type   | price decimals |
    77              | price_oracle | prices.ETH.value | TYPE_INTEGER | 0              |
    78  
    79          And the time triggers oracle spec is:
    80              | name                      | initial   | every |
    81              | auction_schedule          | 172713601 | 30    |
    82              | auction_vol_snap_schedule | 172713600 | 30    |
    83  
    84  
    85          And the parties deposit on asset's general account the following amount:
    86              | party                                                            | asset | amount |
    87              | f0b40ebdc5b92cf2cf82ff5d0c3f94085d23d5ec2d37d0b929e177c6d4d37e4c | BTC   | 50000  |
    88  
    89          And the parties submit the following one off transfers:
    90              | id | from                                                             | from_account_type    | to                                                               | to_account_type            | asset | amount | delivery_time        |
    91              | 1  | f0b40ebdc5b92cf2cf82ff5d0c3f94085d23d5ec2d37d0b929e177c6d4d37e4c | ACCOUNT_TYPE_GENERAL | 0000000000000000000000000000000000000000000000000000000000000000 | ACCOUNT_TYPE_BUY_BACK_FEES | BTC   | 5000   | 2024-09-23T00:00:00Z |
    92  
    93          And the buy back fees balance should be "5000" for the asset "BTC"
    94  
    95      Scenario: PAP order is submitted into a PAP auction and is fully matched - during the auction the pap expires - the auction will end successfully and the pap will be finished then.
    96          When the protocol automated purchase is defined as:
    97              | id    | from | from account type          | to account type               | market id | price oracle | price oracle staleness tolerance | oracle offset factor | auction schedule oracle | auction volume snapshot schedule oracle | auction duration | minimum auction size | maximum auction size | expiry timestamp |
    98              | 12345 | BTC  | ACCOUNT_TYPE_BUY_BACK_FEES | ACCOUNT_TYPE_NETWORK_TREASURY | BTC/ETH   | price_oracle | 10s                              | 1.01                 | auction_schedule        | auction_vol_snap_schedule               | 120s             | 100                  | 200                  | 1727136060       |
    99  
   100          Then the oracles broadcast data with block time signed with "0xCAFECAFE2":
   101              | name             | value   | time offset |
   102              | prices.ETH.value | 1000000 | -1s         |
   103  
   104          And the network moves ahead "30" blocks
   105  
   106          # maximum auction size is 200 so expect 200 to be earmarked
   107          Then the automated purchase program for market "BTC/ETH" should have a snapshot balance of "200"
   108  
   109          # we enter a pap auction
   110          And the trading mode should be "TRADING_MODE_PROTOCOL_AUTOMATED_PURCHASE_AUCTION" for the market "BTC/ETH"
   111  
   112          # an order for sell BTC with size 200 and price 1.01 * 1000000 is placed
   113          And the order book should have the following volumes for market "BTC/ETH":
   114              | side | price   | volume |
   115              | sell | 1010000 | 200    |
   116  
   117          # lets place a limit order for the buy at 101000 so it crosses
   118          And the parties place the following orders:
   119              | party  | market id | side | volume | price   | resulting trades | type       | tif     | reference |
   120              | party2 | BTC/ETH   | buy  | 200    | 1010000 | 0                | TYPE_LIMIT | TIF_GTC | t2-b-1    |
   121  
   122          # move to the end of the auction
   123          And the network moves ahead "121" blocks
   124  
   125          # expect to leave the auction
   126          And the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
   127  
   128          # expect 200 BTC to have been moved from the BTC buy back account
   129          And the buy back fees balance should be "4800" for the asset "BTC"
   130          # 202000000 - 0.0505 * 200 * 1010000 = 191,799,000
   131          And the network treasury balance should be "191799000" for the asset "ETH"
   132          And "party2" should have general account balance of "200" for asset "BTC"
   133  
   134          And the active pap id should be "none" for the market "BTC/ETH"
   135          And the active pap order id should be "none" for the market "BTC/ETH"