Skip to content

Commit 3861011

Browse files
committed
chore: store protorev pool and spot price requests in asset
1 parent b1ba280 commit 3861011

File tree

12 files changed

+437
-308
lines changed

12 files changed

+437
-308
lines changed

proto/sentinel/oracle/v1/asset.proto

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ syntax = "proto3";
22
package sentinel.oracle.v1;
33

44
import "gogoproto/gogo.proto";
5+
import "osmosis/poolmanager/v1beta1/query.proto";
6+
import "osmosis/protorev/v1beta1/query.proto";
57

68
option go_package = "github.com/sentinel-official/sentinelhub/v12/x/oracle/types/v1";
79
option (gogoproto.equal_all) = false;
@@ -10,11 +12,11 @@ option (gogoproto.goproto_getters_all) = false;
1012
message Asset {
1113
string denom = 1;
1214
int64 decimals = 2;
13-
string base_asset_denom = 3;
14-
string quote_asset_denom = 4;
15-
string price = 5 [
16-
(gogoproto.customtype) = "cosmossdk.io/math.Int",
15+
osmosis.protorev.v1beta1.QueryGetProtoRevPoolRequest proto_rev_pool_request = 3 [(gogoproto.nullable) = false];
16+
osmosis.poolmanager.v1beta1.SpotPriceRequest spot_price_request = 4 [(gogoproto.nullable) = false];
17+
int64 height = 5;
18+
string spot_price = 6 [
19+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
1720
(gogoproto.nullable) = false
1821
];
19-
int64 height = 6;
2022
}

proto/sentinel/oracle/v1/events.proto

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ option (gogoproto.equal_all) = false;
88
option (gogoproto.goproto_getters_all) = false;
99

1010
message EventCreate {
11-
string denom = 2;
12-
int64 decimals = 3;
13-
string base_asset_denom = 4;
14-
string quote_asset_denom = 5;
11+
string denom = 1;
12+
int64 decimals = 2;
13+
string base_asset_denom = 3;
14+
string quote_asset_denom = 4;
1515
}
1616

1717
message EventDelete {
18-
string denom = 2;
18+
string denom = 1;
1919
}
2020

2121
message EventUpdateDetails {
22-
string denom = 2;
23-
int64 decimals = 3;
24-
string base_asset_denom = 4;
25-
string quote_asset_denom = 5;
22+
string denom = 1;
23+
int64 decimals = 2;
24+
string base_asset_denom = 3;
25+
string quote_asset_denom = 4;
2626
}

proto/sentinel/oracle/v1/msg.proto

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ syntax = "proto3";
22
package sentinel.oracle.v1;
33

44
import "gogoproto/gogo.proto";
5+
import "osmosis/poolmanager/v1beta1/query.proto";
6+
import "osmosis/protorev/v1beta1/query.proto";
57
import "sentinel/oracle/v1/params.proto";
68

79
option go_package = "github.com/sentinel-official/sentinelhub/v12/x/oracle/types/v1";
@@ -12,8 +14,8 @@ message MsgCreateAssetRequest {
1214
string from = 1;
1315
string denom = 2;
1416
int64 decimals = 3;
15-
string base_asset_denom = 4;
16-
string quote_asset_denom = 5;
17+
osmosis.protorev.v1beta1.QueryGetProtoRevPoolRequest proto_rev_pool_request = 4 [(gogoproto.nullable) = false];
18+
osmosis.poolmanager.v1beta1.SpotPriceRequest spot_price_request = 5 [(gogoproto.nullable) = false];
1719
}
1820

1921
message MsgDeleteAssetRequest {
@@ -25,8 +27,8 @@ message MsgUpdateAssetRequest {
2527
string from = 1;
2628
string denom = 2;
2729
int64 decimals = 3;
28-
string base_asset_denom = 4;
29-
string quote_asset_denom = 5;
30+
osmosis.protorev.v1beta1.QueryGetProtoRevPoolRequest proto_rev_pool_request = 4 [(gogoproto.nullable) = false];
31+
osmosis.poolmanager.v1beta1.SpotPriceRequest spot_price_request = 5 [(gogoproto.nullable) = false];
3032
}
3133

3234
message MsgUpdateParamsRequest {

x/oracle/keeper/abci.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ func (k *Keeper) BeginBlock(ctx sdk.Context) {
4646
req := abcitypes.RequestQuery{
4747
Data: k.cdc.MustMarshal(
4848
&protorevtypes.QueryGetProtoRevPoolRequest{
49-
BaseDenom: item.BaseAssetDenom,
50-
OtherDenom: item.QuoteAssetDenom,
49+
BaseDenom: item.ProtoRevPoolRequest.BaseDenom,
50+
OtherDenom: item.ProtoRevPoolRequest.OtherDenom,
5151
},
5252
),
5353
Path: "/osmosis.protorev.v1beta1.Query/GetProtoRevPool",

x/oracle/keeper/asset.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,11 @@ func (k *Keeper) GetQuotePrice(ctx sdk.Context, basePrice sdk.DecCoin) (sdk.Coin
126126
// Retrieve the asset associated with the coin denomination.
127127
asset, found := k.GetAsset(ctx, basePrice.Denom)
128128
if !found {
129-
return sdk.Coin{Amount: sdk.ZeroInt()}, types.NewErrorAssetNotFound(basePrice.Denom)
129+
return sdk.Coin{}, types.NewErrorAssetNotFound(basePrice.Denom)
130130
}
131131

132132
// Calculate the quote price by multiplying the base price with the asset's price.
133-
amount := basePrice.Amount.MulInt(asset.Price).TruncateInt()
133+
amount := basePrice.Amount.Mul(asset.SpotPrice).TruncateInt()
134134

135135
// Return the resulting coin with the same denomination as the base price.
136136
return sdk.Coin{Denom: basePrice.Denom, Amount: amount}, nil

x/oracle/keeper/msg_handler.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ func (k *Keeper) HandleMsgCreateAsset(ctx sdk.Context, msg *v1.MsgCreateAssetReq
2323

2424
// Initialize asset with provided metadata, zero price and zero height
2525
asset := v1.Asset{
26-
Denom: msg.Denom,
27-
Decimals: msg.Decimals,
28-
BaseAssetDenom: msg.BaseAssetDenom,
29-
QuoteAssetDenom: msg.QuoteAssetDenom,
30-
Price: sdkmath.ZeroInt(),
31-
Height: 0,
26+
Denom: msg.Denom,
27+
Decimals: msg.Decimals,
28+
ProtoRevPoolRequest: msg.ProtoRevPoolRequest,
29+
SpotPriceRequest: msg.SpotPriceRequest,
30+
Height: 0,
31+
SpotPrice: sdkmath.LegacyZeroDec(),
3232
}
3333

3434
k.SetAsset(ctx, asset)
@@ -38,8 +38,8 @@ func (k *Keeper) HandleMsgCreateAsset(ctx sdk.Context, msg *v1.MsgCreateAssetReq
3838
&v1.EventCreate{
3939
Denom: asset.Denom,
4040
Decimals: asset.Decimals,
41-
BaseAssetDenom: asset.BaseAssetDenom,
42-
QuoteAssetDenom: asset.QuoteAssetDenom,
41+
BaseAssetDenom: asset.SpotPriceRequest.BaseAssetDenom,
42+
QuoteAssetDenom: asset.SpotPriceRequest.QuoteAssetDenom,
4343
},
4444
)
4545

@@ -87,8 +87,8 @@ func (k *Keeper) HandleMsgUpdateAsset(ctx sdk.Context, msg *v1.MsgUpdateAssetReq
8787

8888
// Apply updated metadata to the asset
8989
asset.Decimals = msg.Decimals
90-
asset.BaseAssetDenom = msg.BaseAssetDenom
91-
asset.QuoteAssetDenom = msg.QuoteAssetDenom
90+
asset.ProtoRevPoolRequest = msg.ProtoRevPoolRequest
91+
asset.SpotPriceRequest = msg.SpotPriceRequest
9292

9393
k.SetAsset(ctx, asset)
9494

@@ -97,8 +97,8 @@ func (k *Keeper) HandleMsgUpdateAsset(ctx sdk.Context, msg *v1.MsgUpdateAssetReq
9797
&v1.EventUpdateDetails{
9898
Denom: asset.Denom,
9999
Decimals: asset.Decimals,
100-
BaseAssetDenom: asset.BaseAssetDenom,
101-
QuoteAssetDenom: asset.QuoteAssetDenom,
100+
BaseAssetDenom: asset.SpotPriceRequest.BaseAssetDenom,
101+
QuoteAssetDenom: asset.SpotPriceRequest.QuoteAssetDenom,
102102
},
103103
)
104104

x/oracle/keeper/relay.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ func (k *Keeper) handleSpotPriceQueryResponse(ctx sdk.Context, asset v1.Asset, r
146146
}
147147

148148
// Update the asset price using the spot price and its multiplier.
149-
asset.Price = spotPrice.MulInt(asset.Multiplier()).TruncateInt()
150149
asset.Height = resp.GetHeight()
150+
asset.SpotPrice = spotPrice.MulInt(asset.Multiplier())
151151

152152
// Persist the updated asset information in the store.
153153
k.SetAsset(ctx, asset)
@@ -179,8 +179,8 @@ func (k *Keeper) handleProtoRevPoolQueryResponse(ctx sdk.Context, asset v1.Asset
179179
Data: k.cdc.MustMarshal(
180180
&queryproto.SpotPriceRequest{
181181
PoolId: res.GetPoolId(),
182-
BaseAssetDenom: asset.BaseAssetDenom,
183-
QuoteAssetDenom: asset.QuoteAssetDenom,
182+
BaseAssetDenom: asset.SpotPriceRequest.BaseAssetDenom,
183+
QuoteAssetDenom: asset.SpotPriceRequest.QuoteAssetDenom,
184184
},
185185
),
186186
Path: "/osmosis.poolmanager.v1beta1.Query/SpotPrice",

x/oracle/types/v1/asset.go

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package v1
22

33
import (
44
"errors"
5+
"fmt"
56
"math/big"
67

78
sdkmath "cosmossdk.io/math"
@@ -29,33 +30,57 @@ func (a *Asset) Validate() error {
2930
return errors.New("decimals cannot be negative")
3031
}
3132

32-
if a.BaseAssetDenom == "" {
33-
return errors.New("base_asset_denom cannot be empty")
33+
if a.ProtoRevPoolRequest.BaseDenom == "" {
34+
return errors.New("base_denom cannot be empty")
3435
}
3536

36-
if a.QuoteAssetDenom == "" {
37-
return errors.New("quote_asset_denom cannot be empty")
37+
if err := sdk.ValidateDenom(a.ProtoRevPoolRequest.BaseDenom); err != nil {
38+
return fmt.Errorf("invalid base_denom: %w", err)
39+
}
40+
41+
if a.ProtoRevPoolRequest.OtherDenom == "" {
42+
return errors.New("other_denom cannot be empty")
43+
}
44+
45+
if err := sdk.ValidateDenom(a.ProtoRevPoolRequest.OtherDenom); err != nil {
46+
return fmt.Errorf("invalid other_denom: %w", err)
47+
}
48+
49+
if a.ProtoRevPoolRequest.BaseDenom == a.ProtoRevPoolRequest.OtherDenom {
50+
return errors.New("base_denom and other_denom cannot be the same")
3851
}
3952

40-
if a.BaseAssetDenom == a.QuoteAssetDenom {
41-
return errors.New("base_asset_denom and quote_asset_denom cannot be same")
53+
if a.SpotPriceRequest.BaseAssetDenom == "" {
54+
return errors.New("base_asset_denom cannot be empty")
55+
}
56+
57+
if err := sdk.ValidateDenom(a.SpotPriceRequest.BaseAssetDenom); err != nil {
58+
return fmt.Errorf("invalid base_asset_denom: %w", err)
4259
}
4360

44-
if a.Price.IsNil() {
45-
return errors.New("price cannot be nil")
61+
if a.SpotPriceRequest.QuoteAssetDenom == "" {
62+
return errors.New("quote_asset_denom cannot be empty")
4663
}
4764

48-
if a.Price.IsNegative() {
49-
return errors.New("price cannot be negative")
65+
if err := sdk.ValidateDenom(a.SpotPriceRequest.QuoteAssetDenom); err != nil {
66+
return fmt.Errorf("invalid quote_asset_denom: %w", err)
5067
}
5168

52-
if a.Price.IsZero() {
53-
return errors.New("price cannot be zero")
69+
if a.SpotPriceRequest.BaseAssetDenom == a.SpotPriceRequest.QuoteAssetDenom {
70+
return errors.New("base_asset_denom and quote_asset_denom cannot be the same")
5471
}
5572

5673
if a.Height < 0 {
5774
return errors.New("height cannot be negative")
5875
}
5976

77+
if a.SpotPrice.IsNil() {
78+
return errors.New("spot_price cannot be nil")
79+
}
80+
81+
if a.SpotPrice.IsNegative() {
82+
return errors.New("spot_price cannot be negative")
83+
}
84+
6085
return nil
6186
}

0 commit comments

Comments
 (0)