Skip to content

Commit bbf1a69

Browse files
committed
re-gen
1 parent 8d869ef commit bbf1a69

18 files changed

+2640
-595
lines changed

chain/exchange/types/codec.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
3838
cdc.RegisterConcrete(&PerpetualMarketLaunchProposal{}, "exchange/PerpetualMarketLaunchProposal", nil)
3939
cdc.RegisterConcrete(&ExpiryFuturesMarketLaunchProposal{}, "exchange/ExpiryFuturesMarketLaunchProposal", nil)
4040
cdc.RegisterConcrete(&DerivativeMarketParamUpdateProposal{}, "exchange/DerivativeMarketParamUpdateProposal", nil)
41+
cdc.RegisterConcrete(&LiquidityMiningCampaignProposal{}, "exchange/LiquidityMiningCampaignProposal", nil)
4142
}
4243

4344
func RegisterInterfaces(registry types.InterfaceRegistry) {
@@ -71,6 +72,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) {
7172
&PerpetualMarketLaunchProposal{},
7273
&ExpiryFuturesMarketLaunchProposal{},
7374
&DerivativeMarketParamUpdateProposal{},
75+
&LiquidityMiningCampaignProposal{},
7476
)
7577

7678
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)

chain/exchange/types/common_utils.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ func (d *DerivativeLimitOrderDelta) OrderHash() common.Hash {
5454
var AuctionSubaccountID = common.HexToHash("0x1111111111111111111111111111111111111111111111111111111111111111")
5555
var ZeroSubaccountID = common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000")
5656

57+
// TempRewardsSenderAddress equals sdk.AccAddress(common.HexToAddress(AuctionSubaccountID.Hex()).Bytes())
58+
var TempRewardsSenderAddress, _ = sdk.AccAddressFromBech32("inj1zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3t5qxqh")
59+
5760
func IsValidSubaccountID(subaccountID string) (*common.Address, bool) {
5861
if len(subaccountID) != 66 {
5962
return nil, false
@@ -124,10 +127,26 @@ func SdkAddressToEthAddress(addr sdk.Address) common.Address {
124127
return common.BytesToAddress(addr.Bytes())
125128
}
126129

130+
func SubaccountIDToSdkAddress(subaccountID common.Hash) sdk.Address {
131+
return sdk.AccAddress(subaccountID[:common.AddressLength])
132+
}
133+
127134
func EthAddressToSubaccountID(addr common.Address) common.Hash {
128135
return common.BytesToHash(common.RightPadBytes(addr.Bytes(), 32))
129136
}
130137

138+
func DecToDecBytes(dec sdk.Dec) []byte {
139+
return dec.BigInt().Bytes()
140+
}
141+
142+
func DecBytesToDec(bz []byte) sdk.Dec {
143+
dec := sdk.NewDecFromBigIntWithPrec(new(big.Int).SetBytes(bz), sdk.Precision)
144+
if dec.IsNil() {
145+
return sdk.ZeroDec()
146+
}
147+
return dec
148+
}
149+
131150
// PrintSpotLimitOrderbookState is a helper debugger function to print a tabular view of the spot limit orderbook fill state
132151
func PrintSpotLimitOrderbookState(buyOrderbookState *OrderbookFills, sellOrderbookState *OrderbookFills) {
133152
table := tablewriter.NewWriter(os.Stdout)
@@ -169,3 +188,25 @@ func PrintSpotLimitOrderbookState(buyOrderbookState *OrderbookFills, sellOrderbo
169188
}
170189
table.Render()
171190
}
191+
192+
func HasDuplicates(slice []string) bool {
193+
seen := make(map[string]bool)
194+
for _, item := range slice {
195+
if seen[item] {
196+
return true
197+
}
198+
seen[item] = true
199+
}
200+
return false
201+
}
202+
203+
func HasDuplicatesCoin(slice []sdk.Coin) bool {
204+
seen := make(map[string]bool)
205+
for _, item := range slice {
206+
if seen[item.Denom] {
207+
return true
208+
}
209+
seen[item.Denom] = true
210+
}
211+
return false
212+
}

chain/exchange/types/derivative_data.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ type DerivativeOrderStateExpansion struct {
2020
TotalBalanceDelta sdk.Dec
2121
AvailableBalanceDelta sdk.Dec
2222

23-
AuctionFeeReward sdk.Dec
24-
FeeRecipientReward sdk.Dec
25-
FeeRecipient common.Address
26-
LimitOrderFilledDelta *DerivativeLimitOrderDelta
27-
MarketOrderFilledDelta *DerivativeMarketOrderDelta
28-
OrderHash common.Hash
23+
AuctionFeeReward sdk.Dec
24+
LiquidityMiningRewardPoints sdk.Dec
25+
FeeRecipientReward sdk.Dec
26+
FeeRecipient common.Address
27+
LimitOrderFilledDelta *DerivativeLimitOrderDelta
28+
MarketOrderFilledDelta *DerivativeMarketOrderDelta
29+
OrderHash common.Hash
2930
}
3031

3132
func ApplyDeltasAndGetDerivativeOrderBatchEvent(
@@ -35,6 +36,7 @@ func ApplyDeltasAndGetDerivativeOrderBatchEvent(
3536
funding *PerpetualMarketFunding,
3637
stateExpansions []*DerivativeOrderStateExpansion,
3738
depositDeltas DepositDeltas,
39+
liquidityMiningRewards LiquidityMiningRewards,
3840
) (batch *EventBatchDerivativeExecution, filledDeltas []*DerivativeLimitOrderDelta) {
3941
if len(stateExpansions) == 0 {
4042
return
@@ -61,6 +63,11 @@ func ApplyDeltasAndGetDerivativeOrderBatchEvent(
6163
depositDeltas.ApplyUniformDelta(feeRecipientSubaccount, expansion.FeeRecipientReward)
6264
depositDeltas.ApplyUniformDelta(AuctionSubaccountID, expansion.AuctionFeeReward)
6365

66+
sender := SubaccountIDToSdkAddress(expansion.SubaccountID)
67+
if expansion.LiquidityMiningRewardPoints.IsPositive() {
68+
liquidityMiningRewards.AddPointsForAddress(sender.String(), expansion.LiquidityMiningRewardPoints)
69+
}
70+
6471
if !executionType.IsMarket() {
6572
filledDeltas = append(filledDeltas, expansion.LimitOrderFilledDelta)
6673
}

chain/exchange/types/derivative_execution.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ type DerivativeBatchExecutionData struct {
1515
DepositDeltas DepositDeltas
1616
DepositSubaccountIDs []common.Hash
1717

18+
LiquidityMiningRewards LiquidityMiningRewards
19+
1820
// updated positions
1921
Positions []*Position
2022
PositionSubaccountIDs []common.Hash
@@ -106,16 +108,17 @@ func (e *DerivativeMatchingExpansionData) GetLimitMatchingDerivativeBatchExecuti
106108
positionStates map[common.Hash]*PositionState,
107109
) *DerivativeBatchExecutionData {
108110
depositDeltas := NewDepositDeltas()
111+
liquidityMiningRewards := NewLiquidityMiningRewards()
109112

110113
// process undermargined resting limit order forced cancellations
111114
cancelLimitOrdersEvents, restingOrderCancelledDeltas, transientOrderCancelledDeltas := e.applyCancellationsAndGetDerivativeLimitCancelEvents(market.MarketID(), market.MakerFeeRate, market.TakerFeeRate, depositDeltas)
112115

113116
positions, positionSubaccountIDs := GetPositionSliceData(positionStates)
114117

115-
transientLimitBuyOrderBatchEvent, transientLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitMatchNewOrder, market, funding, e.TransientLimitBuyExpansions, depositDeltas)
116-
restingLimitBuyOrderBatchEvent, restingLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitMatchRestingOrder, market, funding, e.RestingLimitBuyExpansions, depositDeltas)
117-
transientLimitSellOrderBatchEvent, transientLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitMatchNewOrder, market, funding, e.TransientLimitSellExpansions, depositDeltas)
118-
restingLimitSellOrderBatchEvent, restingLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitMatchRestingOrder, market, funding, e.RestingLimitSellExpansions, depositDeltas)
118+
transientLimitBuyOrderBatchEvent, transientLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitMatchNewOrder, market, funding, e.TransientLimitBuyExpansions, depositDeltas, liquidityMiningRewards)
119+
restingLimitBuyOrderBatchEvent, restingLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitMatchRestingOrder, market, funding, e.RestingLimitBuyExpansions, depositDeltas, liquidityMiningRewards)
120+
transientLimitSellOrderBatchEvent, transientLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitMatchNewOrder, market, funding, e.TransientLimitSellExpansions, depositDeltas, liquidityMiningRewards)
121+
restingLimitSellOrderBatchEvent, restingLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitMatchRestingOrder, market, funding, e.RestingLimitSellExpansions, depositDeltas, liquidityMiningRewards)
119122

120123
restingOrderFilledDeltas := mergeDerivativeLimitOrderFilledDeltas(restingLimitBuyFilledDeltas, restingLimitSellFilledDeltas)
121124
transientOrderFilledDeltas := mergeDerivativeLimitOrderFilledDeltas(transientLimitBuyFilledDeltas, transientLimitSellFilledDeltas)
@@ -144,6 +147,7 @@ func (e *DerivativeMatchingExpansionData) GetLimitMatchingDerivativeBatchExecuti
144147
Funding: funding,
145148
DepositDeltas: depositDeltas,
146149
DepositSubaccountIDs: depositDeltaKeys,
150+
LiquidityMiningRewards: liquidityMiningRewards,
147151
Positions: positions,
148152
PositionSubaccountIDs: positionSubaccountIDs,
149153
RestingLimitOrderFilledDeltas: restingOrderFilledDeltas,
@@ -339,6 +343,7 @@ func (e *DerivativeMarketOrderExpansionData) GetMarketDerivativeBatchExecutionDa
339343
positionStates map[common.Hash]*PositionState,
340344
) *DerivativeBatchExecutionData {
341345
depositDeltas := NewDepositDeltas()
346+
liquidityMiningRewards := NewLiquidityMiningRewards()
342347

343348
// process undermargined limit order forced cancellations
344349
cancelLimitOrdersEvents, restingOrderCancelledDeltas := e.applyCancellationsAndGetDerivativeLimitCancelEvents(market.MarketID(), market.MakerFeeRate, depositDeltas)
@@ -348,10 +353,10 @@ func (e *DerivativeMarketOrderExpansionData) GetMarketDerivativeBatchExecutionDa
348353

349354
positions, positionSubaccountIDs := GetPositionSliceData(positionStates)
350355

351-
buyMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_Market, market, funding, e.MarketBuyExpansions, depositDeltas)
352-
sellMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_Market, market, funding, e.MarketSellExpansions, depositDeltas)
353-
restingLimitBuyOrderBatchEvent, limitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitFill, market, funding, e.LimitBuyExpansions, depositDeltas)
354-
restingLimitSellOrderBatchEvent, limitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitFill, market, funding, e.LimitSellExpansions, depositDeltas)
356+
buyMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_Market, market, funding, e.MarketBuyExpansions, depositDeltas, liquidityMiningRewards)
357+
sellMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_Market, market, funding, e.MarketSellExpansions, depositDeltas, liquidityMiningRewards)
358+
restingLimitBuyOrderBatchEvent, limitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(true, ExecutionType_LimitFill, market, funding, e.LimitBuyExpansions, depositDeltas, liquidityMiningRewards)
359+
restingLimitSellOrderBatchEvent, limitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent(false, ExecutionType_LimitFill, market, funding, e.LimitSellExpansions, depositDeltas, liquidityMiningRewards)
355360

356361
filledDeltas := mergeDerivativeLimitOrderFilledDeltas(limitBuyFilledDeltas, limitSellFilledDeltas)
357362

@@ -371,6 +376,7 @@ func (e *DerivativeMarketOrderExpansionData) GetMarketDerivativeBatchExecutionDa
371376
Funding: funding,
372377
DepositDeltas: depositDeltas,
373378
DepositSubaccountIDs: depositDeltaKeys,
379+
LiquidityMiningRewards: liquidityMiningRewards,
374380
Positions: positions,
375381
PositionSubaccountIDs: positionSubaccountIDs,
376382
TransientLimitOrderFilledDeltas: nil,

chain/exchange/types/errors.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var (
99
ErrSpotMarketNotFound = sdkerrors.Register(ModuleName, 2, "spot market not found")
1010
ErrSpotMarketExists = sdkerrors.Register(ModuleName, 3, "spot market exists")
1111
ErrBadField = sdkerrors.Register(ModuleName, 4, "struct field error")
12-
ErrMarketInvalid = sdkerrors.Register(ModuleName, 5, "failed to validate derivative market")
12+
ErrMarketInvalid = sdkerrors.Register(ModuleName, 5, "failed to validate market")
1313
ErrInsufficientDeposit = sdkerrors.Register(ModuleName, 6, "subaccount has insufficient deposits")
1414
ErrUnrecognizedOrderType = sdkerrors.Register(ModuleName, 7, "unrecognized order type")
1515
ErrInsufficientPositionQuantity = sdkerrors.Register(ModuleName, 8, "position quantity insufficient for order")
@@ -57,4 +57,8 @@ var (
5757
ErrInvalidHourlyInterestRate = sdkerrors.Register(ModuleName, 50, "Invalid hourly interest rate")
5858
ErrInvalidHourlyFundingRateCap = sdkerrors.Register(ModuleName, 51, "Invalid hourly funding rate cap")
5959
ErrInvalidMarketFundingParamUpdate = sdkerrors.Register(ModuleName, 52, "Only perpetual markets can update funding parameters")
60+
ErrInvalidLiquidityMiningMarket = sdkerrors.Register(ModuleName, 53, "Invalid liquidity mining market")
61+
ErrInvalidLiquidityMiningMarketWeights = sdkerrors.Register(ModuleName, 54, "Invalid liquidity mining market weights")
62+
ErrInvalidLiquidityMiningCampaign = sdkerrors.Register(ModuleName, 55, "Invalid liquidity mining campaign")
63+
ErrInvalidLiquidityMiningReward = sdkerrors.Register(ModuleName, 56, "Invalid liquidity mining reward")
6064
)

0 commit comments

Comments
 (0)