Skip to content

Commit

Permalink
msgs
Browse files Browse the repository at this point in the history
  • Loading branch information
rbajollari committed Jan 8, 2025
1 parent 77cc422 commit 173a9e9
Show file tree
Hide file tree
Showing 7 changed files with 5,426 additions and 1,844 deletions.
102 changes: 102 additions & 0 deletions proto/ojo/oracle/v1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import "cosmos/msg/v1/msg.proto";
import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "ojo/oracle/v1/oracle.proto";
import "ojo/oracle/v1/elys.proto";

Check failure on line 8 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

Import "ojo/oracle/v1/elys.proto" is unused.

option go_package = "github.com/ojo-network/ojo/x/oracle/types";

Expand All @@ -26,6 +27,31 @@ service Msg {
rpc DelegateFeedConsent(MsgDelegateFeedConsent)
returns (MsgDelegateFeedConsentResponse);

rpc FeedPrice(MsgFeedPrice)

Check failure on line 30 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "FeedPrice" should have a non-empty comment for documentation.
returns (MsgFeedPriceResponse);

rpc FeedMultiplePrices(MsgFeedMultiplePrices)

Check failure on line 33 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "FeedMultiplePrices" should have a non-empty comment for documentation.
returns (MsgFeedMultiplePricesResponse);

rpc SetPriceFeeder(MsgSetPriceFeeder)

Check failure on line 36 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "SetPriceFeeder" should have a non-empty comment for documentation.
returns (MsgSetPriceFeederResponse);

rpc DeletePriceFeeder(MsgDeletePriceFeeder)

Check failure on line 39 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "DeletePriceFeeder" should have a non-empty comment for documentation.
returns (MsgDeletePriceFeederResponse);

// proposals
rpc RemoveAssetInfo(MsgRemoveAssetInfo)
returns (MsgRemoveAssetInfoResponse);

rpc AddPriceFeeders(MsgAddPriceFeeders)

Check failure on line 46 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "AddPriceFeeders" should have a non-empty comment for documentation.
returns (MsgAddPriceFeedersResponse);

rpc RemovePriceFeeders(MsgRemovePriceFeeders)

Check failure on line 49 in proto/ojo/oracle/v1/tx.proto

View workflow job for this annotation

GitHub Actions / buf-lint

RPC "RemovePriceFeeders" should have a non-empty comment for documentation.
returns (MsgRemovePriceFeedersResponse);

rpc CreateAssetInfo(MsgCreateAssetInfo)
returns (MsgCreateAssetInfoResponse);

// LegacyGovUpdateParams defines the legacy message that updates the oracle parameters.
rpc LegacyGovUpdateParams(MsgLegacyGovUpdateParams)
returns (MsgLegacyGovUpdateParamsResponse);
Expand Down Expand Up @@ -105,6 +131,82 @@ message MsgDelegateFeedConsent {
// type.
message MsgDelegateFeedConsentResponse {}

message FeedPrice {
string asset = 1;
string price = 2 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
string source = 3;
}
message MsgFeedPrice {
option (cosmos.msg.v1.signer) = "provider";
string provider = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
FeedPrice feed_price = 2 [ (gogoproto.nullable) = false ];
}

message MsgFeedPriceResponse {}

message MsgSetPriceFeeder {
option (cosmos.msg.v1.signer) = "feeder";
string feeder = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
bool is_active = 2;
}

message MsgSetPriceFeederResponse {}

message MsgDeletePriceFeeder {
option (cosmos.msg.v1.signer) = "feeder";
string feeder = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
}

message MsgDeletePriceFeederResponse {}

message MsgFeedMultiplePrices {
option (cosmos.msg.v1.signer) = "creator";
string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
repeated FeedPrice feed_prices = 2 [ (gogoproto.nullable) = false ];
}

message MsgFeedMultiplePricesResponse {}

message MsgRemoveAssetInfo {
option (cosmos.msg.v1.signer) = "authority";
string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
string denom = 2;
}

message MsgRemoveAssetInfoResponse {}

message MsgAddPriceFeeders {
option (cosmos.msg.v1.signer) = "authority";
string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
repeated string feeders = 2;
}

message MsgAddPriceFeedersResponse {}

message MsgRemovePriceFeeders {
option (cosmos.msg.v1.signer) = "authority";
string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
repeated string feeders = 2;
}

message MsgRemovePriceFeedersResponse {}

message MsgCreateAssetInfo {
option (cosmos.msg.v1.signer) = "creator";
string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
string denom = 2;
string display = 3;
string band_ticker = 4;
string elys_ticker = 5;
uint64 decimal = 6;
}

message MsgCreateAssetInfoResponse {}

// MsgLegacyGovUpdateParams defines the Msg/MsgLegacyGovUpdateParams request type.
message MsgLegacyGovUpdateParams {
option (gogoproto.equal) = true;
Expand Down
39 changes: 39 additions & 0 deletions x/oracle/keeper/msg_server_create_asset_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package keeper

import (
"context"

"cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/ojo/x/oracle/types"
)

func (ms msgServer) CreateAssetInfo(goCtx context.Context, msg *types.MsgCreateAssetInfo) (*types.MsgCreateAssetInfoResponse, error) {

Check failure on line 11 in x/oracle/keeper/msg_server_create_asset_info.go

View workflow job for this annotation

GitHub Actions / lint

The line is 134 characters long, which exceeds the maximum of 120 characters. (lll)
ctx := sdk.UnwrapSDKContext(goCtx)

_, found := ms.GetAssetInfo(ctx, msg.Denom)

if found {
return nil, errors.Wrapf(types.ErrAssetWasCreated, "%s", msg.Denom)
}

ms.Keeper.SetAssetInfo(ctx, types.AssetInfo{
Denom: msg.Denom,
Display: msg.Display,
BandTicker: msg.BandTicker,
ElysTicker: msg.ElysTicker,
Decimal: msg.Decimal,
})

return &types.MsgCreateAssetInfoResponse{}, nil
}

func (ms msgServer) RemoveAssetInfo(goCtx context.Context, msg *types.MsgRemoveAssetInfo) (*types.MsgRemoveAssetInfoResponse, error) {

Check failure on line 31 in x/oracle/keeper/msg_server_create_asset_info.go

View workflow job for this annotation

GitHub Actions / lint

The line is 134 characters long, which exceeds the maximum of 120 characters. (lll)
ctx := sdk.UnwrapSDKContext(goCtx)
if ms.authority != msg.Authority {
return nil, errors.Wrapf(types.ErrNoGovAuthority, "invalid authority; expected %s, got %s", ms.authority, msg.Authority)

Check failure on line 34 in x/oracle/keeper/msg_server_create_asset_info.go

View workflow job for this annotation

GitHub Actions / lint

The line is 122 characters long, which exceeds the maximum of 120 characters. (lll)
}

ms.Keeper.RemoveAssetInfo(ctx, msg.Denom)
return &types.MsgRemoveAssetInfoResponse{}, nil
}
35 changes: 35 additions & 0 deletions x/oracle/keeper/msg_server_feed_multiple_prices.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package keeper

import (
"context"

Check failure on line 4 in x/oracle/keeper/msg_server_feed_multiple_prices.go

View workflow job for this annotation

GitHub Actions / lint

File is not properly formatted (goimports)
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/ojo/x/oracle/types"
)

func (ms msgServer) FeedMultiplePrices(goCtx context.Context, msg *types.MsgFeedMultiplePrices) (*types.MsgFeedMultiplePricesResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)

creator := sdk.MustAccAddressFromBech32(msg.Creator)
feeder, found := ms.Keeper.GetPriceFeeder(ctx, creator)
if !found {
return nil, types.ErrNotAPriceFeeder
}

if !feeder.IsActive {
return nil, types.ErrPriceFeederNotActive
}

for _, feedPrice := range msg.FeedPrices {
price := types.Price{
Asset: feedPrice.Asset,
Price: feedPrice.Price,
Source: feedPrice.Source,
Provider: msg.Creator,
Timestamp: uint64(ctx.BlockTime().Unix()),

Check failure on line 28 in x/oracle/keeper/msg_server_feed_multiple_prices.go

View workflow job for this annotation

GitHub Actions / lint

G115: integer overflow conversion int64 -> uint64 (gosec)
BlockHeight: uint64(ctx.BlockHeight()),

Check failure on line 29 in x/oracle/keeper/msg_server_feed_multiple_prices.go

View workflow job for this annotation

GitHub Actions / lint

G115: integer overflow conversion int64 -> uint64 (gosec)
}
ms.SetPrice(ctx, price)
}

return &types.MsgFeedMultiplePricesResponse{}, nil
}
34 changes: 34 additions & 0 deletions x/oracle/keeper/msg_server_price.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package keeper

import (
"context"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/ojo/x/oracle/types"
)

func (ms msgServer) FeedPrice(goCtx context.Context, msg *types.MsgFeedPrice) (*types.MsgFeedPriceResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)

provider := sdk.MustAccAddressFromBech32(msg.Provider)
feeder, found := ms.Keeper.GetPriceFeeder(ctx, provider)
if !found {
return nil, types.ErrNotAPriceFeeder
}

if !feeder.IsActive {
return nil, types.ErrPriceFeederNotActive
}

price := types.Price{
Asset: msg.FeedPrice.Asset,
Price: msg.FeedPrice.Price,
Source: msg.FeedPrice.Source,
Provider: msg.Provider,
Timestamp: uint64(ctx.BlockTime().Unix()),

Check failure on line 28 in x/oracle/keeper/msg_server_price.go

View workflow job for this annotation

GitHub Actions / lint

G115: integer overflow conversion int64 -> uint64 (gosec)
BlockHeight: uint64(ctx.BlockHeight()),

Check failure on line 29 in x/oracle/keeper/msg_server_price.go

View workflow job for this annotation

GitHub Actions / lint

G115: integer overflow conversion int64 -> uint64 (gosec)
}

ms.SetPrice(ctx, price)
return &types.MsgFeedPriceResponse{}, nil
}
61 changes: 61 additions & 0 deletions x/oracle/keeper/msg_server_price_feeder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package keeper

import (
"context"

"cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/ojo/x/oracle/types"
)

func (ms msgServer) SetPriceFeeder(goCtx context.Context, msg *types.MsgSetPriceFeeder) (*types.MsgSetPriceFeederResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
feederAccount := sdk.MustAccAddressFromBech32(msg.Feeder)
_, found := ms.Keeper.GetPriceFeeder(ctx, feederAccount)
if !found {
return nil, types.ErrNotAPriceFeeder
}
ms.Keeper.SetPriceFeeder(ctx, types.PriceFeeder{
Feeder: msg.Feeder,
IsActive: msg.IsActive,
})
return &types.MsgSetPriceFeederResponse{}, nil
}

func (ms msgServer) DeletePriceFeeder(goCtx context.Context, msg *types.MsgDeletePriceFeeder) (*types.MsgDeletePriceFeederResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
feederAccount := sdk.MustAccAddressFromBech32(msg.Feeder)
_, found := ms.Keeper.GetPriceFeeder(ctx, feederAccount)
if !found {
return nil, types.ErrNotAPriceFeeder
}
ms.RemovePriceFeeder(ctx, feederAccount)
return &types.MsgDeletePriceFeederResponse{}, nil
}

func (ms msgServer) AddPriceFeeders(goCtx context.Context, msg *types.MsgAddPriceFeeders) (*types.MsgAddPriceFeedersResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
if ms.authority != msg.Authority {
return nil, errors.Wrapf(types.ErrNoGovAuthority, "invalid authority; expected %s, got %s", ms.authority, msg.Authority)
}

for _, feeder := range msg.Feeders {
ms.Keeper.SetPriceFeeder(ctx, types.PriceFeeder{
Feeder: feeder,
IsActive: true,
})
}
return &types.MsgAddPriceFeedersResponse{}, nil
}

func (ms msgServer) RemovePriceFeeders(goCtx context.Context, msg *types.MsgRemovePriceFeeders) (*types.MsgRemovePriceFeedersResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
if ms.authority != msg.Authority {
return nil, errors.Wrapf(types.ErrNoGovAuthority, "invalid authority; expected %s, got %s", ms.authority, msg.Authority)
}

for _, feeder := range msg.Feeders {
ms.Keeper.RemovePriceFeeder(ctx, sdk.MustAccAddressFromBech32(feeder))
}
return &types.MsgRemovePriceFeedersResponse{}, nil
}
1 change: 1 addition & 0 deletions x/oracle/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,5 @@ var (
ErrNoCommitInfo = errors.Register(ModuleName, 30, "no commit info in process proposal request")
ErrNotAPriceFeeder = errors.Register(ModuleName, 31, "not a price feeder")
ErrPriceFeederNotActive = errors.Register(ModuleName, 32, "price feeder is not active")
ErrAssetWasCreated = errors.Register(ModuleName, 33, "asset already exists")
)
Loading

0 comments on commit 173a9e9

Please sign in to comment.