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

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