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"