Skip to content

Commit

Permalink
feat(oracle):use ed25519 to sign create-price message with consensuskey
Browse files Browse the repository at this point in the history
  • Loading branch information
leonz789 committed May 23, 2024
1 parent c83c75f commit 32de369
Show file tree
Hide file tree
Showing 9 changed files with 651 additions and 24 deletions.
598 changes: 598 additions & 0 deletions app/ante/cosmos/sigverify.go

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions app/ante/handler_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,11 @@ func newCosmosAnteHandler(options HandlerOptions) sdk.AnteHandler {
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
cosmosante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.DistributionKeeper, options.FeegrantKeeper, options.StakingKeeper, options.TxFeeChecker),
// SetPubKeyDecorator must be called before all signature verification decorators
ante.NewSetPubKeyDecorator(options.AccountKeeper),
cosmosante.NewSetPubKeyDecorator(options.AccountKeeper),
ante.NewValidateSigCountDecorator(options.AccountKeeper),
ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
ante.NewIncrementSequenceDecorator(options.AccountKeeper),
cosmosante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer),
cosmosante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler),
cosmosante.NewIncrementSequenceDecorator(options.AccountKeeper),
ibcante.NewRedundantRelayDecorator(options.IBCKeeper),
evmante.NewGasWantedDecorator(options.EvmKeeper, options.FeeMarketKeeper),
)
Expand Down
1 change: 1 addition & 0 deletions local_node.sh
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ if [[ $overwrite == "y" || $overwrite == "Y" ]]; then
sed -i '' 's/prometheus = false/prometheus = true/' "$CONFIG"
sed -i '' 's/prometheus-retention-time = 0/prometheus-retention-time = 1000000000000/g' "$APP_TOML"
sed -i '' 's/enabled = false/enabled = true/g' "$APP_TOML"
sed -i '' 's/enable = false/enable = true/g' "$APP_TOML"
else
sed -i 's/prometheus = false/prometheus = true/' "$CONFIG"
sed -i 's/prometheus-retention-time = "0"/prometheus-retention-time = "1000000000000"/g' "$APP_TOML"
Expand Down
4 changes: 3 additions & 1 deletion testutil/keeper/oracle.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ import (
storetypes "github.com/cosmos/cosmos-sdk/store/types"
sdk "github.com/cosmos/cosmos-sdk/types"
typesparams "github.com/cosmos/cosmos-sdk/x/params/types"
stakingKeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"

// stakingKeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingKeeper "github.com/ExocoreNetwork/exocore/x/dogfood/keeper"
"github.com/stretchr/testify/require"
)

Expand Down
5 changes: 5 additions & 0 deletions x/oracle/keeper/aggregator/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package aggregator

import (
"errors"
"fmt"
"math/big"
"time"

Expand Down Expand Up @@ -49,6 +50,10 @@ func (agc *AggregatorContext) sanityCheck(msg *types.MsgCreatePrice) error {
// TODO: check len(price.prices)>0, len(price.prices._range_eachPriceSource.Prices)>0, at least has one source, and for each source has at least one price
// TODO: check for each source, at most maxDetId count price (now in filter, ->anteHandler)

fmt.Println("debug-oracle:", msg.Creator, len(agc.validatorsPower))
for k, v := range agc.validatorsPower {
fmt.Printf("debug-oracle:validator_%s, power_%s\n", k, v.String())
}
if agc.validatorsPower[msg.Creator] == nil {
return errors.New("signer is not validator")
}
Expand Down
3 changes: 3 additions & 0 deletions x/oracle/keeper/common/expected_keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package common
import (
"cosmossdk.io/math"
stakingkeeper "github.com/ExocoreNetwork/exocore/x/dogfood/keeper"
dogfoodtypes "github.com/ExocoreNetwork/exocore/x/dogfood/types"
"github.com/ExocoreNetwork/exocore/x/oracle/types"
abci "github.com/cometbft/cometbft/abci/types"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand Down Expand Up @@ -41,4 +42,6 @@ type KeeperStaking interface {
IterateBondedValidatorsByPower(ctx sdk.Context, fn func(index int64, validator stakingTypes.ValidatorI) (stop bool))
GetValidatorUpdates(ctx sdk.Context) []abci.ValidatorUpdate
GetValidatorByConsAddr(ctx sdk.Context, consAddr sdk.ConsAddress) (validator stakingTypes.Validator, found bool)

GetAllExocoreValidators(ctx sdk.Context) (validators []dogfoodtypes.ExocoreValidator)
}
46 changes: 30 additions & 16 deletions x/oracle/keeper/single.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/ExocoreNetwork/exocore/x/oracle/keeper/common"
"github.com/ExocoreNetwork/exocore/x/oracle/types"
sdk "github.com/cosmos/cosmos-sdk/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)

var cs *cache.Cache
Expand Down Expand Up @@ -59,13 +58,18 @@ func recacheAggregatorContext(ctx sdk.Context, agc *aggregator.AggregatorContext

totalPower := big.NewInt(0)
validatorPowers := make(map[string]*big.Int)
k.IterateBondedValidatorsByPower(ctx, func(_ int64, validator stakingtypes.ValidatorI) bool {
power := big.NewInt(validator.GetConsensusPower(sdk.DefaultPowerReduction))
addr := string(validator.GetOperator())
validatorPowers[addr] = power
totalPower = new(big.Int).Add(totalPower, power)
return false
})
validatorSet := k.GetAllExocoreValidators(ctx)
for _, v := range validatorSet {
validatorPowers[sdk.AccAddress(v.Address).String()] = big.NewInt(v.Power)
totalPower = new(big.Int).Add(totalPower, big.NewInt(v.Power))
}
// k.IterateBondedValidatorsByPower(ctx, func(_ int64, validator stakingtypes.ValidatorI) bool {
// power := big.NewInt(validator.GetConsensusPower(sdk.DefaultPowerReduction))
// addr := string(validator.GetOperator())
// validatorPowers[addr] = power
// totalPower = new(big.Int).Add(totalPower, power)
// return false
// })
agc.SetValidatorPowers(validatorPowers)
// TODO: test only
if k.GetLastTotalPower(ctx).BigInt().Cmp(totalPower) != 0 {
Expand Down Expand Up @@ -122,15 +126,25 @@ func initAggregatorContext(ctx sdk.Context, agc *aggregator.AggregatorContext, k

totalPower := big.NewInt(0)
validatorPowers := make(map[string]*big.Int)
k.IterateBondedValidatorsByPower(ctx, func(_ int64, validator stakingtypes.ValidatorI) bool {
power := big.NewInt(validator.GetConsensusPower(sdk.DefaultPowerReduction))
addr := validator.GetOperator().String()
validatorPowers[addr] = power
totalPower = new(big.Int).Add(totalPower, power)
return false
})
agc.SetValidatorPowers(validatorPowers)
validatorSet := k.GetAllExocoreValidators(ctx)
for _, v := range validatorSet {
// validatorPowers[cryptotypes.Address(v.Address).String()] = big.NewInt(v.Power)
validatorPowers[sdk.AccAddress(v.Address).String()] = big.NewInt(v.Power)
totalPower = new(big.Int).Add(totalPower, big.NewInt(v.Power))
}

// k.IterateBondedValidatorsByPower(ctx, func(_ int64, validator stakingtypes.ValidatorI) bool {
// power := big.NewInt(validator.GetConsensusPower(sdk.DefaultPowerReduction))
// addr := validator.GetOperator().String()
// validatorPowers[addr] = power
// totalPower = new(big.Int).Add(totalPower, power)
// return false
// })
agc.SetValidatorPowers(validatorPowers)
// TODO: test only
if k.GetLastTotalPower(ctx).BigInt().Cmp(totalPower) != 0 {
ctx.Logger().Error("something wrong when get validatorsPower from staking module")
}
// set validatorPower cache
c.AddCache(cache.ItemV(validatorPowers))

Expand Down
8 changes: 6 additions & 2 deletions x/oracle/types/message_create_price.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,11 @@ func (msg *MsgCreatePrice) Type() string {
}

func (msg *MsgCreatePrice) GetSigners() []sdk.AccAddress {
creator, err := sdk.ValAddressFromBech32(msg.Creator)
// creator, err := sdk.ValAddressFromBech32(msg.Creator)
// if err != nil {
// panic(err)
// }
creator, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
panic(err)
}
Expand All @@ -42,7 +46,7 @@ func (msg *MsgCreatePrice) GetSignBytes() []byte {
}

func (msg *MsgCreatePrice) ValidateBasic() error {
_, err := sdk.ValAddressFromBech32(msg.Creator)
_, err := sdk.AccAddressFromBech32(msg.Creator)
if err != nil {
return sdkerrors.ErrInvalidAddress.Wrapf("invalid creator address (%s)", err)
}
Expand Down
2 changes: 1 addition & 1 deletion x/oracle/types/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func DefaultParams() Params {
TokenID: 1,
RuleID: 1,
StartRoundID: 1,
StartBaseBlock: 100000000,
StartBaseBlock: 20,
Interval: 10,
},
},
Expand Down

0 comments on commit 32de369

Please sign in to comment.