code.vegaprotocol.io/vega@v0.79.0/core/integration/features/pap/0097-PAPU-027.feature (about) 1 Feature: Given a network with two PAP programs, A and B, funded from the same account with a balance of 1000. If the snapshot of program A is triggered and is allocated 750 tokens for it's next auction, once the snapshot of program B is triggered it will only be allocated 250 tokens for it's next auction. This happens regardless of whether the auction of program B is triggered before the auction of program A. (0097-PAPU-027). 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 | BTC/ETH2 | BTC/ETH2 | BTC | ETH | lqm-params | log-normal-risk-model | 2 | fees-config-1 | price-monitoring | SLA-22 | 39 40 Given the parties deposit on asset's general account the following amount: 41 | party | asset | amount | 42 | party1 | ETH | 1000000000 | 43 | party2 | ETH | 1000000000 | 44 | party3 | ETH | 1000000000 | 45 | party1 | BTC | 1000000000 | 46 | party3 | BTC | 1000000000 | 47 | lpprov | ETH | 1000000000 | 48 | lpprov | BTC | 1000000000 | 49 50 When the parties submit the following liquidity provision: 51 | id | party | market id | commitment amount | fee | lp type | 52 | lp1 | lpprov | BTC/ETH | 937000 | 0.1 | submission | 53 | lp1 | lpprov | BTC/ETH | 937000 | 0.1 | submission | 54 | lp1 | lpprov | BTC/ETH2 | 937000 | 0.1 | submission | 55 | lp1 | lpprov | BTC/ETH2 | 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 | lpprov | BTC/ETH2 | 2 | 1 | buy | MID | 50 | 100 | 61 | lpprov | BTC/ETH2 | 2 | 1 | sell | MID | 50 | 100 | 62 63 # place orders and generate trades - slippage 100 64 And the parties place the following orders: 65 | party | market id | side | volume | price | resulting trades | type | tif | reference | 66 | party2 | BTC/ETH | buy | 1 | 950000 | 0 | TYPE_LIMIT | TIF_GTC | t2-b-1 | 67 | party1 | BTC/ETH | buy | 1 | 1000000 | 0 | TYPE_LIMIT | TIF_GFA | t1-b-1 | 68 | party3 | BTC/ETH | sell | 1 | 1000000 | 0 | TYPE_LIMIT | TIF_GTC | t2-s-1 | 69 | party2 | BTC/ETH2 | buy | 1 | 950000 | 0 | TYPE_LIMIT | TIF_GTC | t2-b-1 | 70 | party1 | BTC/ETH2 | buy | 1 | 1000000 | 0 | TYPE_LIMIT | TIF_GFA | t1-b-1 | 71 | party3 | BTC/ETH2 | sell | 1 | 1000000 | 0 | TYPE_LIMIT | TIF_GTC | t2-s-1 | 72 73 74 When the opening auction period ends for market "BTC/ETH" 75 And the mark price should be "1000000" for the market "BTC/ETH" 76 And the mark price should be "1000000" for the market "BTC/ETH2" 77 78 And the composite price oracles from "0xCAFECAFE2": 79 | name | price property | price type | price decimals | 80 | price_oracle | prices.ETH.value | TYPE_INTEGER | 0 | 81 82 And the time triggers oracle spec is: 83 | name | initial | every | 84 | auction_vol_snap_schedule1 | 1727136005 | 30 | 85 | auction_vol_snap_schedule2 | 1727136010 | 30 | 86 | auction_schedule1 | 1727136012 | 30 | 87 | auction_schedule2 | 1727136011 | 30 | 88 89 90 91 And the average block duration is "1" 92 93 And the parties deposit on asset's general account the following amount: 94 | party | asset | amount | 95 | f0b40ebdc5b92cf2cf82ff5d0c3f94085d23d5ec2d37d0b929e177c6d4d37e4c | BTC | 1000 | 96 Given time is updated to "2024-09-24T00:00:00Z" 97 And the parties submit the following one off transfers: 98 | id | from | from_account_type | to | to_account_type | asset | amount | delivery_time | 99 | 1 | f0b40ebdc5b92cf2cf82ff5d0c3f94085d23d5ec2d37d0b929e177c6d4d37e4c | ACCOUNT_TYPE_GENERAL | 0000000000000000000000000000000000000000000000000000000000000000 | ACCOUNT_TYPE_BUY_BACK_FEES | BTC | 1000 | 2024-09-23T00:00:00Z | 100 101 And the buy back fees balance should be "1000" for the asset "BTC" 102 103 Scenario: setting up multiple markets with pap program from the same account. The first market with the volume snapshot is earmarking as much as it can and the second market earmarks whatever is left although the second one's auction starts before the first one. (0097-PAPU-027) 104 When the protocol automated purchase is defined as: 105 | 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 | 106 | 12345 | BTC | ACCOUNT_TYPE_BUY_BACK_FEES | ACCOUNT_TYPE_NETWORK_TREASURY | BTC/ETH | price_oracle | 10s | 1.01 | auction_schedule1 | auction_vol_snap_schedule1 | 60s | 100 | 750 | 0 | 107 | 54321 | BTC | ACCOUNT_TYPE_BUY_BACK_FEES | ACCOUNT_TYPE_NETWORK_TREASURY | BTC/ETH2 | price_oracle | 10s | 1.01 | auction_schedule2 | auction_vol_snap_schedule2 | 60s | 100 | 750 | 0 | 108 109 Then the oracles broadcast data with block time signed with "0xCAFECAFE2": 110 | name | value | time offset | 111 | prices.ETH.value | 1000000 | -1s | 112 113 And the network moves ahead "30" blocks 114 115 # the volume snapshot for the market BTC/ETH ticks first so it earmarks the maximum it is allowed, i.e. 750 116 # the volume snapshot for the market BTC/ETH2 ticks second so it earmarks the maximum it is has remaining, i.e. 250 117 Then the automated purchase program for market "BTC/ETH" should have a snapshot balance of "750" 118 Then the automated purchase program for market "BTC/ETH2" should have a snapshot balance of "250" 119 120 # both enter a pap auction 121 And the trading mode should be "TRADING_MODE_PROTOCOL_AUTOMATED_PURCHASE_AUCTION" for the market "BTC/ETH" 122 And the trading mode should be "TRADING_MODE_PROTOCOL_AUTOMATED_PURCHASE_AUCTION" for the market "BTC/ETH2" 123 124 # for BTC/ETH: an order for sell BTC with size 750 and price 1.01 * 1000000 is placed 125 And the order book should have the following volumes for market "BTC/ETH": 126 | side | price | volume | 127 | sell | 1010000 | 750 | 128 129 # for BTC/ETH2: an order for sell BTC with size 250 and price 1.01 * 1000000 is placed 130 And the order book should have the following volumes for market "BTC/ETH2": 131 | side | price | volume | 132 | sell | 1010000 | 250 |