Skip to content

Commit

Permalink
[Tradeshield]: Design the Data Structures (#799)
Browse files Browse the repository at this point in the history
* add spot order types

* add perpetual order

* fix

* fix

* update

* add pending spot order

* keys

* add perpetual ds

* update keys

* add sorted perpetual order

* remove sorted order

* add spot sorted orders

* add sorted tests

* add more tests

* add todo for other tasks

* remove

* fix

* fix

---------

Co-authored-by: Cosmic Vagabond <[email protected]>
  • Loading branch information
amityadav0 and cosmic-vagabond authored Sep 17, 2024
1 parent 28e63c3 commit 8e31bdc
Show file tree
Hide file tree
Showing 53 changed files with 11,484 additions and 241 deletions.
927 changes: 861 additions & 66 deletions docs/static/openapi.yml

Large diffs are not rendered by default.

9 changes: 8 additions & 1 deletion proto/elys/tradeshield/genesis.proto
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
syntax = "proto3";

package elys.tradeshield;

import "gogoproto/gogo.proto";
import "elys/tradeshield/params.proto";
import "elys/tradeshield/types.proto";

option go_package = "github.com/elys-network/elys/x/tradeshield/types";

// GenesisState defines the tradeshield module's genesis state.
message GenesisState {
Params params = 1 [(gogoproto.nullable) = false];
Params params = 1 [(gogoproto.nullable) = false];
repeated SpotOrder pendingSpotOrderList = 2 [(gogoproto.nullable) = false];
uint64 pendingSpotOrderCount = 3;
repeated PerpetualOrder pendingPerpetualOrderList = 4 [(gogoproto.nullable) = false];
uint64 pendingPerpetualOrderCount = 5;
}

65 changes: 62 additions & 3 deletions proto/elys/tradeshield/query.proto
Original file line number Diff line number Diff line change
@@ -1,26 +1,85 @@
syntax = "proto3";

package elys.tradeshield;

import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "elys/tradeshield/params.proto";
import "elys/tradeshield/types.proto";

option go_package = "github.com/elys-network/elys/x/tradeshield/types";

// Query defines the gRPC querier service.
service Query {

// Parameters queries the parameters of the module.
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
rpc Params (QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/elys-network/elys/tradeshield/params";

}

// Queries a list of PendingSpotOrder items.
rpc PendingSpotOrder (QueryGetPendingSpotOrderRequest) returns (QueryGetPendingSpotOrderResponse) {
option (google.api.http).get = "/elys-network/elys/tradeshield/pending_spot_order/{id}";

}
rpc PendingSpotOrderAll (QueryAllPendingSpotOrderRequest) returns (QueryAllPendingSpotOrderResponse) {
option (google.api.http).get = "/elys-network/elys/tradeshield/pending_spot_order";

}

// Queries a list of PendingPerpetualOrder items.
rpc PendingPerpetualOrder (QueryGetPendingPerpetualOrderRequest) returns (QueryGetPendingPerpetualOrderResponse) {
option (google.api.http).get = "/elys-network/elys/tradeshield/pending_perpetual_order/{id}";

}
rpc PendingPerpetualOrderAll (QueryAllPendingPerpetualOrderRequest) returns (QueryAllPendingPerpetualOrderResponse) {
option (google.api.http).get = "/elys-network/elys/tradeshield/pending_perpetual_order";

}
}

// QueryParamsRequest is request type for the Query/Params RPC method.
message QueryParamsRequest {}

// QueryParamsResponse is response type for the Query/Params RPC method.
message QueryParamsResponse {

// params holds all the parameters of this module.
Params params = 1 [(gogoproto.nullable) = false];
}
}

message QueryGetPendingSpotOrderRequest {
uint64 id = 1;
}

message QueryGetPendingSpotOrderResponse {
SpotOrder PendingSpotOrder = 1 [(gogoproto.nullable) = false];
}

message QueryAllPendingSpotOrderRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllPendingSpotOrderResponse {
repeated SpotOrder PendingSpotOrder = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

message QueryGetPendingPerpetualOrderRequest {
uint64 id = 1;
}

message QueryGetPendingPerpetualOrderResponse {
PerpetualOrder PendingPerpetualOrder = 1 [(gogoproto.nullable) = false];
}

message QueryAllPendingPerpetualOrderRequest {
cosmos.base.query.v1beta1.PageRequest pagination = 1;
}

message QueryAllPendingPerpetualOrderResponse {
repeated PerpetualOrder PendingPerpetualOrder = 1 [(gogoproto.nullable) = false];
cosmos.base.query.v1beta1.PageResponse pagination = 2;
}

66 changes: 65 additions & 1 deletion proto/elys/tradeshield/tx.proto
Original file line number Diff line number Diff line change
@@ -1,7 +1,71 @@
syntax = "proto3";

package elys.tradeshield;

import "elys/tradeshield/types.proto";
import "cosmos/base/v1beta1/coin.proto";

option go_package = "github.com/elys-network/elys/x/tradeshield/types";

// Msg defines the Msg service.
service Msg {}
service Msg {
rpc CreatePendingSpotOrder (MsgCreatePendingSpotOrder ) returns (MsgCreatePendingSpotOrderResponse );
rpc UpdatePendingSpotOrder (MsgUpdatePendingSpotOrder ) returns (MsgUpdatePendingSpotOrderResponse );
rpc DeletePendingSpotOrder (MsgDeletePendingSpotOrder ) returns (MsgDeletePendingSpotOrderResponse );
rpc CreatePendingPerpetualOrder (MsgCreatePendingPerpetualOrder) returns (MsgCreatePendingPerpetualOrderResponse);
rpc UpdatePendingPerpetualOrder (MsgUpdatePendingPerpetualOrder) returns (MsgUpdatePendingPerpetualOrderResponse);
rpc DeletePendingPerpetualOrder (MsgDeletePendingPerpetualOrder) returns (MsgDeletePendingPerpetualOrderResponse);
}
message MsgCreatePendingSpotOrder {
SpotOrderType order_type = 1;
OrderPrice order_price = 3;
cosmos.base.v1beta1.Coin order_amount = 4;
string owner_address = 5;
string order_target_denom = 6;
Status status = 7;
Date date = 8;
}

message MsgCreatePendingSpotOrderResponse {
uint64 id = 1;
}

message MsgUpdatePendingSpotOrder {
string creator = 1;
uint64 id = 2;
string order = 3;
}

message MsgUpdatePendingSpotOrderResponse {}

message MsgDeletePendingSpotOrder {
string creator = 1;
uint64 id = 2;
}

message MsgDeletePendingSpotOrderResponse {}

message MsgCreatePendingPerpetualOrder {
string creator = 1;
string order = 2;
}

message MsgCreatePendingPerpetualOrderResponse {
uint64 id = 1;
}

message MsgUpdatePendingPerpetualOrder {
string creator = 1;
uint64 id = 2;
string order = 3;
}

message MsgUpdatePendingPerpetualOrderResponse {}

message MsgDeletePendingPerpetualOrder {
string creator = 1;
uint64 id = 2;
}

message MsgDeletePendingPerpetualOrderResponse {}

84 changes: 84 additions & 0 deletions proto/elys/tradeshield/types.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
syntax = "proto3";

package elys.tradeshield;

option go_package = "github.com/elys-network/elys/x/tradeshield/types";

import "gogoproto/gogo.proto";
import "cosmos/base/v1beta1/coin.proto";

// Spot order
enum SpotOrderType {
STOPLOSS = 0;
LIMITSELL = 1;
LIMITBUY = 2;
MARKETBUY = 3;
}

enum Status {
PENDING = 0;
EXECUTED = 1;
CANCLED = 2;
}

message OrderPrice {
string base_denom = 1;
string quote_denom = 2;
string rate = 3 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false
];
}

message Date {
uint64 height = 1;
uint64 timestamp = 2;
}

message SpotOrder {
SpotOrderType order_type = 1;
uint64 order_id = 2;
OrderPrice order_price = 3;
cosmos.base.v1beta1.Coin order_amount = 4 [(gogoproto.nullable) = false];
string owner_address = 5;
string order_target_denom = 6;
Status status = 7;
Date date = 8;
}

// Perpetual Order
enum PerpetualOrderType {
LIMITOPEN = 0;
LIMITCLOSE = 1;

MARKETOPEN = 2;
MARKETCLOSE = 3;

STOPLOSSPERP = 4;
}

enum PerpetualPosition {
UNSPECIFIED = 0;
LONG = 1;
SHORT = 2;
}

message PerpetualOrder {
uint64 order_id = 1;
string owner_address = 2;
PerpetualOrderType perpetual_order_type = 3;
PerpetualPosition position = 4;
OrderPrice trigger_price = 5;
cosmos.base.v1beta1.Coin collateral = 6 [(gogoproto.nullable) = false];
string trading_asset = 7;
string leverage = 8 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false
];
string take_profit_price = 9 [
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false
];
uint64 position_id = 10;
Status status = 11;
}
2 changes: 1 addition & 1 deletion x/leveragelp/migrations/v12_migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ func (m Migrator) V12Migration(ctx sdk.Context) error {
}

return nil
}
}
79 changes: 39 additions & 40 deletions x/leveragelp/types/types.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions x/perpetual/client/cli/tx_update_stop_loss.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func CmdUpdateStopLoss() *cobra.Command {
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) (err error) {
argPrice, err := sdk.NewDecFromStr(args[0])
if err!=nil {
if err != nil {
return errors.New("invalid stoploss amount")
}
positionId, err := strconv.Atoi(args[1])
Expand All @@ -36,7 +36,7 @@ func CmdUpdateStopLoss() *cobra.Command {
msg := types.NewMsgUpdateStopLoss(
clientCtx.GetFromAddress().String(),
uint64(positionId),
math.LegacyDec(argPrice),
math.LegacyDec(argPrice),
)
if err := msg.ValidateBasic(); err != nil {
return err
Expand Down
2 changes: 1 addition & 1 deletion x/perpetual/client/cli/tx_update_stop_loss_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ func TestUpdatestopLoss(t *testing.T) {

_, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdUpdateStopLoss(), args)
require.NoError(t, err)
}
}
Loading

0 comments on commit 8e31bdc

Please sign in to comment.