code.vegaprotocol.io/vega@v0.79.0/core/integration/features/referrals/0083-RFPR-benefit_factors.feature (about)

     1  Feature: Setting and applying referee benefit factors
     2  
     3    Background:
     4  
     5      # Initialise timings
     6      Given time is updated to "2023-01-01T00:00:00Z"
     7      And the average block duration is "1"
     8      And the margin calculator named "margin-calculator-1":
     9        | search factor | initial factor | release factor |
    10        | 1.2           | 1.5            | 1.7            |
    11      And the log normal risk model named "log-normal-risk-model":
    12        | risk aversion | tau | mu | r | sigma |
    13        | 0.000001      | 0.1 | 0  | 0 | 1.0   |
    14      And the price monitoring named "price-monitoring":
    15        | horizon | probability | auction extension |
    16        | 3600    | 0.99        | 3                 |
    17  
    18      # Initialise the markets and network parameters
    19      Given the following network parameters are set:
    20        | name                                                    | value      |
    21        | market.fee.factors.infrastructureFee                    | 0.01       |
    22        | market.fee.factors.makerFee                             | 0.01       |
    23        | market.auction.minimumDuration                          | 1          |
    24        | limits.markets.maxPeggedOrders                          | 4          |
    25        | referralProgram.minStakedVegaTokens                     | 0          |
    26        | referralProgram.maxPartyNotionalVolumeByQuantumPerEpoch | 1000000000 |
    27        | referralProgram.maxReferralRewardProportion             | 0.1        |
    28  
    29      # Initalise the referral program then move forwards an epoch to start the program
    30      Given the referral benefit tiers "rbt":
    31        | minimum running notional taker volume | minimum epochs | referral reward infra factor | referral reward maker factor | referral reward liquidity factor | referral discount infra factor | referral discount maker factor | referral discount liquidity factor |
    32        | 2000                                  | 2              | 0.021                        | 0.022                        | 0.023                            | 0.024                          | 0.025                          | 0.026                              |
    33        | 3000                                  | 3              | 0.21                         | 0.22                         | 0.23                             | 0.24                           | 0.25                           | 0.26                               |
    34      And the referral staking tiers "rst":
    35        | minimum staked tokens | referral reward multiplier |
    36        | 1                     | 1                          |
    37      And the referral program:
    38        | end of program       | window length | benefit tiers | staking tiers |
    39        | 2023-12-12T12:12:12Z | 7             | rbt           | rst           |
    40      And the network moves ahead "1" epochs
    41  
    42      # Initialse the assets and markets
    43      And the following assets are registered:
    44        | id      | decimal places | quantum |
    45        | USD.1.1 | 1              | 1       |
    46      And the markets:
    47        | id          | quote name | asset   | risk model                    | margin calculator         | auction duration | fees         | price monitoring | data source config     | linear slippage factor | quadratic slippage factor | sla params      | decimal places | position decimal places |
    48        | ETH/USD.1.1 | ETH        | USD.1.1 | default-log-normal-risk-model | default-margin-calculator | 1                | default-none | default-none     | default-eth-for-future | 1e-3                   | 0                         | default-futures | 1              | 1                       |
    49        | ETH/USD.1.2 | ETH        | USD.1.1 | log-normal-risk-model         | margin-calculator-1       | 1                | default-none | price-monitoring | default-eth-for-future | 1e-3                   | 0                         | default-futures | 1              | 1                       |
    50      And the liquidity monitoring parameters:
    51        | name       | triggering ratio | time window | scaling factor |
    52        | lqm-params | 1.0              | 3600s       | 1              |
    53      When the markets are updated:
    54        | id          | liquidity monitoring | linear slippage factor | quadratic slippage factor |
    55        | ETH/USD.1.1 | lqm-params           | 1e-3                   | 0                         |
    56        | ETH/USD.1.2 | lqm-params           | 1e-3                   | 0                         |
    57  
    58      # Initialise the parties
    59      Given the parties deposit on asset's general account the following amount:
    60        | party     | asset   | amount     |
    61        | lpprov    | USD.1.1 | 1000000000 |
    62        | lpprov2   | USD.1.1 | 1000000000 |
    63        | aux1      | USD.1.1 | 1000000000 |
    64        | aux2      | USD.1.1 | 1000000000 |
    65        | aux3      | USD.1.1 | 1000000000 |
    66        | aux4      | USD.1.1 | 1000000000 |
    67        | referrer1 | USD.1.1 | 1000000000 |
    68        | referee1  | USD.1.1 | 1000000000 |
    69        | referee2  | USD.1.1 | 1000000000 |
    70        | ptbuy     | USD.1.1 | 1000000000 |
    71        | ptsell    | USD.1.1 | 1000000000 |
    72  
    73      # Exit the opening auction
    74      Given the parties submit the following liquidity provision:
    75        | id  | party   | market id   | commitment amount | fee  | lp type    |
    76        | lp1 | lpprov  | ETH/USD.1.1 | 1000000           | 0.01 | submission |
    77        | lp2 | lpprov2 | ETH/USD.1.2 | 1000000           | 0.01 | submission |
    78      And the parties place the following pegged iceberg orders:
    79        | party   | market id   | peak size | minimum visible size | side | pegged reference | volume | offset |
    80        | lpprov  | ETH/USD.1.1 | 5000      | 1000                 | buy  | BID              | 10000  | 1      |
    81        | lpprov  | ETH/USD.1.1 | 5000      | 1000                 | sell | ASK              | 10000  | 1      |
    82        | lpprov2 | ETH/USD.1.2 | 5000      | 1000                 | buy  | BID              | 10000  | 1      |
    83        | lpprov2 | ETH/USD.1.2 | 5000      | 1000                 | sell | ASK              | 10000  | 1      |
    84      When the parties place the following orders:
    85        | party | market id   | side | volume | price | resulting trades | type       | tif     |
    86        | aux1  | ETH/USD.1.1 | buy  | 1      | 990   | 0                | TYPE_LIMIT | TIF_GTC |
    87        | aux1  | ETH/USD.1.1 | buy  | 1      | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
    88        | aux2  | ETH/USD.1.1 | sell | 1      | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
    89        | aux2  | ETH/USD.1.1 | sell | 1      | 1100  | 0                | TYPE_LIMIT | TIF_GTC |
    90        | aux3  | ETH/USD.1.2 | buy  | 1      | 900   | 0                | TYPE_LIMIT | TIF_GTC |
    91        | aux3  | ETH/USD.1.2 | buy  | 1      | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
    92        | aux4  | ETH/USD.1.2 | sell | 1      | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
    93        | aux4  | ETH/USD.1.2 | sell | 1      | 1100  | 0                | TYPE_LIMIT | TIF_GTC |
    94      And the opening auction period ends for market "ETH/USD.1.1"
    95      Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "ETH/USD.1.1"
    96      And the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "ETH/USD.1.2"
    97  
    98      # Create the referral set and codes
    99      Given the parties create the following referral codes:
   100        | party     | code            | is_team | team  |
   101        | referrer1 | referral-code-1 | true    | team1 |
   102      And the parties apply the following referral codes:
   103        | party    | code            | is_team | team  |
   104        | referee1 | referral-code-1 | true    | team1 |
   105  
   106      And the team "team1" has the following members:
   107        | party     |
   108        | referrer1 |
   109        | referee1  |
   110  
   111    Scenario Outline: Referral set generates variable running taker volume with a referee with variable epochs in set (0083-RFPR-036)(0083-RFPR-037)(0083-RFPR-038)(0083-RFPR-039)(0083-RFPR-040)
   112      # Expectation: Referral reward factor and referral discount factor should be set correctly according to the spec
   113  
   114      # Test cases
   115      # - Referral set does not fulfill the smallest 'minimimum running taker volume' requirement and referee does not fulfill the smallest 'minimum epochs' requirement
   116      # - Referral set does not fulfill the smallest 'minimimum running taker volume' requirement but referee fulfulls the smallest 'minimum epochs' requirement
   117      # - Referral set fulfills the smallest 'minimimum running taker volume' requirement but referee does fulfill the smallest 'minimum epochs' requirement
   118      # - Referral set fulfills the 'minimum running taker volume' requirement tier for a higher tier than a referee fulfulls the 'minimum epochs' requirement for
   119      # - Referral set fulfills the 'minimum running taker volume' requirement tier for a lower tier than a referee fulfulls the 'minimum epochs' requirement for
   120      # - Referral set fulfills the 'minimum running taker volume' requirement tier for the same tier as a referee fulfulls the 'minimum epochs' requirement for
   121  
   122      Given the parties place the following orders:
   123        | party    | market id   | side | volume           | price | resulting trades | type       | tif     |
   124        | aux1     | ETH/USD.1.1 | buy  | <initial volume> | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   125        | referee1 | ETH/USD.1.1 | sell | <initial volume> | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   126      When the network moves ahead <time in set> epochs
   127      Then the referral set stats for code "referral-code-1" at epoch <time in set> should have a running volume of <running volume>:
   128        | party    | reward infra factor       | reward maker factor       | reward liquidity factor       | discount infra factor       | discount maker factor       | discount liquidity factor       |
   129        | referee1 | <max infra reward factor> | <max maker reward factor> | <max liquidity reward factor> | <max infra discount factor> | <max maker discount factor> | <max liquidity discount factor> |
   130  
   131      Given the parties place the following orders:
   132        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   133        | aux1     | ETH/USD.1.1 | buy  | 10     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   134        | referee1 | ETH/USD.1.1 | sell | 10     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   135  
   136      Examples:
   137        | initial volume | running volume | time in set | max infra reward factor | max maker reward factor | max liquidity reward factor | max infra discount factor | max maker discount factor | max liquidity discount factor |
   138        | 10             | 1000           | "1"         | 0                       | 0                       | 0                           | 0                         | 0                         | 0                             |
   139        | 10             | 1000           | "4"         | 0                       | 0                       | 0                           | 0                         | 0                         | 0                             |
   140        | 20             | 2000           | "1"         | 0.021                   | 0.022                   | 0.023                       | 0                         | 0                         | 0                             |
   141        | 30             | 3000           | "2"         | 0.21                    | 0.22                    | 0.23                        | 0.024                     | 0.025                     | 0.026                         |
   142        | 20             | 2000           | "3"         | 0.021                   | 0.022                   | 0.023                       | 0.024                     | 0.025                     | 0.026                         |
   143        | 30             | 3000           | "3"         | 0.21                    | 0.22                    | 0.23                        | 0.24                      | 0.25                      | 0.26                          |
   144  
   145  
   146    Scenario: Referee incurs fees during continuous trading (0029-FEES-023)(0029-FEES-025)
   147      # Expectation: referral discount applied and referral reward calculated from resulting fee
   148  
   149      Given the parties place the following orders:
   150        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   151        | aux1     | ETH/USD.1.1 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   152        | referee1 | ETH/USD.1.1 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   153      When the network moves ahead "2" epochs
   154      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   155        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   156        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   157  
   158      Given the parties place the following orders:
   159        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   160        | aux1     | ETH/USD.1.1 | buy  | 100    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   161        | referee1 | ETH/USD.1.1 | sell | 100    | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   162      When the following trades should be executed:
   163        | buyer | price | size | seller   |
   164        | aux1  | 1000  | 100  | referee1 |
   165      Then the following transfers should happen:
   166        | from     | to        | from account                             | to account                               | market id   | amount | asset   |
   167        | referee1 | market    | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_MAKER                  | ETH/USD.1.1 | 96     | USD.1.1 |
   168        | referee1 | market    | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_LIQUIDITY              | ETH/USD.1.1 | 96     | USD.1.1 |
   169        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_INFRASTRUCTURE         |             | 96     | USD.1.1 |
   170        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD |             | 6      | USD.1.1 |
   171        |          | referrer1 | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD | ACCOUNT_TYPE_GENERAL                     |             | 6      | USD.1.1 |
   172  
   173  
   174    Scenario: Referrer incurs fees during continuous trading (0029-FEES-023)(0029-FEES-025)
   175      # Expectation: referral discount should not be applied and no referral rewards should be distributed
   176  
   177      Given the parties place the following orders:
   178        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   179        | aux1     | ETH/USD.1.1 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   180        | referee1 | ETH/USD.1.1 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   181      When the network moves ahead "2" epochs
   182      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   183        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   184        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   185  
   186      Given the parties place the following orders:
   187        | party     | market id   | side | volume | price | resulting trades | type       | tif     |
   188        | aux1      | ETH/USD.1.1 | buy  | 100    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   189        | referrer1 | ETH/USD.1.1 | sell | 100    | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   190      When the following trades should be executed:
   191        | buyer | price | size | seller    |
   192        | aux1  | 1000  | 100  | referrer1 |
   193      Then the following transfers should happen:
   194        | from      | to     | from account         | to account                       | market id   | amount | asset   |
   195        | referrer1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_MAKER          | ETH/USD.1.1 | 100    | USD.1.1 |
   196        | referrer1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_LIQUIDITY      | ETH/USD.1.1 | 100    | USD.1.1 |
   197        | referrer1 |        | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_INFRASTRUCTURE |             | 100    | USD.1.1 |
   198  
   199  
   200    Scenario: Referee incurs fees when exiting an auction (0029-FEES-024)(0029-FEES-026)
   201      # Expectation: fee should be split between buyer and seller, referral discount applied and referral reward calculated from resulting fee
   202  
   203      Given the parties place the following orders:
   204        | party     | market id   | side | volume | price | resulting trades | type       | tif     |
   205        | aux1      | ETH/USD.1.1 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   206        | referrer1 | ETH/USD.1.1 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   207      When the network moves ahead "2" epochs
   208      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   209        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   210        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   211  
   212      # Cancel the liquidity commitment triggering an auction
   213      Given the parties submit the following liquidity provision:
   214        | id  | party  | market id   | commitment amount | fee | lp type      |
   215        | lp1 | lpprov | ETH/USD.1.1 | 0                 | 0.1 | cancellation |
   216      And the network moves ahead "1" epochs
   217      And the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "ETH/USD.1.1"
   218      When the parties place the following orders:
   219        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   220        | aux1     | ETH/USD.1.1 | buy  | 200    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   221        | referee1 | ETH/USD.1.1 | sell | 200    | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   222      Then the following trades should be executed:
   223        | buyer | price | size | seller   |
   224        | aux1  | 1000  | 200  | referee1 |
   225      And the parties submit the following liquidity provision:
   226        | id  | party  | market id   | commitment amount | fee  | lp type    |
   227        | lp2 | lpprov | ETH/USD.1.1 | 1000000           | 0.01 | submission |
   228      And the network moves ahead "1" epochs
   229      # fees are split between referee1 and aux1
   230      # aux1 has no discounts or rewards so is paying 100, 100
   231      # referee1 has a discount of 1 and pays a reward of 2 to the referrer
   232      And the following transfers should happen:
   233        | from     | to        | from account                             | to account                               | market id   | amount | asset   |
   234        | referee1 | market    | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_LIQUIDITY              | ETH/USD.1.1 | 0      | USD.1.1 |
   235        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_INFRASTRUCTURE         |             | 192    | USD.1.1 |
   236        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD |             | 8      | USD.1.1 |
   237        |          | referrer1 | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD | ACCOUNT_TYPE_GENERAL                     |             | 8      | USD.1.1 |
   238  
   239  
   240    Scenario: Referrer incurs fees when exiting an auction (0029-FEES-024)(0029-FEES-026)
   241      # Expectation: fee should be split between buyer and seller, referral discount applied and referral reward calculated from resulting fee
   242  
   243      Given the parties place the following orders:
   244        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   245        | aux3     | ETH/USD.1.2 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   246        | referee1 | ETH/USD.1.2 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   247      When the network moves ahead "2" epochs
   248      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   249        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   250        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   251      And the market data for the market "ETH/USD.1.2" should be:
   252        | mark price | trading mode            | target stake | supplied stake | open interest | horizon | min bound | max bound |
   253        | 1000       | TRADING_MODE_CONTINUOUS | 7469         | 1000000        | 21            | 3600    | 973       | 1027      |
   254  
   255      # Submit ourders out of price range to trigger auction
   256      When the parties place the following orders:
   257        | party  | market id   | side | volume | price | resulting trades | type       | tif     |
   258        | ptbuy  | ETH/USD.1.2 | buy  | 2      | 970   | 0                | TYPE_LIMIT | TIF_GTC |
   259        | ptsell | ETH/USD.1.2 | sell | 2      | 970   | 0                | TYPE_LIMIT | TIF_GTC |
   260      Then the market data for the market "ETH/USD.1.2" should be:
   261        | mark price | trading mode                    | auction trigger       | target stake | supplied stake | open interest | auction end |
   262        | 1000       | TRADING_MODE_MONITORING_AUCTION | AUCTION_TRIGGER_PRICE | 7935         | 1000000        | 21            | 3           |
   263      When the parties place the following orders:
   264        | party     | market id   | side | volume | price | resulting trades | type       | tif     |
   265        | aux3      | ETH/USD.1.2 | buy  | 200    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   266        | referrer1 | ETH/USD.1.2 | sell | 200    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   267      And the network moves ahead "1" epochs
   268      And the network moves ahead "3" blocks
   269      Then the trading mode should be "TRADING_MODE_CONTINUOUS" for the market "ETH/USD.1.2"
   270      And the following trades should be executed:
   271        | buyer | price | size | seller    |
   272        | aux3  | 1000  | 198  | referrer1 |
   273        | aux3  | 1000  | 2    | ptsell    |
   274      And the following transfers should happen:
   275        | from      | to     | from account         | to account                       | market id   | amount | asset   |
   276        | referrer1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_LIQUIDITY      | ETH/USD.1.2 | 99     | USD.1.1 |
   277        | referrer1 |        | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_INFRASTRUCTURE |             | 99     | USD.1.1 |
   278  
   279  
   280    Scenario: Insufficent fees after discounts applied to pay a referral commision to the referrer (0029-FEES-029)
   281      # Expectation: rewards (<1) should be floored and therefore no reward paid
   282  
   283      Given the parties place the following orders:
   284        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   285        | aux1     | ETH/USD.1.1 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   286        | referee1 | ETH/USD.1.1 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   287      When the network moves ahead "2" epochs
   288      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   289        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   290        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   291  
   292      Given the parties place the following orders:
   293        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   294        | aux1     | ETH/USD.1.1 | buy  | 50     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   295        | referee1 | ETH/USD.1.1 | sell | 50     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   296      When the following trades should be executed:
   297        | buyer | price | size | seller   |
   298        | aux1  | 1000  | 50   | referee1 |
   299      Then the following transfers should happen:
   300        | from     | to     | from account         | to account                       | market id   | amount | asset   |
   301        | referee1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_MAKER          | ETH/USD.1.1 | 48     | USD.1.1 |
   302        | referee1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_LIQUIDITY      | ETH/USD.1.1 | 48     | USD.1.1 |
   303        | referee1 |        | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_INFRASTRUCTURE |             | 48     | USD.1.1 |
   304  
   305  
   306    Scenario: Insufficent fees to be able to apply a referral discount discount for the referee (0029-FEES-030)
   307      # Expectation: discounts (<1) should be floored and therefore no discount applied
   308  
   309      Given the parties place the following orders:
   310        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   311        | aux1     | ETH/USD.1.1 | buy  | 20     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   312        | referee1 | ETH/USD.1.1 | sell | 20     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   313      When the network moves ahead "2" epochs
   314      Then the referral set stats for code "referral-code-1" at epoch "2" should have a running volume of 2000:
   315        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   316        | referee1 | 0.021               | 0.022               | 0.023                   | 0.024                 | 0.025                 | 0.026                     |
   317  
   318      Given the parties place the following orders:
   319        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   320        | aux1     | ETH/USD.1.1 | buy  | 40     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   321        | referee1 | ETH/USD.1.1 | sell | 40     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   322      When the following trades should be executed:
   323        | buyer | price | size | seller   |
   324        | aux1  | 1000  | 40   | referee1 |
   325      Then the following transfers should happen:
   326        | from     | to     | from account         | to account                       | market id   | amount | asset   |
   327        | referee1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_MAKER          | ETH/USD.1.1 | 39     | USD.1.1 |
   328        | referee1 | market | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_LIQUIDITY      | ETH/USD.1.1 | 39     | USD.1.1 |
   329        | referee1 |        | ACCOUNT_TYPE_GENERAL | ACCOUNT_TYPE_FEES_INFRASTRUCTURE |             | 40     | USD.1.1 |
   330  
   331  
   332    Scenario: Referal reward factor set greater than referralProgram.maxReferralRewardProportion (0029-FEES-029, 0029-FEES-031)
   333      # Expectation: the maximum reward proportion should be adhered to
   334  
   335      Given the parties place the following orders:
   336        | party     | market id   | side | volume | price | resulting trades | type       | tif     |
   337        | aux1      | ETH/USD.1.1 | buy  | 30     | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   338        | referrer1 | ETH/USD.1.1 | sell | 30     | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   339      When the network moves ahead "3" epochs
   340      Then the referral set stats for code "referral-code-1" at epoch "3" should have a running volume of 3000:
   341        | party    | reward infra factor | reward maker factor | reward liquidity factor | discount infra factor | discount maker factor | discount liquidity factor |
   342        | referee1 | 0.21                | 0.22                | 0.23                    | 0.24                  | 0.25                  | 0.26                      |
   343  
   344      Given the parties place the following orders:
   345        | party    | market id   | side | volume | price | resulting trades | type       | tif     |
   346        | aux1     | ETH/USD.1.1 | buy  | 100    | 1000  | 0                | TYPE_LIMIT | TIF_GTC |
   347        | referee1 | ETH/USD.1.1 | sell | 100    | 1000  | 1                | TYPE_LIMIT | TIF_GTC |
   348      When the following trades should be executed:
   349        | buyer | price | size | seller   |
   350        | aux1  | 1000  | 100  | referee1 |
   351  
   352      # reward factor is 0.21, multiplier is 1 however the maxReferralRewardProportion is set to 0.1 therefore
   353      # the actual reward given is 0.1 * 240 = 24
   354      Then the following transfers should happen:
   355        | from     | to        | from account                             | to account                               | market id   | amount | asset   |
   356        | referee1 | market    | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_MAKER                  | ETH/USD.1.1 | 68     | USD.1.1 |
   357        | referee1 | market    | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_LIQUIDITY              | ETH/USD.1.1 | 67     | USD.1.1 |
   358        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_FEES_INFRASTRUCTURE         |             | 69     | USD.1.1 |
   359        | referee1 |           | ACCOUNT_TYPE_GENERAL                     | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD |             | 21     | USD.1.1 |
   360        |          | referrer1 | ACCOUNT_TYPE_PENDING_FEE_REFERRAL_REWARD | ACCOUNT_TYPE_GENERAL                     |             | 21     | USD.1.1 |