Skip to content

Commit 584ef03

Browse files
authored
Merge branch 'develop' into pos-est-bug
2 parents 8def529 + 353e696 commit 584ef03

File tree

3 files changed

+155
-0
lines changed

3 files changed

+155
-0
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414

1515
- [10926](https://github.com/vegaprotocol/vega/issues/10926) - Backport governance proposal to change market name for spots
1616
- [906](https://github.com/vegaprotocol/core-test-coverage/issues/906) - Add coverage for `0068-MATC-060`
17+
- [907](https://github.com/vegaprotocol/core-test-coverage/issues/907) - Add coverage for `0068-MATC-061`
18+
- [908](https://github.com/vegaprotocol/core-test-coverage/issues/908) - Add coverage for `0068-MATC-062`
19+
- [909](https://github.com/vegaprotocol/core-test-coverage/issues/909) - Add coverage for `0068-MATC-063`
20+
- [910](https://github.com/vegaprotocol/core-test-coverage/issues/910) - Add coverage for `0068-MATC-064`
21+
- [911](https://github.com/vegaprotocol/core-test-coverage/issues/911) - Add coverage for `0068-MATC-065`
1722

1823
### 🐛 Fixes
1924

core/governance/market.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,10 @@ func validateRiskParameters(rp interface{}) (types.ProposalError, error) {
671671
return validateLogNormalRiskParams(r.LogNormal)
672672
case *types.UpdateMarketConfigurationLogNormal:
673673
return validateLogNormalRiskParams(r.LogNormal)
674+
case *types.NewSpotMarketConfigurationSimple:
675+
return types.ProposalErrorUnspecified, nil
676+
case *types.UpdateSpotMarketConfigurationSimple:
677+
return types.ProposalErrorUnspecified, nil
674678
case *types.NewSpotMarketConfigurationLogNormal:
675679
return validateLogNormalRiskParams(r.LogNormal)
676680
case *types.UpdateSpotMarketConfigurationLogNormal:
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
Feature: Spot market order tests. Covers 0068-MATC-061, 0068-MATC-062, 0068-MATC-063, 0068-MATC-064, 0068-MATC-065.
2+
3+
Background:
4+
Given time is updated to "2024-01-01T00:00:00Z"
5+
6+
Given the following network parameters are set:
7+
| name | value |
8+
| network.markPriceUpdateMaximumFrequency | 0s |
9+
| market.value.windowLength | 1h |
10+
11+
Given the following assets are registered:
12+
| id | decimal places |
13+
| ETH | 2 |
14+
| BTC | 2 |
15+
16+
Given the fees configuration named "fees-config-1":
17+
| maker fee | infrastructure fee |
18+
| 0.01 | 0.03 |
19+
Given the log normal risk model named "lognormal-risk-model-1":
20+
| risk aversion | tau | mu | r | sigma |
21+
| 0.001 | 0.01 | 0 | 0.0 | 1.2 |
22+
And the price monitoring named "price-monitoring-1":
23+
| horizon | probability | auction extension |
24+
| 3600 | 0.999 | 10 |
25+
26+
And the spot markets:
27+
| id | name | base asset | quote asset | risk model | auction duration | fees | price monitoring | decimal places | position decimal places | sla params |
28+
| BTC/ETH | BTC/ETH | BTC | ETH | lognormal-risk-model-1 | 1 | fees-config-1 | price-monitoring-1 | 2 | 2 | default-basic |
29+
30+
# setup accounts
31+
Given the parties deposit on asset's general account the following amount:
32+
| party | asset | amount |
33+
| party1 | ETH | 10000 |
34+
| party1 | BTC | 1000 |
35+
| party2 | ETH | 10000 |
36+
| party4 | BTC | 1000 |
37+
| party5 | BTC | 1000 |
38+
And the average block duration is "1"
39+
40+
# Place some orders to get out of auction
41+
And the parties place the following orders:
42+
| party | market id | side | volume | price | resulting trades | type | tif |
43+
| party1 | BTC/ETH | buy | 1 | 998 | 0 | TYPE_LIMIT | TIF_GTC |
44+
| party1 | BTC/ETH | buy | 1 | 1000 | 0 | TYPE_LIMIT | TIF_GTC |
45+
| party5 | BTC/ETH | sell | 1 | 1000 | 0 | TYPE_LIMIT | TIF_GTC |
46+
| party5 | BTC/ETH | sell | 1 | 1050 | 0 | TYPE_LIMIT | TIF_GTC |
47+
48+
And the opening auction period ends for market "BTC/ETH"
49+
When the network moves ahead "1" blocks
50+
Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
51+
And the mark price should be "1000" for the market "BTC/ETH"
52+
53+
Scenario: 0068-MATC-061: Incoming MARKET orders will be matched against the opposite side of the book.
54+
55+
# set up the book with some volume the market order will uncross with
56+
When the parties place the following orders:
57+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
58+
| party1 | BTC/ETH | buy | 5 | 1000 | 0 | TYPE_LIMIT | TIF_GTC | p1-ioc-pas |
59+
And the parties place the following orders:
60+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
61+
| party5 | BTC/ETH | sell | 2 | 0 | 1 | TYPE_MARKET | TIF_IOC | p5-ioc-agg |
62+
Then the following trades should be executed:
63+
| buyer | price | size | seller |
64+
| party1 | 1000 | 2 | party5 |
65+
And the orders should have the following status:
66+
| party | reference | status |
67+
| party1 | p1-ioc-pas | STATUS_ACTIVE |
68+
| party5 | p5-ioc-agg | STATUS_FILLED |
69+
70+
When the network moves ahead "1" blocks
71+
Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
72+
And the market data for the market "BTC/ETH" should be:
73+
| mark price | trading mode | horizon | min bound | max bound | target stake | supplied stake | open interest |
74+
| 1000 | TRADING_MODE_CONTINUOUS | 3600 | 959 | 1042 | 0 | 0 | 0 |
75+
76+
Scenario: 0068-MATC-062: If not enough volume is available to fully fill the order, the remaining will be cancelled.
77+
# set up the book with some volume the market order will partially uncross with
78+
When the parties place the following orders:
79+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
80+
| party1 | BTC/ETH | buy | 2 | 1000 | 0 | TYPE_LIMIT | TIF_GTC | p1-ioc-pas |
81+
And the parties place the following orders:
82+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
83+
| party5 | BTC/ETH | sell | 5 | 0 | 2 | TYPE_MARKET | TIF_IOC | p5-ioc-agg |
84+
Then the following trades should be executed:
85+
| buyer | price | size | seller |
86+
| party1 | 1000 | 2 | party5 |
87+
| party1 | 998 | 1 | party5 |
88+
# filled the order of party 1, the remainder of p5's order is marked as partially filled.
89+
And the orders should have the following status:
90+
| party | reference | status |
91+
| party1 | p1-ioc-pas | STATUS_FILLED |
92+
| party5 | p5-ioc-agg | STATUS_PARTIALLY_FILLED |
93+
94+
# To ensure the order is cancelled (meaning in a final state) let's ensure we can't amend the order:
95+
When the parties amend the following orders:
96+
| party | reference | tif | size delta | error |
97+
| party5 | p5-ioc-agg | TIF_IOC | -1 | OrderError: Invalid Order ID |
98+
99+
When the network moves ahead "1" blocks
100+
Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
101+
And the market data for the market "BTC/ETH" should be:
102+
| mark price | trading mode | horizon | min bound | max bound | target stake | supplied stake | open interest |
103+
| 998 | TRADING_MODE_CONTINUOUS | 3600 | 959 | 1042 | 0 | 0 | 0 |
104+
105+
Scenario: 0068-MATC-064: If there is no match the order will be cancelled. (0068-MATC-063: Incoming LIMIT orders will be matched against the opposite side of the book)
106+
# set up the book with some volume the market order will uncross with
107+
When the parties place the following orders:
108+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
109+
| party5 | BTC/ETH | sell | 2 | 1000 | 0 | TYPE_LIMIT | TIF_IOC | p5-ioc-agg |
110+
Then the orders should have the following status:
111+
| party | reference | status |
112+
| party5 | p5-ioc-agg | STATUS_STOPPED |
113+
114+
When the network moves ahead "1" blocks
115+
Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
116+
And the market data for the market "BTC/ETH" should be:
117+
| mark price | trading mode | horizon | min bound | max bound | target stake | supplied stake | open interest |
118+
| 1000 | TRADING_MODE_CONTINUOUS | 3600 | 959 | 1042 | 0 | 0 | 0 |
119+
120+
Scenario: 0068-MATC-065: If there is a partial match then the remaining will be cancelled. (0068-MATC-063: Incoming LIMIT orders will be matched against the opposite side of the book)
121+
# set up the book with some volume the limit order will partially uncross with
122+
When the parties place the following orders:
123+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
124+
| party1 | BTC/ETH | buy | 2 | 1000 | 0 | TYPE_LIMIT | TIF_GTC | p1-ioc-pas |
125+
And the parties place the following orders:
126+
| party | market id | side | volume | price | resulting trades | type | tif | reference |
127+
| party5 | BTC/ETH | sell | 5 | 1000 | 1 | TYPE_LIMIT | TIF_IOC | p5-ioc-agg |
128+
Then the following trades should be executed:
129+
| buyer | price | size | seller |
130+
| party1 | 1000 | 2 | party5 |
131+
# filled the order of party 1, the remainder of p5's order is marked as partially filled.
132+
And the orders should have the following status:
133+
| party | reference | status |
134+
| party1 | p1-ioc-pas | STATUS_FILLED |
135+
| party5 | p5-ioc-agg | STATUS_PARTIALLY_FILLED |
136+
137+
# To ensure the order is cancelled (meaning in a final state) let's ensure we can't amend the order:
138+
When the parties amend the following orders:
139+
| party | reference | tif | size delta | error |
140+
| party5 | p5-ioc-agg | TIF_IOC | -1 | OrderError: Invalid Order ID |
141+
142+
When the network moves ahead "1" blocks
143+
Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "BTC/ETH"
144+
And the market data for the market "BTC/ETH" should be:
145+
| mark price | trading mode | horizon | min bound | max bound | target stake | supplied stake | open interest |
146+
| 1000 | TRADING_MODE_CONTINUOUS | 3600 | 959 | 1042 | 0 | 0 | 0 |

0 commit comments

Comments
 (0)