Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
gyuguen committed Dec 6, 2022
1 parent 32fd3f5 commit b3a30fb
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 4 deletions.
49 changes: 49 additions & 0 deletions x/oracle/keeper/oracle.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package keeper

import (
"errors"

sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/medibloc/panacea-core/v2/x/oracle/types"
Expand All @@ -20,6 +22,14 @@ func (k Keeper) RegisterOracle(ctx sdk.Context, msg *types.MsgRegisterOracle) er
return sdkerrors.Wrapf(types.ErrOracleRegistration, "is not match the currently active uniqueID")
}*/

if oracle, err := k.GetOracle(ctx, oracleRegistration.OracleAddress); !errors.Is(types.ErrOracleNotFound, err) {
if oracle != nil {
return sdkerrors.Wrapf(types.ErrOracleRegistration, "already registered oracle. address(%s)", oracleRegistration.OracleAddress)
} else {
return sdkerrors.Wrapf(types.ErrOracleRegistration, err.Error())
}
}

if err := k.SetOracleRegistration(ctx, oracleRegistration); err != nil {
return err
}
Expand Down Expand Up @@ -72,3 +82,42 @@ func (k Keeper) GetOracleRegistration(ctx sdk.Context, uniqueID, address string)

return oracleRegistration, nil
}

func (k Keeper) SetOracle(ctx sdk.Context, oracle *types.Oracle) error {
store := ctx.KVStore(k.storeKey)
accAddr, err := sdk.AccAddressFromBech32(oracle.OracleAddress)
if err != nil {
return err
}
key := types.GetOracleKey(accAddr)
bz, err := k.cdc.MarshalLengthPrefixed(oracle)
if err != nil {
return err
}

store.Set(key, bz)

return nil
}

func (k Keeper) GetOracle(ctx sdk.Context, address string) (*types.Oracle, error) {
store := ctx.KVStore(k.storeKey)
accAddr, err := sdk.AccAddressFromBech32(address)
if err != nil {
return nil, err
}
key := types.GetOracleKey(accAddr)
bz := store.Get(key)
if bz == nil {
return nil, sdkerrors.Wrapf(types.ErrOracleNotFound, "oracle '%s' does not exist", address)
}

oracle := &types.Oracle{}

err = k.cdc.UnmarshalLengthPrefixed(bz, oracle)
if err != nil {
return nil, sdkerrors.Wrapf(types.ErrGetOracle, err.Error())
}

return oracle, nil
}
29 changes: 26 additions & 3 deletions x/oracle/keeper/oracle_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package keeper_test

import (
"encoding/base64"
"fmt"
"testing"

Expand Down Expand Up @@ -60,8 +59,6 @@ func (suite *oracleTestSuite) BeforeTest(_, _ string) {
suite.nodePrivKey, _ = btcec.NewPrivateKey(btcec.S256())
suite.nodePubKey = suite.nodePrivKey.PubKey()

fmt.Println("nodePubKey: ", base64.StdEncoding.EncodeToString(suite.nodePubKey.SerializeCompressed()))

suite.nodePubKeyRemoteReport = []byte("nodePubKeyRemoteReport")

suite.trustedBlockHeight = int64(1)
Expand Down Expand Up @@ -157,3 +154,29 @@ func (suite *oracleTestSuite) TestRegisterOracleFailedValidateToMsgOracleRegistr
events := suite.Ctx.EventManager().Events()
suite.Require().Equal(0, len(events))
}

func (suite *oracleTestSuite) TestRegisterOracleAlreadyExistOracle() {
ctx := suite.Ctx

endpoint := "https://my-validator.org"
commissionRate := sdk.NewDecWithPrec(1, 1)

oracle := types.NewOracle(suite.oracleAccAddr.String(), suite.uniqueID, endpoint, commissionRate)
err := suite.OracleKeeper.SetOracle(ctx, oracle)
suite.Require().NoError(err)

msgRegisterOracle := &types.MsgRegisterOracle{
UniqueId: suite.uniqueID,
OracleAddress: suite.oracleAccAddr.String(),
NodePubKey: suite.nodePubKey.SerializeCompressed(),
NodePubKeyRemoteReport: suite.nodePubKeyRemoteReport,
TrustedBlockHeight: suite.trustedBlockHeight,
TrustedBlockHash: suite.trustedBlockHash,
Endpoint: "https://my-validator.org",
OracleCommissionRate: sdk.NewDecWithPrec(1, 1),
}

err = suite.OracleKeeper.RegisterOracle(ctx, msgRegisterOracle)
suite.Require().Error(err, types.ErrOracleRegistration)
suite.Require().ErrorContains(err, fmt.Sprintf("already registered oracle. address(%s)", msgRegisterOracle.OracleAddress))
}
4 changes: 3 additions & 1 deletion x/oracle/types/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@ import sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"

var (
ErrOracleRegistration = sdkerrors.Register(ModuleName, 1, "error while registering a oracle")
ErrGetOracleRegistration = sdkerrors.Register(ModuleName, 2, "error while getting a oracle")
ErrGetOracleRegistration = sdkerrors.Register(ModuleName, 2, "error while getting a oracle registration")
ErrGetOracle = sdkerrors.Register(ModuleName, 3, "error while getting a oracle")
ErrOracleNotFound = sdkerrors.Register(ModuleName, 4, "oracle not found")
)

0 comments on commit b3a30fb

Please sign in to comment.